name = bash
version = 4.2
-release = 9
+release = 10
groups = System/Tools
url = http://www.gnu.org/software/bash/
filesystem >= 002
ncurses-devel
readline-devel
+ texinfo
end
prepare_cmds
###############################################################################
name = binutils
-version = 2.22
-release = 3
+version = 2.22.52.0.3
+release = 1
maintainer = Michael Tremer <michael.tremer@ipfire.org>
groups = Development/Tools
tools for the manipulation of object code in various object file formats.
end
-source_dl = http://ftp.gnu.org/gnu/binutils/
+source_dl
+ http://ftp.gnu.org/gnu/binutils/
+ ftp://ftp.kernel.org/pub/linux/devel/binutils
+end
build
requires
make tooldir=/usr %{PARALLELISMFLAGS}
end
- #def test
- # # Apply a sed substitution to prevent a testsuite error:
- # sed -i 's/getline/get_line/' libiberty/testsuite/test-demangle.c
- # cd %{DIR_SRC}/binutils-build && make check
- #end
+ test
+ cd %{DIR_SRC}/binutils-build
+ make -k check </dev/null || :
+
+ echo "==== RESULTS ===="
+ cat {gas/testsuite/gas,ld/ld,binutils/binutils}.sum
+ end
install
- cd %{DIR_SRC}/binutils-build && make tooldir=/usr install DESTDIR=%{BUILDROOT}
+ cd %{DIR_SRC}/binutils-build
+ make tooldir=/usr install DESTDIR=%{BUILDROOT}
cp -fv %{DIR_APP}/include/libiberty.h %{BUILDROOT}/usr/include
# Prevent packages from linking against libbfd and libopcodes,
# because they change too often.
rm -rfv %{BUILDROOT}%{libdir}/lib{bfd,opcodes}.so
+
+ # Remove Windows/Novell only man pages.
+ rm -vf %{BUILDROOT}%{mandir}/man1/{dlltool,nlmconv,windres}*
end
# Keep static version of libiberty.
+++ /dev/null
-background:
-http://www.airs.com/blog/archives/189
-
---- binutils/ld/ldmain.c
-+++ binutils/ld/ldmain.c
-@@ -293,2 +293,3 @@ main (int argc, char **argv)
- link_info.combreloc = TRUE;
-+ link_info.relro = TRUE;
- link_info.strip_discarded = TRUE;
--- /dev/null
+*** ../binutils-2.20.51.0.10.orig/bfd/merge.c 2010-08-20 12:19:33.000000000 +0100
+--- bfd/merge.c 2010-08-20 12:18:01.000000000 +0100
+*************** sec_merge_emit (bfd *abfd, struct sec_me
+*** 307,312 ****
+--- 307,315 ----
+ len = -off & (entry->alignment - 1);
+ if (len != 0)
+ {
++ /* We should never have an entry with an alignment
++ greater than the section's alignment. */
++ BFD_ASSERT (len <= (bfd_size_type) (1 << alignment_power));
+ if (bfd_bwrite (pad, len, abfd) != len)
+ goto err;
+ off += len;
+*************** sec_merge_emit (bfd *abfd, struct sec_me
+*** 324,329 ****
+--- 327,333 ----
+ /* Trailing alignment needed? */
+ off = sec->size - off;
+ if (off != 0
++ && alignment_power
+ && bfd_bwrite (pad, off, abfd) != off)
+ goto err;
+
+++ /dev/null
---- bfd/compress.c.jj 2010-12-24 11:40:19.000000000 +0100
-+++ bfd/compress.c 2011-01-28 15:40:19.869777126 +0100
-@@ -174,7 +174,7 @@ bfd_get_full_section_contents (bfd *abfd
- case COMPRESS_SECTION_NONE:
- if (p == NULL)
- {
-- p = (bfd_byte *) bfd_malloc (sz);
-+ p = (bfd_byte *) bfd_zmalloc (sz);
- if (p == NULL)
- return FALSE;
- }
-@@ -214,7 +214,7 @@ bfd_get_full_section_contents (bfd *abfd
- if (!ret)
- goto fail_compressed;
-
-- uncompressed_buffer = (bfd_byte *) bfd_malloc (uncompressed_size);
-+ uncompressed_buffer = (bfd_byte *) bfd_zmalloc (uncompressed_size);
- if (uncompressed_buffer == NULL)
- goto fail_compressed;
-
---- bfd/elfcode.h.jj 2010-12-31 03:43:21.000000000 +0100
-+++ bfd/elfcode.h 2011-01-28 15:34:39.055388479 +0100
-@@ -1158,6 +1158,24 @@ elf_checksum_contents (bfd *abfd,
-
- if (i_shdr.contents)
- (*process) (i_shdr.contents, i_shdr.sh_size, arg);
-+ else
-+ {
-+ asection *sec;
-+
-+ sec = bfd_section_from_elf_index (abfd, count);
-+ if (sec != NULL)
-+ {
-+ if (sec->contents == NULL)
-+ {
-+ /* Force rereading from file. */
-+ sec->flags &= ~SEC_IN_MEMORY;
-+ if (! bfd_malloc_and_get_section (abfd, sec, & sec->contents))
-+ continue;
-+ }
-+ if (sec->contents != NULL)
-+ (*process) (sec->contents, i_shdr.sh_size, arg);
-+ }
-+ }
- }
-
- return TRUE;
--- /dev/null
+diff -rcp ../binutils-2.20.51.0.7.original/bfd/configure ./bfd/configure
+*** ../binutils-2.20.51.0.7.original/bfd/configure 2010-04-08 14:53:48.000000000 +0100
+--- ./bfd/configure 2010-04-08 14:56:50.000000000 +0100
+*************** fi
+*** 10762,10771 ****
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+--- 10762,10795 ----
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
++ # find out which ABI we are using
++ libsuff=
++ case "$host_cpu" in
++ x86_64*|s390*|powerpc*|ppc*|sparc*)
++ echo 'int i;' > conftest.$ac_ext
++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *64-bit*)
++ libsuff=64
++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
++ fi
++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++ esac
++
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+diff -rcp ../binutils-2.20.51.0.7.original/binutils/configure ./binutils/configure
+*** ../binutils-2.20.51.0.7.original/binutils/configure 2010-04-08 14:53:45.000000000 +0100
+--- ./binutils/configure 2010-04-08 14:56:21.000000000 +0100
+*************** fi
+*** 10560,10569 ****
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+--- 10560,10593 ----
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
++ # find out which ABI we are using
++ libsuff=
++ case "$host_cpu" in
++ x86_64*|s390*|powerpc*|ppc*|sparc*)
++ echo 'int i;' > conftest.$ac_ext
++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *64-bit*)
++ libsuff=64
++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
++ fi
++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++ esac
++
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+diff -rcp ../binutils-2.20.51.0.7.original/gas/configure ./gas/configure
+*** ../binutils-2.20.51.0.7.original/gas/configure 2010-04-08 14:53:47.000000000 +0100
+--- ./gas/configure 2010-04-08 14:57:24.000000000 +0100
+*************** fi
+*** 10547,10556 ****
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+--- 10547,10580 ----
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
++ # find out which ABI we are using
++ libsuff=
++ case "$host_cpu" in
++ x86_64*|s390*|powerpc*|ppc*|sparc*)
++ echo 'int i;' > conftest.$ac_ext
++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *64-bit*)
++ libsuff=64
++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
++ fi
++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++ esac
++
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+diff -rcp ../binutils-2.20.51.0.7.original/gprof/configure ./gprof/configure
+*** ../binutils-2.20.51.0.7.original/gprof/configure 2010-04-08 14:53:45.000000000 +0100
+--- ./gprof/configure 2010-04-08 14:57:50.000000000 +0100
+*************** fi
+*** 10485,10494 ****
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+--- 10485,10518 ----
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
++ # find out which ABI we are using
++ libsuff=
++ case "$host_cpu" in
++ x86_64*|s390*|powerpc*|ppc*|sparc*)
++ echo 'int i;' > conftest.$ac_ext
++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *64-bit*)
++ libsuff=64
++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
++ fi
++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++ esac
++
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+diff -rcp ../binutils-2.20.51.0.7.original/ld/configure ./ld/configure
+*** ../binutils-2.20.51.0.7.original/ld/configure 2010-04-08 14:53:44.000000000 +0100
+--- ./ld/configure 2010-04-08 14:58:21.000000000 +0100
+*************** fi
+*** 10966,10975 ****
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+--- 10966,10999 ----
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
++ # find out which ABI we are using
++ libsuff=
++ case "$host_cpu" in
++ x86_64*|s390*|powerpc*|ppc*|sparc*)
++ echo 'int i;' > conftest.$ac_ext
++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *64-bit*)
++ libsuff=64
++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
++ fi
++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++ esac
++
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+Only in .: .#libtool.m4
+Only in .: #libtool.m4#
+diff -rcp ../binutils-2.20.51.0.7.original/opcodes/configure ./opcodes/configure
+*** ../binutils-2.20.51.0.7.original/opcodes/configure 2010-04-08 14:53:45.000000000 +0100
+--- ./opcodes/configure 2010-04-08 14:59:10.000000000 +0100
+*************** fi
+*** 10496,10505 ****
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+--- 10496,10529 ----
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
++ # find out which ABI we are using
++ libsuff=
++ case "$host_cpu" in
++ x86_64*|s390*|powerpc*|ppc*|sparc*)
++ echo 'int i;' > conftest.$ac_ext
++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *64-bit*)
++ libsuff=64
++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
++ fi
++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++ esac
++
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
--- /dev/null
+diff -rcp ../binutils-2.20.51.0.7.original/bfd/configure ./bfd/configure
+*** ../binutils-2.20.51.0.7.original/bfd/configure 2010-04-08 15:23:58.000000000 +0100
+--- ./bfd/configure 2010-04-08 15:24:06.000000000 +0100
+*************** if test "x${ac_cv_sizeof_long}" = "x8";
+*** 12819,12829 ****
+ BFD_HOST_64BIT_LONG=1
+ test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long"
+ test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long"
+! elif test "x${ac_cv_sizeof_long_long}" = "x8"; then
+ BFD_HOST_64BIT_LONG_LONG=1
+ test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long"
+ test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long"
+! if test "x${ac_cv_sizeof_void_p}" = "x8"; then
+ BFD_HOSTPTR_T="unsigned long long"
+ fi
+ fi
+--- 12819,12831 ----
+ BFD_HOST_64BIT_LONG=1
+ test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long"
+ test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long"
+! fi
+! if test "x${ac_cv_sizeof_long_long}" = "x8"; then
+ BFD_HOST_64BIT_LONG_LONG=1
+ test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long"
+ test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long"
+! if test "x${ac_cv_sizeof_void_p}" = "x8" \
+! -a "x${ac_cv_sizeof_long}" != "x8"; then
+ BFD_HOSTPTR_T="unsigned long long"
+ fi
+ fi
+diff -rcp ../binutils-2.20.51.0.7.original/bfd/configure.in ./bfd/configure.in
+*** ../binutils-2.20.51.0.7.original/bfd/configure.in 2010-04-08 15:23:58.000000000 +0100
+--- ./bfd/configure.in 2010-04-08 15:24:06.000000000 +0100
+*************** if test "x${ac_cv_sizeof_long}" = "x8";
+*** 153,163 ****
+ BFD_HOST_64BIT_LONG=1
+ test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long"
+ test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long"
+! elif test "x${ac_cv_sizeof_long_long}" = "x8"; then
+ BFD_HOST_64BIT_LONG_LONG=1
+ test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long"
+ test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long"
+! if test "x${ac_cv_sizeof_void_p}" = "x8"; then
+ BFD_HOSTPTR_T="unsigned long long"
+ fi
+ fi
+--- 153,165 ----
+ BFD_HOST_64BIT_LONG=1
+ test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long"
+ test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long"
+! fi
+! if test "x${ac_cv_sizeof_long_long}" = "x8"; then
+ BFD_HOST_64BIT_LONG_LONG=1
+ test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long"
+ test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long"
+! if test "x${ac_cv_sizeof_void_p}" = "x8" \
+! -a "x${ac_cv_sizeof_long}" != "x8"; then
+ BFD_HOSTPTR_T="unsigned long long"
+ fi
+ fi
+++ /dev/null
-textrels are bad for forcing copy-on-write (this affects everyone),
-and for security/runtime code generation, this affects security ppl.
-But in either case, it doesn't matter who needs textrels, it's
-the very fact that they're needed at all.
-
-2006-06-10 Ned Ludd <solar@gentoo.org>, Mike Frysinger <vapier@gentoo.org>
-
- * bfd/elflink.c (bfd_elf_final_link): Check all objects for TEXTRELs.
- * ld/ldmain.c (main): Change textrel warning default to true.
- * ld/testsuite/lib/ld-lib.exp (default_ld_simple_link): Scrub TEXTREL
- warnings from ld output.
-
---- a/bfd/elflink.c
-+++ b/bfd/elflink.c
-@@ -8652,14 +8652,12 @@ bfd_elf_final_link (bfd *abfd, struct bf
- goto error_return;
-
- /* Check for DT_TEXTREL (late, in case the backend removes it). */
-- if ((info->warn_shared_textrel && info->shared)
-+ o = bfd_get_section_by_name (dynobj, ".dynamic");
-+ if ((info->warn_shared_textrel && o != NULL)
- || info->error_textrel)
- {
- bfd_byte *dyncon, *dynconend;
-
- /* Fix up .dynamic entries. */
-- o = bfd_get_section_by_name (dynobj, ".dynamic");
-- BFD_ASSERT (o != NULL);
--
- dyncon = o->contents;
- dynconend = o->contents + o->size;
- for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
-@@ -8702,7 +8702,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
- (_("%P%X: read-only segment has dynamic relocations.\n"));
- else
- info->callbacks->einfo
-- (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
-+ (_("%P: warning: creating a DT_TEXTREL in object.\n"));
- break;
- }
- }
---- a/ld/ldmain.c
-+++ b/ld/ldmain.c
-@@ -282,2 +282,3 @@ main (int argc, char **argv)
- link_info.spare_dynamic_tags = 5;
-+ link_info.warn_shared_textrel = TRUE;
- link_info.sharable_sections = FALSE;
---- a/ld/testsuite/lib/ld-lib.exp
-+++ b/ld/testsuite/lib/ld-lib.exp
-@@ -181,6 +181,10 @@ proc default_ld_simple_link { ld target
- # symbol, since the default linker script might use ENTRY.
- regsub -all "(^|\n)(\[^\n\]*: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
-
-+ # Gentoo tweak:
-+ # We want to ignore TEXTREL warnings since we force enable them by default
-+ regsub -all "^lt-ld-new: warning: creating a DT_TEXTREL in object\." $exec_output "\\1" exec_output
-+
- if [string match "" $exec_output] then {
- return 1
- } else {
--- /dev/null
+*** ../binutils-2.22.52.0.1.orig/bfd/Makefile.am 2012-03-06 14:00:33.229957572 +0000
+--- bfd/Makefile.am 2012-04-27 16:46:05.410974817 +0100
+*************** if INSTALL_LIBBFD
+*** 18,24 ****
+ bfdlibdir = @bfdlibdir@
+ bfdincludedir = @bfdincludedir@
+ bfdlib_LTLIBRARIES = libbfd.la
+! bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h
+ else !INSTALL_LIBBFD
+ # Empty these so that the respective installation directories will not be created.
+ bfdlibdir =
+--- 18,24 ----
+ bfdlibdir = @bfdlibdir@
+ bfdincludedir = @bfdincludedir@
+ bfdlib_LTLIBRARIES = libbfd.la
+! bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h $(INCDIR)/demangle.h
+ else !INSTALL_LIBBFD
+ # Empty these so that the respective installation directories will not be created.
+ bfdlibdir =
+*** ../binutils-2.22.52.0.1.orig/bfd/Makefile.in 2012-03-06 14:00:32.952957600 +0000
+--- bfd/Makefile.in 2012-04-27 16:46:19.718975214 +0100
+*************** RECURSIVE_TARGETS = all-recursive check-
+*** 138,144 ****
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+ am__bfdinclude_HEADERS_DIST = $(INCDIR)/plugin-api.h bfd.h \
+! $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h
+ HEADERS = $(bfdinclude_HEADERS)
+ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+--- 138,145 ----
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+ am__bfdinclude_HEADERS_DIST = $(INCDIR)/plugin-api.h bfd.h \
+! $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h \
+! $(INCDIR)/demangle.h
+ HEADERS = $(bfdinclude_HEADERS)
+ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+*************** libbfd_la_LDFLAGS = $(am__append_1) -rel
+*** 331,337 ****
+ @INSTALL_LIBBFD_FALSE@bfdinclude_HEADERS = $(am__append_2)
+ @INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) \
+ @INSTALL_LIBBFD_TRUE@ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+! @INSTALL_LIBBFD_TRUE@ $(INCDIR)/bfdlink.h $(am__append_2)
+ @INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@
+ @INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la
+ AM_CFLAGS = $(WARN_CFLAGS)
+--- 332,339 ----
+ @INSTALL_LIBBFD_FALSE@bfdinclude_HEADERS = $(am__append_2)
+ @INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) \
+ @INSTALL_LIBBFD_TRUE@ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+! @INSTALL_LIBBFD_TRUE@ $(INCDIR)/bfdlink.h $(INCDIR)/demangle.h \
+! @INSTALL_LIBBFD_TRUE@ $(am__append_2)
+ @INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@
+ @INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la
+ AM_CFLAGS = $(WARN_CFLAGS)
--- /dev/null
+diff -cpr ../binutils-2.22.52.0.1.orig/ld/testsuite/config/default.exp ld/testsuite/config/default.exp
+*** ../binutils-2.22.52.0.1.orig/ld/testsuite/config/default.exp 2012-03-06 14:00:31.141957656 +0000
+--- ld/testsuite/config/default.exp 2012-03-06 14:09:33.492940503 +0000
+***************
+*** 23,29 ****
+ #
+
+ if ![info exists ld] then {
+! set ld [findfile $base_dir/ld-new $base_dir/ld-new [transform ld]]
+ }
+
+ if ![info exists as] then {
+--- 23,29 ----
+ #
+
+ if ![info exists ld] then {
+! set ld "[findfile $base_dir/ld-new $base_dir/ld-new [transform ld]] -znorelro"
+ }
+
+ if ![info exists as] then {
+*************** if {![file isdirectory tmpdir/ld]} then
+*** 69,75 ****
+ catch "exec ln -s ../../ld-new tmpdir/ld/ld" status
+ catch "exec ln -s ld tmpdir/ld/collect-ld" status
+ }
+! set gcc_ld_flag "-B[pwd]/tmpdir/ld/"
+
+ # load the linker path
+ if {[file exists tmpdir/libpath.exp]} {
+--- 69,75 ----
+ catch "exec ln -s ../../ld-new tmpdir/ld/ld" status
+ catch "exec ln -s ld tmpdir/ld/collect-ld" status
+ }
+! set gcc_ld_flag "-B[pwd]/tmpdir/ld/ -Wl,-z,norelro"
+
+ # load the linker path
+ if {[file exists tmpdir/libpath.exp]} {
+*************** if ![info exists READELFFLAGS] then {
+*** 279,285 ****
+ }
+
+ if ![info exists LD] then {
+! set LD [findfile $base_dir/ld-new ./ld-new [transform ld]]
+ }
+
+ if ![info exists LDFLAGS] then {
+--- 279,285 ----
+ }
+
+ if ![info exists LD] then {
+! set LD "[findfile $base_dir/ld-new ./ld-new [transform ld]] -znorelro"
+ }
+
+ if ![info exists LDFLAGS] then {
+diff -cpr ../binutils-2.22.52.0.1.orig/ld/testsuite/ld-bootstrap/bootstrap.exp ld/testsuite/ld-bootstrap/bootstrap.exp
+*** ../binutils-2.22.52.0.1.orig/ld/testsuite/ld-bootstrap/bootstrap.exp 2012-03-06 14:00:30.503957676 +0000
+--- ld/testsuite/ld-bootstrap/bootstrap.exp 2012-03-06 15:03:33.949837926 +0000
+*************** foreach flags {"" "strip" "--static" "--
+*** 71,77 ****
+
+ # This test can only be run if we have the ld build directory,
+ # since we need the object files.
+! if {$ld != "$objdir/ld-new"} {
+ untested $testname
+ continue
+ }
+--- 71,83 ----
+
+ # This test can only be run if we have the ld build directory,
+ # since we need the object files.
+! set ldexe $ld
+! set ldparm [string first " " $ld]
+! if { $ldparm > 0 } then {
+! set ldparm [expr $ldparm - 1]
+! set ldexe [string range $ld 0 $ldparm]
+! }
+! if {$ldexe != "$objdir/ld-new"} {
+ untested $testname
+ continue
+ }
+*** ../binutils-2.22.52.0.2.orig/ld/emultempl/elf32.em 2012-04-30 16:12:52.642766221 +0100
+--- ld/emultempl/elf32.em 2012-04-30 16:13:13.869766905 +0100
+*************** gld${EMULATION_NAME}_before_parse (void)
+*** 106,111 ****
+--- 106,112 ----
+ input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
+ config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
+ link_info.sharable_sections = `if test "$SHARABLE_SECTIONS" = "yes" ; then echo TRUE ; else echo FALSE ; fi`;
++ link_info.relro = TRUE;
+ }
+
+ EOF
making some of the address matches more flexible fixes tests when using
pax/relro/hash patches
---- binutils/ld/testsuite/ld-i386/hidden2.d
-+++ binutils/ld/testsuite/ld-i386/hidden2.d
-@@ -8,6 +8,6 @@
- Disassembly of section .text:
-
- [a-f0-9]+ <bar>:
--[ ]*[a-f0-9]+: e8 cf fe ff ff call 0 .*
-+[ ]*[a-f0-9]+: e8 ([a-f0-9]{2} ){2}ff ff call 0 .*
- [ ]*[a-f0-9]+: c3 ret
- #pass
---- binutils/ld/testsuite/ld-x86-64/hidden2.d
-+++ binutils/ld/testsuite/ld-x86-64/hidden2.d
-@@ -8,6 +8,6 @@
- Disassembly of section .text:
-
- [a-f0-9]+ <bar>:
--[ ]*[a-f0-9]+: e8 33 fe ff ff callq 0 .*
-+[ ]*[a-f0-9]+: e8 ([a-f0-9]{2} ){2}ff ff callq 0 .*
- [ ]*[a-f0-9]+: c3 retq
- #pass
--- binutils/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d
+++ binutils/ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d
@@ -4,6 +4,6 @@
#define PT_GNU_STACK (PT_LOOS + 0x474e551) /* Stack flags */
#define PT_GNU_RELRO (PT_LOOS + 0x474e552) /* Read-only after relocation */
+#define PT_PAX_FLAGS (PT_LOOS + 0x5041580) /* PaX flags */
+ #define PT_GNU_SHR (PT_LOOS + 0x474e554) /* Sharable segment */
/* Program segment permissions, in program header p_flags field. */
-
@@ -439,6 +440,21 @@
#define PF_MASKOS 0x0FF00000 /* New value, Oct 4, 1999 Draft */
#define PF_MASKPROC 0xF0000000 /* Processor-specific reserved bits */
Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 20 entries:
Offset +Info +Type +Sym.Value +Sym. Name
---- binutils-2.22/ld/testsuite/ld-i386/tlsdesc.sd
-+++ binutils-2.22/ld/testsuite/ld-i386/tlsdesc.sd
-@@ -14,7 +14,7 @@ Contents of section \.got:
- [0-9a-f]+ 6c000000 b4ffffff 4c000000 68000000 .*
- [0-9a-f]+ 50000000 70000000 00000000 bcffffff .*
- Contents of section \.got\.plt:
-- [0-9a-f]+ b0150000 00000000 00000000 00000000 .*
-+ [0-9a-f]+ [a-f]0150000 00000000 00000000 00000000 .*
- [0-9a-f]+ 20000000 00000000 60000000 00000000 .*
- [0-9a-f]+ 00000000 00000000 00000000 00000000 .*
- [0-9a-f]+ 40000000 +.*
--- binutils-2.22/ld/testsuite/ld-i386/tlsgdesc.rd
+++ binutils-2.22/ld/testsuite/ld-i386/tlsgdesc.rd
@@ -36,12 +36,14 @@ Program Headers:
#...
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
---- binutils-2.22/ld/testsuite/ld-x86-64/protected3.d
-+++ binutils-2.22/ld/testsuite/ld-x86-64/protected3.d
-@@ -8,6 +8,6 @@
- Disassembly of section .text:
-
- 0+[a-f0-9]+ <bar>:
--[ ]*[a-f0-9]+: 8b 05 [a-f0-9][a-f0-9] 00 [a-f0-9][a-f0-9] 00 mov 0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ <foo>
-+[ ]*[a-f0-9]+: 8b 05 [a-f0-9][a-f0-9] [a-f0-9][a-f0-9] [a-f0-9][a-f0-9] 00 mov 0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ <foo>
- [ ]*[a-f0-9]+: c3 retq
- #pass
--- binutils-2.22/ld/testsuite/ld-x86-64/tlsgdesc.rd
+++ binutils-2.22/ld/testsuite/ld-x86-64/tlsgdesc.rd
@@ -36,12 +36,14 @@ Program Headers:
###############################################################################
name = bison
-version = 2.5
-release = 3
+version = 2.5.1
+release = 1
groups = Development/Tools
url = http://www.gnu.org/software/bison/
###############################################################################
name = cryptsetup-luks
-version = 1.1.0
-release = 3
+version = 1.4.2
+release = 1
+
+compat_version = 1.1.0
groups = System/Filesystems
url = http://cryptsetup.googlecode.com/
summary = A utility for setting up encrypted filesystems.
description
- This package contains cryptsetup, a utility for setting up \
+ This package contains cryptsetup, a utility for setting up
encrypted filesystems using Device Mapper and the dm-crypt target.
end
-source_dl =
-sources = cryptsetup-%{version}.tar.bz2
+source_dl = http://cryptsetup.googlecode.com/files/
+
+sources = \
+ cryptsetup-%{version}.tar.bz2 \
+ cryptsetup-%{compat_version}.tar.bz2
build
requires
configure_options += \
--disable-static
+
+ # Build compat version of libcryptsetup.
+ build_cmds
+ cd %{DIR_SRC}/cryptsetup-%{compat_version}
+ ./configure \
+ %{configure_options}
+
+ make %{PARALELLISMFLAGS}
+ end
+
+ install_cmds
+ # Install compat version of libcyptsetup.
+ cd %{DIR_SRC}/cryptsetup-%{compat_version}
+ install -m 644 lib/.libs/libcryptsetup.so.1.0.0 %{BUILDROOT}%{libdir}
+ ln -svf libcryptsetup.so.1.0.0 %{BUILDROOT}%{libdir}/libcryptsetup.so.1
+ end
end
packages
package %{name}
+ package %{name}-compat
+ summary = Compat libraries of %{thisapp}.
+
+ files
+ %{libdir}/libcryptsetup.so.1*
+ end
+ end
+
package %{name}-devel
template DEVEL
end
name = dhcp
version = 4.2.2
-release = 2
+release = 4
groups = Networking/Daemons
url = http://isc.org/products/DHCP/
libtool
openldap-devel
libcap-ng-devel
+ systemd-units
end
CFLAGS += \
end
files
+ %{unitdir}/dhclient*.service
/sbin
/usr/share/man/man5/dhclient*
/usr/share/man/man8/dhclient*
/var/lib/dhclient
end
+
+ script postin
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ end
+
+ script postun
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ end
+
+ script postup
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ end
+
end
package %{name}-common
--- /dev/null
+[Unit]
+Description=DHCP client daemon for IPv4 on %I
+BindTo=dev-%I.device
+After=dev-%I.device
+
+[Service]
+Restart=on-failure
+ExecStartPre=/usr/lib/network/dhclient-helper start %I ipv4
+ExecStart=/usr/sbin/dhclient -d %I -4 \
+ -cf /run/network/dhclient/%I/dhclient4.conf \
+ -lf /var/lib/dhclient/dhclient-%I.leases \
+ -pf /run/network/dhclient/%I/dhclient4.pid
+ExecStop=/usr/lib/network/dhclient-helper stop %I ipv4
+
+# This could be used if you want to release a lease.
+#ExecStop=/usr/sbin/dhclient -d -r %I -4 \
+# -cf /run/network/dhclient/%I/dhclient4.conf \
+# -lf /var/lib/dhclient/dhclient-%I.leases \
+# -pf /run/network/dhclient/%I/dhclient4.pid
+
+UtmpIdentifier=%I
+++ /dev/null
-# This file is part of systemd.
-#
-# systemd is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-
-[Unit]
-Description=dhclient on %I
-BindTo=dev-%I.device
-After=dev-%I.device network.service
-Requires=network.service
-
-[Service]
-ExecStart=/usr/sbin/dhclient %I
-UtmpIdentifier=%I
-KillMode=process
###############################################################################
name = dracut
-version = 018
-release = 2
+version = 019
+release = 1
arch = noarch
groups = System/Boot
build
requires
+ asciidoc
docbook-utils
docbook-xsl
end
cp -vf %{DIR_SOURCE}/ipfire.conf %{BUILDROOT}/etc/dracut.conf.d/ipfire.conf
# Save package version.
- echo "%{name}-%{version}-%{release}" > \
- %{BUILDROOT}%{dracutlibdir}/modules.d/10rpmversion/dracut-version
+ echo "DRACUT_VERSION=%{version}-%{release}" > \
+ %{BUILDROOT}/%{dracutlibdir}/dracut-version.sh
# Remove Gentoo specific module.
rm -rvf %{BUILDROOT}%{dracutlibdir}/modules.d/50gensplash
###############################################################################
name = gobject-introspection
-version = 0.9.12
+version = %{major_ver}.%{minor_ver}
release = 1
+major_ver = 1.31
+minor_ver = 22
+
groups = Development/Libraries
url = http://live.gnome.org/GObjectIntrospection
license = GPLv2+, LGPLv2+, MIT
other things.
end
-source_dl =
+source_dl = http://ftp.gnome.org/pub/GNOME/sources/%{name}/%{major_ver}/
+sources = %{thisapp}.tar.xz
build
requires
end
configure_options += \
- --sbindir=/sbin \
--disable-static
test
packages
package %{name}
- end
package %{name}-libs
template LIBS
name = hostapd
version = 0.7.3
-release = 1
+release = 2
groups = Networking/Tools
url = http://hostap.epitest.fi/hostapd/
packages
package %{name}
- end
package %{name}-debuginfo
template DEBUGINFO
[Unit]
Description=WLAN AP on %I
BindTo=dev-%I.device
-After=dev-%I.device network.service
-Requires=network.service
+After=dev-%I.device
[Service]
ExecStart=/usr/bin/hostapd -dd -P /run/network/hostapd/%I/pid /run/network/hostapd/%I/config
name = %{DISTRO_SNAME}-release
version = %{DISTRO_VERSION}
-release = 3
+release = 4
epoch = 3
arch = noarch
ID=%{DISTRO_SNAME}
VERSION_ID=%{DISTRO_RELEASE}
PRETTY_NAME="%{DISTRO_NAME} %{DISTRO_VERSION} (%{DISTRO_CODENAME})"
- ANSI_COLOR=%{DISTRO_COLOR}
+ ANSI_COLOR="%{DISTRO_COLOR}"
EOF
# Install default repositories.
###############################################################################
name = iptables
-version = 1.4.13
+version = 1.4.14
release = 1
groups = Networking/Tools
# Copyright (C) - IPFire Development Team <info@ipfire.org> #
###############################################################################
-name = libusb
-version = 1.0.8
+name = libusbx
+version = 1.0.11
release = 1
-maintainer =
groups = System/Libraries
-url = http://sourceforge.net/projects/libusb/
+url = http://sourceforge.net/apps/mediawiki/libusbx/
license = LGPLv2+
summary = A library which allows userspace access to USB devices.
This package provides a way for applications to access USB devices.
end
+source_dl = http://downloads.sourceforge.net/libusbx/
sources = %{thisapp}.tar.bz2
build
configure_options += \
- --disable-static
+ --disable-static \
+ --enable-examples-build
end
packages
package %{name}
+ provides = libusb = %{thisver}
+ obsoletes = libusb < %{thisver}
end
package %{name}-devel
--- /dev/null
+#! /bin/bash
+
+renice +19 -p $$ >/dev/null 2>&1
+ionice -c3 -p $$ >/dev/null 2>&1
+
+LOCKFILE=/var/lock/man-db.lock
+
+# The lockfile is not meant to be perfect, it's just in case the
+# two man-db cron scripts get run close to each other to keep
+# them from stepping on each other's toes. The worst that will
+# happen is that they will temporarily corrupt the database.
+[ -f $LOCKFILE ] && exit 0
+
+trap "{ rm -f $LOCKFILE ; exit 0; }" EXIT
+touch $LOCKFILE
+
+# Create/update the mandb database.
+mandb -q
+
+exit 0
name = man-db
version = 2.6.1
-release = 2
+release = 3
groups = Documentation
url = http://savannah.nongnu.org/projects/man-db
end
configure_options += \
+ --with-sections="1 1p 8 2 3 3p 4 5 6 7 9 0p n l p o 1x 2x 3x 4x 5x 6x 7x 8x" \
--disable-setuid \
- --with-browser=%{bindir}/lynx \
- --with-col=%{bindir}/col \
- --with-vgrind=%{bindir}/vgrind \
- --with-grap=%{bindir}/grap \
- --disable-rpath
-
- prepare_cmds
- sed -i -e '\%\t/usr/man%d' -e '\%\t/usr/local/man%d' \
- src/man_db.conf.in
- end
+ --with-browser=elinks
install_cmds
- # Move some libs
- mv -v %{BUILDROOT}%{libdir}/man-db/* %{BUILDROOT}%{libdir}/
- rm -rf %{BUILDROOTi}%{libdir}/man-db/
+ # Move the libs to /usr/lib, but don't keep the symlinks so nothing
+ # will link against libman and libmandb as they are not stable.
+ mv -v %{BUILDROOT}%{libdir}/man-db/libman{,db}-%{version}.so %{BUILDROOT}%{libdir}
+ rm -rf %{BUILDROOT}%{libdir}/man-db/
+ # Create cron job to regularly update the man page database.
+ mkdir -pv %{BUILDROOT}%{sysconfdir}/cron.daily
+ install -v -m 755 %{DIR_SOURCE}/man-db.cron %{BUILDROOT}%{sysconfdir}/cron.daily
+
+ # Create cache directory.
+ mkdir -pv %{BUILDROOT}/var/cache/man
end
end
provides
man
end
+
+ script posttransin
+ # Update the database right now.
+ %{sysconfdir}/cron.daily/man-db.cron
+ end
+
+ script posttransup
+ # Update the database right now.
+ %{sysconfdir}/cron.daily/man-db.cron
+ end
end
package %{name}-debuginfo
--- /dev/null
+#!/bin/bash
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2012 IPFire Network Development Team #
+# #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program. If not, see <http://www.gnu.org/licenses/>. #
+# #
+###############################################################################
+
+# This is a proxy script which is started instead of the real helper.
+# However, the only thing this script does it to call the actual helper script.
+
+script="/usr/lib/network/helpers/miredo-helper"
+
+if [ -x "${script}" ]; then
+ exec ${script}
+fi
+
+echo "${script} could not be found." >&2
+exit 1
--- /dev/null
+###############################################################################
+# IPFire.org - An Open Source Firewall Solution #
+# Copyright (C) - IPFire Development Team <info@ipfire.org> #
+###############################################################################
+
+name = miredo
+version = 1.2.5
+release = 1
+
+groups = Network/VPN
+url = http://www.remlab.net/miredo/
+license = GPLv2+
+summary = Tunneling of IPv6 over UDP through NATs.
+
+description
+ Miredo is an implementation of the "Teredo: Tunneling IPv6 over UDP
+ through NATs" proposed Internet standard (RFC4380). It can serve
+ either as a Teredo client, a stand-alone Teredo relay, or a Teredo
+ server, please install the miredo-server or miredo-client aproprietly.
+ It is meant to provide IPv6 connectivity to hosts behind NAT
+ devices, most of which do not support IPv6, and not even
+ IPv6-over-IPv4 (including 6to4).
+end
+
+source_dl = http://www.remlab.net/files/miredo/
+sources = %{thisapp}.tar.xz
+
+build
+ requires
+ libcap-devel
+ shadow-utils
+ systemd-units
+ end
+
+ configure_options += \
+ --disable-static \
+ --disable-rpath \
+ --enable-miredo-user
+
+ install_cmds
+ install -v -m 755 %{DIR_SOURCE}/client-hook \
+ %{BUILDROOT}%{sysconfdir}/miredo/client-hook
+
+ touch %{BUILDROOT}%{sysconfdir}/miredo/miredo-server.conf
+ end
+end
+
+packages
+ package %{name}-client
+ summary = This is the client part of miredo.
+
+ # There is not "miredo" package, so the -client
+ # package has an alias for it.
+ provides = miredo = %{thisver}
+
+ requires
+ %{name}-libs = %{thisver}
+ network
+ end
+
+ script postin
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ end
+
+ script postup
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ systemctl try-restart miredo-client.service >/dev/null 2>&1 || :
+ end
+
+ script preun
+ systemctl --no-reload disable miredo-client.service >/dev/null 2>&1 || :
+ systemctl stop miredo-client.service >/dev/null 2>&1 || :
+ end
+
+ script postun
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ end
+
+ configfiles
+ %{sysconfdir}/miredo/miredo.conf
+ end
+
+ files
+ %{sysconfdir}/miredo/client-hook
+ %{sysconfdir}/miredo/miredo.conf
+ %{sbindir}/miredo
+ %{unitdir}/miredo-client@.service
+ %{mandir}/man?/miredo.*
+ end
+ end
+
+ package %{name}-server
+ summary = This is the server part of miredo.
+
+ requires = %{name}-libs = %{thisver}
+
+ script postin
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ end
+
+ script postup
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ systemctl try-restart miredo-server.service >/dev/null 2>&1 || :
+ end
+
+ script preun
+ systemctl --no-reload disable miredo-server.service >/dev/null 2>&1 || :
+ systemctl stop miredo-server.service >/dev/null 2>&1 || :
+ end
+
+ script postun
+ systemctl daemon-reload >/dev/null 2>&1 || :
+ end
+
+ configfiles
+ %{sysconfdir}/miredo/miredo-server.conf
+ end
+
+ files
+ %{bindir}/teredo-mire
+ %{sbindir}/miredo-server
+ %{sbindir}/miredo-checkconf
+ %{unitdir}/miredo-server.service
+ %{mandir}/man?/teredo-mire*
+ %{mandir}/man?/miredo-server*
+ %{mandir}/man?/miredo-checkconf*
+ end
+ end
+
+ package %{name}-libs
+ template LIBS
+
+ files += %{libdir}/miredo
+
+ script prein
+ getent group miredo >/dev/null || groupadd -r miredo
+ getent passwd miredo >/dev/null || useradd -r -g miredo \
+ -d %{sysconfdir}/miredo -s /sbin/nologin -c "Miredo Daemon" miredo
+ end
+ end
+
+ package %{name}-devel
+ template DEVEL
+
+ requires = %{name}-libs = %{thisver}
+ end
+
+ package %{name}-debuginfo
+ template DEBUGINFO
+ end
+end
--- /dev/null
+--- miredo-1.2.5/libteredo/tunnel.h.orig 2012-05-30 14:59:00.742600216 +0000
++++ miredo-1.2.5/libteredo/tunnel.h 2012-05-30 14:59:05.760760580 +0000
+@@ -32,6 +32,7 @@
+ # define LIBTEREDO_TUNNEL_H
+
+ # include <stdbool.h>
++# include <stddef.h>
+
+ # ifdef __cplusplus
+ extern "C" {
--- /dev/null
+diff -ru miredo-1.1.6/misc/client-hook.iproute miredo-1.1.6-new/misc/client-hook.iproute
+--- miredo-1.1.6/misc/client-hook.iproute 2008-12-17 16:14:23.000000000 +0100
++++ miredo-1.1.6-new/misc/client-hook.iproute 2009-06-28 01:24:22.000000000 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/sh
++#!/bin/sh
+ #
+ # Miredo client hook script for Linux/iproute2
+ # Copyright © 2007 Rémi Denis-Courmont.
+diff -ru miredo-1.1.6/misc/miredo.conf-in miredo-1.1.6-new/misc/miredo.conf-in
+--- miredo-1.1.6/misc/miredo.conf-in 2009-04-09 18:31:30.000000000 +0200
++++ miredo-1.1.6-new/misc/miredo.conf-in 2009-06-28 01:24:29.000000000 +0200
+@@ -1,4 +1,3 @@
+-#! @sbindir@/miredo -f -c
+ #
+ # Sample configuration file for Miredo
+
--- /dev/null
+@@ -, +, @@
+ libteredo/maintain.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+--- a/libteredo/maintain.c
++++ a/libteredo/maintain.c
+@@ -262,6 +262,9 @@ void maintenance_thread (teredo_maintenance *m)
+ /* Resolve server IPv4 addresses */
+ while (server_ip == 0)
+ {
++ /* Reread resolv.conf, it could have changed */
++ res_init();
++
+ /* FIXME: mutex kept while resolving - very bad */
+ int val = getipv4byname (m->server, &server_ip);
+ gettime (&deadline);
+
--- /dev/null
+[Unit]
+Description=Miredo - Teredo IPv6 Tunneling Client For Unix on %I
+BindTo=dev-%I.device
+After=dev-%I.device
+
+[Service]
+ExecStartPre=/usr/lib/network/helpers/miredo-config-helper create %I
+ExecStart=/usr/sbin/miredo -f -c /run/network/miredo/%I/client.conf -p /run/network/miredo/%I/client.pid
+ExecStopPost=/usr/lib/network/helpers/miredo-config-helper remove %I
+Restart=always
+UtmpIdentifier=%I
+KillMode=process
--- /dev/null
+[Unit]
+Description=Miredo - Teredo IPv6 tunneling Server For Unix
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/miredo-server.pid
+ExecStart=/usr/sbin/miredo-server
+
+[Install]
+WantedBy=multi-user.target
name = openssh
version = 5.9p1
-release = 5
+release = 6
groups = Application/Internet
url = http://www.openssh.com/portable.html
summary = OpenSSH server applications.
description = %{summary}
- requires = openssh = %{thisver}
+ requires
+ audit
+ openssh = %{thisver}
+ end
files
%{sysconfdir}/pam.d/sshd
name = udev
version = 182
-release = 4
+release = 5
groups = System/Base
url = ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/
pciutils
shadow-utils
systemd-units
- usbutils-devel >= 1:005
+ usbutils >= 1:005
end
configure_options += \
name = usbutils
epoch = 1
version = 005
-release = 1
+release = 3
groups = System/Tools
url = http://www.linux-usb.org/
autoconf
automake
hwdata
- libusb-devel
- pkg-config
+ libusbx-devel
zlib-devel
end
packages
package %{name}
+ group += Base
+
requires
/usr/share/hwdata/usb.ids
end
end
- package %{name}-libs
- template LIBS
- end
-
- package %{name}-devel
- template DEVEL
-
- requires = %{name}-libs = %{epoch}:%{thisver}
- end
-
package %{name}-debuginfo
template DEBUGINFO
end
name = util-linux
major_ver = 2.21
version = %{major_ver}
-release = 2
+release = 3
groups = System/Base
url = http://kernel.org/~kzak/util-linux/
description = %{summary}
files
- %{includedir}/mount/
+ %{includedir}/libmount/
%{libdir}/libmount.so
%{libdir}/pkgconfig/mount.pc
%{mandir}/man3/*mount*
--- /dev/null
+#!/bin/bash
+
+last=${1}
+
+vim_version="7.3"
+vim_url="ftp://ftp.vim.org/pub/vim/patches/${vim_version}"
+
+filenames="${vim_version}.%s.patch0"
+
+for patch in $(seq 1 ${last}); do
+ patch=$(printf "${vim_version}.%03d" "${patch}")
+
+ wget -O "vim-${patch}.patch0" "${vim_url}/${patch}"
+done
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.082
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.082
+Problem: Leaking file descriptor when hostname doesn't exist.
+Solution: Remove old debugging lines.
+Files: src/netbeans.c
+
+
+*** ../vim-7.3.081/src/netbeans.c 2010-12-08 13:11:15.000000000 +0100
+--- src/netbeans.c 2010-12-17 12:13:32.000000000 +0100
+***************
+*** 323,334 ****
+ server.sin_port = htons(port);
+ if ((host = gethostbyname(hostname)) == NULL)
+ {
+- if (mch_access(hostname, R_OK) >= 0)
+- {
+- /* DEBUG: input file */
+- sd = mch_open(hostname, O_RDONLY, 0);
+- goto theend;
+- }
+ nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
+ PERROR("gethostbyname() in netbeans_connect()");
+ goto theend;
+--- 323,328 ----
+*** ../vim-7.3.081/src/version.c 2010-12-08 19:56:52.000000000 +0100
+--- src/version.c 2010-12-17 12:17:11.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 82,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+1. At lunch time, sit in your parked car with sunglasses on and point
+ a hair dryer at passing cars. See if they slow down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.083
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.083
+Problem: When a read() or write() is interrupted by a signal it fails.
+Solution: Add read_eintr() and write_eintr().
+Files: src/fileio.c, src/proto/fileio.pro, src/memfile.c, src/memline.c,
+ src/os_unix.c, src/undo.c, src/vim.h
+
+
+*** ../vim-7.3.082/src/fileio.c 2010-08-15 21:57:26.000000000 +0200
+--- src/fileio.c 2010-12-17 16:04:30.000000000 +0100
+***************
+*** 918,924 ****
+ {
+ /* Read the first line (and a bit more). Immediately rewind to
+ * the start of the file. If the read() fails "len" is -1. */
+! len = vim_read(fd, firstline, 80);
+ lseek(fd, (off_t)0L, SEEK_SET);
+ for (p = firstline; p < firstline + len; ++p)
+ if (*p >= 0x80)
+--- 918,924 ----
+ {
+ /* Read the first line (and a bit more). Immediately rewind to
+ * the start of the file. If the read() fails "len" is -1. */
+! len = read_eintr(fd, firstline, 80);
+ lseek(fd, (off_t)0L, SEEK_SET);
+ for (p = firstline; p < firstline + len; ++p)
+ if (*p >= 0x80)
+***************
+*** 1373,1379 ****
+ /*
+ * Read bytes from the file.
+ */
+! size = vim_read(fd, ptr, size);
+ }
+
+ if (size <= 0)
+--- 1373,1379 ----
+ /*
+ * Read bytes from the file.
+ */
+! size = read_eintr(fd, ptr, size);
+ }
+
+ if (size <= 0)
+***************
+*** 4000,4006 ****
+ #ifdef HAS_BW_FLAGS
+ write_info.bw_flags = FIO_NOCONVERT;
+ #endif
+! while ((write_info.bw_len = vim_read(fd, copybuf,
+ BUFSIZE)) > 0)
+ {
+ if (buf_write_bytes(&write_info) == FAIL)
+--- 4000,4006 ----
+ #ifdef HAS_BW_FLAGS
+ write_info.bw_flags = FIO_NOCONVERT;
+ #endif
+! while ((write_info.bw_len = read_eintr(fd, copybuf,
+ BUFSIZE)) > 0)
+ {
+ if (buf_write_bytes(&write_info) == FAIL)
+***************
+*** 4813,4819 ****
+ #ifdef HAS_BW_FLAGS
+ write_info.bw_flags = FIO_NOCONVERT;
+ #endif
+! while ((write_info.bw_len = vim_read(fd, smallbuf,
+ SMBUFSIZE)) > 0)
+ if (buf_write_bytes(&write_info) == FAIL)
+ break;
+--- 4813,4819 ----
+ #ifdef HAS_BW_FLAGS
+ write_info.bw_flags = FIO_NOCONVERT;
+ #endif
+! while ((write_info.bw_len = read_eintr(fd, smallbuf,
+ SMBUFSIZE)) > 0)
+ if (buf_write_bytes(&write_info) == FAIL)
+ break;
+***************
+*** 5330,5336 ****
+
+ /*
+ * Call write() to write a number of bytes to the file.
+! * Also handles encryption and 'encoding' conversion.
+ *
+ * Return FAIL for failure, OK otherwise.
+ */
+--- 5330,5336 ----
+
+ /*
+ * Call write() to write a number of bytes to the file.
+! * Handles encryption and 'encoding' conversion.
+ *
+ * Return FAIL for failure, OK otherwise.
+ */
+***************
+*** 5702,5717 ****
+ crypt_encode(buf, len, buf);
+ #endif
+
+! /* Repeat the write(), it may be interrupted by a signal. */
+! while (len > 0)
+! {
+! wlen = vim_write(ip->bw_fd, buf, len);
+! if (wlen <= 0) /* error! */
+! return FAIL;
+! len -= wlen;
+! buf += wlen;
+! }
+! return OK;
+ }
+
+ #ifdef FEAT_MBYTE
+--- 5702,5709 ----
+ crypt_encode(buf, len, buf);
+ #endif
+
+! wlen = write_eintr(ip->bw_fd, buf, len);
+! return (wlen < len) ? FAIL : OK;
+ }
+
+ #ifdef FEAT_MBYTE
+***************
+*** 6662,6669 ****
+ return -1;
+ }
+
+! while ((n = vim_read(fd_in, buffer, BUFSIZE)) > 0)
+! if (vim_write(fd_out, buffer, n) != n)
+ {
+ errmsg = _("E208: Error writing to \"%s\"");
+ break;
+--- 6654,6661 ----
+ return -1;
+ }
+
+! while ((n = read_eintr(fd_in, buffer, BUFSIZE)) > 0)
+! if (write_eintr(fd_out, buffer, n) != n)
+ {
+ errmsg = _("E208: Error writing to \"%s\"");
+ break;
+***************
+*** 10304,10306 ****
+--- 10296,10350 ----
+ }
+ return reg_pat;
+ }
++
++ #if defined(EINTR) || defined(PROTO)
++ /*
++ * Version of read() that retries when interrupted by EINTR (possibly
++ * by a SIGWINCH).
++ */
++ long
++ read_eintr(fd, buf, bufsize)
++ int fd;
++ void *buf;
++ size_t bufsize;
++ {
++ long ret;
++
++ for (;;)
++ {
++ ret = vim_read(fd, buf, bufsize);
++ if (ret >= 0 || errno != EINTR)
++ break;
++ }
++ return ret;
++ }
++
++ /*
++ * Version of write() that retries when interrupted by EINTR (possibly
++ * by a SIGWINCH).
++ */
++ long
++ write_eintr(fd, buf, bufsize)
++ int fd;
++ void *buf;
++ size_t bufsize;
++ {
++ long ret = 0;
++ long wlen;
++
++ /* Repeat the write() so long it didn't fail, other than being interrupted
++ * by a signal. */
++ while (ret < (long)bufsize)
++ {
++ wlen = vim_write(fd, buf + ret, bufsize - ret);
++ if (wlen < 0)
++ {
++ if (errno != EINTR)
++ break;
++ }
++ else
++ ret += wlen;
++ }
++ return ret;
++ }
++ #endif
+*** ../vim-7.3.082/src/proto/fileio.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/fileio.pro 2010-12-17 15:01:26.000000000 +0100
+***************
+*** 54,57 ****
+--- 54,59 ----
+ int match_file_pat __ARGS((char_u *pattern, regprog_T *prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
+ int match_file_list __ARGS((char_u *list, char_u *sfname, char_u *ffname));
+ char_u *file_pat_to_reg_pat __ARGS((char_u *pat, char_u *pat_end, char *allow_dirs, int no_bslash));
++ long read_eintr __ARGS((int fd, void *buf, size_t bufsize));
++ long write_eintr __ARGS((int fd, void *buf, size_t bufsize));
+ /* vim: set ft=c : */
+*** ../vim-7.3.082/src/memfile.c 2010-08-15 21:57:25.000000000 +0200
+--- src/memfile.c 2010-12-17 16:02:54.000000000 +0100
+***************
+*** 1049,1055 ****
+ PERROR(_("E294: Seek error in swap file read"));
+ return FAIL;
+ }
+! if ((unsigned)vim_read(mfp->mf_fd, hp->bh_data, size) != size)
+ {
+ PERROR(_("E295: Read error in swap file"));
+ return FAIL;
+--- 1049,1055 ----
+ PERROR(_("E294: Seek error in swap file read"));
+ return FAIL;
+ }
+! if ((unsigned)read_eintr(mfp->mf_fd, hp->bh_data, size) != size)
+ {
+ PERROR(_("E295: Read error in swap file"));
+ return FAIL;
+***************
+*** 1168,1174 ****
+ }
+ #endif
+
+! if ((unsigned)vim_write(mfp->mf_fd, data, size) != size)
+ result = FAIL;
+
+ #ifdef FEAT_CRYPT
+--- 1168,1174 ----
+ }
+ #endif
+
+! if ((unsigned)write_eintr(mfp->mf_fd, data, size) != size)
+ result = FAIL;
+
+ #ifdef FEAT_CRYPT
+*** ../vim-7.3.082/src/memline.c 2010-12-08 13:16:58.000000000 +0100
+--- src/memline.c 2010-12-17 15:46:49.000000000 +0100
+***************
+*** 2062,2068 ****
+ fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
+ if (fd >= 0)
+ {
+! if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
+ {
+ if (STRNCMP(b0.b0_version, "VIM 3.0", 7) == 0)
+ {
+--- 2062,2068 ----
+ fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
+ if (fd >= 0)
+ {
+! if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ {
+ if (STRNCMP(b0.b0_version, "VIM 3.0", 7) == 0)
+ {
+***************
+*** 4392,4398 ****
+ fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
+ if (fd >= 0)
+ {
+! if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
+ {
+ /*
+ * If the swapfile has the same directory as the
+--- 4392,4398 ----
+ fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
+ if (fd >= 0)
+ {
+! if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ {
+ /*
+ * If the swapfile has the same directory as the
+*** ../vim-7.3.082/src/os_unix.c 2010-10-20 19:17:43.000000000 +0200
+--- src/os_unix.c 2010-12-17 16:17:43.000000000 +0100
+***************
+*** 4454,4460 ****
+ ++noread_cnt;
+ while (RealWaitForChar(fromshell_fd, 10L, NULL))
+ {
+! len = read(fromshell_fd, (char *)buffer
+ # ifdef FEAT_MBYTE
+ + buffer_off, (size_t)(BUFLEN - buffer_off)
+ # else
+--- 4454,4460 ----
+ ++noread_cnt;
+ while (RealWaitForChar(fromshell_fd, 10L, NULL))
+ {
+! len = read_eintr(fromshell_fd, buffer
+ # ifdef FEAT_MBYTE
+ + buffer_off, (size_t)(BUFLEN - buffer_off)
+ # else
+*** ../vim-7.3.082/src/undo.c 2010-11-03 19:32:36.000000000 +0100
+--- src/undo.c 2010-12-17 15:39:24.000000000 +0100
+***************
+*** 1386,1392 ****
+ char_u mbuf[UF_START_MAGIC_LEN];
+ int len;
+
+! len = vim_read(fd, mbuf, UF_START_MAGIC_LEN);
+ close(fd);
+ if (len < UF_START_MAGIC_LEN
+ || memcmp(mbuf, UF_START_MAGIC, UF_START_MAGIC_LEN) != 0)
+--- 1386,1392 ----
+ char_u mbuf[UF_START_MAGIC_LEN];
+ int len;
+
+! len = read_eintr(fd, mbuf, UF_START_MAGIC_LEN);
+ close(fd);
+ if (len < UF_START_MAGIC_LEN
+ || memcmp(mbuf, UF_START_MAGIC, UF_START_MAGIC_LEN) != 0)
+*** ../vim-7.3.082/src/vim.h 2010-12-02 16:01:23.000000000 +0100
+--- src/vim.h 2010-12-17 14:55:04.000000000 +0100
+***************
+*** 1642,1647 ****
+--- 1642,1652 ----
+ # define USE_INPUT_BUF
+ #endif
+
++ #ifndef EINTR
++ # define read_eintr(fd, buf, count) vim_read((fd), (buf), (count))
++ # define write_eintr(fd, buf, count) vim_write((fd), (buf), (count))
++ #endif
++
+ #ifdef MSWIN
+ /* On MS-Windows the third argument isn't size_t. This matters for Win64,
+ * where sizeof(size_t)==8, not 4 */
+*** ../vim-7.3.082/src/version.c 2010-12-17 12:19:14.000000000 +0100
+--- src/version.c 2010-12-17 16:10:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 83,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+9. As often as possible, skip rather than walk.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.084
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.084
+Problem: When splitting the window, the new one scrolls with the cursor at
+ the top.
+Solution: Compute w_fraction before setting the new height.
+Files: src/window.c
+
+
+*** ../vim-7.3.083/src/window.c 2010-09-21 16:56:29.000000000 +0200
+--- src/window.c 2010-12-17 17:09:51.000000000 +0100
+***************
+*** 70,76 ****
+ #endif /* FEAT_WINDOWS */
+
+ static win_T *win_alloc __ARGS((win_T *after, int hidden));
+! static void win_new_height __ARGS((win_T *, int));
+
+ #define URL_SLASH 1 /* path_is_url() has found "://" */
+ #define URL_BACKSLASH 2 /* path_is_url() has found ":\\" */
+--- 70,77 ----
+ #endif /* FEAT_WINDOWS */
+
+ static win_T *win_alloc __ARGS((win_T *after, int hidden));
+! static void set_fraction __ARGS((win_T *wp));
+! static void win_new_height __ARGS((win_T *wp, int height));
+
+ #define URL_SLASH 1 /* path_is_url() has found "://" */
+ #define URL_BACKSLASH 2 /* path_is_url() has found ":\\" */
+***************
+*** 983,992 ****
+--- 984,999 ----
+ else
+ frame_append(curfrp, frp);
+
++ /* Set w_fraction now so that the cursor keeps the same relative
++ * vertical position. */
++ set_fraction(oldwin);
++ wp->w_fraction = oldwin->w_fraction;
++
+ #ifdef FEAT_VERTSPLIT
+ if (flags & WSP_VERT)
+ {
+ wp->w_p_scr = curwin->w_p_scr;
++
+ if (need_status)
+ {
+ win_new_height(oldwin, oldwin->w_height - 1);
+***************
+*** 5453,5458 ****
+--- 5460,5478 ----
+
+ #endif /* FEAT_WINDOWS */
+
++ #define FRACTION_MULT 16384L
++
++ /*
++ * Set wp->w_fraction for the current w_wrow and w_height.
++ */
++ static void
++ set_fraction(wp)
++ win_T *wp;
++ {
++ wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
++ + FRACTION_MULT / 2) / (long)wp->w_height;
++ }
++
+ /*
+ * Set the height of a window.
+ * This takes care of the things inside the window, not what happens to the
+***************
+*** 5465,5471 ****
+ {
+ linenr_T lnum;
+ int sline, line_size;
+- #define FRACTION_MULT 16384L
+
+ /* Don't want a negative height. Happens when splitting a tiny window.
+ * Will equalize heights soon to fix it. */
+--- 5485,5490 ----
+***************
+*** 5475,5482 ****
+ return; /* nothing to do */
+
+ if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
+! wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
+! + FRACTION_MULT / 2) / (long)wp->w_height;
+
+ wp->w_height = height;
+ wp->w_skipcol = 0;
+--- 5494,5500 ----
+ return; /* nothing to do */
+
+ if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
+! set_fraction(wp);
+
+ wp->w_height = height;
+ wp->w_skipcol = 0;
+*** ../vim-7.3.083/src/version.c 2010-12-17 16:27:10.000000000 +0100
+--- src/version.c 2010-12-17 17:14:19.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 84,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+12. Sing along at the opera.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.085
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.085 (after 7.3.083)
+Problem: Inconsistency with preproc symbols. void * computation.
+Solution: Include vimio.h from vim.h. Add type cast.
+Files: src/eval.c, src/ex_cmds.c, src/ex_cmds2.c, src/fileio.c,
+ src/if_cscope.c, src/if_sniff.c, src/main.c, src/memfile.c,
+ src/memline.c, src/netbeans.c, src/os_msdos.c, src/os_mswin.c,
+ src/os_win16.c, src/os_win32.c, src/spell.c, src/tag.c,
+ src/undo.c, src/vim.h
+
+
+*** ../vim-7.3.084/src/eval.c 2010-12-02 21:44:35.000000000 +0100
+--- src/eval.c 2010-12-17 17:45:37.000000000 +0100
+***************
+*** 10,18 ****
+ /*
+ * eval.c: Expression evaluation.
+ */
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for mch_open(), must be before vim.h */
+- #endif
+
+ #include "vim.h"
+
+--- 10,15 ----
+*** ../vim-7.3.084/src/ex_cmds.c 2010-11-24 17:59:27.000000000 +0100
+--- src/ex_cmds.c 2010-12-17 17:46:09.000000000 +0100
+***************
+*** 11,20 ****
+ * ex_cmds.c: some functions for command line commands
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for mch_open(), must be before vim.h */
+- #endif
+-
+ #include "vim.h"
+ #include "version.h"
+
+--- 11,16 ----
+*** ../vim-7.3.084/src/ex_cmds2.c 2010-09-21 16:56:29.000000000 +0200
+--- src/ex_cmds2.c 2010-12-17 17:46:26.000000000 +0100
+***************
+*** 11,20 ****
+ * ex_cmds2.c: some more functions for command line commands
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for mch_open(), must be before vim.h */
+- #endif
+-
+ #include "vim.h"
+ #include "version.h"
+
+--- 11,16 ----
+*** ../vim-7.3.084/src/fileio.c 2010-12-17 16:27:09.000000000 +0100
+--- src/fileio.c 2010-12-17 17:52:42.000000000 +0100
+***************
+*** 11,24 ****
+ * fileio.c: read from and write to a file
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for lseek(), must be before vim.h */
+- #endif
+-
+- #if defined __EMX__
+- # include "vimio.h" /* for mktemp(), CJW 1997-12-03 */
+- #endif
+-
+ #include "vim.h"
+
+ #if defined(__TANDEM) || defined(__MINT__)
+--- 11,16 ----
+***************
+*** 10336,10342 ****
+ * by a signal. */
+ while (ret < (long)bufsize)
+ {
+! wlen = vim_write(fd, buf + ret, bufsize - ret);
+ if (wlen < 0)
+ {
+ if (errno != EINTR)
+--- 10328,10334 ----
+ * by a signal. */
+ while (ret < (long)bufsize)
+ {
+! wlen = vim_write(fd, (char *)buf + ret, bufsize - ret);
+ if (wlen < 0)
+ {
+ if (errno != EINTR)
+*** ../vim-7.3.084/src/if_cscope.c 2010-09-21 16:56:29.000000000 +0200
+--- src/if_cscope.c 2010-12-17 17:47:02.000000000 +0100
+***************
+*** 20,28 ****
+ #include <sys/stat.h>
+ #if defined(UNIX)
+ # include <sys/wait.h>
+- #else
+- /* not UNIX, must be WIN32 */
+- # include "vimio.h"
+ #endif
+ #include "if_cscope.h"
+
+--- 20,25 ----
+*** ../vim-7.3.084/src/if_sniff.c 2010-08-15 21:57:25.000000000 +0200
+--- src/if_sniff.c 2010-12-17 17:47:20.000000000 +0100
+***************
+*** 9,15 ****
+
+ #ifdef WIN32
+ # include <stdio.h>
+- # include "vimio.h"
+ # include <process.h>
+ # include <string.h>
+ # include <assert.h>
+--- 9,14 ----
+*** ../vim-7.3.084/src/main.c 2010-11-16 16:25:46.000000000 +0100
+--- src/main.c 2010-12-17 17:47:41.000000000 +0100
+***************
+*** 7,16 ****
+ * See README.txt for an overview of the Vim source code.
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for close() and dup() */
+- #endif
+-
+ #define EXTERN
+ #include "vim.h"
+
+--- 7,12 ----
+*** ../vim-7.3.084/src/memfile.c 2010-12-17 16:27:10.000000000 +0100
+--- src/memfile.c 2010-12-17 17:47:54.000000000 +0100
+***************
+*** 32,41 ****
+ * file is opened.
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for lseek(), must be before vim.h */
+- #endif
+-
+ #include "vim.h"
+
+ /*
+--- 32,37 ----
+*** ../vim-7.3.084/src/memline.c 2010-12-17 16:27:10.000000000 +0100
+--- src/memline.c 2010-12-17 17:48:06.000000000 +0100
+***************
+*** 42,51 ****
+ * mf_get().
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for mch_open(), must be before vim.h */
+- #endif
+-
+ #include "vim.h"
+
+ #ifndef UNIX /* it's in os_unix.h for Unix */
+--- 42,47 ----
+*** ../vim-7.3.084/src/netbeans.c 2010-12-17 12:19:14.000000000 +0100
+--- src/netbeans.c 2010-12-17 17:48:19.000000000 +0100
+***************
+*** 16,25 ****
+ * See ":help netbeans-protocol" for explanation.
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for mch_open(), must be before vim.h */
+- #endif
+-
+ #include "vim.h"
+
+ #if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
+--- 16,21 ----
+*** ../vim-7.3.084/src/os_msdos.c 2010-08-15 21:57:25.000000000 +0200
+--- src/os_msdos.c 2010-12-17 17:48:40.000000000 +0100
+***************
+*** 21,27 ****
+ * Some functions are also used for Win16 (MS-Windows 3.1).
+ */
+
+- #include "vimio.h"
+ #include "vim.h"
+
+ #include <conio.h>
+--- 21,26 ----
+*** ../vim-7.3.084/src/os_mswin.c 2010-10-23 14:02:48.000000000 +0200
+--- src/os_mswin.c 2010-12-17 17:48:51.000000000 +0100
+***************
+*** 22,28 ****
+ # endif
+ #endif
+
+- #include "vimio.h"
+ #include "vim.h"
+
+ #ifdef WIN16
+--- 22,27 ----
+*** ../vim-7.3.084/src/os_win16.c 2010-08-15 21:57:32.000000000 +0200
+--- src/os_win16.c 2010-12-17 17:49:02.000000000 +0100
+***************
+*** 20,26 ****
+ # pragma warn -obs
+ #endif
+
+- #include "vimio.h"
+ #include "vim.h"
+
+ #include <dos.h>
+--- 20,25 ----
+*** ../vim-7.3.084/src/os_win32.c 2010-11-24 12:35:14.000000000 +0100
+--- src/os_win32.c 2010-12-17 17:49:11.000000000 +0100
+***************
+*** 20,26 ****
+ * Roger Knobbe <rogerk@wonderware.com> did the initial port of Vim 3.0.
+ */
+
+- #include "vimio.h"
+ #include "vim.h"
+
+ #ifdef FEAT_MZSCHEME
+--- 20,25 ----
+*** ../vim-7.3.084/src/spell.c 2010-12-08 17:09:27.000000000 +0100
+--- src/spell.c 2010-12-17 17:49:24.000000000 +0100
+***************
+*** 303,312 ****
+ * few bytes as possible, see offset2bytes())
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for lseek(), must be before vim.h */
+- #endif
+-
+ #include "vim.h"
+
+ #if defined(FEAT_SPELL) || defined(PROTO)
+--- 303,308 ----
+*** ../vim-7.3.084/src/tag.c 2010-09-21 16:56:29.000000000 +0200
+--- src/tag.c 2010-12-17 17:49:35.000000000 +0100
+***************
+*** 11,20 ****
+ * Code to handle tags and the tag stack
+ */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for lseek(), must be before vim.h */
+- #endif
+-
+ #include "vim.h"
+
+ /*
+--- 11,16 ----
+*** ../vim-7.3.084/src/undo.c 2010-12-17 16:27:10.000000000 +0100
+--- src/undo.c 2010-12-17 17:49:59.000000000 +0100
+***************
+*** 81,90 ****
+ #define UH_MAGIC 0x18dade /* value for uh_magic when in use */
+ #define UE_MAGIC 0xabc123 /* value for ue_magic when in use */
+
+- #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+- # include "vimio.h" /* for vim_read(), must be before vim.h */
+- #endif
+-
+ #include "vim.h"
+
+ static void u_unch_branch __ARGS((u_header_T *uhp));
+--- 81,86 ----
+*** ../vim-7.3.084/src/vim.h 2010-12-17 16:27:10.000000000 +0100
+--- src/vim.h 2010-12-17 17:51:43.000000000 +0100
+***************
+*** 27,32 ****
+--- 27,37 ----
+ # endif
+ #endif
+
++ #if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64) \
++ || defined(__EMX__)
++ # include "vimio.h"
++ #endif
++
+ /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
+
+ #ifdef HAVE_CONFIG_H /* GNU autoconf (or something else) was here */
+*** ../vim-7.3.084/src/version.c 2010-12-17 17:35:05.000000000 +0100
+--- src/version.c 2010-12-17 17:55:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 85,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+14. Put mosquito netting around your work area. Play a tape of jungle
+ sounds all day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.086
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.086
+Problem: When using a mapping with an expression and there was no count,
+ v:count has the value of the previous command. (ZyX)
+Solution: Also set v:count and v:count1 before getting the character that
+ could be a command or a count.
+Files: src/normal.c
+
+
+*** ../vim-7.3.085/src/normal.c 2010-10-13 18:06:42.000000000 +0200
+--- src/normal.c 2010-12-17 18:46:56.000000000 +0100
+***************
+*** 25,30 ****
+--- 25,33 ----
+ static int restart_VIsual_select = 0;
+ #endif
+
++ #ifdef FEAT_EVAL
++ static void set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
++ #endif
+ static int
+ # ifdef __BORLANDC__
+ _RTLENTRYF
+***************
+*** 648,653 ****
+--- 651,664 ----
+ dont_scroll = FALSE; /* allow scrolling here */
+ #endif
+
++ #ifdef FEAT_EVAL
++ /* Set v:count here, when called from main() and not a stuffed
++ * command, so that v:count can be used in an expression mapping
++ * when there is no count. */
++ if (toplevel && stuff_empty())
++ set_vcount_ca(&ca, &set_prevcount);
++ #endif
++
+ /*
+ * Get the command character from the user.
+ */
+***************
+*** 725,739 ****
+ * command, so that v:count can be used in an expression mapping
+ * right after the count. */
+ if (toplevel && stuff_empty())
+! {
+! long count = ca.count0;
+!
+! /* multiply with ca.opcount the same way as below */
+! if (ca.opcount != 0)
+! count = ca.opcount * (count == 0 ? 1 : count);
+! set_vcount(count, count == 0 ? 1 : count, set_prevcount);
+! set_prevcount = FALSE; /* only set v:prevcount once */
+! }
+ #endif
+ if (ctrl_w)
+ {
+--- 736,742 ----
+ * command, so that v:count can be used in an expression mapping
+ * right after the count. */
+ if (toplevel && stuff_empty())
+! set_vcount_ca(&ca, &set_prevcount);
+ #endif
+ if (ctrl_w)
+ {
+***************
+*** 1386,1391 ****
+--- 1389,1414 ----
+ opcount = ca.opcount;
+ }
+
++ #ifdef FEAT_EVAL
++ /*
++ * Set v:count and v:count1 according to "cap".
++ * Set v:prevcount only when "set_prevcount" is TRUE.
++ */
++ static void
++ set_vcount_ca(cap, set_prevcount)
++ cmdarg_T *cap;
++ int *set_prevcount;
++ {
++ long count = cap->count0;
++
++ /* multiply with cap->opcount the same way as above */
++ if (cap->opcount != 0)
++ count = cap->opcount * (count == 0 ? 1 : count);
++ set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
++ *set_prevcount = FALSE; /* only set v:prevcount once */
++ }
++ #endif
++
+ /*
+ * Handle an operator after visual mode or when the movement is finished
+ */
+***************
+*** 8529,8535 ****
+ else
+ curwin->w_curswant = 0;
+ /* keep curswant at the column where we wanted to go, not where
+! we ended; differs if line is too short */
+ curwin->w_set_curswant = FALSE;
+ }
+
+--- 8552,8558 ----
+ else
+ curwin->w_curswant = 0;
+ /* keep curswant at the column where we wanted to go, not where
+! * we ended; differs if line is too short */
+ curwin->w_set_curswant = FALSE;
+ }
+
+*** ../vim-7.3.085/src/version.c 2010-12-17 18:06:00.000000000 +0100
+--- src/version.c 2010-12-17 18:51:20.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 86,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+15. Five days in advance, tell your friends you can't attend their
+ party because you're not in the mood.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.087
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.087
+Problem: EINTR is not always defined.
+Solution: Include errno.h in vim.h.
+Files: src/if_cscope.c, src/if_tcl.c, src/integration.c, src/memline.c,
+ src/os_mswin.c, src/os_win16.c, src/os_win32.c, src/vim.h,
+ src/workshop.c
+
+
+*** ../vim-7.3.086/src/if_cscope.c 2010-12-17 18:06:00.000000000 +0100
+--- src/if_cscope.c 2010-12-17 20:06:01.000000000 +0100
+***************
+*** 13,20 ****
+
+ #if defined(FEAT_CSCOPE) || defined(PROTO)
+
+- #include <string.h>
+- #include <errno.h>
+ #include <assert.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+--- 13,18 ----
+*** ../vim-7.3.086/src/if_tcl.c 2010-08-15 21:57:27.000000000 +0200
+--- src/if_tcl.c 2010-12-17 20:06:56.000000000 +0100
+***************
+*** 74,80 ****
+ #endif
+
+ #include <tcl.h>
+- #include <errno.h>
+ #include <string.h>
+
+ typedef struct
+--- 74,79 ----
+*** ../vim-7.3.086/src/integration.c 2010-08-15 21:57:29.000000000 +0200
+--- src/integration.c 2010-12-17 20:07:12.000000000 +0100
+***************
+*** 33,39 ****
+ #include <sys/un.h>
+ #endif
+
+- #include <errno.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/param.h>
+--- 33,38 ----
+*** ../vim-7.3.086/src/memline.c 2010-12-17 18:06:00.000000000 +0100
+--- src/memline.c 2010-12-17 20:07:31.000000000 +0100
+***************
+*** 52,61 ****
+ # include <proto/dos.h> /* for Open() and Close() */
+ #endif
+
+- #ifdef HAVE_ERRNO_H
+- # include <errno.h>
+- #endif
+-
+ typedef struct block0 ZERO_BL; /* contents of the first block */
+ typedef struct pointer_block PTR_BL; /* contents of a pointer block */
+ typedef struct data_block DATA_BL; /* contents of a data block */
+--- 52,57 ----
+*** ../vim-7.3.086/src/os_mswin.c 2010-12-17 18:06:00.000000000 +0100
+--- src/os_mswin.c 2010-12-17 20:08:14.000000000 +0100
+***************
+*** 30,36 ****
+ # include <string.h>
+ #endif
+ #include <sys/types.h>
+- #include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+ #include <process.h>
+--- 30,35 ----
+*** ../vim-7.3.086/src/os_win16.c 2010-12-17 18:06:00.000000000 +0100
+--- src/os_win16.c 2010-12-17 20:08:53.000000000 +0100
+***************
+*** 25,31 ****
+ #include <dos.h>
+ #include <string.h>
+ #include <sys/types.h>
+- #include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+ #include <process.h>
+--- 25,30 ----
+*** ../vim-7.3.086/src/os_win32.c 2010-12-17 18:06:00.000000000 +0100
+--- src/os_win32.c 2010-12-17 20:09:18.000000000 +0100
+***************
+*** 27,33 ****
+ #endif
+
+ #include <sys/types.h>
+- #include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+ #include <process.h>
+--- 27,32 ----
+*** ../vim-7.3.086/src/vim.h 2010-12-17 18:06:00.000000000 +0100
+--- src/vim.h 2010-12-17 20:09:56.000000000 +0100
+***************
+*** 480,485 ****
+--- 480,490 ----
+ # include <sys/stat.h>
+ #endif
+
++ #if defined(HAVE_ERRNO_H) || defined(DJGPP) || defined(WIN16) \
++ || defined(WIN32) || defined(_WIN64) || defined(__EMX__)
++ # include <errno.h>
++ #endif
++
+ /*
+ * Allow other (non-unix) systems to configure themselves now
+ * These are also in os_unix.h, because osdef.sh needs them there.
+*** ../vim-7.3.086/src/workshop.c 2010-08-15 21:57:26.000000000 +0200
+--- src/workshop.c 2010-12-17 20:09:31.000000000 +0100
+***************
+*** 16,22 ****
+ #include <sys/types.h>
+ #include <netdb.h>
+ #include <netinet/in.h>
+- #include <errno.h>
+ #include <sys/socket.h>
+ #ifdef HAVE_LIBGEN_H
+ # include <libgen.h>
+--- 16,21 ----
+*** ../vim-7.3.086/src/version.c 2010-12-17 18:52:56.000000000 +0100
+--- src/version.c 2010-12-17 20:14:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 87,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+17. When the money comes out the ATM, scream "I won!, I won! 3rd
+ time this week!!!!!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.088
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.088
+Problem: Ruby can't load Gems sometimes, may cause a crash.
+Solution: Undefine off_t. Use ruby_process_options(). (Yasuhiro Matsumoto)
+Files: src/if_ruby.c
+
+
+*** ../vim-7.3.087/src/if_ruby.c 2010-12-08 13:11:15.000000000 +0100
+--- src/if_ruby.c 2010-12-24 12:18:31.000000000 +0100
+***************
+*** 90,95 ****
+--- 90,96 ----
+ # include <ruby/encoding.h>
+ #endif
+
++ #undef off_t /* ruby defines off_t as _int64, Mingw uses long */
+ #undef EXTERN
+ #undef _
+
+***************
+*** 229,238 ****
+ # define rb_enc_find_index dll_rb_enc_find_index
+ # define rb_enc_find dll_rb_enc_find
+ # define rb_enc_str_new dll_rb_enc_str_new
+- # define rb_intern2 dll_rb_intern2
+- # define rb_const_remove dll_rb_const_remove
+ # define rb_sprintf dll_rb_sprintf
+ # define ruby_init_stack dll_ruby_init_stack
+ #endif
+
+ /*
+--- 230,239 ----
+ # define rb_enc_find_index dll_rb_enc_find_index
+ # define rb_enc_find dll_rb_enc_find
+ # define rb_enc_str_new dll_rb_enc_str_new
+ # define rb_sprintf dll_rb_sprintf
++ # define rb_require dll_rb_require
+ # define ruby_init_stack dll_ruby_init_stack
++ # define ruby_process_options dll_ruby_process_options
+ #endif
+
+ /*
+***************
+*** 319,329 ****
+ static int (*dll_rb_enc_find_index) (const char*);
+ static rb_encoding* (*dll_rb_enc_find) (const char*);
+ static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
+- static ID (*dll_rb_intern2) (const char*, long);
+- static void (*dll_Init_prelude) (void);
+- static VALUE (*dll_rb_const_remove) (VALUE, ID);
+ static VALUE (*dll_rb_sprintf) (const char*, ...);
+ static void (*ruby_init_stack)(VALUE*);
+ #endif
+
+ #ifdef RUBY19_OR_LATER
+--- 320,329 ----
+ static int (*dll_rb_enc_find_index) (const char*);
+ static rb_encoding* (*dll_rb_enc_find) (const char*);
+ static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
+ static VALUE (*dll_rb_sprintf) (const char*, ...);
++ static VALUE (*dll_rb_require) (const char*);
+ static void (*ruby_init_stack)(VALUE*);
++ static void* (*ruby_process_options)(int, char**);
+ #endif
+
+ #ifdef RUBY19_OR_LATER
+***************
+*** 430,439 ****
+ {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index},
+ {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
+ {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
+- {"rb_intern2", (RUBY_PROC*)&dll_rb_intern2},
+- {"rb_const_remove", (RUBY_PROC*)&dll_rb_const_remove},
+ {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
+ {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
+ #endif
+ {"", NULL},
+ };
+--- 430,439 ----
+ {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index},
+ {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
+ {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
+ {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
++ {"rb_require", (RUBY_PROC*)&dll_rb_require},
+ {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
++ {"ruby_process_options", (RUBY_PROC*)&dll_ruby_process_options},
+ #endif
+ {"", NULL},
+ };
+***************
+*** 663,680 ****
+ ruby_init();
+ }
+ #ifdef RUBY19_OR_LATER
+ ruby_script("vim-ruby");
+! #endif
+ ruby_init_loadpath();
+- ruby_io_init();
+- #ifdef RUBY19_OR_LATER
+- rb_enc_find_index("encdb");
+-
+- /* This avoids the error "Encoding::ConverterNotFoundError: code
+- * converter not found (UTF-16LE to ASCII-8BIT)". */
+- rb_define_module("Gem");
+- rb_const_remove(rb_cObject, rb_intern2("TMP_RUBY_PREFIX", 15));
+ #endif
+ ruby_vim_init();
+ ruby_initialized = 1;
+ #ifdef DYNAMIC_RUBY
+--- 663,678 ----
+ ruby_init();
+ }
+ #ifdef RUBY19_OR_LATER
++ {
++ int dummy_argc = 2;
++ char *dummy_argv[] = {"vim-ruby", "-e0"};
++ ruby_process_options(dummy_argc, dummy_argv);
++ }
+ ruby_script("vim-ruby");
+! #else
+ ruby_init_loadpath();
+ #endif
++ ruby_io_init();
+ ruby_vim_init();
+ ruby_initialized = 1;
+ #ifdef DYNAMIC_RUBY
+*** ../vim-7.3.087/src/version.c 2010-12-17 20:23:56.000000000 +0100
+--- src/version.c 2010-12-24 13:38:51.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 88,
+ /**/
+
+--
+It is hard to understand how a cemetery raised its burial
+cost and blamed it on the cost of living.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.089
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.089
+Problem: Compiler warning on 64 bit MS-Windows.
+Solution: Add type cast. (Mike Williams)
+Files: src/netbeans.c
+
+
+*** ../vim-7.3.088/src/netbeans.c 2010-12-17 18:06:00.000000000 +0100
+--- src/netbeans.c 2010-12-17 20:21:05.000000000 +0100
+***************
+*** 800,806 ****
+ * -> gui event loop or select loop
+ * -> netbeans_read()
+ */
+! save((char_u *)DETACH_MSG, strlen(DETACH_MSG));
+ nb_close_socket();
+
+ if (len < 0)
+--- 800,806 ----
+ * -> gui event loop or select loop
+ * -> netbeans_read()
+ */
+! save((char_u *)DETACH_MSG, (int)strlen(DETACH_MSG));
+ nb_close_socket();
+
+ if (len < 0)
+*** ../vim-7.3.088/src/version.c 2010-12-24 13:39:29.000000000 +0100
+--- src/version.c 2010-12-24 13:59:03.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 89,
+ /**/
+
+--
+The 50-50-90 rule: Anytime you have a 50-50 chance of getting
+something right, there's a 90% probability you'll get it wrong.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.090
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.090
+Problem: Wrong help text for Cscope.
+Solution: Adjust the help text for "t". (Dominique Pelle)
+Files: src/if_cscope.c
+
+
+*** ../vim-7.3.089/src/if_cscope.c 2010-12-17 20:23:56.000000000 +0100
+--- src/if_cscope.c 2010-12-30 11:35:37.000000000 +0100
+***************
+*** 1346,1352 ****
+ " g: Find this definition\n"
+ " i: Find files #including this file\n"
+ " s: Find this C symbol\n"
+! " t: Find assignments to\n"));
+
+ cmdp++;
+ }
+--- 1346,1352 ----
+ " g: Find this definition\n"
+ " i: Find files #including this file\n"
+ " s: Find this C symbol\n"
+! " t: Find this text string\n"));
+
+ cmdp++;
+ }
+***************
+*** 1657,1663 ****
+ /*
+ * PRIVATE: cs_make_vim_style_matches
+ *
+! * convert the cscope output into into a ctags style entry (as might be found
+ * in a ctags tags file). there's one catch though: cscope doesn't tell you
+ * the type of the tag you are looking for. for example, in Darren Hiebert's
+ * ctags (the one that comes with vim), #define's use a line number to find the
+--- 1657,1663 ----
+ /*
+ * PRIVATE: cs_make_vim_style_matches
+ *
+! * convert the cscope output into a ctags style entry (as might be found
+ * in a ctags tags file). there's one catch though: cscope doesn't tell you
+ * the type of the tag you are looking for. for example, in Darren Hiebert's
+ * ctags (the one that comes with vim), #define's use a line number to find the
+*** ../vim-7.3.089/src/version.c 2010-12-24 14:00:09.000000000 +0100
+--- src/version.c 2010-12-30 11:36:33.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 90,
+ /**/
+
+--
+ERROR 047: Keyboard not found. Press RETURN to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.091
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.091
+Problem: "vim -w foo" writes special key codes for removed escape
+ sequences. (Josh Triplett)
+Solution: Don't write K_IGNORE codes.
+Files: src/getchar.c, src/misc1.c, src/term.c, src/vim.h
+
+
+*** ../vim-7.3.090/src/getchar.c 2010-10-27 17:39:00.000000000 +0200
+--- src/getchar.c 2010-12-30 12:16:36.000000000 +0100
+***************
+*** 1506,1514 ****
+ }
+ }
+
+- #define KL_PART_KEY -1 /* keylen value for incomplete key-code */
+- #define KL_PART_MAP -2 /* keylen value for incomplete mapping */
+-
+ /*
+ * Get the next input character.
+ * Can return a special key or a multi-byte character.
+--- 1506,1511 ----
+***************
+*** 2171,2177 ****
+ if (!timedout)
+ {
+ /* break at a partly match */
+! keylen = KL_PART_MAP;
+ break;
+ }
+ }
+--- 2168,2174 ----
+ if (!timedout)
+ {
+ /* break at a partly match */
+! keylen = KEYLEN_PART_MAP;
+ break;
+ }
+ }
+***************
+*** 2192,2198 ****
+
+ /* If no partly match found, use the longest full
+ * match. */
+! if (keylen != KL_PART_MAP)
+ {
+ mp = mp_match;
+ keylen = mp_match_len;
+--- 2189,2195 ----
+
+ /* If no partly match found, use the longest full
+ * match. */
+! if (keylen != KEYLEN_PART_MAP)
+ {
+ mp = mp_match;
+ keylen = mp_match_len;
+***************
+*** 2230,2236 ****
+ }
+ /* Need more chars for partly match. */
+ if (mlen == typebuf.tb_len)
+! keylen = KL_PART_KEY;
+ else if (max_mlen < mlen)
+ /* no match, may have to check for termcode at
+ * next character */
+--- 2227,2233 ----
+ }
+ /* Need more chars for partly match. */
+ if (mlen == typebuf.tb_len)
+! keylen = KEYLEN_PART_KEY;
+ else if (max_mlen < mlen)
+ /* no match, may have to check for termcode at
+ * next character */
+***************
+*** 2238,2244 ****
+ }
+
+ if ((mp == NULL || max_mlen >= mp_match_len)
+! && keylen != KL_PART_MAP)
+ {
+ int save_keylen = keylen;
+
+--- 2235,2241 ----
+ }
+
+ if ((mp == NULL || max_mlen >= mp_match_len)
+! && keylen != KEYLEN_PART_MAP)
+ {
+ int save_keylen = keylen;
+
+***************
+*** 2264,2271 ****
+ /* If no termcode matched but 'pastetoggle'
+ * matched partially it's like an incomplete key
+ * sequence. */
+! if (keylen == 0 && save_keylen == KL_PART_KEY)
+! keylen = KL_PART_KEY;
+
+ /*
+ * When getting a partial match, but the last
+--- 2261,2268 ----
+ /* If no termcode matched but 'pastetoggle'
+ * matched partially it's like an incomplete key
+ * sequence. */
+! if (keylen == 0 && save_keylen == KEYLEN_PART_KEY)
+! keylen = KEYLEN_PART_KEY;
+
+ /*
+ * When getting a partial match, but the last
+***************
+*** 2302,2308 ****
+ continue;
+ }
+ if (*s == NUL) /* need more characters */
+! keylen = KL_PART_KEY;
+ }
+ if (keylen >= 0)
+ #endif
+--- 2299,2305 ----
+ continue;
+ }
+ if (*s == NUL) /* need more characters */
+! keylen = KEYLEN_PART_KEY;
+ }
+ if (keylen >= 0)
+ #endif
+***************
+*** 2339,2345 ****
+ if (keylen > 0) /* full matching terminal code */
+ {
+ #if defined(FEAT_GUI) && defined(FEAT_MENU)
+! if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
+ && typebuf.tb_buf[typebuf.tb_off + 1]
+ == KS_MENU)
+ {
+--- 2336,2343 ----
+ if (keylen > 0) /* full matching terminal code */
+ {
+ #if defined(FEAT_GUI) && defined(FEAT_MENU)
+! if (typebuf.tb_len >= 2
+! && typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
+ && typebuf.tb_buf[typebuf.tb_off + 1]
+ == KS_MENU)
+ {
+***************
+*** 2381,2387 ****
+ /* Partial match: get some more characters. When a
+ * matching mapping was found use that one. */
+ if (mp == NULL || keylen < 0)
+! keylen = KL_PART_KEY;
+ else
+ keylen = mp_match_len;
+ }
+--- 2379,2385 ----
+ /* Partial match: get some more characters. When a
+ * matching mapping was found use that one. */
+ if (mp == NULL || keylen < 0)
+! keylen = KEYLEN_PART_KEY;
+ else
+ keylen = mp_match_len;
+ }
+***************
+*** 2553,2559 ****
+ #endif
+ && typebuf.tb_maplen == 0
+ && (State & INSERT)
+! && (p_timeout || (keylen == KL_PART_KEY && p_ttimeout))
+ && (c = inchar(typebuf.tb_buf + typebuf.tb_off
+ + typebuf.tb_len, 3, 25L,
+ typebuf.tb_change_cnt)) == 0)
+--- 2551,2558 ----
+ #endif
+ && typebuf.tb_maplen == 0
+ && (State & INSERT)
+! && (p_timeout
+! || (keylen == KEYLEN_PART_KEY && p_ttimeout))
+ && (c = inchar(typebuf.tb_buf + typebuf.tb_off
+ + typebuf.tb_len, 3, 25L,
+ typebuf.tb_change_cnt)) == 0)
+***************
+*** 2783,2791 ****
+ ? 0
+ : ((typebuf.tb_len == 0
+ || !(p_timeout || (p_ttimeout
+! && keylen == KL_PART_KEY)))
+ ? -1L
+! : ((keylen == KL_PART_KEY && p_ttm >= 0)
+ ? p_ttm
+ : p_tm)), typebuf.tb_change_cnt);
+
+--- 2782,2790 ----
+ ? 0
+ : ((typebuf.tb_len == 0
+ || !(p_timeout || (p_ttimeout
+! && keylen == KEYLEN_PART_KEY)))
+ ? -1L
+! : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
+ ? p_ttm
+ : p_tm)), typebuf.tb_change_cnt);
+
+*** ../vim-7.3.090/src/misc1.c 2010-12-02 16:01:23.000000000 +0100
+--- src/misc1.c 2010-12-30 12:28:59.000000000 +0100
+***************
+*** 3114,3123 ****
+ && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
+
+! /* found a termcode: adjust length */
+! if (n > 0)
+ len = n;
+! if (len == 0) /* nothing typed yet */
+ continue;
+
+ /* Handle modifier and/or special key code. */
+--- 3114,3124 ----
+ && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
+
+! if (n == KEYLEN_REMOVED) /* key code removed */
+! continue;
+! if (n > 0) /* found a termcode: adjust length */
+ len = n;
+! if (len == 0) /* nothing typed yet */
+ continue;
+
+ /* Handle modifier and/or special key code. */
+*** ../vim-7.3.090/src/term.c 2010-08-15 21:57:32.000000000 +0200
+--- src/term.c 2010-12-30 12:14:48.000000000 +0100
+***************
+*** 3828,3833 ****
+--- 3831,3837 ----
+ * Check from typebuf.tb_buf[typebuf.tb_off] to typebuf.tb_buf[typebuf.tb_off
+ * + max_offset].
+ * Return 0 for no match, -1 for partial match, > 0 for full match.
++ * Return KEYLEN_REMOVED when a key code was deleted.
+ * With a match, the match is removed, the replacement code is inserted in
+ * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
+ * returned.
+***************
+*** 3845,3850 ****
+--- 3849,3855 ----
+ int slen = 0; /* init for GCC */
+ int modslen;
+ int len;
++ int retval = 0;
+ int offset;
+ char_u key_name[2];
+ int modifiers;
+***************
+*** 4940,4945 ****
+--- 4945,4957 ----
+ #endif
+ string[new_slen++] = key_name[1];
+ }
++ else if (new_slen == 0 && key_name[0] == KS_EXTRA
++ && key_name[1] == KE_IGNORE)
++ {
++ /* Do not put K_IGNORE into the buffer, do return KEYLEN_REMOVED
++ * to indicate what happened. */
++ retval = KEYLEN_REMOVED;
++ }
+ else
+ {
+ string[new_slen++] = K_SPECIAL;
+***************
+*** 4976,4982 ****
+ (size_t)(buflen - offset));
+ mch_memmove(buf + offset, string, (size_t)new_slen);
+ }
+! return (len + extra + offset);
+ }
+
+ return 0; /* no match found */
+--- 4988,4994 ----
+ (size_t)(buflen - offset));
+ mch_memmove(buf + offset, string, (size_t)new_slen);
+ }
+! return retval == 0 ? (len + extra + offset) : retval;
+ }
+
+ return 0; /* no match found */
+*** ../vim-7.3.090/src/vim.h 2010-12-17 20:23:56.000000000 +0100
+--- src/vim.h 2010-12-30 12:06:45.000000000 +0100
+***************
+*** 2211,2214 ****
+--- 2211,2218 ----
+ #define MSCR_LEFT -1
+ #define MSCR_RIGHT -2
+
++ #define KEYLEN_PART_KEY -1 /* keylen value for incomplete key-code */
++ #define KEYLEN_PART_MAP -2 /* keylen value for incomplete mapping */
++ #define KEYLEN_REMOVED 9999 /* keylen value for removed sequence */
++
+ #endif /* VIM__H */
+*** ../vim-7.3.090/src/version.c 2010-12-30 11:41:05.000000000 +0100
+--- src/version.c 2010-12-30 12:24:56.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 91,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+56. You leave the modem speaker on after connecting because you think it
+ sounds like the ocean wind...the perfect soundtrack for "surfing the net".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.092
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.092
+Problem: Resizing the window when exiting.
+Solution: Don't resize when exiting.
+Files: src/term.c
+
+
+*** ../vim-7.3.091/src/term.c 2010-12-30 12:30:26.000000000 +0100
+--- src/term.c 2010-12-30 12:14:48.000000000 +0100
+***************
+*** 3053,3062 ****
+ int old_Rows = Rows;
+ int old_Columns = Columns;
+
+! (void)ui_get_shellsize();
+! check_shellsize();
+! if (old_Rows != Rows || old_Columns != Columns)
+! shell_resized();
+ }
+
+ /*
+--- 3053,3065 ----
+ int old_Rows = Rows;
+ int old_Columns = Columns;
+
+! if (!exiting)
+! {
+! (void)ui_get_shellsize();
+! check_shellsize();
+! if (old_Rows != Rows || old_Columns != Columns)
+! shell_resized();
+! }
+ }
+
+ /*
+*** ../vim-7.3.091/src/version.c 2010-12-30 12:30:26.000000000 +0100
+--- src/version.c 2010-12-30 14:47:04.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 92,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+57. You begin to wonder how on earth your service provider is allowed to call
+ 200 hours per month "unlimited."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.093
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.093
+Problem: New DLL dependencies in MingW with gcc 4.5.0.
+Solution: Add STATIC_STDCPLUS, LDFLAGS and split up WINDRES. (Guopeng Wen)
+Files: src/GvimExt/Make_ming.mak, src/Make_ming.mak
+
+
+*** ../vim-7.3.092/src/GvimExt/Make_ming.mak 2010-09-29 18:42:25.000000000 +0200
+--- src/GvimExt/Make_ming.mak 2010-12-30 14:42:51.000000000 +0100
+***************
+*** 17,22 ****
+--- 17,33 ----
+ # check also the executables
+ MINGWOLD = no
+
++ # Link against the shared versions of libgcc/libstdc++ by default. Set
++ # STATIC_STDCPLUS to "yes" to link against static versions instead.
++ STATIC_STDCPLUS=no
++ #STATIC_STDCPLUS=yes
++
++ # Note: -static-libstdc++ is not available until gcc 4.5.x.
++ LDFLAGS += -shared
++ ifeq (yes, $(STATIC_STDCPLUS))
++ LDFLAGS += -static-libgcc -static-libstdc++
++ endif
++
+ ifeq ($(CROSS),yes)
+ DEL = rm
+ ifeq ($(MINGWOLD),yes)
+***************
+*** 33,39 ****
+ endif
+ endif
+ CXX := $(CROSS_COMPILE)g++
+! WINDRES := $(CROSS_COMPILE)windres --preprocessor="$(CXX) -E -xc" -DRC_INVOKED
+ LIBS := -luuid
+ RES := gvimext.res
+ DEFFILE = gvimext_ming.def
+--- 44,52 ----
+ endif
+ endif
+ CXX := $(CROSS_COMPILE)g++
+! WINDRES := $(CROSS_COMPILE)windres
+! WINDRES_CXX = $(CXX)
+! WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
+ LIBS := -luuid
+ RES := gvimext.res
+ DEFFILE = gvimext_ming.def
+***************
+*** 46,52 ****
+ all: all-before $(DLL) all-after
+
+ $(DLL): $(OBJ) $(RES) $(DEFFILE)
+! $(CXX) -shared $(CXXFLAGS) -s -o $@ \
+ -Wl,--enable-auto-image-base \
+ -Wl,--enable-auto-import \
+ -Wl,--whole-archive \
+--- 59,65 ----
+ all: all-before $(DLL) all-after
+
+ $(DLL): $(OBJ) $(RES) $(DEFFILE)
+! $(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
+ -Wl,--enable-auto-image-base \
+ -Wl,--enable-auto-import \
+ -Wl,--whole-archive \
+***************
+*** 58,64 ****
+ $(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
+
+ $(RES): gvimext_ming.rc
+! $(WINDRES) --input-format=rc --output-format=coff -DMING $? -o $@
+
+ clean: clean-custom
+ -$(DEL) $(OBJ) $(RES) $(DLL)
+--- 71,77 ----
+ $(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
+
+ $(RES): gvimext_ming.rc
+! $(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
+
+ clean: clean-custom
+ -$(DEL) $(OBJ) $(RES) $(DLL)
+*** ../vim-7.3.092/src/Make_ming.mak 2010-11-03 21:59:23.000000000 +0100
+--- src/Make_ming.mak 2010-12-30 14:42:51.000000000 +0100
+***************
+*** 56,61 ****
+--- 56,67 ----
+ NETBEANS=$(GUI)
+
+
++ # Link against the shared version of libstdc++ by default. Set
++ # STATIC_STDCPLUS to "yes" to link against static version instead.
++ ifndef STATIC_STDCPLUS
++ STATIC_STDCPLUS=no
++ endif
++
+ # If the user doesn't want gettext, undefine it.
+ ifeq (no, $(GETTEXT))
+ GETTEXT=
+***************
+*** 309,320 ****
+ endif
+ endif
+ CC := $(CROSS_COMPILE)gcc
+! WINDRES := $(CROSS_COMPILE)windres --preprocessor="$(CC) -E -xc" -DRC_INVOKED
+
+ #>>>>> end of choices
+ ###########################################################################
+
+ CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
+
+ ifdef GETTEXT
+ DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
+--- 315,328 ----
+ endif
+ endif
+ CC := $(CROSS_COMPILE)gcc
+! WINDRES := $(CROSS_COMPILE)windres
+! WINDRES_CC = $(CC)
+
+ #>>>>> end of choices
+ ###########################################################################
+
+ CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
++ WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
+
+ ifdef GETTEXT
+ DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
+***************
+*** 577,584 ****
+ endif
+
+ ifeq (yes, $(OLE))
+! LIB += -loleaut32 -lstdc++
+ OBJ += $(OUTDIR)/if_ole.o
+ endif
+
+ ifeq (yes, $(MBYTE))
+--- 585,597 ----
+ endif
+
+ ifeq (yes, $(OLE))
+! LIB += -loleaut32
+ OBJ += $(OUTDIR)/if_ole.o
++ ifeq (yes, $(STATIC_STDCPLUS))
++ LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
++ else
++ LIB += -lstdc++
++ endif
+ endif
+
+ ifeq (yes, $(MBYTE))
+***************
+*** 656,665 ****
+ $(CC) -c $(CFLAGS) $< -o $@
+
+ $(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
+! $(WINDRES) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
+
+ $(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
+! $(WINDRES) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
+
+ $(OUTDIR):
+ $(MKDIR) $(OUTDIR)
+--- 669,678 ----
+ $(CC) -c $(CFLAGS) $< -o $@
+
+ $(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
+! $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
+
+ $(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
+! $(WINDRES) $(WINDRES_FLAGS) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
+
+ $(OUTDIR):
+ $(MKDIR) $(OUTDIR)
+*** ../vim-7.3.092/src/version.c 2010-12-30 14:47:32.000000000 +0100
+--- src/version.c 2010-12-30 14:48:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 93,
+ /**/
+
+--
+Creating the world with Emacs: M-x let-there-be-light
+Creating the world with Vim: :make world
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.094
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.094
+Problem: Using abs() requires type cast to int.
+Solution: Use labs() so that the value remains long. (Hong Xu)
+Files: src/screen.c
+
+
+*** ../vim-7.3.093/src/screen.c 2010-12-08 19:56:52.000000000 +0100
+--- src/screen.c 2010-12-30 14:54:08.000000000 +0100
+***************
+*** 2317,2323 ****
+ num = (long)lnum;
+ else
+ /* 'relativenumber', don't use negative numbers */
+! num = (long)abs((int)get_cursor_rel_lnum(wp, lnum));
+
+ sprintf((char *)buf, "%*ld ", w, num);
+ #ifdef FEAT_RIGHTLEFT
+--- 2317,2323 ----
+ num = (long)lnum;
+ else
+ /* 'relativenumber', don't use negative numbers */
+! num = labs((long)get_cursor_rel_lnum(wp, lnum));
+
+ sprintf((char *)buf, "%*ld ", w, num);
+ #ifdef FEAT_RIGHTLEFT
+***************
+*** 3475,3482 ****
+ num = (long)lnum;
+ else
+ /* 'relativenumber', don't use negative numbers */
+! num = (long)abs((int)get_cursor_rel_lnum(wp,
+! lnum));
+
+ sprintf((char *)extra, "%*ld ",
+ number_width(wp), num);
+--- 3475,3481 ----
+ num = (long)lnum;
+ else
+ /* 'relativenumber', don't use negative numbers */
+! num = labs((long)get_cursor_rel_lnum(wp, lnum));
+
+ sprintf((char *)extra, "%*ld ",
+ number_width(wp), num);
+*** ../vim-7.3.093/src/version.c 2010-12-30 14:50:46.000000000 +0100
+--- src/version.c 2010-12-30 14:56:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 94,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+58. You turn on your computer and turn off your wife.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.095
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.095
+Problem: Win32: In Chinese tear-off menu doesn't work. (Weasley)
+Solution: Use menu_name_equal(). (Alex Jakushev)
+Files: src/menu.c
+
+
+*** ../vim-7.3.094/src/menu.c 2010-08-15 21:57:25.000000000 +0200
+--- src/menu.c 2011-01-04 17:41:38.000000000 +0100
+***************
+*** 1512,1519 ****
+ {
+ #ifdef FEAT_MULTI_LANG
+ if (menu->en_name != NULL
+! && (menu_namecmp(name,menu->en_name)
+! || menu_namecmp(name,menu->en_dname)))
+ return TRUE;
+ #endif
+ return menu_namecmp(name, menu->name) || menu_namecmp(name, menu->dname);
+--- 1512,1519 ----
+ {
+ #ifdef FEAT_MULTI_LANG
+ if (menu->en_name != NULL
+! && (menu_namecmp(name, menu->en_name)
+! || menu_namecmp(name, menu->en_dname)))
+ return TRUE;
+ #endif
+ return menu_namecmp(name, menu->name) || menu_namecmp(name, menu->dname);
+***************
+*** 2342,2348 ****
+
+ while (menu != NULL)
+ {
+! if (STRCMP(name, menu->name) == 0 || STRCMP(name, menu->dname) == 0)
+ {
+ if (menu->children == NULL)
+ {
+--- 2342,2348 ----
+
+ while (menu != NULL)
+ {
+! if (menu_name_equal(name, menu))
+ {
+ if (menu->children == NULL)
+ {
+*** ../vim-7.3.094/src/version.c 2010-12-30 14:57:03.000000000 +0100
+--- src/version.c 2011-01-04 17:43:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 95,
+ /**/
+
+--
+If your nose runs, and your feet smell, you might be upside down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.096
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.096
+Problem: "gvim -nb" is not interruptable. Leaking file descriptor on
+ netbeans connection error.
+Solution: Check for CTRL-C typed. Free file descriptor. (Xavier de Gaye)
+Files: src/netbeans.c
+
+
+*** ../vim-7.3.095/src/netbeans.c 2010-12-24 14:00:09.000000000 +0100
+--- src/netbeans.c 2011-01-04 18:00:35.000000000 +0100
+***************
+*** 321,326 ****
+--- 321,327 ----
+ {
+ nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
+ PERROR("gethostbyname() in netbeans_connect()");
++ sock_close(sd);
+ goto theend;
+ }
+ memcpy((char *)&server.sin_addr, host->h_addr, host->h_length);
+***************
+*** 370,384 ****
+ || (errno == EINTR)))
+ {
+ nbdebug(("retrying...\n"));
+! sleep(5);
+! if (!doabort)
+ {
+! ui_breakcheck();
+! if (got_int)
+! {
+! errno = EINTR;
+! break;
+! }
+ }
+ if (connect(sd, (struct sockaddr *)&server,
+ sizeof(server)) == 0)
+--- 371,382 ----
+ || (errno == EINTR)))
+ {
+ nbdebug(("retrying...\n"));
+! mch_delay(3000L, TRUE);
+! ui_breakcheck();
+! if (got_int)
+ {
+! errno = EINTR;
+! break;
+ }
+ if (connect(sd, (struct sockaddr *)&server,
+ sizeof(server)) == 0)
+***************
+*** 393,398 ****
+--- 391,397 ----
+ /* Get here when the server can't be found. */
+ nbdebug(("Cannot connect to Netbeans #2\n"));
+ PERROR(_("Cannot connect to Netbeans #2"));
++ sock_close(sd);
+ if (doabort)
+ getout(1);
+ goto theend;
+***************
+*** 403,408 ****
+--- 402,408 ----
+ {
+ nbdebug(("Cannot connect to Netbeans\n"));
+ PERROR(_("Cannot connect to Netbeans"));
++ sock_close(sd);
+ if (doabort)
+ getout(1);
+ goto theend;
+*** ../vim-7.3.095/src/version.c 2011-01-04 17:49:25.000000000 +0100
+--- src/version.c 2011-01-04 18:09:46.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 96,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+85. Choice between paying Compuserve bill and paying for kids education
+ is a no brainer -- although a bit painful for your kids.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.097
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.097
+Problem: Using ":call" inside "if 0" does not see that a function returns a
+ Dict and gives error for "." as string concatenation.
+Solution: Use eval0() to skip over the expression. (Yasuhiro Matsumoto)
+Files: src/eval.c
+
+
+*** ../vim-7.3.096/src/eval.c 2010-12-17 18:06:00.000000000 +0100
+--- src/eval.c 2011-01-04 18:54:27.000000000 +0100
+***************
+*** 3335,3340 ****
+--- 3335,3349 ----
+ int failed = FALSE;
+ funcdict_T fudi;
+
++ if (eap->skip)
++ {
++ /* trans_function_name() doesn't work well when skipping, use eval0()
++ * instead to skip to any following command, e.g. for:
++ * :if 0 | call dict.foo().bar() | endif */
++ eval0(eap->arg, &rettv, &eap->nextcmd, FALSE);
++ return;
++ }
++
+ tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
+ if (fudi.fd_newkey != NULL)
+ {
+*** ../vim-7.3.096/src/version.c 2011-01-04 18:11:39.000000000 +0100
+--- src/version.c 2011-01-04 19:00:21.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 97,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+86. E-mail Deficiency Depression (EDD) forces you to e-mail yourself.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.098
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.098
+Problem: Function that ignores error still causes called_emsg to be set.
+ E.g. when expand() fails the status line is disabled.
+Solution: Move check for emsg_not_now() up. (James Vega)
+Files: src/message.c
+
+
+*** ../vim-7.3.097/src/message.c 2010-10-20 21:22:17.000000000 +0200
+--- src/message.c 2011-01-04 19:19:04.000000000 +0100
+***************
+*** 569,574 ****
+--- 569,578 ----
+ int severe;
+ #endif
+
++ /* Skip this if not giving error messages at the moment. */
++ if (emsg_not_now())
++ return TRUE;
++
+ called_emsg = TRUE;
+ ex_exitval = 1;
+
+***************
+*** 581,590 ****
+ emsg_severe = FALSE;
+ #endif
+
+- /* Skip this if not giving error messages at the moment. */
+- if (emsg_not_now())
+- return TRUE;
+-
+ if (!emsg_off || vim_strchr(p_debug, 't') != NULL)
+ {
+ #ifdef FEAT_EVAL
+--- 585,590 ----
+*** ../vim-7.3.097/src/version.c 2011-01-04 19:03:22.000000000 +0100
+--- src/version.c 2011-01-04 19:24:30.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 98,
+ /**/
+
+--
+Ed's Radiator Shop: The Best Place in Town to Take a Leak.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.099
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.099
+Problem: Crash when splitting a window with zero height. (Yukihiro
+ Nakadaira)
+Solution: Don't set the fraction in a window with zero height.
+Files: src/window.c
+
+
+*** ../vim-7.3.098/src/window.c 2010-12-17 17:35:05.000000000 +0100
+--- src/window.c 2011-01-08 14:41:32.000000000 +0100
+***************
+*** 986,992 ****
+
+ /* Set w_fraction now so that the cursor keeps the same relative
+ * vertical position. */
+! set_fraction(oldwin);
+ wp->w_fraction = oldwin->w_fraction;
+
+ #ifdef FEAT_VERTSPLIT
+--- 986,993 ----
+
+ /* Set w_fraction now so that the cursor keeps the same relative
+ * vertical position. */
+! if (oldwin->w_height > 0)
+! set_fraction(oldwin);
+ wp->w_fraction = oldwin->w_fraction;
+
+ #ifdef FEAT_VERTSPLIT
+*** ../vim-7.3.098/src/version.c 2011-01-04 19:25:46.000000000 +0100
+--- src/version.c 2011-01-08 14:44:02.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 99,
+ /**/
+
+--
+From "know your smileys":
+ 8-O "Omigod!!" (done "rm -rf *" ?)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.100
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.100
+Problem: When using :normal v:count isn't set.
+Solution: Call normal_cmd() with toplevel set to TRUE.
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.099/src/ex_docmd.c 2010-12-02 16:01:23.000000000 +0100
+--- src/ex_docmd.c 2011-01-06 17:23:43.000000000 +0100
+***************
+*** 9310,9316 ****
+ && !got_int)
+ {
+ update_topline_cursor();
+! normal_cmd(&oa, FALSE); /* execute a Normal mode cmd */
+ }
+ }
+ #endif
+--- 9310,9316 ----
+ && !got_int)
+ {
+ update_topline_cursor();
+! normal_cmd(&oa, TRUE); /* execute a Normal mode cmd */
+ }
+ }
+ #endif
+*** ../vim-7.3.099/src/version.c 2011-01-08 14:45:57.000000000 +0100
+--- src/version.c 2011-01-17 19:49:07.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 100,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+109. You actually read -- and enjoy -- lists like this.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.1
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.101
+Problem: ino_t defined with wrong size.
+Solution: Move including auto/config.h before other includes. (Marius
+ Geminas)
+Files: src/if_ruby.c, src/if_lua.c
+
+
+*** ../vim-7.3.100/src/if_ruby.c 2010-12-24 13:39:29.000000000 +0100
+--- src/if_ruby.c 2011-01-09 14:43:14.000000000 +0100
+***************
+*** 11,23 ****
+ * See README.txt for an overview of the Vim source code.
+ */
+
+- #include <stdio.h>
+- #include <string.h>
+-
+ #ifdef HAVE_CONFIG_H
+ # include "auto/config.h"
+ #endif
+
+ #ifdef _WIN32
+ # if !defined(DYNAMIC_RUBY_VER) || (DYNAMIC_RUBY_VER < 18)
+ # define NT
+--- 11,23 ----
+ * See README.txt for an overview of the Vim source code.
+ */
+
+ #ifdef HAVE_CONFIG_H
+ # include "auto/config.h"
+ #endif
+
++ #include <stdio.h>
++ #include <string.h>
++
+ #ifdef _WIN32
+ # if !defined(DYNAMIC_RUBY_VER) || (DYNAMIC_RUBY_VER < 18)
+ # define NT
+*** ../vim-7.3.100/src/if_lua.c 2010-10-23 14:02:48.000000000 +0200
+--- src/if_lua.c 2011-01-09 14:46:46.000000000 +0100
+***************
+*** 9,20 ****
+ * See README.txt for an overview of the Vim source code.
+ */
+
+! #include <stdio.h>
+! #include <string.h>
+ #include <lua.h>
+ #include <lualib.h>
+ #include <lauxlib.h>
+- #include "vim.h"
+
+ /* Only do the following when the feature is enabled. Needed for "make
+ * depend". */
+--- 9,19 ----
+ * See README.txt for an overview of the Vim source code.
+ */
+
+! #include "vim.h"
+!
+ #include <lua.h>
+ #include <lualib.h>
+ #include <lauxlib.h>
+
+ /* Only do the following when the feature is enabled. Needed for "make
+ * depend". */
+*** ../vim-7.3.100/src/version.c 2011-01-17 19:50:01.000000000 +0100
+--- src/version.c 2011-01-17 19:51:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 101,
+ /**/
+
+--
+In a world without walls and borders, who needs windows and gates?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.102
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.102
+Problem: When using ":make", typing the next command and then getting the
+ "reload" prompt the next command is (partly) eaten by the reload
+ prompt.
+Solution: Accept ':' as a special character at the reload prompt to accept
+ the default choice and execute the command.
+Files: src/eval.c, src/fileio.c, src/gui.c, src/gui_xmdlg.c,
+ src/memline.c, src/message.c, src/proto/message.pro,
+ src/gui_athena.c, src/gui_gtk.c, src/gui_mac.c, src/gui_motif.c,
+ src/gui_photon.c, src/gui_w16.c, src/gui_w32.c, src/os_mswin.c
+ src/proto/gui_athena.pro, src/proto/gui_gtk.pro,
+ src/proto/gui_mac.pro, src/proto/gui_motif.pro,
+ src/proto/gui_photon.pro, src/proto/gui_w16.pro,
+ src/proto/gui_w32.pro
+
+
+*** ../vim-7.3.101/src/eval.c 2011-01-04 19:03:22.000000000 +0100
+--- src/eval.c 2011-01-16 00:14:21.000000000 +0100
+***************
+*** 9323,9329 ****
+
+ if (!error)
+ rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
+! def, NULL);
+ #endif
+ }
+
+--- 9323,9329 ----
+
+ if (!error)
+ rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
+! def, NULL, FALSE);
+ #endif
+ }
+
+***************
+*** 12744,12750 ****
+ IObuff[0] = NUL;
+ if (message != NULL && defstr != NULL
+ && do_dialog(VIM_QUESTION, NULL, message,
+! (char_u *)_("&OK\n&Cancel"), 1, IObuff) == 1)
+ rettv->vval.v_string = vim_strsave(IObuff);
+ else
+ {
+--- 12744,12750 ----
+ IObuff[0] = NUL;
+ if (message != NULL && defstr != NULL
+ && do_dialog(VIM_QUESTION, NULL, message,
+! (char_u *)_("&OK\n&Cancel"), 1, IObuff, FALSE) == 1)
+ rettv->vval.v_string = vim_strsave(IObuff);
+ else
+ {
+*** ../vim-7.3.101/src/fileio.c 2010-12-17 18:06:00.000000000 +0100
+--- src/fileio.c 2011-01-16 00:14:37.000000000 +0100
+***************
+*** 7008,7014 ****
+ STRCAT(tbuf, mesg2);
+ }
+ if (do_dialog(VIM_WARNING, (char_u *)_("Warning"), tbuf,
+! (char_u *)_("&OK\n&Load File"), 1, NULL) == 2)
+ reload = TRUE;
+ }
+ else
+--- 7008,7014 ----
+ STRCAT(tbuf, mesg2);
+ }
+ if (do_dialog(VIM_WARNING, (char_u *)_("Warning"), tbuf,
+! (char_u *)_("&OK\n&Load File"), 1, NULL, TRUE) == 2)
+ reload = TRUE;
+ }
+ else
+*** ../vim-7.3.101/src/gui.c 2010-10-20 19:17:43.000000000 +0200
+--- src/gui.c 2011-01-16 00:14:56.000000000 +0100
+***************
+*** 4903,4909 ****
+ if (STRLEN(p) > 2000)
+ STRCPY(p + 2000 - 14, "...(truncated)");
+ (void)do_dialog(VIM_ERROR, (char_u *)_("Error"),
+! p, (char_u *)_("&Ok"), 1, NULL);
+ break;
+ }
+ ga_clear(&error_ga);
+--- 4903,4909 ----
+ if (STRLEN(p) > 2000)
+ STRCPY(p + 2000 - 14, "...(truncated)");
+ (void)do_dialog(VIM_ERROR, (char_u *)_("Error"),
+! p, (char_u *)_("&Ok"), 1, NULL, FALSE);
+ break;
+ }
+ ga_clear(&error_ga);
+*** ../vim-7.3.101/src/gui_xmdlg.c 2010-08-15 21:57:32.000000000 +0200
+--- src/gui_xmdlg.c 2011-01-16 00:15:33.000000000 +0100
+***************
+*** 688,694 ****
+ do_dialog(VIM_ERROR,
+ (char_u *)_("Error"),
+ (char_u *)_("Invalid font specification"),
+! (char_u *)_("&Dismiss"), 1, NULL);
+
+ return True;
+ }
+--- 688,694 ----
+ do_dialog(VIM_ERROR,
+ (char_u *)_("Error"),
+ (char_u *)_("Invalid font specification"),
+! (char_u *)_("&Dismiss"), 1, NULL, FALSE);
+
+ return True;
+ }
+***************
+*** 807,813 ****
+ do_dialog(VIM_ERROR,
+ (char_u *)_("Error"),
+ (char_u *)_("Invalid font specification"),
+! (char_u *)_("&Dismiss"), 1, NULL);
+ XFreeFontNames(name);
+ }
+ else
+--- 807,813 ----
+ do_dialog(VIM_ERROR,
+ (char_u *)_("Error"),
+ (char_u *)_("Invalid font specification"),
+! (char_u *)_("&Dismiss"), 1, NULL, FALSE);
+ XFreeFontNames(name);
+ }
+ else
+*** ../vim-7.3.101/src/memline.c 2010-12-17 20:23:56.000000000 +0100
+--- src/memline.c 2011-01-16 00:15:47.000000000 +0100
+***************
+*** 4516,4522 ****
+ process_still_running
+ ? (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Quit\n&Abort") :
+ # endif
+! (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL);
+
+ # if defined(UNIX) || defined(__EMX__) || defined(VMS)
+ if (process_still_running && choice >= 4)
+--- 4516,4522 ----
+ process_still_running
+ ? (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Quit\n&Abort") :
+ # endif
+! (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL, FALSE);
+
+ # if defined(UNIX) || defined(__EMX__) || defined(VMS)
+ if (process_still_running && choice >= 4)
+*** ../vim-7.3.101/src/message.c 2011-01-04 19:25:46.000000000 +0100
+--- src/message.c 2011-01-17 19:57:30.000000000 +0100
+***************
+*** 3315,3321 ****
+ * different letter.
+ */
+ int
+! do_dialog(type, title, message, buttons, dfltbutton, textfield)
+ int type UNUSED;
+ char_u *title UNUSED;
+ char_u *message;
+--- 3315,3321 ----
+ * different letter.
+ */
+ int
+! do_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
+ int type UNUSED;
+ char_u *title UNUSED;
+ char_u *message;
+***************
+*** 3323,3328 ****
+--- 3323,3330 ----
+ int dfltbutton;
+ char_u *textfield UNUSED; /* IObuff for inputdialog(), NULL
+ otherwise */
++ int ex_cmd; /* when TRUE pressing : accepts default and starts
++ Ex command */
+ {
+ int oldState;
+ int retval = 0;
+***************
+*** 3341,3347 ****
+ if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL)
+ {
+ c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
+! textfield);
+ /* avoid a hit-enter prompt without clearing the cmdline */
+ need_wait_return = FALSE;
+ emsg_on_display = FALSE;
+--- 3343,3349 ----
+ if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL)
+ {
+ c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
+! textfield, ex_cmd);
+ /* avoid a hit-enter prompt without clearing the cmdline */
+ need_wait_return = FALSE;
+ emsg_on_display = FALSE;
+***************
+*** 3388,3393 ****
+--- 3390,3402 ----
+ default: /* Could be a hotkey? */
+ if (c < 0) /* special keys are ignored here */
+ continue;
++ if (c == ':' && ex_cmd)
++ {
++ retval = dfltbutton;
++ ins_char_typebuf(':');
++ break;
++ }
++
+ /* Make the character lowercase, as chars in "hotkeys" are. */
+ c = MB_TOLOWER(c);
+ retval = 1;
+***************
+*** 3661,3667 ****
+ if (do_dialog(type,
+ title == NULL ? (char_u *)_("Question") : title,
+ message,
+! (char_u *)_("&Yes\n&No"), dflt, NULL) == 1)
+ return VIM_YES;
+ return VIM_NO;
+ }
+--- 3670,3676 ----
+ if (do_dialog(type,
+ title == NULL ? (char_u *)_("Question") : title,
+ message,
+! (char_u *)_("&Yes\n&No"), dflt, NULL, FALSE) == 1)
+ return VIM_YES;
+ return VIM_NO;
+ }
+***************
+*** 3676,3682 ****
+ switch (do_dialog(type,
+ title == NULL ? (char_u *)_("Question") : title,
+ message,
+! (char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL))
+ {
+ case 1: return VIM_YES;
+ case 2: return VIM_NO;
+--- 3685,3691 ----
+ switch (do_dialog(type,
+ title == NULL ? (char_u *)_("Question") : title,
+ message,
+! (char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL, FALSE))
+ {
+ case 1: return VIM_YES;
+ case 2: return VIM_NO;
+***************
+*** 3695,3701 ****
+ title == NULL ? (char_u *)"Question" : title,
+ message,
+ (char_u *)_("&Yes\n&No\nSave &All\n&Discard All\n&Cancel"),
+! dflt, NULL))
+ {
+ case 1: return VIM_YES;
+ case 2: return VIM_NO;
+--- 3704,3710 ----
+ title == NULL ? (char_u *)"Question" : title,
+ message,
+ (char_u *)_("&Yes\n&No\nSave &All\n&Discard All\n&Cancel"),
+! dflt, NULL, FALSE))
+ {
+ case 1: return VIM_YES;
+ case 2: return VIM_NO;
+*** ../vim-7.3.101/src/proto/message.pro 2010-10-20 21:22:17.000000000 +0200
+--- src/proto/message.pro 2011-01-16 00:22:36.000000000 +0100
+***************
+*** 64,70 ****
+ int verbose_open __ARGS((void));
+ void give_warning __ARGS((char_u *message, int hl));
+ void msg_advance __ARGS((int col));
+! int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+ void display_confirm_msg __ARGS((void));
+ int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
+ int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
+--- 64,70 ----
+ int verbose_open __ARGS((void));
+ void give_warning __ARGS((char_u *message, int hl));
+ void msg_advance __ARGS((int col));
+! int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ void display_confirm_msg __ARGS((void));
+ int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
+ int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
+*** ../vim-7.3.101/src/gui_athena.c 2010-08-15 21:57:25.000000000 +0200
+--- src/gui_athena.c 2011-01-16 00:18:47.000000000 +0100
+***************
+*** 2117,2129 ****
+ }
+
+ int
+! gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield)
+ int type UNUSED;
+ char_u *title;
+ char_u *message;
+ char_u *buttons;
+ int dfltbutton UNUSED;
+ char_u *textfield;
+ {
+ char_u *buts;
+ char_u *p, *next;
+--- 2117,2130 ----
+ }
+
+ int
+! gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
+ int type UNUSED;
+ char_u *title;
+ char_u *message;
+ char_u *buttons;
+ int dfltbutton UNUSED;
+ char_u *textfield;
++ int ex_cmd UNUSED;
+ {
+ char_u *buts;
+ char_u *p, *next;
+*** ../vim-7.3.101/src/gui_gtk.c 2010-12-08 13:11:15.000000000 +0100
+--- src/gui_gtk.c 2011-01-16 00:24:44.000000000 +0100
+***************
+*** 1268,1274 ****
+ char_u *message, /* message text */
+ char_u *buttons, /* names of buttons */
+ int def_but, /* default button */
+! char_u *textfield) /* text for textfield or NULL */
+ {
+ GtkWidget *dialog;
+ GtkWidget *entry = NULL;
+--- 1268,1275 ----
+ char_u *message, /* message text */
+ char_u *buttons, /* names of buttons */
+ int def_but, /* default button */
+! char_u *textfield, /* text for textfield or NULL */
+! int ex_cmd UNUSED)
+ {
+ GtkWidget *dialog;
+ GtkWidget *entry = NULL;
+*** ../vim-7.3.101/src/gui_mac.c 2010-09-21 17:34:26.000000000 +0200
+--- src/gui_mac.c 2011-01-16 00:19:52.000000000 +0100
+***************
+*** 5583,5589 ****
+ char_u *message,
+ char_u *buttons,
+ int dfltbutton,
+! char_u *textfield)
+ {
+ Handle buttonDITL;
+ Handle iconDITL;
+--- 5583,5590 ----
+ char_u *message,
+ char_u *buttons,
+ int dfltbutton,
+! char_u *textfield,
+! int ex_cmd)
+ {
+ Handle buttonDITL;
+ Handle iconDITL;
+*** ../vim-7.3.101/src/gui_motif.c 2010-08-15 21:57:28.000000000 +0200
+--- src/gui_motif.c 2011-01-16 00:20:14.000000000 +0100
+***************
+*** 2549,2561 ****
+ #endif
+
+ int
+! gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield)
+ int type UNUSED;
+ char_u *title;
+ char_u *message;
+ char_u *button_names;
+ int dfltbutton;
+ char_u *textfield; /* buffer of size IOSIZE */
+ {
+ char_u *buts;
+ char_u *p, *next;
+--- 2549,2562 ----
+ #endif
+
+ int
+! gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield, ex_cmd)
+ int type UNUSED;
+ char_u *title;
+ char_u *message;
+ char_u *button_names;
+ int dfltbutton;
+ char_u *textfield; /* buffer of size IOSIZE */
++ int ex_cmd UNUSED;
+ {
+ char_u *buts;
+ char_u *p, *next;
+*** ../vim-7.3.101/src/gui_photon.c 2010-08-15 21:57:27.000000000 +0200
+--- src/gui_photon.c 2011-01-16 00:20:28.000000000 +0100
+***************
+*** 1502,1508 ****
+ char_u *message,
+ char_u *buttons,
+ int default_button,
+! char_u *textfield)
+ {
+ char_u *str;
+ char_u **button_array;
+--- 1502,1509 ----
+ char_u *message,
+ char_u *buttons,
+ int default_button,
+! char_u *textfield,
+! int ex_cmd)
+ {
+ char_u *str;
+ char_u **button_array;
+*** ../vim-7.3.101/src/gui_w16.c 2010-08-15 21:57:28.000000000 +0200
+--- src/gui_w16.c 2011-01-16 00:20:48.000000000 +0100
+***************
+*** 1098,1104 ****
+ char_u *message,
+ char_u *buttons,
+ int dfltbutton,
+! char_u *textfield)
+ {
+ FARPROC dp;
+ LPWORD p, pnumitems;
+--- 1098,1105 ----
+ char_u *message,
+ char_u *buttons,
+ int dfltbutton,
+! char_u *textfield,
+! int ex_cmd)
+ {
+ FARPROC dp;
+ LPWORD p, pnumitems;
+*** ../vim-7.3.101/src/gui_w32.c 2010-10-27 12:33:12.000000000 +0200
+--- src/gui_w32.c 2011-01-16 00:21:08.000000000 +0100
+***************
+*** 3005,3011 ****
+ char_u *message,
+ char_u *buttons,
+ int dfltbutton,
+! char_u *textfield)
+ {
+ WORD *p, *pdlgtemplate, *pnumitems;
+ DWORD *dwp;
+--- 3005,3012 ----
+ char_u *message,
+ char_u *buttons,
+ int dfltbutton,
+! char_u *textfield,
+! int ex_cmd)
+ {
+ WORD *p, *pdlgtemplate, *pnumitems;
+ DWORD *dwp;
+*** ../vim-7.3.101/src/os_mswin.c 2010-12-17 20:23:56.000000000 +0100
+--- src/os_mswin.c 2011-01-16 00:21:41.000000000 +0100
+***************
+*** 593,599 ****
+ gui.starting ? (char_u *)_("Message") :
+ #endif
+ (char_u *)_("Error"),
+! p, (char_u *)_("&Ok"), 1, NULL);
+ break;
+ }
+ ga_clear(&error_ga);
+--- 593,599 ----
+ gui.starting ? (char_u *)_("Message") :
+ #endif
+ (char_u *)_("Error"),
+! p, (char_u *)_("&Ok"), 1, NULL, FALSE);
+ break;
+ }
+ ga_clear(&error_ga);
+*** ../vim-7.3.101/src/proto/gui_athena.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_athena.pro 2011-01-16 00:23:00.000000000 +0100
+***************
+*** 27,31 ****
+ void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
+ Window gui_x11_get_wid __ARGS((void));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+ /* vim: set ft=c : */
+--- 27,31 ----
+ void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
+ Window gui_x11_get_wid __ARGS((void));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ /* vim: set ft=c : */
+*** ../vim-7.3.101/src/proto/gui_gtk.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_gtk.pro 2011-01-16 00:22:57.000000000 +0100
+***************
+*** 13,19 ****
+ void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+ char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield));
+ void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+ void gui_make_popup __ARGS((char_u *path_name, int mouse_pos));
+ void gui_mch_find_dialog __ARGS((exarg_T *eap));
+--- 13,19 ----
+ void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+ char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield, int ex_cmd));
+ void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+ void gui_make_popup __ARGS((char_u *path_name, int mouse_pos));
+ void gui_mch_find_dialog __ARGS((exarg_T *eap));
+*** ../vim-7.3.101/src/proto/gui_mac.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_mac.pro 2011-01-16 00:31:46.000000000 +0100
+***************
+*** 81,87 ****
+ int gui_mch_get_mouse_y __ARGS((void));
+ void gui_mch_setmouse __ARGS((int x, int y));
+ void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+ void gui_mch_set_foreground __ARGS((void));
+ void gui_mch_show_tabline __ARGS((int showit));
+--- 81,87 ----
+ int gui_mch_get_mouse_y __ARGS((void));
+ void gui_mch_setmouse __ARGS((int x, int y));
+ void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+ void gui_mch_set_foreground __ARGS((void));
+ void gui_mch_show_tabline __ARGS((int showit));
+*** ../vim-7.3.101/src/proto/gui_motif.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_motif.pro 2011-01-16 00:22:58.000000000 +0100
+***************
+*** 29,35 ****
+ void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
+ Window gui_x11_get_wid __ARGS((void));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield));
+ void gui_mch_enable_footer __ARGS((int showit));
+ void gui_mch_set_footer __ARGS((char_u *s));
+ void gui_mch_show_toolbar __ARGS((int showit));
+--- 29,35 ----
+ void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
+ Window gui_x11_get_wid __ARGS((void));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield, int ex_cmd));
+ void gui_mch_enable_footer __ARGS((int showit));
+ void gui_mch_set_footer __ARGS((char_u *s));
+ void gui_mch_show_toolbar __ARGS((int showit));
+*** ../vim-7.3.101/src/proto/gui_photon.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_photon.pro 2011-01-16 00:32:33.000000000 +0100
+***************
+*** 8,14 ****
+ void gui_mch_update __ARGS((void));
+ int gui_mch_wait_for_chars __ARGS((int wtime));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *default_name, char_u *ext, char_u *initdir, char_u *filter));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield));
+ int gui_mch_get_winpos __ARGS((int *x, int *y));
+ void gui_mch_set_winpos __ARGS((int x, int y));
+ void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
+--- 8,14 ----
+ void gui_mch_update __ARGS((void));
+ int gui_mch_wait_for_chars __ARGS((int wtime));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *default_name, char_u *ext, char_u *initdir, char_u *filter));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield, int ex_cmd));
+ int gui_mch_get_winpos __ARGS((int *x, int *y));
+ void gui_mch_set_winpos __ARGS((int x, int y));
+ void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
+*** ../vim-7.3.101/src/proto/gui_w16.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_w16.pro 2011-01-16 00:34:36.000000000 +0100
+***************
+*** 74,79 ****
+ void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
+ void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
+ void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+ void gui_mch_set_foreground __ARGS((void));
+ /* vim: set ft=c : */
+--- 74,79 ----
+ void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
+ void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
+ void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ void gui_mch_set_foreground __ARGS((void));
+ /* vim: set ft=c : */
+*** ../vim-7.3.101/src/proto/gui_w32.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_w32.pro 2011-01-16 00:33:12.000000000 +0100
+***************
+*** 81,87 ****
+ void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
+ void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
+ void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+ void gui_mch_set_foreground __ARGS((void));
+ void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+ void *gui_mch_register_sign __ARGS((char_u *signfile));
+--- 81,87 ----
+ void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
+ void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
+ void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+! int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ void gui_mch_set_foreground __ARGS((void));
+ void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+ void *gui_mch_register_sign __ARGS((char_u *signfile));
+*** ../vim-7.3.101/src/version.c 2011-01-17 19:53:20.000000000 +0100
+--- src/version.c 2011-01-17 20:05:02.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 102,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+110. You actually volunteer to become your employer's webmaster.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.103
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.103
+Problem: Changing 'fileformat' and then using ":w" in an empty file sets
+ the 'modified' option.
+Solution: In unchanged() don't ignore 'ff' for an empty file.
+Files: src/misc1.c, src/option.c, src/proto/option.pro, src/undo.c
+
+
+*** ../vim-7.3.102/src/misc1.c 2010-12-30 12:30:26.000000000 +0100
+--- src/misc1.c 2011-01-22 00:00:24.000000000 +0100
+***************
+*** 2919,2925 ****
+ buf_T *buf;
+ int ff; /* also reset 'fileformat' */
+ {
+! if (buf->b_changed || (ff && file_ff_differs(buf)))
+ {
+ buf->b_changed = 0;
+ ml_setflags(buf);
+--- 2919,2925 ----
+ buf_T *buf;
+ int ff; /* also reset 'fileformat' */
+ {
+! if (buf->b_changed || (ff && file_ff_differs(buf, FALSE)))
+ {
+ buf->b_changed = 0;
+ ml_setflags(buf);
+*** ../vim-7.3.102/src/option.c 2010-12-02 21:43:10.000000000 +0100
+--- src/option.c 2011-01-22 00:03:40.000000000 +0100
+***************
+*** 11296,11311 ****
+ * from when editing started (save_file_ff() called).
+ * Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
+ * changed and 'binary' is not set.
+! * Don't consider a new, empty buffer to be changed.
+ */
+ int
+! file_ff_differs(buf)
+ buf_T *buf;
+ {
+ /* In a buffer that was never loaded the options are not valid. */
+ if (buf->b_flags & BF_NEVERLOADED)
+ return FALSE;
+! if ((buf->b_flags & BF_NEW)
+ && buf->b_ml.ml_line_count == 1
+ && *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL)
+ return FALSE;
+--- 11296,11314 ----
+ * from when editing started (save_file_ff() called).
+ * Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
+ * changed and 'binary' is not set.
+! * When "ignore_empty" is true don't consider a new, empty buffer to be
+! * changed.
+ */
+ int
+! file_ff_differs(buf, ignore_empty)
+ buf_T *buf;
++ int ignore_empty;
+ {
+ /* In a buffer that was never loaded the options are not valid. */
+ if (buf->b_flags & BF_NEVERLOADED)
+ return FALSE;
+! if (ignore_empty
+! && (buf->b_flags & BF_NEW)
+ && buf->b_ml.ml_line_count == 1
+ && *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL)
+ return FALSE;
+*** ../vim-7.3.102/src/proto/option.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/option.pro 2011-01-22 00:04:35.000000000 +0100
+***************
+*** 54,59 ****
+ int option_was_set __ARGS((char_u *name));
+ int can_bs __ARGS((int what));
+ void save_file_ff __ARGS((buf_T *buf));
+! int file_ff_differs __ARGS((buf_T *buf));
+ int check_ff_value __ARGS((char_u *p));
+ /* vim: set ft=c : */
+--- 54,59 ----
+ int option_was_set __ARGS((char_u *name));
+ int can_bs __ARGS((int what));
+ void save_file_ff __ARGS((buf_T *buf));
+! int file_ff_differs __ARGS((buf_T *buf, int ignore_empty));
+ int check_ff_value __ARGS((char_u *p));
+ /* vim: set ft=c : */
+*** ../vim-7.3.102/src/undo.c 2010-12-17 18:06:00.000000000 +0100
+--- src/undo.c 2011-01-22 00:03:58.000000000 +0100
+***************
+*** 3304,3310 ****
+ #ifdef FEAT_QUICKFIX
+ !bt_dontwrite(buf) &&
+ #endif
+! (buf->b_changed || file_ff_differs(buf));
+ }
+
+ int
+--- 3304,3310 ----
+ #ifdef FEAT_QUICKFIX
+ !bt_dontwrite(buf) &&
+ #endif
+! (buf->b_changed || file_ff_differs(buf, TRUE));
+ }
+
+ int
+***************
+*** 3314,3320 ****
+ #ifdef FEAT_QUICKFIX
+ !bt_dontwrite(curbuf) &&
+ #endif
+! (curbuf->b_changed || file_ff_differs(curbuf));
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 3314,3320 ----
+ #ifdef FEAT_QUICKFIX
+ !bt_dontwrite(curbuf) &&
+ #endif
+! (curbuf->b_changed || file_ff_differs(curbuf, TRUE));
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+*** ../vim-7.3.102/src/version.c 2011-01-17 20:08:03.000000000 +0100
+--- src/version.c 2011-01-22 00:07:56.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 103,
+ /**/
+
+--
+In a world without fences, who needs Gates and Windows?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.104
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Problem: Conceal: using Tab for cchar causes problems. (ZyX)
+Solution: Do not accept a control character for cchar.
+Files: src/syntax.c
+
+
+*** ../vim-7.3.103/src/syntax.c 2010-09-29 18:32:47.000000000 +0200
+--- src/syntax.c 2011-01-22 00:50:20.000000000 +0100
+***************
+*** 4537,4542 ****
+--- 4537,4549 ----
+ ;
+ #endif
+ }
++ #ifdef FEAT_CONCEAL
++ if (!vim_isprintc_strict(*conceal_char))
++ {
++ EMSG(_("E844: invalid cchar value"));
++ return NULL;
++ }
++ #endif
+ arg = skipwhite(arg + 7);
+ }
+ else
+*** ../vim-7.3.103/src/version.c 2011-01-22 00:11:42.000000000 +0100
+--- src/version.c 2011-01-22 00:54:56.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 104,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+132. You come back and check this list every half-hour.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.105
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.105
+Problem: Can't get the value of "b:changedtick" with getbufvar().
+Solution: Make it work. (Christian Brabandt)
+Files: src/eval.c
+
+
+*** ../vim-7.3.104/src/eval.c 2011-01-17 20:08:03.000000000 +0100
+--- src/eval.c 2011-01-22 01:10:42.000000000 +0100
+***************
+*** 10866,10871 ****
+--- 10866,10876 ----
+
+ if (*varname == '&') /* buffer-local-option */
+ get_option_tv(&varname, rettv, TRUE);
++ else if (STRCMP(varname, "changedtick") == 0)
++ {
++ rettv->v_type = VAR_NUMBER;
++ rettv->vval.v_number = curbuf->b_changedtick;
++ }
+ else
+ {
+ if (*varname == NUL)
+*** ../vim-7.3.104/src/version.c 2011-01-22 00:58:15.000000000 +0100
+--- src/version.c 2011-01-22 01:13:19.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 105,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+133. You communicate with people on other continents more than you
+ do with your own neighbors.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.106
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.106
+Problem: When 'cursorbind' is set another window may scroll unexpectedly
+ when 'scrollbind' is also set. (Xavier Wang)
+Solution: Don't call update_topline() if 'scrollbind' is set.
+Files: src/move.c
+
+
+*** ../vim-7.3.105/src/move.c 2010-08-15 21:57:29.000000000 +0200
+--- src/move.c 2011-01-22 20:58:50.000000000 +0100
+***************
+*** 2882,2890 ****
+ if (has_mbyte)
+ mb_adjust_cursor();
+ # endif
+-
+ redraw_later(VALID);
+! update_topline();
+ # ifdef FEAT_WINDOWS
+ curwin->w_redr_status = TRUE;
+ # endif
+--- 2882,2892 ----
+ if (has_mbyte)
+ mb_adjust_cursor();
+ # endif
+ redraw_later(VALID);
+!
+! /* Only scroll when 'scrollbind' hasn't done this. */
+! if (!curwin->w_p_scb)
+! update_topline();
+ # ifdef FEAT_WINDOWS
+ curwin->w_redr_status = TRUE;
+ # endif
+*** ../vim-7.3.105/src/version.c 2011-01-22 01:13:33.000000000 +0100
+--- src/version.c 2011-01-22 21:03:21.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 106,
+ /**/
+
+--
+Never eat yellow snow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.107
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.107
+Problem: Year number for :undolist can be confused with month or day.
+Solution: Change "%y" to "%Y".
+Files: src/undo.c
+
+
+*** ../vim-7.3.106/src/undo.c 2011-01-22 00:11:42.000000000 +0100
+--- src/undo.c 2011-01-22 00:03:58.000000000 +0100
+***************
+*** 2884,2890 ****
+ (void)strftime((char *)buf, buflen, "%m/%d %H:%M:%S", curtime);
+ else
+ /* long ago */
+! (void)strftime((char *)buf, buflen, "%y/%m/%d %H:%M:%S", curtime);
+ }
+ else
+ #endif
+--- 2884,2890 ----
+ (void)strftime((char *)buf, buflen, "%m/%d %H:%M:%S", curtime);
+ else
+ /* long ago */
+! (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
+ }
+ else
+ #endif
+*** ../vim-7.3.106/src/version.c 2011-01-22 21:05:02.000000000 +0100
+--- src/version.c 2011-01-22 21:24:07.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 107,
+ /**/
+
+--
+"The sun oozed over the horizon, shoved aside darkness, crept along the
+greensward, and, with sickly fingers, pushed through the castle window,
+revealing the pillaged princess, hand at throat, crown asunder, gaping
+in frenzied horror at the sated, sodden amphibian lying beside her,
+disbelieving the magnitude of the frog's deception, screaming madly,
+"You lied!"
+ - Winner of the Bulwer-Lytton contest (San Jose State University),
+ wherein one writes only the first line of a bad novel
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.108
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.108
+Problem: Useless check for NULL when calling vim_free().
+Solution: Remove the check. (Dominique Pelle)
+Files: src/eval.c, src/ex_cmds.c, src/os_win32.c
+
+
+*** ../vim-7.3.107/src/eval.c 2011-01-22 01:13:33.000000000 +0100
+--- src/eval.c 2011-01-30 21:37:53.000000000 +0100
+***************
+*** 5106,5114 ****
+ else
+ ret = OK;
+ }
+!
+! if (alias != NULL)
+! vim_free(alias);
+ }
+
+ *arg = skipwhite(*arg);
+--- 5106,5112 ----
+ else
+ ret = OK;
+ }
+! vim_free(alias);
+ }
+
+ *arg = skipwhite(*arg);
+***************
+*** 19807,19813 ****
+ EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name);
+ return;
+ }
+! /* Don't allow hiding a function. When "v" is not NULL we migth be
+ * assigning another function to the same var, the type is checked
+ * below. */
+ if (v == NULL && function_exists(name))
+--- 19805,19811 ----
+ EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name);
+ return;
+ }
+! /* Don't allow hiding a function. When "v" is not NULL we might be
+ * assigning another function to the same var, the type is checked
+ * below. */
+ if (v == NULL && function_exists(name))
+*** ../vim-7.3.107/src/ex_cmds.c 2010-12-17 18:06:00.000000000 +0100
+--- src/ex_cmds.c 2011-01-30 21:37:53.000000000 +0100
+***************
+*** 5412,5418 ****
+ vir_T *virp;
+ int force;
+ {
+! if (old_sub != NULL && force)
+ vim_free(old_sub);
+ if (force || old_sub == NULL)
+ old_sub = viminfo_readstring(virp, 1, TRUE);
+--- 5412,5418 ----
+ vir_T *virp;
+ int force;
+ {
+! if (force)
+ vim_free(old_sub);
+ if (force || old_sub == NULL)
+ old_sub = viminfo_readstring(virp, 1, TRUE);
+*** ../vim-7.3.107/src/os_win32.c 2010-12-17 20:23:56.000000000 +0100
+--- src/os_win32.c 2011-01-30 21:37:53.000000000 +0100
+***************
+*** 1886,1893 ****
+ cb->BufferSize.X = cb->Info.dwSize.X;
+ cb->BufferSize.Y = cb->Info.dwSize.Y;
+ NumCells = cb->BufferSize.X * cb->BufferSize.Y;
+! if (cb->Buffer != NULL)
+! vim_free(cb->Buffer);
+ cb->Buffer = (PCHAR_INFO)alloc(NumCells * sizeof(CHAR_INFO));
+ if (cb->Buffer == NULL)
+ return FALSE;
+--- 1886,1892 ----
+ cb->BufferSize.X = cb->Info.dwSize.X;
+ cb->BufferSize.Y = cb->Info.dwSize.Y;
+ NumCells = cb->BufferSize.X * cb->BufferSize.Y;
+! vim_free(cb->Buffer);
+ cb->Buffer = (PCHAR_INFO)alloc(NumCells * sizeof(CHAR_INFO));
+ if (cb->Buffer == NULL)
+ return FALSE;
+*** ../vim-7.3.107/src/version.c 2011-01-22 21:25:07.000000000 +0100
+--- src/version.c 2011-02-01 13:47:07.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 108,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+173. You keep tracking down the email addresses of all your friends
+ (even childhood friends).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.109
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.109
+Problem: Processing new Esperanto spell file fails and crashes Vim.
+ (Dominique Pelle)
+Solution: When running out of memory give an error. Handle '?' in
+ COMPOUNDRULE properly.
+Files: src/spell.c
+
+
+*** ../vim-7.3.108/src/spell.c 2010-12-17 18:06:00.000000000 +0100
+--- src/spell.c 2011-02-01 13:43:52.000000000 +0100
+***************
+*** 3634,3640 ****
+ }
+
+ /* Add all flags to "sl_compallflags". */
+! if (vim_strchr((char_u *)"+*[]/", c) == NULL
+ && !byte_in_str(slang->sl_compallflags, c))
+ {
+ *ap++ = c;
+--- 3634,3640 ----
+ }
+
+ /* Add all flags to "sl_compallflags". */
+! if (vim_strchr((char_u *)"?*+[]/", c) == NULL
+ && !byte_in_str(slang->sl_compallflags, c))
+ {
+ *ap++ = c;
+***************
+*** 3664,3670 ****
+ /* Copy flag to "sl_comprules", unless we run into a wildcard. */
+ if (crp != NULL)
+ {
+! if (c == '+' || c == '*')
+ {
+ vim_free(slang->sl_comprules);
+ slang->sl_comprules = NULL;
+--- 3664,3670 ----
+ /* Copy flag to "sl_comprules", unless we run into a wildcard. */
+ if (crp != NULL)
+ {
+! if (c == '?' || c == '+' || c == '*')
+ {
+ vim_free(slang->sl_comprules);
+ slang->sl_comprules = NULL;
+***************
+*** 3682,3689 ****
+ }
+ else /* normal char, "[abc]" and '*' are copied as-is */
+ {
+! if (c == '+' || c == '~')
+! *pp++ = '\\'; /* "a+" becomes "a\+" */
+ #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ pp += mb_char2bytes(c, pp);
+--- 3682,3689 ----
+ }
+ else /* normal char, "[abc]" and '*' are copied as-is */
+ {
+! if (c == '?' || c == '+' || c == '~')
+! *pp++ = '\\'; /* "a?" becomes "a\?", "a+" becomes "a\+" */
+ #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ pp += mb_char2bytes(c, pp);
+***************
+*** 4951,4956 ****
+--- 4951,4958 ----
+
+ sblock_T *si_blocks; /* memory blocks used */
+ long si_blocks_cnt; /* memory blocks allocated */
++ int si_did_emsg; /* TRUE when ran out of memory */
++
+ long si_compress_cnt; /* words to add before lowering
+ compression limit */
+ wordnode_T *si_first_free; /* List of nodes that have been freed during
+***************
+*** 5477,5497 ****
+ }
+ else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
+ {
+! /* Concatenate this string to previously defined ones, using a
+! * slash to separate them. */
+! l = (int)STRLEN(items[1]) + 1;
+! if (compflags != NULL)
+! l += (int)STRLEN(compflags) + 1;
+! p = getroom(spin, l, FALSE);
+! if (p != NULL)
+ {
+ if (compflags != NULL)
+ {
+! STRCPY(p, compflags);
+! STRCAT(p, "/");
+ }
+- STRCAT(p, items[1]);
+- compflags = p;
+ }
+ }
+ else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
+--- 5479,5503 ----
+ }
+ else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
+ {
+! /* Don't use the first rule if it is a number. */
+! if (compflags != NULL || *skipdigits(items[1]) != NUL)
+ {
++ /* Concatenate this string to previously defined ones,
++ * using a slash to separate them. */
++ l = (int)STRLEN(items[1]) + 1;
+ if (compflags != NULL)
++ l += (int)STRLEN(compflags) + 1;
++ p = getroom(spin, l, FALSE);
++ if (p != NULL)
+ {
+! if (compflags != NULL)
+! {
+! STRCPY(p, compflags);
+! STRCAT(p, "/");
+! }
+! STRCAT(p, items[1]);
+! compflags = p;
+ }
+ }
+ }
+ else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
+***************
+*** 6291,6297 ****
+
+ for (p = compflags; *p != NUL; )
+ {
+! if (vim_strchr((char_u *)"/*+[]", *p) != NULL)
+ /* Copy non-flag characters directly. */
+ *tp++ = *p++;
+ else
+--- 6297,6303 ----
+
+ for (p = compflags; *p != NUL; )
+ {
+! if (vim_strchr((char_u *)"/?*+[]", *p) != NULL)
+ /* Copy non-flag characters directly. */
+ *tp++ = *p++;
+ else
+***************
+*** 6320,6326 ****
+ {
+ check_renumber(spin);
+ id = spin->si_newcompID--;
+! } while (vim_strchr((char_u *)"/+*[]\\-^", id) != NULL);
+ ci->ci_newID = id;
+ hash_add(&aff->af_comp, ci->ci_key);
+ }
+--- 6326,6332 ----
+ {
+ check_renumber(spin);
+ id = spin->si_newcompID--;
+! } while (vim_strchr((char_u *)"/?*+[]\\-^", id) != NULL);
+ ci->ci_newID = id;
+ hash_add(&aff->af_comp, ci->ci_key);
+ }
+***************
+*** 7364,7373 ****
+
+ if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
+ {
+! /* Allocate a block of memory. This is not freed until much later. */
+! bl = (sblock_T *)alloc_clear((unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
+ if (bl == NULL)
+ return NULL;
+ bl->sb_next = spin->si_blocks;
+ spin->si_blocks = bl;
+ bl->sb_used = 0;
+--- 7370,7390 ----
+
+ if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
+ {
+! if (len >= SBLOCKSIZE)
+! bl = NULL;
+! else
+! /* Allocate a block of memory. It is not freed until much later. */
+! bl = (sblock_T *)alloc_clear(
+! (unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
+ if (bl == NULL)
++ {
++ if (!spin->si_did_emsg)
++ {
++ EMSG(_("E845: Insufficient memory, word list will be incomplete"));
++ spin->si_did_emsg = TRUE;
++ }
+ return NULL;
++ }
+ bl->sb_next = spin->si_blocks;
+ spin->si_blocks = bl;
+ bl->sb_used = 0;
+***************
+*** 7382,7387 ****
+--- 7399,7405 ----
+
+ /*
+ * Make a copy of a string into memory allocated with getroom().
++ * Returns NULL when out of memory.
+ */
+ static char_u *
+ getroom_save(spin, s)
+***************
+*** 7416,7421 ****
+--- 7434,7440 ----
+
+ /*
+ * Allocate the root of a word tree.
++ * Returns NULL when out of memory.
+ */
+ static wordnode_T *
+ wordtree_alloc(spin)
+***************
+*** 7700,7705 ****
+--- 7719,7725 ----
+ /*
+ * Get a wordnode_T, either from the list of previously freed nodes or
+ * allocate a new one.
++ * Returns NULL when out of memory.
+ */
+ static wordnode_T *
+ get_wordnode(spin)
+***************
+*** 7717,7723 ****
+ --spin->si_free_count;
+ }
+ #ifdef SPELL_PRINTTREE
+! n->wn_nr = ++spin->si_wordnode_nr;
+ #endif
+ return n;
+ }
+--- 7737,7744 ----
+ --spin->si_free_count;
+ }
+ #ifdef SPELL_PRINTTREE
+! if (n != NULL)
+! n->wn_nr = ++spin->si_wordnode_nr;
+ #endif
+ return n;
+ }
+*** ../vim-7.3.108/src/version.c 2011-02-01 13:48:47.000000000 +0100
+--- src/version.c 2011-02-01 13:56:38.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 109,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+174. You know what a listserv is.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.110
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.110
+Problem: The "nbsp" item in 'listchars' isn't used for ":list".
+Solution: Make it work. (Christian Brabandt)
+Files: src/message.c
+
+
+*** ../vim-7.3.109/src/message.c 2011-01-17 20:08:03.000000000 +0100
+--- src/message.c 2011-02-01 17:06:21.000000000 +0100
+***************
+*** 1637,1644 ****
+ else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
+ {
+ col += (*mb_ptr2cells)(s);
+! mch_memmove(buf, s, (size_t)l);
+! buf[l] = NUL;
+ msg_puts(buf);
+ s += l;
+ continue;
+--- 1637,1652 ----
+ else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
+ {
+ col += (*mb_ptr2cells)(s);
+! if (lcs_nbsp != NUL && list && mb_ptr2char(s) == 160)
+! {
+! mb_char2bytes(lcs_nbsp, buf);
+! buf[(*mb_ptr2len)(buf)] = NUL;
+! }
+! else
+! {
+! mch_memmove(buf, s, (size_t)l);
+! buf[l] = NUL;
+! }
+ msg_puts(buf);
+ s += l;
+ continue;
+***************
+*** 1664,1669 ****
+--- 1672,1682 ----
+ attr = hl_attr(HLF_8);
+ }
+ }
++ else if (c == 160 && list && lcs_nbsp != NUL)
++ {
++ c = lcs_nbsp;
++ attr = hl_attr(HLF_8);
++ }
+ else if (c == NUL && list && lcs_eol != NUL)
+ {
+ p_extra = (char_u *)"";
+*** ../vim-7.3.109/src/version.c 2011-02-01 13:59:44.000000000 +0100
+--- src/version.c 2011-02-01 17:08:31.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 110,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+176. You lie, even to user-friends, about how long you were online yesterday.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.111
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.111 (after 7.3.100)
+Problem: Executing a :normal command in 'statusline' evaluation causes the
+ cursor to move. (Dominique Pelle)
+Solution: When updating the cursor for 'cursorbind' allow the cursor beyond
+ the end of the line. When evaluating 'statusline' temporarily
+ reset 'cursorbind'.
+Files: src/move.c, src/screen.c
+
+
+*** ../vim-7.3.110/src/move.c 2011-01-22 21:05:02.000000000 +0100
+--- src/move.c 2011-02-01 17:36:10.000000000 +0100
+***************
+*** 2846,2851 ****
+--- 2846,2852 ----
+ colnr_T col = curwin->w_cursor.col;
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
++ int restart_edit_save;
+ # ifdef FEAT_VISUAL
+ int old_VIsual_select = VIsual_select;
+ int old_VIsual_active = VIsual_active;
+***************
+*** 2875,2882 ****
+ curwin->w_cursor.lnum = line;
+ curwin->w_cursor.col = col;
+
+! /* Make sure the cursor is in a valid position. */
+ check_cursor();
+ # ifdef FEAT_MBYTE
+ /* Correct cursor for multi-byte character. */
+ if (has_mbyte)
+--- 2876,2887 ----
+ curwin->w_cursor.lnum = line;
+ curwin->w_cursor.col = col;
+
+! /* Make sure the cursor is in a valid position. Temporarily set
+! * "restart_edit" to allow the cursor to be beyond the EOL. */
+! restart_edit_save = restart_edit;
+! restart_edit = TRUE;
+ check_cursor();
++ restart_edit = restart_edit_save;
+ # ifdef FEAT_MBYTE
+ /* Correct cursor for multi-byte character. */
+ if (has_mbyte)
+*** ../vim-7.3.110/src/screen.c 2010-12-30 14:57:03.000000000 +0100
+--- src/screen.c 2011-02-01 17:45:45.000000000 +0100
+***************
+*** 6435,6440 ****
+--- 6435,6442 ----
+ struct stl_hlrec hltab[STL_MAX_ITEM];
+ struct stl_hlrec tabtab[STL_MAX_ITEM];
+ int use_sandbox = FALSE;
++ win_T *ewp;
++ int p_crb_save;
+
+ /* setup environment for the task at hand */
+ if (wp == NULL)
+***************
+*** 6513,6526 ****
+ if (maxwidth <= 0)
+ return;
+
+ /* Make a copy, because the statusline may include a function call that
+ * might change the option value and free the memory. */
+ stl = vim_strsave(stl);
+! width = build_stl_str_hl(wp == NULL ? curwin : wp,
+! buf, sizeof(buf),
+ stl, use_sandbox,
+ fillchar, maxwidth, hltab, tabtab);
+ vim_free(stl);
+
+ /* Make all characters printable. */
+ p = transstr(buf);
+--- 6515,6534 ----
+ if (maxwidth <= 0)
+ return;
+
++ /* Temporarily reset 'cursorbind', we don't want a side effect from moving
++ * the cursor away and back. */
++ ewp = wp == NULL ? curwin : wp;
++ p_crb_save = ewp->w_p_crb;
++ ewp->w_p_crb = FALSE;
++
+ /* Make a copy, because the statusline may include a function call that
+ * might change the option value and free the memory. */
+ stl = vim_strsave(stl);
+! width = build_stl_str_hl(ewp, buf, sizeof(buf),
+ stl, use_sandbox,
+ fillchar, maxwidth, hltab, tabtab);
+ vim_free(stl);
++ ewp->w_p_crb = p_crb_save;
+
+ /* Make all characters printable. */
+ p = transstr(buf);
+*** ../vim-7.3.110/src/version.c 2011-02-01 17:12:20.000000000 +0100
+--- src/version.c 2011-02-01 18:00:14.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 111,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+177. You log off of your system because it's time to go to work.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.112
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.112
+Problem: Setting 'statusline' to "%!'asdf%' reads uninitialized memory.
+Solution: Check for NUL after %.
+Files: src/buffer.c
+
+
+*** ../vim-7.3.111/src/buffer.c 2010-10-27 16:17:56.000000000 +0200
+--- src/buffer.c 2011-02-01 21:40:17.000000000 +0100
+***************
+*** 3364,3370 ****
+ * or truncated if too long, fillchar is used for all whitespace.
+ */
+ int
+! build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab)
+ win_T *wp;
+ char_u *out; /* buffer to write into != NameBuff */
+ size_t outlen; /* length of out[] */
+--- 3364,3371 ----
+ * or truncated if too long, fillchar is used for all whitespace.
+ */
+ int
+! build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar,
+! maxwidth, hltab, tabtab)
+ win_T *wp;
+ char_u *out; /* buffer to write into != NameBuff */
+ size_t outlen; /* length of out[] */
+***************
+*** 3474,3479 ****
+--- 3475,3482 ----
+ * Handle one '%' item.
+ */
+ s++;
++ if (*s == NUL) /* ignore trailing % */
++ break;
+ if (*s == '%')
+ {
+ if (p + 1 >= out + outlen)
+*** ../vim-7.3.111/src/version.c 2011-02-01 18:01:06.000000000 +0100
+--- src/version.c 2011-02-01 21:54:01.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 112,
+ /**/
+
+--
+Rule #1: Don't give somebody a tool that he's going to hurt himself with.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.113
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.113
+Problem: Windows: Fall back directory for creating temp file is wrong.
+Solution: Use "." instead of empty string. (Hong Xu)
+Files: src/fileio.c
+
+
+*** ../vim-7.3.112/src/fileio.c 2011-01-17 20:08:03.000000000 +0100
+--- src/fileio.c 2011-02-06 13:14:25.000000000 +0100
+***************
+*** 7459,7465 ****
+
+ STRCPY(itmp, "");
+ if (GetTempPath(_MAX_PATH, szTempFile) == 0)
+! szTempFile[0] = NUL; /* GetTempPath() failed, use current dir */
+ strcpy(buf4, "VIM");
+ buf4[2] = extra_char; /* make it "VIa", "VIb", etc. */
+ if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
+--- 7459,7468 ----
+
+ STRCPY(itmp, "");
+ if (GetTempPath(_MAX_PATH, szTempFile) == 0)
+! {
+! szTempFile[0] = '.'; /* GetTempPath() failed, use current dir */
+! szTempFile[1] = NUL;
+! }
+ strcpy(buf4, "VIM");
+ buf4[2] = extra_char; /* make it "VIa", "VIb", etc. */
+ if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
+*** ../vim-7.3.112/src/version.c 2011-02-01 21:54:56.000000000 +0100
+--- src/version.c 2011-02-09 14:46:12.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 113,
+ /**/
+
+--
+'Psychologist' -- Someone who looks at everyone else when
+an attractive woman enters the room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.114
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.114
+Problem: Potential problem in initialization when giving an error message
+ early.
+Solution: Initialize 'verbosefile' empty. (Ben Schmidt)
+Files: src/option.h
+
+
+*** ../vim-7.3.113/src/option.h 2010-12-02 16:01:23.000000000 +0100
+--- src/option.h 2011-02-09 15:37:36.000000000 +0100
+***************
+*** 854,860 ****
+--- 854,864 ----
+ # define VE_ONEMORE 8
+ #endif
+ EXTERN long p_verbose; /* 'verbose' */
++ #ifdef IN_OPTION_C
++ char_u *p_vfile = (char_u *)""; /* used before options are initialized */
++ #else
+ EXTERN char_u *p_vfile; /* 'verbosefile' */
++ #endif
+ EXTERN int p_warn; /* 'warn' */
+ #ifdef FEAT_CMDL_COMPL
+ EXTERN char_u *p_wop; /* 'wildoptions' */
+*** ../vim-7.3.113/src/version.c 2011-02-09 14:46:58.000000000 +0100
+--- src/version.c 2011-02-09 15:46:17.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 114,
+ /**/
+
+--
+From the classified section of a city newspaper:
+Dog for sale: eats anything and is fond of children.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.115
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.115
+Problem: Vim can crash when tmpnam() returns NULL.
+Solution: Check for NULL. (Hong Xu)
+Files: src/fileio.c
+
+
+*** ../vim-7.3.114/src/fileio.c 2011-02-09 14:46:58.000000000 +0100
+--- src/fileio.c 2011-02-09 16:14:35.000000000 +0100
+***************
+*** 7483,7490 ****
+ # else /* WIN3264 */
+
+ # ifdef USE_TMPNAM
+ /* tmpnam() will make its own name */
+! if (*tmpnam((char *)itmp) == NUL)
+ return NULL;
+ # else
+ char_u *p;
+--- 7483,7493 ----
+ # else /* WIN3264 */
+
+ # ifdef USE_TMPNAM
++ char_u *p;
++
+ /* tmpnam() will make its own name */
+! p = tmpnam((char *)itmp);
+! if (p == NULL || *p == NUL)
+ return NULL;
+ # else
+ char_u *p;
+*** ../vim-7.3.114/src/version.c 2011-02-09 15:59:32.000000000 +0100
+--- src/version.c 2011-02-09 16:44:11.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 115,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+218. Your spouse hands you a gift wrapped magnet with your PC's name
+ on it and you accuse him or her of genocide.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.116
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.116
+Problem: 'cursorline' is displayed too short when there are concealed
+ characters and 'list' is set. (Dennis Preiser)
+Solution: Check for 'cursorline' when 'list' is set. (Christian Brabandt)
+Files: src/screen.c
+
+
+*** ../vim-7.3.115/src/screen.c 2011-02-01 18:01:06.000000000 +0100
+--- src/screen.c 2011-02-09 16:59:28.000000000 +0100
+***************
+*** 5099,5105 ****
+ #ifdef FEAT_DIFF
+ || filler_todo > 0
+ #endif
+! || (wp->w_p_list && lcs_eol != NUL && p_extra != at_end_str)
+ || (n_extra != 0 && (c_extra != NUL || *p_extra != NUL)))
+ )
+ {
+--- 5099,5109 ----
+ #ifdef FEAT_DIFF
+ || filler_todo > 0
+ #endif
+! || (wp->w_p_list && lcs_eol != NUL && p_extra != at_end_str
+! #ifdef FEAT_SYN_HL
+! && !wp->w_p_cul
+! #endif
+! )
+ || (n_extra != 0 && (c_extra != NUL || *p_extra != NUL)))
+ )
+ {
+*** ../vim-7.3.115/src/version.c 2011-02-09 16:44:45.000000000 +0100
+--- src/version.c 2011-02-09 17:08:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 116,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+219. Your spouse has his or her lawyer deliver the divorce papers...
+ via e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.117
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.117
+Problem: On some systems --as-needed does not work, because the "tinfo"
+ library is included indirectly from "ncurses". (Charles Campbell)
+Solution: In configure prefer using "tinfo" instead of "ncurses".
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.116/src/configure.in 2010-11-16 19:25:56.000000000 +0100
+--- src/configure.in 2011-02-09 17:28:16.000000000 +0100
+***************
+*** 2618,2630 ****
+ AC_MSG_RESULT([empty: automatic terminal library selection])
+ dnl On HP-UX 10.10 termcap or termlib should be used instead of
+ dnl curses, because curses is much slower.
+! dnl Newer versions of ncurses are preferred over anything.
+ dnl Older versions of ncurses have bugs, get a new one!
+ dnl Digital Unix (OSF1) should use curses (Ronald Schild).
+ dnl On SCO Openserver should prefer termlib (Roger Cornelius).
+ case "`uname -s 2>/dev/null`" in
+! OSF1|SCO_SV) tlibs="ncurses curses termlib termcap";;
+! *) tlibs="ncurses termlib termcap curses";;
+ esac
+ for libname in $tlibs; do
+ AC_CHECK_LIB(${libname}, tgetent,,)
+--- 2618,2631 ----
+ AC_MSG_RESULT([empty: automatic terminal library selection])
+ dnl On HP-UX 10.10 termcap or termlib should be used instead of
+ dnl curses, because curses is much slower.
+! dnl Newer versions of ncurses are preferred over anything, except
+! dnl when tinfo has been split off, it conains all we need.
+ dnl Older versions of ncurses have bugs, get a new one!
+ dnl Digital Unix (OSF1) should use curses (Ronald Schild).
+ dnl On SCO Openserver should prefer termlib (Roger Cornelius).
+ case "`uname -s 2>/dev/null`" in
+! OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
+! *) tlibs="tinfo ncurses termlib termcap curses";;
+ esac
+ for libname in $tlibs; do
+ AC_CHECK_LIB(${libname}, tgetent,,)
+*** ../vim-7.3.116/src/auto/configure 2010-11-16 19:25:56.000000000 +0100
+--- src/auto/configure 2011-02-09 17:29:13.000000000 +0100
+***************
+*** 9886,9894 ****
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: empty: automatic terminal library selection" >&5
+ $as_echo "empty: automatic terminal library selection" >&6; }
+! case "`uname -s 2>/dev/null`" in
+! OSF1|SCO_SV) tlibs="ncurses curses termlib termcap";;
+! *) tlibs="ncurses termlib termcap curses";;
+ esac
+ for libname in $tlibs; do
+ as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
+--- 9886,9894 ----
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: empty: automatic terminal library selection" >&5
+ $as_echo "empty: automatic terminal library selection" >&6; }
+! case "`uname -s 2>/dev/null`" in
+! OSF1|SCO_SV) tlibs="tinfo ncurses curses termlib termcap";;
+! *) tlibs="tinfo ncurses termlib termcap curses";;
+ esac
+ for libname in $tlibs; do
+ as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
+*** ../vim-7.3.116/src/version.c 2011-02-09 17:09:26.000000000 +0100
+--- src/version.c 2011-02-09 17:41:37.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 117,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+220. Your wife asks for sex and you tell her where to find you on IRC.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.118
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.118
+Problem: Ruby uses SIGVTALARM which makes Vim exit. (Alec Tica)
+Solution: Ignore SIGVTALARM. (Dominique Pelle)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.117/src/os_unix.c 2010-12-17 16:27:10.000000000 +0100
+--- src/os_unix.c 2011-02-09 18:19:57.000000000 +0100
+***************
+*** 283,289 ****
+ #ifdef SIGTERM
+ {SIGTERM, "TERM", TRUE},
+ #endif
+! #ifdef SIGVTALRM
+ {SIGVTALRM, "VTALRM", TRUE},
+ #endif
+ #if defined(SIGPROF) && !defined(FEAT_MZSCHEME) && !defined(WE_ARE_PROFILING)
+--- 283,289 ----
+ #ifdef SIGTERM
+ {SIGTERM, "TERM", TRUE},
+ #endif
+! #if defined(SIGVTALRM) && !defined(FEAT_RUBY)
+ {SIGVTALRM, "VTALRM", TRUE},
+ #endif
+ #if defined(SIGPROF) && !defined(FEAT_MZSCHEME) && !defined(WE_ARE_PROFILING)
+***************
+*** 1107,1113 ****
+ * On Linux, signal is not always handled immediately either.
+ * See https://bugs.launchpad.net/bugs/291373
+ *
+! * volatile because it is used in in signal handler sigcont_handler().
+ */
+ static volatile int sigcont_received;
+ static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
+--- 1107,1113 ----
+ * On Linux, signal is not always handled immediately either.
+ * See https://bugs.launchpad.net/bugs/291373
+ *
+! * volatile because it is used in signal handler sigcont_handler().
+ */
+ static volatile int sigcont_received;
+ static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
+*** ../vim-7.3.117/src/version.c 2011-02-09 17:42:53.000000000 +0100
+--- src/version.c 2011-02-09 18:46:53.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 118,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+221. Your wife melts your keyboard in the oven.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.1
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.119
+Problem: Build problem on Mac. (Nicholas Stallard)
+Solution: Use "extern" instead of "EXTERN" for p_vfile.
+Files: src/option.h
+
+
+*** ../vim-7.3.118/src/option.h 2011-02-09 15:59:32.000000000 +0100
+--- src/option.h 2011-02-12 13:56:50.000000000 +0100
+***************
+*** 857,863 ****
+ #ifdef IN_OPTION_C
+ char_u *p_vfile = (char_u *)""; /* used before options are initialized */
+ #else
+! EXTERN char_u *p_vfile; /* 'verbosefile' */
+ #endif
+ EXTERN int p_warn; /* 'warn' */
+ #ifdef FEAT_CMDL_COMPL
+--- 857,863 ----
+ #ifdef IN_OPTION_C
+ char_u *p_vfile = (char_u *)""; /* used before options are initialized */
+ #else
+! extern char_u *p_vfile; /* 'verbosefile' */
+ #endif
+ EXTERN int p_warn; /* 'warn' */
+ #ifdef FEAT_CMDL_COMPL
+*** ../vim-7.3.118/src/version.c 2011-02-09 18:47:36.000000000 +0100
+--- src/version.c 2011-02-12 13:59:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 119,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+237. You tattoo your email address on your forehead.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.120
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.120
+Problem: The message for an existing swap file is too long to fit in a 25
+ line terminal.
+Solution: Make the message shorter. (Chad Miller)
+Files: src/memline.c
+
+
+*** ../vim-7.3.119/src/memline.c 2011-01-17 20:08:03.000000000 +0100
+--- src/memline.c 2011-02-13 14:18:08.000000000 +0100
+***************
+*** 4071,4079 ****
+ }
+ /* Some of these messages are long to allow translation to
+ * other languages. */
+! MSG_PUTS(_("\n(1) Another program may be editing the same file.\n If this is the case, be careful not to end up with two\n different instances of the same file when making changes.\n"));
+! MSG_PUTS(_(" Quit, or continue with caution.\n"));
+! MSG_PUTS(_("\n(2) An edit session for this file crashed.\n"));
+ MSG_PUTS(_(" If this is the case, use \":recover\" or \"vim -r "));
+ msg_outtrans(buf->b_fname);
+ MSG_PUTS(_("\"\n to recover the changes (see \":help recovery\").\n"));
+--- 4071,4079 ----
+ }
+ /* Some of these messages are long to allow translation to
+ * other languages. */
+! MSG_PUTS(_("\n(1) Another program may be editing the same file. If this is the case,\n be careful not to end up with two different instances of the same\n file when making changes."));
+! MSG_PUTS(_(" Quit, or continue with caution.\n"));
+! MSG_PUTS(_("(2) An edit session for this file crashed.\n"));
+ MSG_PUTS(_(" If this is the case, use \":recover\" or \"vim -r "));
+ msg_outtrans(buf->b_fname);
+ MSG_PUTS(_("\"\n to recover the changes (see \":help recovery\").\n"));
+*** ../vim-7.3.119/src/version.c 2011-02-12 13:59:55.000000000 +0100
+--- src/version.c 2011-02-15 11:56:14.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 120,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+257. Your "hundred-and-one" lists include well over 101 items, since you
+ automatically interpret all numbers in hexadecimal notation.
+ (hex 101 = decimal 257)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.121
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.121
+Problem: Complicated 'statusline' causes a crash. (Christian Brabandt)
+Solution: Check that the number of items is not too big.
+Files: src/buffer.c
+
+
+*** ../vim-7.3.120/src/buffer.c 2011-02-01 21:54:56.000000000 +0100
+--- src/buffer.c 2011-02-15 14:00:51.000000000 +0100
+***************
+*** 3460,3465 ****
+--- 3461,3478 ----
+ prevchar_isitem = FALSE;
+ for (s = usefmt; *s; )
+ {
++ if (curitem == STL_MAX_ITEM)
++ {
++ /* There are too many items. Add the error code to the statusline
++ * to give the user a hint about what went wrong. */
++ if (p + 6 < out + outlen)
++ {
++ mch_memmove(p, " E541", (size_t)5);
++ p += 5;
++ }
++ break;
++ }
++
+ if (*s != NUL && *s != '%')
+ prevchar_isflag = prevchar_isitem = FALSE;
+
+*** ../vim-7.3.120/src/version.c 2011-02-15 11:56:56.000000000 +0100
+--- src/version.c 2011-02-15 14:23:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 121,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+265. Your reason for not staying in touch with family is that
+ they do not have e-mail addresses.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.122
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.122
+Problem: Having auto/config.mk in the repository causes problems.
+Solution: Remove auto/config.mk from the distribution. In the toplevel
+ Makefile copy it from the "dist" file.
+Files: Makefile, src/Makefile, src/auto/config.mk
+
+
+*** ../vim-7.3.121/Makefile 2010-08-15 21:57:20.000000000 +0200
+--- Makefile 2011-02-12 14:28:09.000000000 +0100
+***************
+*** 23,28 ****
+--- 23,31 ----
+ # has run can result in compiling with $(CC) empty.
+
+ first:
++ @if test ! -f src/auto/config.mk; then \
++ cp src/config.mk.dist src/auto/config.mk; \
++ fi
+ @echo "Starting make in the src directory."
+ @echo "If there are problems, cd to the src directory and run make there"
+ cd src && $(MAKE) $@
+***************
+*** 30,35 ****
+--- 33,41 ----
+ # Some make programs use the last target for the $@ default; put the other
+ # targets separately to always let $@ expand to "first" by default.
+ all install uninstall tools config configure reconfig proto depend lint tags types test testclean clean distclean:
++ @if test ! -f src/auto/config.mk; then \
++ cp src/config.mk.dist src/auto/config.mk; \
++ fi
+ @echo "Starting make in the src directory."
+ @echo "If there are problems, cd to the src directory and run make there"
+ cd src && $(MAKE) $@
+*** ../vim-7.3.121/src/Makefile 2010-11-03 22:32:18.000000000 +0100
+--- src/Makefile 2011-02-15 15:21:37.000000000 +0100
+***************
+*** 283,294 ****
+
+ ######################## auto/config.mk ######################## {{{1
+ # At this position auto/config.mk is included. When starting from the
+! # distribution it is almost empty. After running auto/configure it contains
+! # settings that have been discovered for your system. Settings below this
+! # include override settings in auto/config.mk!
+!
+! # Note: if auto/config.mk is lost somehow (e.g., because configure was
+! # interrupted), create an empty auto/config.mk file and do "make config".
+
+ # (X) How to include auto/config.mk depends on the version of "make" you have,
+ # if the current choice doesn't work, try the other one.
+--- 283,295 ----
+
+ ######################## auto/config.mk ######################## {{{1
+ # At this position auto/config.mk is included. When starting from the
+! # toplevel Makefile it is almost empty. After running auto/configure it
+! # contains settings that have been discovered for your system. Settings below
+! # this include override settings in auto/config.mk!
+!
+! # Note: If make fails because auto/config.mk does not exist (it is not
+! # included in the repository), do:
+! # cp config.mk.dist auto/config.mk
+
+ # (X) How to include auto/config.mk depends on the version of "make" you have,
+ # if the current choice doesn't work, try the other one.
+*** ../vim-7.3.121/src/auto/config.mk 2010-08-16 21:59:00.000000000 +0200
+--- src/auto/config.mk 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,5 ****
+- the first targets to make vim are: scratch config myself
+- srcdir = .
+- VIMNAME = vim
+- EXNAME = ex
+- VIEWNAME = view
+--- 0 ----
+*** ../vim-7.3.121/src/version.c 2011-02-15 14:24:42.000000000 +0100
+--- src/version.c 2011-02-15 15:25:07.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 122,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+267. You get an extra phone line so you can get phone calls.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.123
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.123
+Problem: ml_get error when executing register being recorded into, deleting
+ lines and 'conceallevel' is set. (ZyX)
+Solution: Don't redraw a line for concealing when it doesn't exist.
+Files: src/main.c
+
+
+*** ../vim-7.3.122/src/main.c 2010-12-17 18:06:00.000000000 +0100
+--- src/main.c 2011-02-15 16:09:41.000000000 +0100
+***************
+*** 1198,1204 ****
+ || conceal_cursor_line(curwin)
+ || need_cursor_line_redraw))
+ {
+! if (conceal_old_cursor_line != conceal_new_cursor_line)
+ update_single_line(curwin, conceal_old_cursor_line);
+ update_single_line(curwin, conceal_new_cursor_line);
+ curwin->w_valid &= ~VALID_CROW;
+--- 1198,1206 ----
+ || conceal_cursor_line(curwin)
+ || need_cursor_line_redraw))
+ {
+! if (conceal_old_cursor_line != conceal_new_cursor_line
+! && conceal_old_cursor_line
+! <= curbuf->b_ml.ml_line_count)
+ update_single_line(curwin, conceal_old_cursor_line);
+ update_single_line(curwin, conceal_new_cursor_line);
+ curwin->w_valid &= ~VALID_CROW;
+*** ../vim-7.3.122/src/version.c 2011-02-15 15:27:00.000000000 +0100
+--- src/version.c 2011-02-15 16:15:28.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 123,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+268. You get up in the morning and go online before getting your coffee.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.124
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.124
+Problem: When writing a file in binary mode it may be missing the final EOL
+ if a file previously read was missing the EOL. (Kevin Goodsell)
+Solution: Move the write_no_eol_lnum into the buffer struct.
+Files: src/structs.h, src/fileio.c, src/globals.h, src/os_unix.c
+
+
+*** ../vim-7.3.123/src/structs.h 2010-10-20 21:22:17.000000000 +0200
+--- src/structs.h 2011-02-15 17:06:34.000000000 +0100
+***************
+*** 1564,1569 ****
+--- 1564,1572 ----
+
+ /* end of buffer options */
+
++ linenr_T b_no_eol_lnum; /* non-zero lnum when last line of next binary
++ * write should not have an end-of-line */
++
+ int b_start_eol; /* last line had eol when it was read */
+ int b_start_ffc; /* first char of 'ff' when edit started */
+ #ifdef FEAT_MBYTE
+*** ../vim-7.3.123/src/fileio.c 2011-02-09 16:44:45.000000000 +0100
+--- src/fileio.c 2011-02-15 17:30:54.000000000 +0100
+***************
+*** 317,323 ****
+ int using_b_fname;
+ #endif
+
+! write_no_eol_lnum = 0; /* in case it was set by the previous read */
+
+ /*
+ * If there is no file name yet, use the one for the read file.
+--- 317,323 ----
+ int using_b_fname;
+ #endif
+
+! curbuf->b_no_eol_lnum = 0; /* in case it was set by the previous read */
+
+ /*
+ * If there is no file name yet, use the one for the read file.
+***************
+*** 2599,2608 ****
+
+ /*
+ * Trick: We remember if the last line of the read didn't have
+! * an eol for when writing it again. This is required for
+ * ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work.
+ */
+! write_no_eol_lnum = read_no_eol_lnum;
+
+ /* When reloading a buffer put the cursor at the first line that is
+ * different. */
+--- 2599,2609 ----
+
+ /*
+ * Trick: We remember if the last line of the read didn't have
+! * an eol even when 'binary' is off, for when writing it again with
+! * 'binary' on. This is required for
+ * ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work.
+ */
+! curbuf->b_no_eol_lnum = read_no_eol_lnum;
+
+ /* When reloading a buffer put the cursor at the first line that is
+ * different. */
+***************
+*** 2650,2662 ****
+ FALSE, NULL, eap);
+ if (msg_scrolled == n)
+ msg_scroll = m;
+! #ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+ return FAIL;
+! #endif
+ }
+ #endif
+
+ if (recoverymode && error)
+ return FAIL;
+ return OK;
+--- 2651,2667 ----
+ FALSE, NULL, eap);
+ if (msg_scrolled == n)
+ msg_scroll = m;
+! # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+ return FAIL;
+! # endif
+ }
+ #endif
+
++ /* Reset now, following writes should not omit the EOL. Also, the line
++ * number will become invalid because of edits. */
++ curbuf->b_no_eol_lnum = 0;
++
+ if (recoverymode && error)
+ return FAIL;
+ return OK;
+***************
+*** 4560,4566 ****
+ if (end == 0
+ || (lnum == end
+ && write_bin
+! && (lnum == write_no_eol_lnum
+ || (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol))))
+ {
+ ++lnum; /* written the line, count it */
+--- 4565,4571 ----
+ if (end == 0
+ || (lnum == end
+ && write_bin
+! && (lnum == buf->b_no_eol_lnum
+ || (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol))))
+ {
+ ++lnum; /* written the line, count it */
+***************
+*** 5086,5093 ****
+ {
+ aco_save_T aco;
+
+- write_no_eol_lnum = 0; /* in case it was set by the previous read */
+-
+ /*
+ * Apply POST autocommands.
+ * Careful: The autocommands may call buf_write() recursively!
+--- 5091,5096 ----
+***************
+*** 7256,7263 ****
+ write_lnum_adjust(offset)
+ linenr_T offset;
+ {
+! if (write_no_eol_lnum != 0) /* only if there is a missing eol */
+! write_no_eol_lnum += offset;
+ }
+
+ #if defined(TEMPDIRNAMES) || defined(PROTO)
+--- 7259,7266 ----
+ write_lnum_adjust(offset)
+ linenr_T offset;
+ {
+! if (curbuf->b_no_eol_lnum != 0) /* only if there is a missing eol */
+! curbuf->b_no_eol_lnum += offset;
+ }
+
+ #if defined(TEMPDIRNAMES) || defined(PROTO)
+*** ../vim-7.3.123/src/globals.h 2010-12-02 21:43:10.000000000 +0100
+--- src/globals.h 2011-02-15 17:06:06.000000000 +0100
+***************
+*** 1057,1066 ****
+ ;
+ #endif
+
+- EXTERN linenr_T write_no_eol_lnum INIT(= 0); /* non-zero lnum when last line
+- of next binary write should
+- not have an end-of-line */
+-
+ #ifdef FEAT_WINDOWS
+ EXTERN int postponed_split INIT(= 0); /* for CTRL-W CTRL-] command */
+ EXTERN int postponed_split_flags INIT(= 0); /* args for win_split() */
+--- 1057,1062 ----
+*** ../vim-7.3.123/src/os_unix.c 2011-02-09 18:47:36.000000000 +0100
+--- src/os_unix.c 2011-02-15 17:07:22.000000000 +0100
+***************
+*** 4245,4251 ****
+ * should not have one. */
+ if (lnum != curbuf->b_op_end.lnum
+ || !curbuf->b_p_bin
+! || (lnum != write_no_eol_lnum
+ && (lnum !=
+ curbuf->b_ml.ml_line_count
+ || curbuf->b_p_eol)))
+--- 4245,4251 ----
+ * should not have one. */
+ if (lnum != curbuf->b_op_end.lnum
+ || !curbuf->b_p_bin
+! || (lnum != curbuf->b_no_eol_lnum
+ && (lnum !=
+ curbuf->b_ml.ml_line_count
+ || curbuf->b_p_eol)))
+***************
+*** 4588,4597 ****
+ {
+ append_ga_line(&ga);
+ /* remember that the NL was missing */
+! write_no_eol_lnum = curwin->w_cursor.lnum;
+ }
+ else
+! write_no_eol_lnum = 0;
+ ga_clear(&ga);
+ }
+
+--- 4588,4597 ----
+ {
+ append_ga_line(&ga);
+ /* remember that the NL was missing */
+! curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
+ }
+ else
+! curbuf->b_no_eol_lnum = 0;
+ ga_clear(&ga);
+ }
+
+*** ../vim-7.3.123/src/version.c 2011-02-15 16:29:54.000000000 +0100
+--- src/version.c 2011-02-15 17:37:38.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 124,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+270. You are subscribed to a mailing list for every piece of software
+ you use.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.125
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.125
+Problem: MSVC: Problem with quotes in link argument.
+Solution: Escape backslashes and quotes. (Weasley)
+Files: src/Make_mvc.mak
+
+
+*** ../vim-7.3.124/src/Make_mvc.mak 2010-12-08 14:54:58.000000000 +0100
+--- src/Make_mvc.mak 2011-02-15 17:55:24.000000000 +0100
+***************
+*** 1159,1164 ****
+--- 1159,1168 ----
+ E0_CFLAGS = $(CFLAGS:\=\\)
+ E_CFLAGS = $(E0_CFLAGS:"=\")
+ # ") stop the string
++ # $LINKARGS2 may contain backslashes and double quotes, escape them both.
++ E0_LINKARGS2 = $(LINKARGS2:\=\\)
++ E_LINKARGS2 = $(E0_LINKARGS2:"=\")
++ # ") stop the string
+
+ $(PATHDEF_SRC): auto
+ @echo creating $(PATHDEF_SRC)
+***************
+*** 1167,1173 ****
+ @echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
+ @echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
+ @echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
+! @echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(LINKARGS2:\=\\)"; >> $(PATHDEF_SRC)
+ @echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
+ @echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
+
+--- 1171,1177 ----
+ @echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
+ @echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
+ @echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
+! @echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
+ @echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
+ @echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
+
+*** ../vim-7.3.124/src/version.c 2011-02-15 17:39:14.000000000 +0100
+--- src/version.c 2011-02-15 17:55:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 125,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+271. You collect hilarious signatures from all 250 mailing lists you
+ are subscribed to.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.126
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.126
+Problem: Compiler warning for signed pointer.
+Solution: Use unsigned int argument for sscanf().
+Files: src/blowfish.c
+
+
+*** ../vim-7.3.125/src/blowfish.c 2010-08-15 21:57:28.000000000 +0200
+--- src/blowfish.c 2010-12-17 19:58:18.000000000 +0100
+***************
+*** 413,418 ****
+--- 413,419 ----
+ int salt_len;
+ {
+ int i, j, keypos = 0;
++ unsigned u;
+ UINT32_T val, data_l, data_r;
+ char_u *key;
+ int keylen;
+***************
+*** 432,439 ****
+ }
+ for (i = 0; i < keylen; i++)
+ {
+! sscanf((char *)&key[i * 2], "%2x", &j);
+! key[i] = j;
+ }
+
+ mch_memmove(sbx, sbi, 4 * 4 * 256);
+--- 433,440 ----
+ }
+ for (i = 0; i < keylen; i++)
+ {
+! sscanf((char *)&key[i * 2], "%2x", &u);
+! key[i] = u;
+ }
+
+ mch_memmove(sbx, sbi, 4 * 4 * 256);
+*** ../vim-7.3.125/src/version.c 2011-02-15 18:06:11.000000000 +0100
+--- src/version.c 2011-02-25 14:40:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 126,
+ /**/
+
+--
+Why doesn't Tarzan have a beard?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.127
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.127
+Problem: Compiler complains about comma.
+Solution: Remove comma after last enum element.
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.126/src/ex_cmds2.c 2010-12-17 18:06:00.000000000 +0100
+--- src/ex_cmds2.c 2010-12-17 19:58:37.000000000 +0100
+***************
+*** 1115,1121 ****
+ static enum
+ {
+ PEXP_SUBCMD, /* expand :profile sub-commands */
+! PEXP_FUNC, /* expand :profile func {funcname} */
+ } pexpand_what;
+
+ static char *pexpand_cmds[] = {
+--- 1115,1121 ----
+ static enum
+ {
+ PEXP_SUBCMD, /* expand :profile sub-commands */
+! PEXP_FUNC /* expand :profile func {funcname} */
+ } pexpand_what;
+
+ static char *pexpand_cmds[] = {
+*** ../vim-7.3.126/src/version.c 2011-02-25 14:40:51.000000000 +0100
+--- src/version.c 2011-02-25 14:45:19.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 127,
+ /**/
+
+--
+ LAUNCELOT leaps into SHOT with a mighty cry and runs the GUARD through and
+ hacks him to the floor. Blood. Swashbuckling music (perhaps).
+ LAUNCELOT races through into the castle screaming.
+SECOND SENTRY: Hey!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.128
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.128
+Problem: Another compiler warning for signed pointer.
+Solution: Use unsigned int argument for sscanf().
+Files: src/mark.c
+
+
+*** ../vim-7.3.127/src/mark.c 2010-08-15 21:57:25.000000000 +0200
+--- src/mark.c 2010-12-17 20:00:05.000000000 +0100
+***************
+*** 1750,1756 ****
+ {
+ if (line[1] != NUL)
+ {
+! sscanf((char *)line + 2, "%ld %u", &pos.lnum, &pos.col);
+ switch (line[1])
+ {
+ case '"': curbuf->b_last_cursor = pos; break;
+--- 1750,1759 ----
+ {
+ if (line[1] != NUL)
+ {
+! unsigned u;
+!
+! sscanf((char *)line + 2, "%ld %u", &pos.lnum, &u);
+! pos.col = u;
+ switch (line[1])
+ {
+ case '"': curbuf->b_last_cursor = pos; break;
+*** ../vim-7.3.127/src/version.c 2011-02-25 14:46:06.000000000 +0100
+--- src/version.c 2011-02-25 15:10:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 128,
+ /**/
+
+--
+FATHER: Who are you?
+PRINCE: I'm ... your son ...
+FATHER: Not you.
+LAUNCELOT: I'm ... er ... Sir Launcelot, sir.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.129
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.129
+Problem: Using integer like a boolean.
+Solution: Nicer check for integer being non-zero.
+Files: src/tag.c
+
+
+*** ../vim-7.3.128/src/tag.c 2010-12-17 18:06:00.000000000 +0100
+--- src/tag.c 2010-12-17 17:49:35.000000000 +0100
+***************
+*** 204,210 ****
+ else
+ {
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview)
+ use_tagstack = FALSE;
+ else
+ #endif
+--- 204,210 ----
+ else
+ {
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview != 0)
+ use_tagstack = FALSE;
+ else
+ #endif
+***************
+*** 222,228 ****
+ ))
+ {
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview)
+ {
+ if (ptag_entry.tagname != NULL
+ && STRCMP(ptag_entry.tagname, tag) == 0)
+--- 222,228 ----
+ ))
+ {
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview != 0)
+ {
+ if (ptag_entry.tagname != NULL
+ && STRCMP(ptag_entry.tagname, tag) == 0)
+***************
+*** 278,284 ****
+ {
+ if (
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! g_do_tagpreview ? ptag_entry.tagname == NULL :
+ #endif
+ tagstacklen == 0)
+ {
+--- 278,284 ----
+ {
+ if (
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! g_do_tagpreview != 0 ? ptag_entry.tagname == NULL :
+ #endif
+ tagstacklen == 0)
+ {
+***************
+*** 361,367 ****
+ )
+ {
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview)
+ {
+ cur_match = ptag_entry.cur_match;
+ cur_fnum = ptag_entry.cur_fnum;
+--- 361,367 ----
+ )
+ {
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview != 0)
+ {
+ cur_match = ptag_entry.cur_match;
+ cur_fnum = ptag_entry.cur_fnum;
+***************
+*** 399,405 ****
+ prevtagstackidx = tagstackidx;
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview)
+ {
+ cur_match = ptag_entry.cur_match;
+ cur_fnum = ptag_entry.cur_fnum;
+--- 399,405 ----
+ prevtagstackidx = tagstackidx;
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview != 0)
+ {
+ cur_match = ptag_entry.cur_match;
+ cur_fnum = ptag_entry.cur_fnum;
+***************
+*** 437,443 ****
+ }
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview)
+ {
+ if (type != DT_SELECT && type != DT_JUMP)
+ {
+--- 437,443 ----
+ }
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview != 0)
+ {
+ if (type != DT_SELECT && type != DT_JUMP)
+ {
+***************
+*** 492,498 ****
+ if (use_tagstack)
+ name = tagstack[tagstackidx].tagname;
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! else if (g_do_tagpreview)
+ name = ptag_entry.tagname;
+ #endif
+ else
+--- 492,498 ----
+ if (use_tagstack)
+ name = tagstack[tagstackidx].tagname;
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! else if (g_do_tagpreview != 0)
+ name = ptag_entry.tagname;
+ #endif
+ else
+***************
+*** 620,626 ****
+ parse_match(matches[i], &tagp);
+ if (!new_tag && (
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! (g_do_tagpreview
+ && i == ptag_entry.cur_match) ||
+ #endif
+ (use_tagstack
+--- 620,626 ----
+ parse_match(matches[i], &tagp);
+ if (!new_tag && (
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! (g_do_tagpreview != 0
+ && i == ptag_entry.cur_match) ||
+ #endif
+ (use_tagstack
+***************
+*** 962,968 ****
+ ++tagstackidx;
+ }
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! else if (g_do_tagpreview)
+ {
+ ptag_entry.cur_match = cur_match;
+ ptag_entry.cur_fnum = cur_fnum;
+--- 962,968 ----
+ ++tagstackidx;
+ }
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! else if (g_do_tagpreview != 0)
+ {
+ ptag_entry.cur_match = cur_match;
+ ptag_entry.cur_fnum = cur_fnum;
+***************
+*** 3110,3116 ****
+ #endif
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview)
+ {
+ postponed_split = 0; /* don't split again below */
+ curwin_save = curwin; /* Save current window */
+--- 3110,3116 ----
+ #endif
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview != 0)
+ {
+ postponed_split = 0; /* don't split again below */
+ curwin_save = curwin; /* Save current window */
+***************
+*** 3148,3154 ****
+ /* A :ta from a help file will keep the b_help flag set. For ":ptag"
+ * we need to use the flag from the window where we came from. */
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview)
+ keep_help_flag = curwin_save->w_buffer->b_help;
+ else
+ #endif
+--- 3148,3154 ----
+ /* A :ta from a help file will keep the b_help flag set. For ":ptag"
+ * we need to use the flag from the window where we came from. */
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview != 0)
+ keep_help_flag = curwin_save->w_buffer->b_help;
+ else
+ #endif
+***************
+*** 3322,3328 ****
+ }
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview && curwin != curwin_save && win_valid(curwin_save))
+ {
+ /* Return cursor to where we were */
+ validate_cursor();
+--- 3322,3329 ----
+ }
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+! if (g_do_tagpreview != 0
+! && curwin != curwin_save && win_valid(curwin_save))
+ {
+ /* Return cursor to where we were */
+ validate_cursor();
+*** ../vim-7.3.128/src/version.c 2011-02-25 15:11:17.000000000 +0100
+--- src/version.c 2011-02-25 15:12:25.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 129,
+ /**/
+
+--
+PRINCE: He's come to rescue me, father.
+LAUNCELOT: (embarrassed) Well, let's not jump to conclusions ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.130
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.130
+Problem: Variable misplaced in #ifdef.
+Solution: Move clipboard_event_time outside of #ifdef.
+Files: src/gui_gtk_x11.c
+
+
+*** ../vim-7.3.129/src/gui_gtk_x11.c 2010-08-15 21:57:31.000000000 +0200
+--- src/gui_gtk_x11.c 2010-12-04 15:26:41.000000000 +0100
+***************
+*** 86,94 ****
+
+ #ifdef HAVE_X11_SUNKEYSYM_H
+ # include <X11/Sunkeysym.h>
+- static guint32 clipboard_event_time = CurrentTime;
+ #endif
+
+ /*
+ * Easy-to-use macro for multihead support.
+ */
+--- 86,95 ----
+
+ #ifdef HAVE_X11_SUNKEYSYM_H
+ # include <X11/Sunkeysym.h>
+ #endif
+
++ static guint32 clipboard_event_time = CurrentTime;
++
+ /*
+ * Easy-to-use macro for multihead support.
+ */
+***************
+*** 5419,5425 ****
+ }
+
+ #if defined(FEAT_NETBEANS_INTG)
+! /* Process the queued netbeans messages. */
+ netbeans_parse_messages();
+ #endif
+
+--- 5420,5426 ----
+ }
+
+ #if defined(FEAT_NETBEANS_INTG)
+! /* Process any queued netbeans messages. */
+ netbeans_parse_messages();
+ #endif
+
+*** ../vim-7.3.129/src/version.c 2011-02-25 15:13:43.000000000 +0100
+--- src/version.c 2011-02-25 15:15:02.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 130,
+ /**/
+
+--
+A vacation is a period of travel during which you find that you
+took twice as many clothes and half as much money as you needed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.131
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.131
+Problem: Including errno.h too often.
+Solution: Don't include errno.h in Unix header file.
+Files: src/os_unix.h
+
+
+*** ../vim-7.3.130/src/os_unix.h 2010-08-15 21:57:28.000000000 +0200
+--- src/os_unix.h 2010-12-17 20:05:34.000000000 +0100
+***************
+*** 184,193 ****
+
+ #define BASENAMELEN (MAXNAMLEN - 5)
+
+- #ifdef HAVE_ERRNO_H
+- # include <errno.h>
+- #endif
+-
+ #ifdef HAVE_PWD_H
+ # include <pwd.h>
+ #endif
+--- 184,189 ----
+*** ../vim-7.3.130/src/version.c 2011-02-25 15:15:43.000000000 +0100
+--- src/version.c 2011-02-25 15:16:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 131,
+ /**/
+
+--
+Overflow on /dev/null, please empty the bit bucket.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.132
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.132
+Problem: C++ style comments.
+Solution: Change to C comments.
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.131/src/if_python3.c 2010-11-16 19:25:56.000000000 +0100
+--- src/if_python3.c 2011-01-16 01:28:35.000000000 +0100
+***************
+*** 22,29 ****
+ * Adaptations to support both python3.x and python2.x
+ */
+
+! // uncomment this if used with the debug version of python
+! // #define Py_DEBUG
+
+ #include "vim.h"
+
+--- 22,29 ----
+ * Adaptations to support both python3.x and python2.x
+ */
+
+! /* uncomment this if used with the debug version of python */
+! /* #define Py_DEBUG */
+
+ #include "vim.h"
+
+***************
+*** 74,80 ****
+ #define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
+ #define PyString_FromString(repr) PyUnicode_FromString(repr)
+
+! #if defined(DYNAMIC_PYTHON3)
+
+ # ifndef WIN3264
+ # include <dlfcn.h>
+--- 74,80 ----
+ #define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
+ #define PyString_FromString(repr) PyUnicode_FromString(repr)
+
+! #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+
+ # ifndef WIN3264
+ # include <dlfcn.h>
+*** ../vim-7.3.131/src/version.c 2011-02-25 15:17:14.000000000 +0100
+--- src/version.c 2011-02-25 15:18:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 132,
+ /**/
+
+--
+ ** Hello and Welcome to the Psychiatric Hotline **
+If you are obsessive-compulsive, please press 1 repeatedly.
+If you are co-dependent, please ask someone to press 2.
+If you have multiple personalities, please press 3, 4, 5 and 6.
+If you are paranoid-delusional, we know who you are and what you want
+ - just stay on the line so we can trace the call.
+If you are schizophrenic, listen carefully and a little voice will
+ tell you which number to press next.
+If you are manic-depressive, it doesn't matter which number you press
+ - no one will answer.
+If you suffer from panic attacks, push every button you can find.
+If you are sane, please hold on - we have the rest of humanity on the
+ other line and they desparately want to ask you a few questions.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.133
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.133
+Problem: When using encryption it's not clear what method was used.
+Solution: In the file message show "blowfish" when using blowfish.
+Files: src/fileio.c
+
+
+*** ../vim-7.3.132/src/fileio.c 2011-02-15 17:39:14.000000000 +0100
+--- src/fileio.c 2011-02-25 16:30:19.000000000 +0100
+***************
+*** 250,255 ****
+--- 250,256 ----
+ #ifdef FEAT_CRYPT
+ char_u *cryptkey = NULL;
+ int did_ask_for_key = FALSE;
++ int crypt_method_used;
+ #endif
+ #ifdef FEAT_PERSISTENT_UNDO
+ context_sha256_T sha_ctx;
+***************
+*** 2289,2294 ****
+--- 2290,2296 ----
+ save_file_ff(curbuf); /* remember the current file format */
+
+ #ifdef FEAT_CRYPT
++ crypt_method_used = use_crypt_method;
+ if (cryptkey != NULL)
+ {
+ crypt_pop_state();
+***************
+*** 2483,2489 ****
+ #ifdef FEAT_CRYPT
+ if (cryptkey != NULL)
+ {
+! STRCAT(IObuff, _("[crypted]"));
+ c = TRUE;
+ }
+ #endif
+--- 2485,2494 ----
+ #ifdef FEAT_CRYPT
+ if (cryptkey != NULL)
+ {
+! if (crypt_method_used == 1)
+! STRCAT(IObuff, _("[blowfish]"));
+! else
+! STRCAT(IObuff, _("[crypted]"));
+ c = TRUE;
+ }
+ #endif
+***************
+*** 3199,3204 ****
+--- 3204,3212 ----
+ int write_undo_file = FALSE;
+ context_sha256_T sha_ctx;
+ #endif
++ #ifdef FEAT_CRYPT
++ int crypt_method_used;
++ #endif
+
+ if (fname == NULL || *fname == NUL) /* safety check */
+ return FAIL;
+***************
+*** 4728,4733 ****
+--- 4736,4742 ----
+ mch_set_acl(wfname, acl);
+ #endif
+ #ifdef FEAT_CRYPT
++ crypt_method_used = use_crypt_method;
+ if (wb_flags & FIO_ENCRYPTED)
+ crypt_pop_state();
+ #endif
+***************
+*** 4882,4888 ****
+ #ifdef FEAT_CRYPT
+ if (wb_flags & FIO_ENCRYPTED)
+ {
+! STRCAT(IObuff, _("[crypted]"));
+ c = TRUE;
+ }
+ #endif
+--- 4891,4900 ----
+ #ifdef FEAT_CRYPT
+ if (wb_flags & FIO_ENCRYPTED)
+ {
+! if (crypt_method_used == 1)
+! STRCAT(IObuff, _("[blowfish]"));
+! else
+! STRCAT(IObuff, _("[crypted]"));
+ c = TRUE;
+ }
+ #endif
+*** ../vim-7.3.132/src/version.c 2011-02-25 15:18:46.000000000 +0100
+--- src/version.c 2011-02-25 16:42:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 133,
+ /**/
+
+--
+ [clop clop]
+GUARD #1: Halt! Who goes there?
+ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of
+ Camelot. King of the Britons, defeator of the Saxons, sovereign of
+ all England!
+GUARD #1: Pull the other one!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.134
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.134
+Problem: Drag-n-drop doesn't work in KDE Dolphin.
+Solution: Add GDK_ACTION_MOVE flag. (Florian Degner)
+Files: src/gui_gtk_x11.c
+
+
+*** ../vim-7.3.133/src/gui_gtk_x11.c 2011-02-25 15:15:43.000000000 +0100
+--- src/gui_gtk_x11.c 2011-02-25 17:07:36.000000000 +0100
+***************
+*** 3094,3100 ****
+ gtk_drag_dest_set(gui.drawarea,
+ GTK_DEST_DEFAULT_ALL,
+ targets, n_targets,
+! GDK_ACTION_COPY);
+ }
+
+ /*
+--- 3094,3100 ----
+ gtk_drag_dest_set(gui.drawarea,
+ GTK_DEST_DEFAULT_ALL,
+ targets, n_targets,
+! GDK_ACTION_COPY | GDK_ACTION_MOVE);
+ }
+
+ /*
+*** ../vim-7.3.133/src/version.c 2011-02-25 16:52:13.000000000 +0100
+--- src/version.c 2011-02-25 17:08:35.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 134,
+ /**/
+
+--
+Proverb: A nightingale that forgets the lyrics is a hummingbird.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.135
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.135
+Problem: When there is no previous substitute pattern, the previous search
+ pattern is used. The other way around doesn't work.
+Solution: When there is no previous search pattern, use the previous
+ substitute pattern if possible. (Christian Brabandt)
+Files: src/search.c
+
+
+*** ../vim-7.3.134/src/search.c 2010-09-21 16:56:29.000000000 +0200
+--- src/search.c 2011-02-25 18:36:56.000000000 +0100
+***************
+*** 1161,1172 ****
+ {
+ if (spats[RE_SEARCH].pat == NULL) /* no previous pattern */
+ {
+! EMSG(_(e_noprevre));
+! retval = 0;
+! goto end_do_search;
+ }
+- /* make search_regcomp() use spats[RE_SEARCH].pat */
+- searchstr = (char_u *)"";
+ }
+
+ if (pat != NULL && *pat != NUL) /* look for (new) offset */
+--- 1161,1180 ----
+ {
+ if (spats[RE_SEARCH].pat == NULL) /* no previous pattern */
+ {
+! pat = spats[RE_SUBST].pat;
+! if (pat == NULL)
+! {
+! EMSG(_(e_noprevre));
+! retval = 0;
+! goto end_do_search;
+! }
+! searchstr = pat;
+! }
+! else
+! {
+! /* make search_regcomp() use spats[RE_SEARCH].pat */
+! searchstr = (char_u *)"";
+ }
+ }
+
+ if (pat != NULL && *pat != NUL) /* look for (new) offset */
+***************
+*** 4527,4533 ****
+ #if defined(FEAT_FIND_ID) || defined(PROTO)
+ /*
+ * Find identifiers or defines in included files.
+! * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
+ */
+ void
+ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
+--- 4535,4541 ----
+ #if defined(FEAT_FIND_ID) || defined(PROTO)
+ /*
+ * Find identifiers or defines in included files.
+! * If p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
+ */
+ void
+ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
+*** ../vim-7.3.134/src/version.c 2011-02-25 17:10:22.000000000 +0100
+--- src/version.c 2011-02-25 18:35:30.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 135,
+ /**/
+
+--
+A real patriot is the fellow who gets a parking ticket and rejoices
+that the system works.
+
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.136
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.136
+Problem: Duplicate include of assert.h.
+Solution: Remove it.
+Files: src/if_cscope.c
+
+
+*** ../vim-7.3.135/src/if_cscope.c 2010-12-30 11:41:05.000000000 +0100
+--- src/if_cscope.c 2011-03-03 15:01:15.000000000 +0100
+***************
+*** 13,19 ****
+
+ #if defined(FEAT_CSCOPE) || defined(PROTO)
+
+- #include <assert.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #if defined(UNIX)
+--- 13,18 ----
+*** ../vim-7.3.135/src/version.c 2011-02-25 18:38:29.000000000 +0100
+--- src/version.c 2011-03-03 14:59:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 136,
+ /**/
+
+--
+ARTHUR: You fight with the strength of many men, Sir knight.
+ I am Arthur, King of the Britons. [pause]
+ I seek the finest and the bravest knights in the land to join me
+ in my Court of Camelot. [pause]
+ You have proved yourself worthy; will you join me? [pause]
+ You make me sad. So be it. Come, Patsy.
+BLACK KNIGHT: None shall pass.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.137
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.137 (after 7.3.091)
+Problem: When 'lazyredraw' is set the screen may not be updated. (Ivan
+ Krasilnikov)
+Solution: Call update_screen() before waiting for input.
+Files: src/misc1.c, src/getchar.c
+
+
+*** ../vim-7.3.136/src/misc1.c 2011-01-22 00:11:42.000000000 +0100
+--- src/misc1.c 2011-03-03 14:02:02.000000000 +0100
+***************
+*** 3115,3121 ****
+--- 3115,3129 ----
+ continue;
+
+ if (n == KEYLEN_REMOVED) /* key code removed */
++ {
++ if (must_redraw)
++ {
++ /* Redrawing was postponed, do it now. */
++ update_screen(0);
++ setcursor(); /* put cursor back where it belongs */
++ }
+ continue;
++ }
+ if (n > 0) /* found a termcode: adjust length */
+ len = n;
+ if (len == 0) /* nothing typed yet */
+*** ../vim-7.3.136/src/getchar.c 2010-12-30 12:30:26.000000000 +0100
+--- src/getchar.c 2011-03-03 14:01:26.000000000 +0100
+***************
+*** 2710,2717 ****
+ * are still available. But when those available characters
+ * are part of a mapping, and we are going to do a blocking
+ * wait here. Need to update the screen to display the
+! * changed text so far. */
+! if ((State & INSERT) && advance && must_redraw != 0)
+ {
+ update_screen(0);
+ setcursor(); /* put cursor back where it belongs */
+--- 2710,2719 ----
+ * are still available. But when those available characters
+ * are part of a mapping, and we are going to do a blocking
+ * wait here. Need to update the screen to display the
+! * changed text so far. Also for when 'lazyredraw' is set and
+! * redrawing was postponed because there was something in the
+! * input buffer (e.g., termresponse). */
+! if (((State & INSERT) || p_lz) && advance && must_redraw != 0)
+ {
+ update_screen(0);
+ setcursor(); /* put cursor back where it belongs */
+*** ../vim-7.3.136/src/version.c 2011-03-03 15:01:25.000000000 +0100
+--- src/version.c 2011-03-03 15:02:45.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 137,
+ /**/
+
+--
+ARTHUR: What?
+BLACK KNIGHT: None shall pass.
+ARTHUR: I have no quarrel with you, good Sir knight, but I must cross
+ this bridge.
+BLACK KNIGHT: Then you shall die.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.138
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.138
+Problem: ":com" changes the multi-byte text of :echo. (Dimitar Dimitrov)
+Solution: Search for K_SPECIAL as a byte, not a character. (Ben Schmidt)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.137/src/ex_docmd.c 2011-01-17 19:50:01.000000000 +0100
+--- src/ex_docmd.c 2011-03-03 15:47:00.000000000 +0100
+***************
+*** 6054,6068 ****
+ end = vim_strchr(start + 1, '>');
+ if (buf != NULL)
+ {
+! ksp = vim_strchr(p, K_SPECIAL);
+! if (ksp != NULL && (start == NULL || ksp < start || end == NULL)
+ && ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
+ # ifdef FEAT_GUI
+ || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
+ # endif
+ ))
+ {
+! /* K_SPECIAL han been put in the buffer as K_SPECIAL
+ * KS_SPECIAL KE_FILLER, like for mappings, but
+ * do_cmdline() doesn't handle that, so convert it back.
+ * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
+--- 6054,6070 ----
+ end = vim_strchr(start + 1, '>');
+ if (buf != NULL)
+ {
+! for (ksp = p; *ksp != NUL && *ksp != K_SPECIAL; ++ksp)
+! ;
+! if (*ksp == K_SPECIAL
+! && (start == NULL || ksp < start || end == NULL)
+ && ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
+ # ifdef FEAT_GUI
+ || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
+ # endif
+ ))
+ {
+! /* K_SPECIAL has been put in the buffer as K_SPECIAL
+ * KS_SPECIAL KE_FILLER, like for mappings, but
+ * do_cmdline() doesn't handle that, so convert it back.
+ * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
+*** ../vim-7.3.137/src/version.c 2011-03-03 15:04:01.000000000 +0100
+--- src/version.c 2011-03-03 15:53:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 138,
+ /**/
+
+--
+ f y cn rd ths thn y cn hv grt jb n cmptr prgrmmng
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.139
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.139 (after 7.3.137)
+Problem: When 'lazyredraw' is set ":ver" output can't be read.
+Solution: Don't redraw the screen when at a prompt or command line.
+Files: src/getchar.c, src/message.c, src/misc1.c
+
+
+*** ../vim-7.3.138/src/getchar.c 2011-03-03 15:04:01.000000000 +0100
+--- src/getchar.c 2011-03-22 12:16:23.000000000 +0100
+***************
+*** 2713,2719 ****
+ * changed text so far. Also for when 'lazyredraw' is set and
+ * redrawing was postponed because there was something in the
+ * input buffer (e.g., termresponse). */
+! if (((State & INSERT) || p_lz) && advance && must_redraw != 0)
+ {
+ update_screen(0);
+ setcursor(); /* put cursor back where it belongs */
+--- 2713,2720 ----
+ * changed text so far. Also for when 'lazyredraw' is set and
+ * redrawing was postponed because there was something in the
+ * input buffer (e.g., termresponse). */
+! if (((State & INSERT) != 0 || p_lz) && (State & CMDLINE) == 0
+! && advance && must_redraw != 0 && !need_wait_return)
+ {
+ update_screen(0);
+ setcursor(); /* put cursor back where it belongs */
+*** ../vim-7.3.138/src/message.c 2011-02-01 17:12:20.000000000 +0100
+--- src/message.c 2011-03-22 13:06:24.000000000 +0100
+***************
+*** 879,894 ****
+ if (msg_silent != 0)
+ return;
+
+! /*
+! * With the global command (and some others) we only need one return at the
+! * end. Adjust cmdline_row to avoid the next message overwriting the last one.
+! * When inside vgetc(), we can't wait for a typed character at all.
+! */
+ if (vgetc_busy > 0)
+ return;
+ if (no_wait_return)
+ {
+- need_wait_return = TRUE;
+ if (!exmode_active)
+ cmdline_row = msg_row;
+ return;
+--- 879,895 ----
+ if (msg_silent != 0)
+ return;
+
+! /*
+! * When inside vgetc(), we can't wait for a typed character at all.
+! * With the global command (and some others) we only need one return at
+! * the end. Adjust cmdline_row to avoid the next message overwriting the
+! * last one.
+! */
+ if (vgetc_busy > 0)
+ return;
++ need_wait_return = TRUE;
+ if (no_wait_return)
+ {
+ if (!exmode_active)
+ cmdline_row = msg_row;
+ return;
+*** ../vim-7.3.138/src/misc1.c 2011-03-03 15:04:01.000000000 +0100
+--- src/misc1.c 2011-03-22 12:15:26.000000000 +0100
+***************
+*** 3116,3122 ****
+
+ if (n == KEYLEN_REMOVED) /* key code removed */
+ {
+! if (must_redraw)
+ {
+ /* Redrawing was postponed, do it now. */
+ update_screen(0);
+--- 3116,3122 ----
+
+ if (n == KEYLEN_REMOVED) /* key code removed */
+ {
+! if (must_redraw != 0 && !need_wait_return && (State & CMDLINE) == 0)
+ {
+ /* Redrawing was postponed, do it now. */
+ update_screen(0);
+*** ../vim-7.3.138/src/version.c 2011-03-03 15:54:45.000000000 +0100
+--- src/version.c 2011-03-22 13:06:33.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 139,
+ /**/
+
+--
+"Software is like sex... it's better when it's free."
+ -- Linus Torvalds, initiator of the free Linux OS
+Makes me wonder what FSF stands for...?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.140
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.140
+Problem: Crash when drawing the "$" at end-of-line for list mode just after
+ the window border and 'cursorline' is set.
+Solution: Don't check for 'cursorline'. (Quentin Carbonneaux)
+Files: src/screen.c
+
+
+*** ../vim-7.3.139/src/screen.c 2011-02-09 17:09:26.000000000 +0100
+--- src/screen.c 2011-03-22 13:29:04.000000000 +0100
+***************
+*** 5099,5109 ****
+ #ifdef FEAT_DIFF
+ || filler_todo > 0
+ #endif
+! || (wp->w_p_list && lcs_eol != NUL && p_extra != at_end_str
+! #ifdef FEAT_SYN_HL
+! && !wp->w_p_cul
+! #endif
+! )
+ || (n_extra != 0 && (c_extra != NUL || *p_extra != NUL)))
+ )
+ {
+--- 5099,5105 ----
+ #ifdef FEAT_DIFF
+ || filler_todo > 0
+ #endif
+! || (wp->w_p_list && lcs_eol != NUL && p_extra != at_end_str)
+ || (n_extra != 0 && (c_extra != NUL || *p_extra != NUL)))
+ )
+ {
+*** ../vim-7.3.139/src/version.c 2011-03-22 13:07:19.000000000 +0100
+--- src/version.c 2011-03-22 13:27:26.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 140,
+ /**/
+
+--
+Lawmakers made it obligatory for everybody to take at least one bath
+each week -- on Saturday night.
+ [real standing law in Vermont, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.141
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.141
+Problem: When a key code is not set get a confusing error message.
+Solution: Change the error message to say the key code is not set.
+Files: src/option.c, runtime/doc/options.txt
+
+
+*** ../vim-7.3.140/src/option.c 2011-01-22 00:11:42.000000000 +0100
+--- src/option.c 2011-03-22 14:25:52.000000000 +0100
+***************
+*** 4352,4358 ****
+ p = find_termcode(key_name);
+ if (p == NULL)
+ {
+! errmsg = (char_u *)N_("E518: Unknown option");
+ goto skip;
+ }
+ else
+--- 4352,4358 ----
+ p = find_termcode(key_name);
+ if (p == NULL)
+ {
+! errmsg = (char_u *)N_("E846: Key code not set");
+ goto skip;
+ }
+ else
+***************
+*** 4700,4707 ****
+ || s[i] == ','
+ || s[i] == NUL))
+ break;
+! /* Count backspaces. Only a comma with an
+! * even number of backspaces before it is
+ * recognized as a separator */
+ if (s > origval && s[-1] == '\\')
+ ++bs;
+--- 4700,4707 ----
+ || s[i] == ','
+ || s[i] == NUL))
+ break;
+! /* Count backslashes. Only a comma with an
+! * even number of backslashes before it is
+ * recognized as a separator */
+ if (s > origval && s[-1] == '\\')
+ ++bs;
+*** ../vim-7.3.140/runtime/doc/options.txt 2010-12-02 21:43:10.000000000 +0100
+--- runtime/doc/options.txt 2011-03-22 14:32:14.000000000 +0100
+***************
+*** 150,155 ****
+--- 150,167 ----
+ (the ^[ is a real <Esc> here, use CTRL-V <Esc> to enter it)
+ The advantage over a mapping is that it works in all situations.
+
++ You can define any key codes, e.g.: >
++ :set t_xy=^[foo;
++ There is no warning for using a name that isn't recognized. You can map these
++ codes as you like: >
++ :map <t_xy> something
++ < *E846*
++ When a key code is not set, it's like it does not exist. Trying to get its
++ value will result in an error: >
++ :set t_kb=
++ :set t_kb
++ E846: Key code not set: t_kb
++
+ The t_xx options cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+*** ../vim-7.3.140/src/version.c 2011-03-22 13:29:20.000000000 +0100
+--- src/version.c 2011-03-22 14:32:59.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 141,
+ /**/
+
+--
+"I know that there are people who don't love their fellow man,
+and I hate those people!" - Tom Lehrer
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.142
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.142
+Problem: Python stdout doesn't have a flush() method, causing an import to
+ fail.
+Solution: Add a dummy flush() method. (Tobias Columbus)
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.141/src/if_py_both.h 2010-10-27 12:17:54.000000000 +0200
+--- src/if_py_both.h 2011-03-22 15:37:43.000000000 +0100
+***************
+*** 33,38 ****
+--- 33,39 ----
+
+ static PyObject *OutputWrite(PyObject *, PyObject *);
+ static PyObject *OutputWritelines(PyObject *, PyObject *);
++ static PyObject *OutputFlush(PyObject *, PyObject *);
+
+ /* Function to write a line, points to either msg() or emsg(). */
+ typedef void (*writefn)(char_u *);
+***************
+*** 47,55 ****
+
+ static struct PyMethodDef OutputMethods[] = {
+ /* name, function, calling, documentation */
+! {"write", OutputWrite, 1, "" },
+! {"writelines", OutputWritelines, 1, "" },
+! { NULL, NULL, 0, NULL }
+ };
+
+ #define PyErr_SetVim(str) PyErr_SetString(VimError, str)
+--- 48,57 ----
+
+ static struct PyMethodDef OutputMethods[] = {
+ /* name, function, calling, documentation */
+! {"write", OutputWrite, 1, ""},
+! {"writelines", OutputWritelines, 1, ""},
+! {"flush", OutputFlush, 1, ""},
+! { NULL, NULL, 0, NULL}
+ };
+
+ #define PyErr_SetVim(str) PyErr_SetString(VimError, str)
+***************
+*** 123,128 ****
+--- 125,139 ----
+ return Py_None;
+ }
+
++ static PyObject *
++ OutputFlush(PyObject *self UNUSED, PyObject *args UNUSED)
++ {
++ /* do nothing */
++ Py_INCREF(Py_None);
++ return Py_None;
++ }
++
++
+ /* Buffer IO, we write one whole line at a time. */
+ static garray_T io_ga = {0, 0, 1, 80, NULL};
+ static writefn old_fn = NULL;
+*** ../vim-7.3.141/src/version.c 2011-03-22 14:35:01.000000000 +0100
+--- src/version.c 2011-03-22 15:45:38.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 142,
+ /**/
+
+--
+Living on Earth includes an annual free trip around the Sun.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.143
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.143
+Problem: Memfile is not tested sufficiently. Looking up blocks in a
+ memfile is slow when there are many blocks.
+Solution: Add high level test and unittest. Adjust the number of hash
+ buckets to the number of blocks. (Ivan Krasilnikov)
+Files: Filelist, src/Makefile, src/main.c, src/memfile.c,
+ src/memfile_test.c src/structs.h src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+ src/testdir/Make_os2.mak, src/testdir/Make_vms.mak,
+ src/testdir/Makefile, src/testdir/test77.in, src/testdir/test77.ok
+
+
+*** ../vim-7.3.142/Filelist 2010-08-15 21:57:20.000000000 +0200
+--- Filelist 2011-03-22 17:39:22.000000000 +0100
+***************
+*** 39,44 ****
+--- 39,45 ----
+ src/mark.c \
+ src/mbyte.c \
+ src/memfile.c \
++ src/memfile_test.c \
+ src/memline.c \
+ src/menu.c \
+ src/message.c \
+***************
+*** 686,691 ****
+--- 687,694 ----
+ runtime/tutor/tutor.utf-8 \
+ runtime/tutor/tutor.?? \
+ runtime/tutor/tutor.??.* \
++ runtime/tutor/tutor.bar \
++ runtime/tutor/tutor.bar.* \
+ runtime/spell/README.txt \
+ runtime/spell/??/*.diff \
+ runtime/spell/??/main.aap \
+*** ../vim-7.3.142/src/Makefile 2011-02-15 15:27:00.000000000 +0100
+--- src/Makefile 2011-03-22 18:07:25.000000000 +0100
+***************
+*** 561,567 ****
+ #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
+
+ # Use this with GCC to check for mistakes, unused arguments, etc.
+! #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1 -DU_DEBUG
+ #CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG
+ #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
+ #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
+--- 561,567 ----
+ #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
+
+ # Use this with GCC to check for mistakes, unused arguments, etc.
+! #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1
+ #CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG
+ #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
+ #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
+***************
+*** 594,601 ****
+
+ # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof.
+ # Might not work with GUI or Perl.
+! # For unknown reasons adding "-lc" fixes a linking problem with GCC. That's
+! # probably a bug in the "-pg" implementation.
+ # Need to recompile everything after changing this: "make clean" "make".
+ #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING
+ #PROFILE_LIBS = -pg
+--- 594,602 ----
+
+ # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof.
+ # Might not work with GUI or Perl.
+! # For unknown reasons adding "-lc" fixes a linking problem with some versions
+! # of GCC. That's probably a bug in the "-pg" implementation.
+! # After running Vim see the profile result with: gmon vim gmon.out | vim -
+ # Need to recompile everything after changing this: "make clean" "make".
+ #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING
+ #PROFILE_LIBS = -pg
+***************
+*** 606,613 ****
+ # Configuration is in the .ccmalloc or ~/.ccmalloc file.
+ # Doesn't work very well, since memory linked to from global variables
+ # (in libraries) is also marked as leaked memory.
+! #PROFILE_CFLAGS = -DEXITFREE
+! #PROFILE_LIBS = -lccmalloc
+
+ #####################################################
+ ### Specific systems, check if yours is listed! ### {{{
+--- 607,614 ----
+ # Configuration is in the .ccmalloc or ~/.ccmalloc file.
+ # Doesn't work very well, since memory linked to from global variables
+ # (in libraries) is also marked as leaked memory.
+! #LEAK_CFLAGS = -DEXITFREE
+! #LEAK_LIBS = -lccmalloc
+
+ #####################################################
+ ### Specific systems, check if yours is listed! ### {{{
+***************
+*** 1329,1335 ****
+ PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
+ POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS)
+
+! ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
+
+ # Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together
+ # with "-E".
+--- 1330,1336 ----
+ PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
+ POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS)
+
+! ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(LEAK_CFLAGS) $(POST_DEFS)
+
+ # Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together
+ # with "-E".
+***************
+*** 1358,1364 ****
+ $(PYTHON3_LIBS) \
+ $(TCL_LIBS) \
+ $(RUBY_LIBS) \
+! $(PROFILE_LIBS)
+
+ # abbreviations
+ DEST_BIN = $(DESTDIR)$(BINDIR)
+--- 1359,1366 ----
+ $(PYTHON3_LIBS) \
+ $(TCL_LIBS) \
+ $(RUBY_LIBS) \
+! $(PROFILE_LIBS) \
+! $(LEAK_LIBS)
+
+ # abbreviations
+ DEST_BIN = $(DESTDIR)$(BINDIR)
+***************
+*** 1480,1487 ****
+ if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \
+ gui_beval.c workshop.c wsdebug.c integration.c netbeans.c
+
+ # All sources, also the ones that are not configured
+! ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(EXTRA_SRC)
+
+ # Which files to check with lint. Select one of these three lines. ALL_SRC
+ # checks more, but may not work well for checking a GUI that wasn't configured.
+--- 1482,1496 ----
+ if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \
+ gui_beval.c workshop.c wsdebug.c integration.c netbeans.c
+
++ # Unittest files
++ MEMFILE_TEST_SRC = memfile_test.c
++ MEMFILE_TEST_TARGET = memfile_test$(EXEEXT)
++
++ UNITTEST_SRC = $(MEMFILE_TEST_SRC)
++ UNITTEST_TARGETS = $(MEMFILE_TEST_TARGET)
++
+ # All sources, also the ones that are not configured
+! ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
+
+ # Which files to check with lint. Select one of these three lines. ALL_SRC
+ # checks more, but may not work well for checking a GUI that wasn't configured.
+***************
+*** 1492,1498 ****
+ #LINT_SRC = $(ALL_SRC)
+ #LINT_SRC = $(BASIC_SRC)
+
+! OBJ = \
+ objects/buffer.o \
+ objects/blowfish.o \
+ objects/charset.o \
+--- 1501,1507 ----
+ #LINT_SRC = $(ALL_SRC)
+ #LINT_SRC = $(BASIC_SRC)
+
+! OBJ_COMMON = \
+ objects/buffer.o \
+ objects/blowfish.o \
+ objects/charset.o \
+***************
+*** 1513,1522 ****
+ $(HANGULIN_OBJ) \
+ objects/if_cscope.o \
+ objects/if_xcmdsrv.o \
+- objects/main.o \
+ objects/mark.o \
+! objects/memfile.o \
+! objects/memline.o \
+ objects/menu.o \
+ objects/message.o \
+ objects/misc1.o \
+--- 1522,1529 ----
+ $(HANGULIN_OBJ) \
+ objects/if_cscope.o \
+ objects/if_xcmdsrv.o \
+ objects/mark.o \
+! objects/memline.o \
+ objects/menu.o \
+ objects/message.o \
+ objects/misc1.o \
+***************
+*** 1541,1546 ****
+--- 1548,1554 ----
+ objects/term.o \
+ objects/ui.o \
+ objects/undo.o \
++ objects/version.o \
+ objects/window.o \
+ $(GUI_OBJ) \
+ $(LUA_OBJ) \
+***************
+*** 1555,1560 ****
+--- 1563,1575 ----
+ $(NETBEANS_OBJ) \
+ $(WSDEBUG_OBJ)
+
++ OBJ = $(OBJ_COMMON) \
++ objects/main.o \
++ objects/memfile.o \
++
++ MEMFILE_TEST_OBJ = $(OBJ_COMMON) \
++ objects/memfile_test.o
++
+ PRO_AUTO = \
+ blowfish.pro \
+ buffer.pro \
+***************
+*** 1700,1706 ****
+ $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
+ $(CCC) version.c -o objects/version.o
+ @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
+! -o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \
+ MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
+ sh $(srcdir)/link.sh
+
+--- 1715,1721 ----
+ $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
+ $(CCC) version.c -o objects/version.o
+ @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
+! -o $(VIMTARGET) $(OBJ) $(ALL_LIBS)" \
+ MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
+ sh $(srcdir)/link.sh
+
+***************
+*** 1825,1830 ****
+--- 1840,1854 ----
+ ln -s $(VIMTARGET) vim; \
+ fi
+ cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG)
++ $(MAKE) -f Makefile unittest
++
++ unittesttargets:
++ $(MAKE) -f Makefile $(UNITTEST_TARGETS)
++
++ unittest unittests: $(UNITTEST_TARGETS)
++ @for t in $(UNITTEST_TARGETS); do \
++ ./$$t || exit 1; echo $$t passed; \
++ done
+
+ testclean:
+ cd testdir; $(MAKE) -f Makefile clean
+***************
+*** 1832,1837 ****
+--- 1856,1872 ----
+ cd $(PODIR); $(MAKE) checkclean; \
+ fi
+
++ # Unittests
++ # It's build just like Vim to satisfy all dependencies.
++ $(MEMFILE_TEST_TARGET): auto/config.mk objects $(MEMFILE_TEST_OBJ)
++ $(CCC) version.c -o objects/version.o
++ @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
++ -o $(MEMFILE_TEST_TARGET) $(MEMFILE_TEST_OBJ) $(ALL_LIBS)" \
++ MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
++ sh $(srcdir)/link.sh
++
++ # install targets
++
+ install: $(GUI_INSTALL)
+
+ install_normal: installvim installtools $(INSTALL_LANGS) install-icons
+***************
+*** 2265,2270 ****
+--- 2300,2306 ----
+ -rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o
+ -rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c
+ -rm -f conftest* *~ auto/link.sed
++ -rm -f $(UNITTEST_TARGETS)
+ -rm -f runtime pixmaps
+ -rm -rf $(APPDIR)
+ -rm -rf mzscheme_base.c
+***************
+*** 2559,2564 ****
+--- 2595,2603 ----
+ objects/memfile.o: memfile.c
+ $(CCC) -o $@ memfile.c
+
++ objects/memfile_test.o: memfile_test.c
++ $(CCC) -o $@ memfile_test.c
++
+ objects/memline.o: memline.c
+ $(CCC) -o $@ memline.c
+
+***************
+*** 2877,2883 ****
+ objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+ ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+ gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+! arabic.h if_mzsch.h os_unixx.h
+ objects/pathdef.o: auto/pathdef.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+--- 2916,2922 ----
+ objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+ ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+ gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+! arabic.h os_unixx.h
+ objects/pathdef.o: auto/pathdef.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+***************
+*** 3016,3021 ****
+--- 3055,3064 ----
+ objects/pty.o: pty.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
+ keymap.h term.h macros.h option.h structs.h regexp.h gui.h gui_beval.h \
+ proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h arabic.h
++ objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
++ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \
++ structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h \
++ proto.h globals.h farsi.h arabic.h farsi.c arabic.c memfile.c
+ objects/hangulin.o: hangulin.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+***************
+*** 3027,3033 ****
+ objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+! globals.h farsi.h arabic.h if_mzsch.h mzscheme_base.c
+ objects/if_perl.o: auto/if_perl.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+--- 3070,3076 ----
+ objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+! globals.h farsi.h arabic.h if_mzsch.h
+ objects/if_perl.o: auto/if_perl.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+***************
+*** 3048,3054 ****
+ ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+ gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+ arabic.h
+! objects/if_ruby.o: if_ruby.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+ ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+ gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+ arabic.h version.h
+--- 3091,3097 ----
+ ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+ gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+ arabic.h
+! objects/if_ruby.o: if_ruby.c auto/config.h vim.h feature.h os_unix.h auto/osdef.h \
+ ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+ gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+ arabic.h version.h
+*** ../vim-7.3.142/src/main.c 2011-02-15 16:29:54.000000000 +0100
+--- src/main.c 2011-03-18 13:19:48.000000000 +0100
+***************
+*** 92,128 ****
+ #define EDIT_TAG 3 /* tag name argument given, use tagname */
+ #define EDIT_QF 4 /* start in quickfix mode */
+
+! #if defined(UNIX) || defined(VMS)
+ static int file_owned __ARGS((char *fname));
+ #endif
+ static void mainerr __ARGS((int, char_u *));
+ static void main_msg __ARGS((char *s));
+ static void usage __ARGS((void));
+ static int get_number_arg __ARGS((char_u *p, int *idx, int def));
+! #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ static void init_locale __ARGS((void));
+! #endif
+ static void parse_command_name __ARGS((mparm_T *parmp));
+ static void early_arg_scan __ARGS((mparm_T *parmp));
+ static void command_line_scan __ARGS((mparm_T *parmp));
+ static void check_tty __ARGS((mparm_T *parmp));
+ static void read_stdin __ARGS((void));
+ static void create_windows __ARGS((mparm_T *parmp));
+! #ifdef FEAT_WINDOWS
+ static void edit_buffers __ARGS((mparm_T *parmp));
+! #endif
+ static void exe_pre_commands __ARGS((mparm_T *parmp));
+ static void exe_commands __ARGS((mparm_T *parmp));
+ static void source_startup_scripts __ARGS((mparm_T *parmp));
+ static void main_start_gui __ARGS((void));
+! #if defined(HAS_SWAP_EXISTS_ACTION)
+ static void check_swap_exists_action __ARGS((void));
+! #endif
+! #ifdef FEAT_CLIENTSERVER
+ static void exec_on_server __ARGS((mparm_T *parmp));
+ static void prepare_server __ARGS((mparm_T *parmp));
+ static void cmdsrv_main __ARGS((int *argc, char **argv, char_u *serverName_arg, char_u **serverStr));
+ static char_u *serverMakeName __ARGS((char_u *arg, char *cmd));
+ #endif
+
+
+--- 92,130 ----
+ #define EDIT_TAG 3 /* tag name argument given, use tagname */
+ #define EDIT_QF 4 /* start in quickfix mode */
+
+! #if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
+ static int file_owned __ARGS((char *fname));
+ #endif
+ static void mainerr __ARGS((int, char_u *));
++ #ifndef NO_VIM_MAIN
+ static void main_msg __ARGS((char *s));
+ static void usage __ARGS((void));
+ static int get_number_arg __ARGS((char_u *p, int *idx, int def));
+! # if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ static void init_locale __ARGS((void));
+! # endif
+ static void parse_command_name __ARGS((mparm_T *parmp));
+ static void early_arg_scan __ARGS((mparm_T *parmp));
+ static void command_line_scan __ARGS((mparm_T *parmp));
+ static void check_tty __ARGS((mparm_T *parmp));
+ static void read_stdin __ARGS((void));
+ static void create_windows __ARGS((mparm_T *parmp));
+! # ifdef FEAT_WINDOWS
+ static void edit_buffers __ARGS((mparm_T *parmp));
+! # endif
+ static void exe_pre_commands __ARGS((mparm_T *parmp));
+ static void exe_commands __ARGS((mparm_T *parmp));
+ static void source_startup_scripts __ARGS((mparm_T *parmp));
+ static void main_start_gui __ARGS((void));
+! # if defined(HAS_SWAP_EXISTS_ACTION)
+ static void check_swap_exists_action __ARGS((void));
+! # endif
+! # if defined(FEAT_CLIENTSERVER) || defined(PROTO)
+ static void exec_on_server __ARGS((mparm_T *parmp));
+ static void prepare_server __ARGS((mparm_T *parmp));
+ static void cmdsrv_main __ARGS((int *argc, char **argv, char_u *serverName_arg, char_u **serverStr));
+ static char_u *serverMakeName __ARGS((char_u *arg, char *cmd));
++ # endif
+ #endif
+
+
+***************
+*** 145,151 ****
+ #define ME_INVALID_ARG 5
+ };
+
+! #ifndef PROTO /* don't want a prototype for main() */
+ int
+ # ifdef VIMDLL
+ _export
+--- 147,154 ----
+ #define ME_INVALID_ARG 5
+ };
+
+! #ifndef NO_VIM_MAIN /* skip this for unittests */
+! #ifndef PROTO /* don't want a prototype for main() */
+ int
+ # ifdef VIMDLL
+ _export
+***************
+*** 966,971 ****
+--- 969,975 ----
+ return 0;
+ }
+ #endif /* PROTO */
++ #endif /* NO_VIM_MAIN */
+
+ /*
+ * Main loop: Execute Normal mode commands until exiting Vim.
+***************
+*** 1430,1435 ****
+--- 1434,1440 ----
+ mch_exit(exitval);
+ }
+
++ #ifndef NO_VIM_MAIN
+ /*
+ * Get a (optional) count for a Vim argument.
+ */
+***************
+*** 2994,2999 ****
+--- 2999,3006 ----
+ #endif
+ }
+
++ #endif /* NO_VIM_MAIN */
++
+ /*
+ * Get an environment variable, and execute it as Ex commands.
+ * Returns FAIL if the environment variable was not executed, OK otherwise.
+***************
+*** 3033,3039 ****
+ return FAIL;
+ }
+
+! #if defined(UNIX) || defined(VMS)
+ /*
+ * Return TRUE if we are certain the user owns the file "fname".
+ * Used for ".vimrc" and ".exrc".
+--- 3040,3046 ----
+ return FAIL;
+ }
+
+! #if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
+ /*
+ * Return TRUE if we are certain the user owns the file "fname".
+ * Used for ".vimrc" and ".exrc".
+***************
+*** 3091,3096 ****
+--- 3098,3104 ----
+ mainerr(ME_ARG_MISSING, str);
+ }
+
++ #ifndef NO_VIM_MAIN
+ /*
+ * print a message with three spaces prepended and '\n' appended.
+ */
+***************
+*** 3311,3316 ****
+--- 3319,3326 ----
+ }
+ #endif
+
++ #endif
++
+ #if defined(STARTUPTIME) || defined(PROTO)
+ static void time_diff __ARGS((struct timeval *then, struct timeval *now));
+
+***************
+*** 3420,3426 ****
+
+ #endif
+
+! #if defined(FEAT_CLIENTSERVER) || defined(PROTO)
+
+ /*
+ * Common code for the X command server and the Win32 command server.
+--- 3430,3436 ----
+
+ #endif
+
+! #if (defined(FEAT_CLIENTSERVER) && !defined(NO_VIM_MAIN)) || defined(PROTO)
+
+ /*
+ * Common code for the X command server and the Win32 command server.
+***************
+*** 3888,3893 ****
+--- 3898,3929 ----
+ }
+
+ /*
++ * Make our basic server name: use the specified "arg" if given, otherwise use
++ * the tail of the command "cmd" we were started with.
++ * Return the name in allocated memory. This doesn't include a serial number.
++ */
++ static char_u *
++ serverMakeName(arg, cmd)
++ char_u *arg;
++ char *cmd;
++ {
++ char_u *p;
++
++ if (arg != NULL && *arg != NUL)
++ p = vim_strsave_up(arg);
++ else
++ {
++ p = vim_strsave_up(gettail((char_u *)cmd));
++ /* Remove .exe or .bat from the name. */
++ if (p != NULL && vim_strchr(p, '.') != NULL)
++ *vim_strchr(p, '.') = NUL;
++ }
++ return p;
++ }
++ #endif /* FEAT_CLIENTSERVER */
++
++ #if defined(FEAT_CLIENTSERVER) || defined(PROTO)
++ /*
+ * Replace termcodes such as <CR> and insert as key presses if there is room.
+ */
+ void
+***************
+*** 3998,4029 ****
+ # endif
+ return res;
+ }
+!
+!
+! /*
+! * Make our basic server name: use the specified "arg" if given, otherwise use
+! * the tail of the command "cmd" we were started with.
+! * Return the name in allocated memory. This doesn't include a serial number.
+! */
+! static char_u *
+! serverMakeName(arg, cmd)
+! char_u *arg;
+! char *cmd;
+! {
+! char_u *p;
+!
+! if (arg != NULL && *arg != NUL)
+! p = vim_strsave_up(arg);
+! else
+! {
+! p = vim_strsave_up(gettail((char_u *)cmd));
+! /* Remove .exe or .bat from the name. */
+! if (p != NULL && vim_strchr(p, '.') != NULL)
+! *vim_strchr(p, '.') = NUL;
+! }
+! return p;
+! }
+! #endif /* FEAT_CLIENTSERVER */
+
+ /*
+ * When FEAT_FKMAP is defined, also compile the Farsi source code.
+--- 4034,4040 ----
+ # endif
+ return res;
+ }
+! #endif
+
+ /*
+ * When FEAT_FKMAP is defined, also compile the Farsi source code.
+*** ../vim-7.3.142/src/memfile.c 2010-12-17 18:06:00.000000000 +0100
+--- src/memfile.c 2011-03-03 18:47:39.000000000 +0100
+***************
+*** 84,89 ****
+--- 84,96 ----
+ static int mf_write_block __ARGS((memfile_T *mfp, bhdr_T *hp, off_t offset, unsigned size));
+ static int mf_trans_add __ARGS((memfile_T *, bhdr_T *));
+ static void mf_do_open __ARGS((memfile_T *, char_u *, int));
++ static void mf_hash_init __ARGS((mf_hashtab_T *));
++ static void mf_hash_free __ARGS((mf_hashtab_T *));
++ static void mf_hash_free_all __ARGS((mf_hashtab_T *));
++ static mf_hashitem_T *mf_hash_find __ARGS((mf_hashtab_T *, blocknr_T));
++ static void mf_hash_add_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
++ static void mf_hash_rem_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
++ static int mf_hash_grow __ARGS((mf_hashtab_T *));
+
+ /*
+ * The functions for using a memfile:
+***************
+*** 119,125 ****
+ int flags;
+ {
+ memfile_T *mfp;
+- int i;
+ off_t size;
+ #if defined(STATFS) && defined(UNIX) && !defined(__QNX__)
+ # define USE_FSTATFS
+--- 126,131 ----
+***************
+*** 152,162 ****
+ mfp->mf_used_last = NULL;
+ mfp->mf_dirty = FALSE;
+ mfp->mf_used_count = 0;
+! for (i = 0; i < MEMHASHSIZE; ++i)
+! {
+! mfp->mf_hash[i] = NULL; /* hash lists are empty */
+! mfp->mf_trans[i] = NULL; /* trans lists are empty */
+! }
+ mfp->mf_page_size = MEMFILE_PAGE_SIZE;
+ #ifdef FEAT_CRYPT
+ mfp->mf_old_key = NULL;
+--- 158,165 ----
+ mfp->mf_used_last = NULL;
+ mfp->mf_dirty = FALSE;
+ mfp->mf_used_count = 0;
+! mf_hash_init(&mfp->mf_hash);
+! mf_hash_init(&mfp->mf_trans);
+ mfp->mf_page_size = MEMFILE_PAGE_SIZE;
+ #ifdef FEAT_CRYPT
+ mfp->mf_old_key = NULL;
+***************
+*** 242,249 ****
+ int del_file;
+ {
+ bhdr_T *hp, *nextp;
+- NR_TRANS *tp, *tpnext;
+- int i;
+
+ if (mfp == NULL) /* safety check */
+ return;
+--- 245,250 ----
+***************
+*** 263,274 ****
+ }
+ while (mfp->mf_free_first != NULL) /* free entries in free list */
+ vim_free(mf_rem_free(mfp));
+! for (i = 0; i < MEMHASHSIZE; ++i) /* free entries in trans lists */
+! for (tp = mfp->mf_trans[i]; tp != NULL; tp = tpnext)
+! {
+! tpnext = tp->nt_next;
+! vim_free(tp);
+! }
+ vim_free(mfp->mf_fname);
+ vim_free(mfp->mf_ffname);
+ vim_free(mfp);
+--- 264,271 ----
+ }
+ while (mfp->mf_free_first != NULL) /* free entries in free list */
+ vim_free(mf_rem_free(mfp));
+! mf_hash_free(&mfp->mf_hash);
+! mf_hash_free_all(&mfp->mf_trans); /* free hashtable and its items */
+ vim_free(mfp->mf_fname);
+ vim_free(mfp->mf_ffname);
+ vim_free(mfp);
+***************
+*** 743,758 ****
+ memfile_T *mfp;
+ bhdr_T *hp;
+ {
+! bhdr_T *hhp;
+! int hash;
+!
+! hash = MEMHASH(hp->bh_bnum);
+! hhp = mfp->mf_hash[hash];
+! hp->bh_hash_next = hhp;
+! hp->bh_hash_prev = NULL;
+! if (hhp != NULL)
+! hhp->bh_hash_prev = hp;
+! mfp->mf_hash[hash] = hp;
+ }
+
+ /*
+--- 740,746 ----
+ memfile_T *mfp;
+ bhdr_T *hp;
+ {
+! mf_hash_add_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
+ }
+
+ /*
+***************
+*** 763,775 ****
+ memfile_T *mfp;
+ bhdr_T *hp;
+ {
+! if (hp->bh_hash_prev == NULL)
+! mfp->mf_hash[MEMHASH(hp->bh_bnum)] = hp->bh_hash_next;
+! else
+! hp->bh_hash_prev->bh_hash_next = hp->bh_hash_next;
+!
+! if (hp->bh_hash_next)
+! hp->bh_hash_next->bh_hash_prev = hp->bh_hash_prev;
+ }
+
+ /*
+--- 751,757 ----
+ memfile_T *mfp;
+ bhdr_T *hp;
+ {
+! mf_hash_rem_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
+ }
+
+ /*
+***************
+*** 780,791 ****
+ memfile_T *mfp;
+ blocknr_T nr;
+ {
+! bhdr_T *hp;
+!
+! for (hp = mfp->mf_hash[MEMHASH(nr)]; hp != NULL; hp = hp->bh_hash_next)
+! if (hp->bh_bnum == nr)
+! break;
+! return hp;
+ }
+
+ /*
+--- 762,768 ----
+ memfile_T *mfp;
+ blocknr_T nr;
+ {
+! return (bhdr_T *)mf_hash_find(&mfp->mf_hash, nr);
+ }
+
+ /*
+***************
+*** 1187,1193 ****
+ {
+ bhdr_T *freep;
+ blocknr_T new_bnum;
+- int hash;
+ NR_TRANS *np;
+ int page_count;
+
+--- 1164,1169 ----
+***************
+*** 1235,1246 ****
+ hp->bh_bnum = new_bnum;
+ mf_ins_hash(mfp, hp); /* insert in new hash list */
+
+! hash = MEMHASH(np->nt_old_bnum); /* insert in trans list */
+! np->nt_next = mfp->mf_trans[hash];
+! mfp->mf_trans[hash] = np;
+! if (np->nt_next != NULL)
+! np->nt_next->nt_prev = np;
+! np->nt_prev = NULL;
+
+ return OK;
+ }
+--- 1211,1218 ----
+ hp->bh_bnum = new_bnum;
+ mf_ins_hash(mfp, hp); /* insert in new hash list */
+
+! /* Insert "np" into "mf_trans" hashtable with key "np->nt_old_bnum" */
+! mf_hash_add_item(&mfp->mf_trans, (mf_hashitem_T *)np);
+
+ return OK;
+ }
+***************
+*** 1255,1279 ****
+ memfile_T *mfp;
+ blocknr_T old_nr;
+ {
+- int hash;
+ NR_TRANS *np;
+ blocknr_T new_bnum;
+
+! hash = MEMHASH(old_nr);
+! for (np = mfp->mf_trans[hash]; np != NULL; np = np->nt_next)
+! if (np->nt_old_bnum == old_nr)
+! break;
+ if (np == NULL) /* not found */
+ return old_nr;
+
+ mfp->mf_neg_count--;
+ new_bnum = np->nt_new_bnum;
+! if (np->nt_prev != NULL) /* remove entry from the trans list */
+! np->nt_prev->nt_next = np->nt_next;
+! else
+! mfp->mf_trans[hash] = np->nt_next;
+! if (np->nt_next != NULL)
+! np->nt_next->nt_prev = np->nt_prev;
+ vim_free(np);
+
+ return new_bnum;
+--- 1227,1246 ----
+ memfile_T *mfp;
+ blocknr_T old_nr;
+ {
+ NR_TRANS *np;
+ blocknr_T new_bnum;
+
+! np = (NR_TRANS *)mf_hash_find(&mfp->mf_trans, old_nr);
+!
+ if (np == NULL) /* not found */
+ return old_nr;
+
+ mfp->mf_neg_count--;
+ new_bnum = np->nt_new_bnum;
+!
+! /* remove entry from the trans list */
+! mf_hash_rem_item(&mfp->mf_trans, (mf_hashitem_T *)np);
+!
+ vim_free(np);
+
+ return new_bnum;
+***************
+*** 1397,1399 ****
+--- 1364,1570 ----
+ mch_hide(mfp->mf_fname); /* try setting the 'hidden' flag */
+ }
+ }
++
++ /*
++ * Implementation of mf_hashtab_T follows.
++ */
++
++ /*
++ * The number of buckets in the hashtable is increased by a factor of
++ * MHT_GROWTH_FACTOR when the average number of items per bucket
++ * exceeds 2 ^ MHT_LOG_LOAD_FACTOR.
++ */
++ #define MHT_LOG_LOAD_FACTOR 6
++ #define MHT_GROWTH_FACTOR 2 /* must be a power of two */
++
++ /*
++ * Initialize an empty hash table.
++ */
++ static void
++ mf_hash_init(mht)
++ mf_hashtab_T *mht;
++ {
++ vim_memset(mht, 0, sizeof(mf_hashtab_T));
++ mht->mht_buckets = mht->mht_small_buckets;
++ mht->mht_mask = MHT_INIT_SIZE - 1;
++ }
++
++ /*
++ * Free the array of a hash table. Does not free the items it contains!
++ * The hash table must not be used again without another mf_hash_init() call.
++ */
++ static void
++ mf_hash_free(mht)
++ mf_hashtab_T *mht;
++ {
++ if (mht->mht_buckets != mht->mht_small_buckets)
++ vim_free(mht->mht_buckets);
++ }
++
++ /*
++ * Free the array of a hash table and all the items it contains.
++ */
++ static void
++ mf_hash_free_all(mht)
++ mf_hashtab_T *mht;
++ {
++ long_u idx;
++ mf_hashitem_T *mhi;
++ mf_hashitem_T *next;
++
++ for (idx = 0; idx <= mht->mht_mask; idx++)
++ for (mhi = mht->mht_buckets[idx]; mhi != NULL; mhi = next)
++ {
++ next = mhi->mhi_next;
++ vim_free(mhi);
++ }
++
++ mf_hash_free(mht);
++ }
++
++ /*
++ * Find "key" in hashtable "mht".
++ * Returns a pointer to a mf_hashitem_T or NULL if the item was not found.
++ */
++ static mf_hashitem_T *
++ mf_hash_find(mht, key)
++ mf_hashtab_T *mht;
++ blocknr_T key;
++ {
++ mf_hashitem_T *mhi;
++
++ mhi = mht->mht_buckets[key & mht->mht_mask];
++ while (mhi != NULL && mhi->mhi_key != key)
++ mhi = mhi->mhi_next;
++
++ return mhi;
++ }
++
++ /*
++ * Add item "mhi" to hashtable "mht".
++ * "mhi" must not be NULL.
++ */
++ static void
++ mf_hash_add_item(mht, mhi)
++ mf_hashtab_T *mht;
++ mf_hashitem_T *mhi;
++ {
++ long_u idx;
++
++ idx = mhi->mhi_key & mht->mht_mask;
++ mhi->mhi_next = mht->mht_buckets[idx];
++ mhi->mhi_prev = NULL;
++ if (mhi->mhi_next != NULL)
++ mhi->mhi_next->mhi_prev = mhi;
++ mht->mht_buckets[idx] = mhi;
++
++ mht->mht_count++;
++
++ /*
++ * Grow hashtable when we have more thank 2^MHT_LOG_LOAD_FACTOR
++ * items per bucket on average
++ */
++ if (mht->mht_fixed == 0
++ && (mht->mht_count >> MHT_LOG_LOAD_FACTOR) > mht->mht_mask)
++ {
++ if (mf_hash_grow(mht) == FAIL)
++ {
++ /* stop trying to grow after first failure to allocate memory */
++ mht->mht_fixed = 1;
++ }
++ }
++ }
++
++ /*
++ * Remove item "mhi" from hashtable "mht".
++ * "mhi" must not be NULL and must have been inserted into "mht".
++ */
++ static void
++ mf_hash_rem_item(mht, mhi)
++ mf_hashtab_T *mht;
++ mf_hashitem_T *mhi;
++ {
++ if (mhi->mhi_prev == NULL)
++ mht->mht_buckets[mhi->mhi_key & mht->mht_mask] = mhi->mhi_next;
++ else
++ mhi->mhi_prev->mhi_next = mhi->mhi_next;
++
++ if (mhi->mhi_next != NULL)
++ mhi->mhi_next->mhi_prev = mhi->mhi_prev;
++
++ mht->mht_count--;
++
++ /* We could shrink the table here, but it typically takes little memory,
++ * so why bother? */
++ }
++
++ /*
++ * Increase number of buckets in the hashtable by MHT_GROWTH_FACTOR and
++ * rehash items.
++ * Returns FAIL when out of memory.
++ */
++ static int
++ mf_hash_grow(mht)
++ mf_hashtab_T *mht;
++ {
++ long_u i, j;
++ int shift;
++ mf_hashitem_T *mhi;
++ mf_hashitem_T *tails[MHT_GROWTH_FACTOR];
++ mf_hashitem_T **buckets;
++ size_t size;
++
++ size = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR * sizeof(void *);
++ buckets = (mf_hashitem_T **)lalloc_clear(size, FALSE);
++ if (buckets == NULL)
++ return FAIL;
++
++ shift = 0;
++ while ((mht->mht_mask >> shift) != 0)
++ shift++;
++
++ for (i = 0; i <= mht->mht_mask; i++)
++ {
++ /*
++ * Traverse the items in the i-th original bucket and move them into
++ * MHT_GROWTH_FACTOR new buckets, preserving their relative order
++ * within each new bucket. Preserving the order is important because
++ * mf_get() tries to keep most recently used items at the front of
++ * each bucket.
++ *
++ * Here we strongly rely on the fact the hashes are computed modulo
++ * a power of two.
++ */
++
++ vim_memset(tails, 0, sizeof(tails));
++
++ for (mhi = mht->mht_buckets[i]; mhi != NULL; mhi = mhi->mhi_next)
++ {
++ j = (mhi->mhi_key >> shift) & (MHT_GROWTH_FACTOR - 1);
++ if (tails[j] == NULL)
++ {
++ buckets[i + (j << shift)] = mhi;
++ tails[j] = mhi;
++ mhi->mhi_prev = NULL;
++ }
++ else
++ {
++ tails[j]->mhi_next = mhi;
++ mhi->mhi_prev = tails[j];
++ tails[j] = mhi;
++ }
++ }
++
++ for (j = 0; j < MHT_GROWTH_FACTOR; j++)
++ if (tails[j] != NULL)
++ tails[j]->mhi_next = NULL;
++ }
++
++ if (mht->mht_buckets != mht->mht_small_buckets)
++ vim_free(mht->mht_buckets);
++
++ mht->mht_buckets = buckets;
++ mht->mht_mask = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR - 1;
++
++ return OK;
++ }
+*** ../vim-7.3.142/src/memfile_test.c 2011-03-03 21:58:14.000000000 +0100
+--- src/memfile_test.c 2011-03-03 20:40:29.000000000 +0100
+***************
+*** 0 ****
+--- 1,145 ----
++ /* vi:set ts=8 sts=4 sw=4:
++ *
++ * VIM - Vi IMproved by Bram Moolenaar
++ *
++ * Do ":help uganda" in Vim to read copying and usage conditions.
++ * Do ":help credits" in Vim to see a list of people who contributed.
++ * See README.txt for an overview of the Vim source code.
++ */
++
++ /*
++ * memfile_test.c: Unittests for memfile.c
++ * Mostly by Ivan Krasilnikov.
++ */
++
++ #undef NDEBUG
++ #include <assert.h>
++
++ /* Must include main.c because it contains much more than just main() */
++ #define NO_VIM_MAIN
++ #include "main.c"
++
++ /* This file has to be included because the tested functions are static */
++ #include "memfile.c"
++
++ #define index_to_key(i) ((i) ^ 15167)
++ #define TEST_COUNT 50000
++
++ static void test_mf_hash __ARGS((void));
++
++ /*
++ * Test mf_hash_*() functions.
++ */
++ static void
++ test_mf_hash()
++ {
++ mf_hashtab_T ht;
++ mf_hashitem_T *item;
++ blocknr_T key;
++ long_u i;
++ long_u num_buckets;
++
++ mf_hash_init(&ht);
++
++ /* insert some items and check invariants */
++ for (i = 0; i < TEST_COUNT; i++)
++ {
++ assert(ht.mht_count == i);
++
++ /* check that number of buckets is a power of 2 */
++ num_buckets = ht.mht_mask + 1;
++ assert(num_buckets > 0 && (num_buckets & (num_buckets - 1)) == 0);
++
++ /* check load factor */
++ assert(ht.mht_count <= (num_buckets << MHT_LOG_LOAD_FACTOR));
++
++ if (i < (MHT_INIT_SIZE << MHT_LOG_LOAD_FACTOR))
++ {
++ /* first expansion shouldn't have occurred yet */
++ assert(num_buckets == MHT_INIT_SIZE);
++ assert(ht.mht_buckets == ht.mht_small_buckets);
++ }
++ else
++ {
++ assert(num_buckets > MHT_INIT_SIZE);
++ assert(ht.mht_buckets != ht.mht_small_buckets);
++ }
++
++ key = index_to_key(i);
++ assert(mf_hash_find(&ht, key) == NULL);
++
++ /* allocate and add new item */
++ item = (mf_hashitem_T *)lalloc_clear(sizeof(mf_hashtab_T), FALSE);
++ assert(item != NULL);
++ item->mhi_key = key;
++ mf_hash_add_item(&ht, item);
++
++ assert(mf_hash_find(&ht, key) == item);
++
++ if (ht.mht_mask + 1 != num_buckets)
++ {
++ /* hash table was expanded */
++ assert(ht.mht_mask + 1 == num_buckets * MHT_GROWTH_FACTOR);
++ assert(i + 1 == (num_buckets << MHT_LOG_LOAD_FACTOR));
++ }
++ }
++
++ /* check presence of inserted items */
++ for (i = 0; i < TEST_COUNT; i++)
++ {
++ key = index_to_key(i);
++ item = mf_hash_find(&ht, key);
++ assert(item != NULL);
++ assert(item->mhi_key == key);
++ }
++
++ /* delete some items */
++ for (i = 0; i < TEST_COUNT; i++)
++ {
++ if (i % 100 < 70)
++ {
++ key = index_to_key(i);
++ item = mf_hash_find(&ht, key);
++ assert(item != NULL);
++ assert(item->mhi_key == key);
++
++ mf_hash_rem_item(&ht, item);
++ assert(mf_hash_find(&ht, key) == NULL);
++
++ mf_hash_add_item(&ht, item);
++ assert(mf_hash_find(&ht, key) == item);
++
++ mf_hash_rem_item(&ht, item);
++ assert(mf_hash_find(&ht, key) == NULL);
++
++ vim_free(item);
++ }
++ }
++
++ /* check again */
++ for (i = 0; i < TEST_COUNT; i++)
++ {
++ key = index_to_key(i);
++ item = mf_hash_find(&ht, key);
++
++ if (i % 100 < 70)
++ {
++ assert(item == NULL);
++ }
++ else
++ {
++ assert(item != NULL);
++ assert(item->mhi_key == key);
++ }
++ }
++
++ /* free hash table and all remaining items */
++ mf_hash_free_all(&ht);
++ }
++
++ int
++ main()
++ {
++ test_mf_hash();
++ return 0;
++ }
+*** ../vim-7.3.142/src/structs.h 2011-02-15 17:39:14.000000000 +0100
+--- src/structs.h 2011-03-03 18:49:01.000000000 +0100
+***************
+*** 378,383 ****
+--- 378,412 ----
+ typedef long blocknr_T;
+
+ /*
++ * mf_hashtab_T is a chained hashtable with blocknr_T key and arbitrary
++ * structures as items. This is an intrusive data structure: we require
++ * that items begin with mf_hashitem_T which contains the key and linked
++ * list pointers. List of items in each bucket is doubly-linked.
++ */
++
++ typedef struct mf_hashitem_S mf_hashitem_T;
++
++ struct mf_hashitem_S
++ {
++ mf_hashitem_T *mhi_next;
++ mf_hashitem_T *mhi_prev;
++ blocknr_T mhi_key;
++ };
++
++ #define MHT_INIT_SIZE 64
++
++ typedef struct mf_hashtab_S
++ {
++ long_u mht_mask; /* mask used for hash value (nr of items
++ * in array is "mht_mask" + 1) */
++ long_u mht_count; /* nr of items inserted into hashtable */
++ mf_hashitem_T **mht_buckets; /* points to mht_small_buckets or
++ *dynamically allocated array */
++ mf_hashitem_T *mht_small_buckets[MHT_INIT_SIZE]; /* initial buckets */
++ char mht_fixed; /* non-zero value forbids growth */
++ } mf_hashtab_T;
++
++ /*
+ * for each (previously) used block in the memfile there is one block header.
+ *
+ * The block may be linked in the used list OR in the free list.
+***************
+*** 394,404 ****
+
+ struct block_hdr
+ {
+ bhdr_T *bh_next; /* next block_hdr in free or used list */
+ bhdr_T *bh_prev; /* previous block_hdr in used list */
+- bhdr_T *bh_hash_next; /* next block_hdr in hash list */
+- bhdr_T *bh_hash_prev; /* previous block_hdr in hash list */
+- blocknr_T bh_bnum; /* block number */
+ char_u *bh_data; /* pointer to memory (for used block) */
+ int bh_page_count; /* number of pages in this block */
+
+--- 423,433 ----
+
+ struct block_hdr
+ {
++ mf_hashitem_T bh_hashitem; /* header for hash table and key */
++ #define bh_bnum bh_hashitem.mhi_key /* block number, part of bh_hashitem */
++
+ bhdr_T *bh_next; /* next block_hdr in free or used list */
+ bhdr_T *bh_prev; /* previous block_hdr in used list */
+ char_u *bh_data; /* pointer to memory (for used block) */
+ int bh_page_count; /* number of pages in this block */
+
+***************
+*** 417,425 ****
+
+ struct nr_trans
+ {
+! NR_TRANS *nt_next; /* next nr_trans in hash list */
+! NR_TRANS *nt_prev; /* previous nr_trans in hash list */
+! blocknr_T nt_old_bnum; /* old, negative, number */
+ blocknr_T nt_new_bnum; /* new, positive, number */
+ };
+
+--- 446,454 ----
+
+ struct nr_trans
+ {
+! mf_hashitem_T nt_hashitem; /* header for hash table and key */
+! #define nt_old_bnum nt_hashitem.mhi_key /* old, negative, number */
+!
+ blocknr_T nt_new_bnum; /* new, positive, number */
+ };
+
+***************
+*** 499,510 ****
+
+ typedef struct file_buffer buf_T; /* forward declaration */
+
+- /*
+- * Simplistic hashing scheme to quickly locate the blocks in the used list.
+- * 64 blocks are found directly (64 * 4K = 256K, most files are smaller).
+- */
+- #define MEMHASHSIZE 64
+- #define MEMHASH(nr) ((nr) & (MEMHASHSIZE - 1))
+ #define MF_SEED_LEN 8
+
+ struct memfile
+--- 528,533 ----
+***************
+*** 517,524 ****
+ bhdr_T *mf_used_last; /* lru block_hdr in used list */
+ unsigned mf_used_count; /* number of pages in used list */
+ unsigned mf_used_count_max; /* maximum number of pages in memory */
+! bhdr_T *mf_hash[MEMHASHSIZE]; /* array of hash lists */
+! NR_TRANS *mf_trans[MEMHASHSIZE]; /* array of trans lists */
+ blocknr_T mf_blocknr_max; /* highest positive block number + 1*/
+ blocknr_T mf_blocknr_min; /* lowest negative block number - 1 */
+ blocknr_T mf_neg_count; /* number of negative blocks numbers */
+--- 540,547 ----
+ bhdr_T *mf_used_last; /* lru block_hdr in used list */
+ unsigned mf_used_count; /* number of pages in used list */
+ unsigned mf_used_count_max; /* maximum number of pages in memory */
+! mf_hashtab_T mf_hash; /* hash lists */
+! mf_hashtab_T mf_trans; /* trans lists */
+ blocknr_T mf_blocknr_max; /* highest positive block number + 1*/
+ blocknr_T mf_blocknr_min; /* lowest negative block number - 1 */
+ blocknr_T mf_neg_count; /* number of negative blocks numbers */
+*** ../vim-7.3.142/src/testdir/Make_amiga.mak 2010-11-10 16:54:16.000000000 +0100
+--- src/testdir/Make_amiga.mak 2011-03-03 17:04:14.000000000 +0100
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out
+
+ .SUFFIXES: .in .out
+
+--- 28,34 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 124,126 ****
+--- 124,127 ----
+ test74.out: test74.in
+ test75.out: test75.in
+ test76.out: test76.in
++ test77.out: test77.in
+*** ../vim-7.3.142/src/testdir/Make_dos.mak 2010-11-10 16:54:16.000000000 +0100
+--- src/testdir/Make_dos.mak 2011-03-03 17:04:20.000000000 +0100
+***************
+*** 28,34 ****
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 28,34 ----
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.142/src/testdir/Make_ming.mak 2010-11-10 16:54:16.000000000 +0100
+--- src/testdir/Make_ming.mak 2011-03-03 17:04:32.000000000 +0100
+***************
+*** 48,54 ****
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 48,54 ----
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.142/src/testdir/Make_os2.mak 2010-11-10 16:54:16.000000000 +0100
+--- src/testdir/Make_os2.mak 2011-03-03 17:04:48.000000000 +0100
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out
+
+ .SUFFIXES: .in .out
+
+--- 28,34 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.142/src/testdir/Makefile 2010-11-10 16:54:16.000000000 +0100
+--- src/testdir/Makefile 2011-03-22 17:03:25.000000000 +0100
+***************
+*** 25,31 ****
+ test59.out test60.out test61.out test62.out test63.out \
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 25,31 ----
+ test59.out test60.out test61.out test62.out test63.out \
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS_GUI = test16.out
+
+***************
+*** 71,77 ****
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+--- 71,77 ----
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! # -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+*** ../vim-7.3.142/src/testdir/test77.in 2011-03-03 21:59:10.000000000 +0100
+--- src/testdir/test77.in 2011-03-22 17:12:38.000000000 +0100
+***************
+*** 0 ****
+--- 1,27 ----
++ Inserts 2 million lines with consecutive integers starting from 1
++ (essentially, the output of GNU's seq 1 2000000), writes them to Xtest
++ and writes its cksum to test.out.
++
++ We need 2 million lines to trigger a call to mf_hash_grow(). If it would mess
++ up the lines the checksum would differ.
++
++ cksum is part of POSIX and so should be available on most Unixes.
++ If it isn't available then the test will be skipped.
++
++ STARTTEST
++ :so small.vim
++ :if !executable("cksum")
++ : e! test.ok
++ : w! test.out
++ : qa!
++ :endif
++ :set fileformat=unix undolevels=-1
++ ggdG
++ :let i = 1
++ :while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
++ ggdd
++ :w! Xtest
++ :!cksum Xtest > test.out
++ :qa!
++ ENDTEST
++
+*** ../vim-7.3.142/src/testdir/test77.ok 2011-03-03 21:59:10.000000000 +0100
+--- src/testdir/test77.ok 2011-03-22 17:10:14.000000000 +0100
+***************
+*** 0 ****
+--- 1 ----
++ 3678979763 14888896 Xtest
+*** ../vim-7.3.142/src/version.c 2011-03-22 15:47:18.000000000 +0100
+--- src/version.c 2011-03-22 18:01:48.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 143,
+ /**/
+
+--
+SIGIRO -- irony detected (iron core dumped)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.144
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.144
+Problem: Crash with ":python help(dir)". (Kearn Holliday)
+Solution: Fix the way the type is set on objects. (Tobias Columbus)
+Files: src/if_python.c
+
+
+*** ../vim-7.3.143/src/if_python.c 2010-11-16 19:25:56.000000000 +0100
+--- src/if_python.c 2011-03-26 13:54:22.000000000 +0100
+***************
+*** 780,786 ****
+ PythonIO_Init(void)
+ {
+ /* Fixups... */
+! OutputType.ob_type = &PyType_Type;
+
+ return PythonIO_Init_io();
+ }
+--- 780,786 ----
+ PythonIO_Init(void)
+ {
+ /* Fixups... */
+! PyType_Ready(&OutputType);
+
+ return PythonIO_Init_io();
+ }
+***************
+*** 1402,1413 ****
+ static char *(argv[2]) = {"/must>not&exist/foo", NULL};
+
+ /* Fixups... */
+! BufferType.ob_type = &PyType_Type;
+! RangeType.ob_type = &PyType_Type;
+! WindowType.ob_type = &PyType_Type;
+! BufListType.ob_type = &PyType_Type;
+! WinListType.ob_type = &PyType_Type;
+! CurrentType.ob_type = &PyType_Type;
+
+ /* Set sys.argv[] to avoid a crash in warn(). */
+ PySys_SetArgv(1, argv);
+--- 1402,1413 ----
+ static char *(argv[2]) = {"/must>not&exist/foo", NULL};
+
+ /* Fixups... */
+! PyType_Ready(&BufferType);
+! PyType_Ready(&RangeType);
+! PyType_Ready(&WindowType);
+! PyType_Ready(&BufListType);
+! PyType_Ready(&WinListType);
+! PyType_Ready(&CurrentType);
+
+ /* Set sys.argv[] to avoid a crash in warn(). */
+ PySys_SetArgv(1, argv);
+*** ../vim-7.3.143/src/version.c 2011-03-22 18:10:34.000000000 +0100
+--- src/version.c 2011-03-26 13:56:15.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 144,
+ /**/
+
+--
+The chat program is in public domain. This is not the GNU public license.
+If it breaks then you get to keep both pieces.
+ -- Copyright notice for the chat program
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.145
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.145 (after 7.3.144)
+Problem: Can't build with Python dynamically loading.
+Solution: Add dll_PyType_Ready.
+Files: src/if_python.c
+
+
+*** ../vim-7.3.144/src/if_python.c 2011-03-26 13:56:41.000000000 +0100
+--- src/if_python.c 2011-03-26 18:10:00.000000000 +0100
+***************
+*** 165,170 ****
+--- 165,171 ----
+ # define PySys_SetObject dll_PySys_SetObject
+ # define PySys_SetArgv dll_PySys_SetArgv
+ # define PyType_Type (*dll_PyType_Type)
++ # define PyType_Ready (*dll_PyType_Ready)
+ # define Py_BuildValue dll_Py_BuildValue
+ # define Py_FindMethod dll_Py_FindMethod
+ # define Py_InitModule4 dll_Py_InitModule4
+***************
+*** 224,229 ****
+--- 225,231 ----
+ static int(*dll_PySys_SetObject)(char *, PyObject *);
+ static int(*dll_PySys_SetArgv)(int, char **);
+ static PyTypeObject* dll_PyType_Type;
++ static int (*dll_PyType_Ready)(PyTypeObject *type);
+ static PyObject*(*dll_Py_BuildValue)(char *, ...);
+ static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
+ static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
+***************
+*** 305,310 ****
+--- 307,313 ----
+ {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject},
+ {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
+ {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
++ {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
+ {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+ {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
+ # if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
+*** ../vim-7.3.144/src/version.c 2011-03-26 13:56:41.000000000 +0100
+--- src/version.c 2011-03-26 18:11:19.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 145,
+ /**/
+
+--
+This message contains 78% recycled characters.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.146
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.146
+Problem: It's possible to assign to a read-only member of a dict.
+ It's possible to create a global variable "0". (ZyX)
+ It's possible to add a v: variable with ":let v:.name = 1".
+Solution: Add check for dict item being read-only.
+ Check the name of g: variables.
+ Disallow adding v: variables.
+Files: src/eval.c
+
+
+*** ../vim-7.3.145/src/eval.c 2011-02-01 13:48:47.000000000 +0100
+--- src/eval.c 2011-03-27 15:56:44.000000000 +0200
+***************
+*** 789,794 ****
+--- 789,796 ----
+ static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
+ static int var_check_ro __ARGS((int flags, char_u *name));
+ static int var_check_fixed __ARGS((int flags, char_u *name));
++ static int var_check_func_name __ARGS((char_u *name, int new_var));
++ static int valid_varname __ARGS((char_u *varname));
+ static int tv_check_lock __ARGS((int lock, char_u *name));
+ static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
+ static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
+***************
+*** 2716,2723 ****
+--- 2718,2744 ----
+ lp->ll_list = NULL;
+ lp->ll_dict = lp->ll_tv->vval.v_dict;
+ lp->ll_di = dict_find(lp->ll_dict, key, len);
++
++ /* When assigning to g: check that a function and variable name is
++ * valid. */
++ if (rettv != NULL && lp->ll_dict == &globvardict)
++ {
++ if (rettv->v_type == VAR_FUNC
++ && var_check_func_name(key, lp->ll_di == NULL))
++ return NULL;
++ if (!valid_varname(key))
++ return NULL;
++ }
++
+ if (lp->ll_di == NULL)
+ {
++ /* Can't add "v:" variable. */
++ if (lp->ll_dict == &vimvardict)
++ {
++ EMSG2(_(e_illvar), name);
++ return NULL;
++ }
++
+ /* Key does not exist in dict: may need to add it. */
+ if (*p == '[' || *p == '.' || unlet)
+ {
+***************
+*** 2737,2742 ****
+--- 2758,2767 ----
+ p = NULL;
+ break;
+ }
++ /* existing variable, need to check if it can be changed */
++ else if (var_check_ro(lp->ll_di->di_flags, name))
++ return NULL;
++
+ if (len == -1)
+ clear_tv(&var1);
+ lp->ll_tv = &lp->ll_di->di_tv;
+***************
+*** 19786,19792 ****
+ dictitem_T *v;
+ char_u *varname;
+ hashtab_T *ht;
+- char_u *p;
+
+ ht = find_var_ht(name, &varname);
+ if (ht == NULL || *varname == NUL)
+--- 19811,19816 ----
+***************
+*** 19796,19820 ****
+ }
+ v = find_var_in_ht(ht, varname, TRUE);
+
+! if (tv->v_type == VAR_FUNC)
+! {
+! if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
+! && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
+! ? name[2] : name[0]))
+! {
+! EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name);
+! return;
+! }
+! /* Don't allow hiding a function. When "v" is not NULL we might be
+! * assigning another function to the same var, the type is checked
+! * below. */
+! if (v == NULL && function_exists(name))
+! {
+! EMSG2(_("E705: Variable name conflicts with existing function: %s"),
+! name);
+! return;
+! }
+! }
+
+ if (v != NULL)
+ {
+--- 19820,19827 ----
+ }
+ v = find_var_in_ht(ht, varname, TRUE);
+
+! if (tv->v_type == VAR_FUNC && var_check_func_name(name, v == NULL))
+! return;
+
+ if (v != NULL)
+ {
+***************
+*** 19880,19892 ****
+ }
+
+ /* Make sure the variable name is valid. */
+! for (p = varname; *p != NUL; ++p)
+! if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
+! && *p != AUTOLOAD_CHAR)
+! {
+! EMSG2(_(e_illvar), varname);
+! return;
+! }
+
+ v = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T)
+ + STRLEN(varname)));
+--- 19887,19894 ----
+ }
+
+ /* Make sure the variable name is valid. */
+! if (!valid_varname(varname))
+! return;
+
+ v = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T)
+ + STRLEN(varname)));
+***************
+*** 19951,19956 ****
+--- 19953,20007 ----
+ }
+
+ /*
++ * Check if a funcref is assigned to a valid variable name.
++ * Return TRUE and give an error if not.
++ */
++ static int
++ var_check_func_name(name, new_var)
++ char_u *name; /* points to start of variable name */
++ int new_var; /* TRUE when creating the variable */
++ {
++ if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
++ && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
++ ? name[2] : name[0]))
++ {
++ EMSG2(_("E704: Funcref variable name must start with a capital: %s"),
++ name);
++ return TRUE;
++ }
++ /* Don't allow hiding a function. When "v" is not NULL we might be
++ * assigning another function to the same var, the type is checked
++ * below. */
++ if (new_var && function_exists(name))
++ {
++ EMSG2(_("E705: Variable name conflicts with existing function: %s"),
++ name);
++ return TRUE;
++ }
++ return FALSE;
++ }
++
++ /*
++ * Check if a variable name is valid.
++ * Return FALSE and give an error if not.
++ */
++ static int
++ valid_varname(varname)
++ char_u *varname;
++ {
++ char_u *p;
++
++ for (p = varname; *p != NUL; ++p)
++ if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
++ && *p != AUTOLOAD_CHAR)
++ {
++ EMSG2(_(e_illvar), varname);
++ return FALSE;
++ }
++ return TRUE;
++ }
++
++ /*
+ * Return TRUE if typeval "tv" is set to be locked (immutable).
+ * Also give an error message, using "name".
+ */
+*** ../vim-7.3.145/src/version.c 2011-03-26 18:32:00.000000000 +0100
+--- src/version.c 2011-03-27 16:01:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 146,
+ /**/
+
+--
+ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of Camelot.
+ King of all Britons, defeator of the Saxons, sovereign of all England!
+ [Pause]
+SOLDIER: Get away!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.147
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.147 (after 7.3.143)
+Problem: Can't build on HP-UX.
+Solution: Remove an unnecessary backslash. (John Marriott)
+Files: src/Makefile
+
+
+*** ../vim-7.3.146/src/Makefile 2011-03-22 18:10:34.000000000 +0100
+--- src/Makefile 2011-04-01 13:00:58.000000000 +0200
+***************
+*** 1565,1571 ****
+
+ OBJ = $(OBJ_COMMON) \
+ objects/main.o \
+! objects/memfile.o \
+
+ MEMFILE_TEST_OBJ = $(OBJ_COMMON) \
+ objects/memfile_test.o
+--- 1565,1571 ----
+
+ OBJ = $(OBJ_COMMON) \
+ objects/main.o \
+! objects/memfile.o
+
+ MEMFILE_TEST_OBJ = $(OBJ_COMMON) \
+ objects/memfile_test.o
+*** ../vim-7.3.146/src/version.c 2011-03-27 16:03:09.000000000 +0200
+--- src/version.c 2011-04-01 13:05:18.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 147,
+ /**/
+
+--
+DENNIS: You can't expect to wield supreme executive power just 'cause some
+ watery tart threw a sword at you!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.148
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.148
+Problem: A syntax file with a huge number of items or clusters causes weird
+ behavior, a hang or a crash. (Yukihiro Nakadaira)
+Solution: Check running out of IDs. (partly by Ben Schmidt)
+Files: src/syntax.c
+
+
+*** ../vim-7.3.147/src/syntax.c 2011-01-22 00:58:15.000000000 +0100
+--- src/syntax.c 2011-04-01 14:25:39.000000000 +0200
+***************
+*** 219,234 ****
+
+ /*
+ * Syntax group IDs have different types:
+! * 0 - 9999 normal syntax groups
+! * 10000 - 14999 ALLBUT indicator (current_syn_inc_tag added)
+! * 15000 - 19999 TOP indicator (current_syn_inc_tag added)
+! * 20000 - 24999 CONTAINED indicator (current_syn_inc_tag added)
+! * >= 25000 cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
+! */
+! #define SYNID_ALLBUT 10000 /* syntax group ID for contains=ALLBUT */
+! #define SYNID_TOP 15000 /* syntax group ID for contains=TOP */
+! #define SYNID_CONTAINED 20000 /* syntax group ID for contains=CONTAINED */
+! #define SYNID_CLUSTER 25000 /* first syntax group ID for clusters */
+
+ /*
+ * Annoying Hack(TM): ":syn include" needs this pointer to pass to
+--- 219,238 ----
+
+ /*
+ * Syntax group IDs have different types:
+! * 0 - 19999 normal syntax groups
+! * 20000 - 20999 ALLBUT indicator (current_syn_inc_tag added)
+! * 21000 - 21999 TOP indicator (current_syn_inc_tag added)
+! * 22000 - 22999 CONTAINED indicator (current_syn_inc_tag added)
+! * 23000 - 32767 cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
+! */
+! #define SYNID_ALLBUT 20000 /* syntax group ID for contains=ALLBUT */
+! #define SYNID_TOP 21000 /* syntax group ID for contains=TOP */
+! #define SYNID_CONTAINED 22000 /* syntax group ID for contains=CONTAINED */
+! #define SYNID_CLUSTER 23000 /* first syntax group ID for clusters */
+!
+! #define MAX_SYNID SYNID_ALLBUT
+! #define MAX_SYN_INC_TAG 999 /* maximum before the above overflow */
+! #define MAX_CLUSTER_ID (32767 - SYNID_CLUSTER)
+
+ /*
+ * Annoying Hack(TM): ":syn include" needs this pointer to pass to
+***************
+*** 3442,3447 ****
+--- 3446,3454 ----
+ /* free the stored states */
+ syn_stack_free_all(block);
+ invalidate_current_state();
++
++ /* Reset the counter for ":syn include" */
++ running_syn_inc_tag = 0;
+ }
+
+ /*
+***************
+*** 4661,4666 ****
+--- 4668,4675 ----
+ return;
+ }
+ sgl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
++ if (sgl_id == 0)
++ return;
+ /* separate_nextcmd() and expand_filename() depend on this */
+ eap->arg = rest;
+ }
+***************
+*** 4689,4694 ****
+--- 4698,4708 ----
+ * Save and restore the existing top-level grouplist id and ":syn
+ * include" tag around the actual inclusion.
+ */
++ if (running_syn_inc_tag >= MAX_SYN_INC_TAG)
++ {
++ EMSG((char_u *)_("E847: Too many syntax includes"));
++ return;
++ }
+ prev_syn_inc_tag = current_syn_inc_tag;
+ current_syn_inc_tag = ++running_syn_inc_tag;
+ prev_toplvl_grp = curwin->w_s->b_syn_topgrp;
+***************
+*** 4712,4718 ****
+ char_u *group_name_end;
+ int syn_id;
+ char_u *rest;
+! char_u *keyword_copy;
+ char_u *p;
+ char_u *kw;
+ syn_opt_arg_T syn_opt_arg;
+--- 4726,4732 ----
+ char_u *group_name_end;
+ int syn_id;
+ char_u *rest;
+! char_u *keyword_copy = NULL;
+ char_u *p;
+ char_u *kw;
+ syn_opt_arg_T syn_opt_arg;
+***************
+*** 4724,4732 ****
+ if (rest != NULL)
+ {
+ syn_id = syn_check_group(arg, (int)(group_name_end - arg));
+!
+! /* allocate a buffer, for removing the backslashes in the keyword */
+! keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
+ if (keyword_copy != NULL)
+ {
+ syn_opt_arg.flags = 0;
+--- 4738,4746 ----
+ if (rest != NULL)
+ {
+ syn_id = syn_check_group(arg, (int)(group_name_end - arg));
+! if (syn_id != 0)
+! /* allocate a buffer, for removing backslashes in the keyword */
+! keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
+ if (keyword_copy != NULL)
+ {
+ syn_opt_arg.flags = 0;
+***************
+*** 5133,5139 ****
+ (item == ITEM_SKIP) ? SPTYPE_SKIP : SPTYPE_END;
+ SYN_ITEMS(curwin->w_s)[idx].sp_flags |= syn_opt_arg.flags;
+ SYN_ITEMS(curwin->w_s)[idx].sp_syn.id = syn_id;
+! SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag = current_syn_inc_tag;
+ SYN_ITEMS(curwin->w_s)[idx].sp_syn_match_id =
+ ppp->pp_matchgroup_id;
+ #ifdef FEAT_CONCEAL
+--- 5147,5154 ----
+ (item == ITEM_SKIP) ? SPTYPE_SKIP : SPTYPE_END;
+ SYN_ITEMS(curwin->w_s)[idx].sp_flags |= syn_opt_arg.flags;
+ SYN_ITEMS(curwin->w_s)[idx].sp_syn.id = syn_id;
+! SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag =
+! current_syn_inc_tag;
+ SYN_ITEMS(curwin->w_s)[idx].sp_syn_match_id =
+ ppp->pp_matchgroup_id;
+ #ifdef FEAT_CONCEAL
+***************
+*** 5426,5431 ****
+--- 5441,5454 ----
+ curwin->w_s->b_syn_clusters.ga_growsize = 10;
+ }
+
++ len = curwin->w_s->b_syn_clusters.ga_len;
++ if (len >= MAX_CLUSTER_ID)
++ {
++ EMSG((char_u *)_("E848: Too many syntax clusters"));
++ vim_free(name);
++ return 0;
++ }
++
+ /*
+ * Make room for at least one other cluster entry.
+ */
+***************
+*** 5434,5440 ****
+ vim_free(name);
+ return 0;
+ }
+- len = curwin->w_s->b_syn_clusters.ga_len;
+
+ vim_memset(&(SYN_CLSTR(curwin->w_s)[len]), 0, sizeof(syn_cluster_T));
+ SYN_CLSTR(curwin->w_s)[len].scl_name = name;
+--- 5457,5462 ----
+***************
+*** 5476,5483 ****
+
+ if (rest != NULL)
+ {
+! scl_id = syn_check_cluster(arg, (int)(group_name_end - arg))
+! - SYNID_CLUSTER;
+
+ for (;;)
+ {
+--- 5498,5507 ----
+
+ if (rest != NULL)
+ {
+! scl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
+! if (scl_id == 0)
+! return;
+! scl_id -= SYNID_CLUSTER;
+
+ for (;;)
+ {
+***************
+*** 5516,5522 ****
+ if (got_clstr)
+ {
+ redraw_curbuf_later(SOME_VALID);
+! syn_stack_free_all(curwin->w_s); /* Need to recompute all syntax. */
+ }
+ }
+
+--- 5540,5546 ----
+ if (got_clstr)
+ {
+ redraw_curbuf_later(SOME_VALID);
+! syn_stack_free_all(curwin->w_s); /* Need to recompute all. */
+ }
+ }
+
+***************
+*** 8972,8977 ****
+--- 8996,9008 ----
+ highlight_ga.ga_growsize = 10;
+ }
+
++ if (highlight_ga.ga_len >= MAX_SYNID)
++ {
++ EMSG(_("E849: Too many syntax groups"));
++ vim_free(name);
++ return 0;
++ }
++
+ /*
+ * Make room for at least one other syntax_highlight entry.
+ */
+*** ../vim-7.3.147/src/version.c 2011-04-01 13:05:37.000000000 +0200
+--- src/version.c 2011-04-01 14:26:44.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 148,
+ /**/
+
+--
+BLACK KNIGHT: None shall pass.
+ARTHUR: I have no quarrel with you, brave Sir knight, but I must cross
+ this bridge.
+BLACK KNIGHT: Then you shall die.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.149
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.149
+Problem: The cursor disappears after the processing of the 'setDot'
+ netbeans command when vim runs in a terminal.
+Solution: Show the cursor after a screen update. (Xavier de Gaye, 2011
+Files: src/netbeans.c
+
+
+*** ../vim-7.3.148/src/netbeans.c 2011-01-04 18:11:39.000000000 +0100
+--- src/netbeans.c 2011-04-01 15:33:49.000000000 +0200
+***************
+*** 191,196 ****
+--- 191,197 ----
+ changed_window_setting();
+ update_screen(CLEAR);
+ setcursor();
++ cursor_on();
+ out_flush();
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+***************
+*** 2248,2253 ****
+--- 2249,2255 ----
+ update_topline(); /* scroll to show the line */
+ update_screen(VALID);
+ setcursor();
++ cursor_on();
+ out_flush();
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+***************
+*** 2642,2647 ****
+--- 2644,2650 ----
+ {
+ update_screen(NOT_VALID);
+ setcursor();
++ cursor_on();
+ out_flush();
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+***************
+*** 3008,3013 ****
+--- 3011,3017 ----
+ changed_window_setting();
+ update_screen(CLEAR);
+ setcursor();
++ cursor_on();
+ out_flush();
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+*** ../vim-7.3.148/src/version.c 2011-04-01 14:44:54.000000000 +0200
+--- src/version.c 2011-04-01 15:33:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 149,
+ /**/
+
+--
+ARTHUR: You are indeed brave Sir knight, but the fight is mine.
+BLACK KNIGHT: Had enough?
+ARTHUR: You stupid bastard. You havn't got any arms left.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.150
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.150
+Problem: readline() does not return the last line when the NL is missing.
+ (Hong Xu)
+Solution: When at the end of the file Also check for a previous line.
+Files: src/eval.c
+
+
+*** ../vim-7.3.149/src/eval.c 2011-03-27 16:03:09.000000000 +0200
+--- src/eval.c 2011-04-01 16:06:04.000000000 +0200
+***************
+*** 14305,14313 ****
+ {
+ if (buf[filtd] == '\n' || readlen <= 0)
+ {
+! /* Only when in binary mode add an empty list item when the
+! * last line ends in a '\n'. */
+! if (!binary && readlen == 0 && filtd == 0)
+ break;
+
+ /* Found end-of-line or end-of-file: add a text line to the
+--- 14305,14313 ----
+ {
+ if (buf[filtd] == '\n' || readlen <= 0)
+ {
+! /* In binary mode add an empty list item when the last
+! * non-empty line ends in a '\n'. */
+! if (!binary && readlen == 0 && filtd == 0 && prev == NULL)
+ break;
+
+ /* Found end-of-line or end-of-file: add a text line to the
+***************
+*** 14372,14396 ****
+
+ if (tolist == 0)
+ {
+! /* "buf" is full, need to move text to an allocated buffer */
+! if (prev == NULL)
+ {
+! prev = vim_strnsave(buf, buflen);
+! prevlen = buflen;
+! }
+! else
+! {
+! s = alloc((unsigned)(prevlen + buflen));
+! if (s != NULL)
+ {
+! mch_memmove(s, prev, prevlen);
+! mch_memmove(s + prevlen, buf, buflen);
+! vim_free(prev);
+! prev = s;
+! prevlen += buflen;
+ }
+ }
+- filtd = 0;
+ }
+ else
+ {
+--- 14372,14399 ----
+
+ if (tolist == 0)
+ {
+! if (buflen >= FREAD_SIZE / 2)
+ {
+! /* "buf" is full, need to move text to an allocated buffer */
+! if (prev == NULL)
+! {
+! prev = vim_strnsave(buf, buflen);
+! prevlen = buflen;
+! }
+! else
+ {
+! s = alloc((unsigned)(prevlen + buflen));
+! if (s != NULL)
+! {
+! mch_memmove(s, prev, prevlen);
+! mch_memmove(s + prevlen, buf, buflen);
+! vim_free(prev);
+! prev = s;
+! prevlen += buflen;
+! }
+ }
++ filtd = 0;
+ }
+ }
+ else
+ {
+*** ../vim-7.3.149/src/version.c 2011-04-01 15:33:54.000000000 +0200
+--- src/version.c 2011-04-01 16:04:42.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 150,
+ /**/
+
+--
+ARTHUR: What are you going to do. bleed on me?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.151
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.151 (after 7.3.074)
+Problem: When "unnamedplus" is in 'clipboard' the selection is sometimes
+ also copied to the star register.
+Solution: Avoid copy to the star register when undesired. (James Vega)
+Files: src/ops.c
+
+
+*** ../vim-7.3.150/src/ops.c 2010-12-08 14:23:08.000000000 +0100
+--- src/ops.c 2011-04-01 16:23:10.000000000 +0200
+***************
+*** 3148,3157 ****
+ /* Copy the text from register 0 to the clipboard register. */
+ copy_yank_reg(&(y_regs[PLUS_REGISTER]));
+
+- /* No need to copy to * register upon 'unnamed' now - see below */
+ clip_own_selection(&clip_plus);
+ clip_gen_set_selection(&clip_plus);
+! if (!clip_isautosel() && !did_star)
+ {
+ copy_yank_reg(&(y_regs[STAR_REGISTER]));
+ clip_own_selection(&clip_star);
+--- 3148,3156 ----
+ /* Copy the text from register 0 to the clipboard register. */
+ copy_yank_reg(&(y_regs[PLUS_REGISTER]));
+
+ clip_own_selection(&clip_plus);
+ clip_gen_set_selection(&clip_plus);
+! if (!clip_isautosel() && !did_star && curr == &(y_regs[PLUS_REGISTER]))
+ {
+ copy_yank_reg(&(y_regs[STAR_REGISTER]));
+ clip_own_selection(&clip_star);
+*** ../vim-7.3.150/src/version.c 2011-04-01 16:07:41.000000000 +0200
+--- src/version.c 2011-04-01 16:25:40.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 151,
+ /**/
+
+--
+BLACK KNIGHT: I'm invincible!
+ARTHUR: You're a looney.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.152
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.152
+Problem: Xxd does not check for errors from library functions.
+Solution: Add error checks. (Florian Zumbiehl)
+Files: src/xxd/xxd.c
+
+
+*** ../vim-7.3.151/src/xxd/xxd.c 2010-08-15 21:57:25.000000000 +0200
+--- src/xxd/xxd.c 2011-04-01 18:56:11.000000000 +0200
+***************
+*** 49,54 ****
+--- 49,56 ----
+ * option -b added: 01000101 binary output in normal format.
+ * 16.05.00 Added VAXC changes by Stephen P. Wall
+ * 16.05.00 Improved MMS file and merge for VMS by Zoltan Arpadffy
++ * 2011 March Better error handling by Florian Zumbiehl.
++ * 2011 April Formatting by Bram Moolenaar
+ *
+ * (c) 1990-1998 by Juergen Weigert (jnweiger@informatik.uni-erlangen.de)
+ *
+***************
+*** 207,214 ****
+
+ /* Let's collect some prototypes */
+ /* CodeWarrior is really picky about missing prototypes */
+! static void exit_with_usage __P((char *));
+! static int huntype __P((FILE *, FILE *, FILE *, char *, int, int, long));
+ static void xxdline __P((FILE *, char *, int));
+
+ #define TRY_SEEK /* attempt to use lseek, or skip forward by reading */
+--- 209,216 ----
+
+ /* Let's collect some prototypes */
+ /* CodeWarrior is really picky about missing prototypes */
+! static void exit_with_usage __P((void));
+! static int huntype __P((FILE *, FILE *, FILE *, int, int, long));
+ static void xxdline __P((FILE *, char *, int));
+
+ #define TRY_SEEK /* attempt to use lseek, or skip forward by reading */
+***************
+*** 223,231 ****
+ #define HEX_CINCLUDE 2
+ #define HEX_BITS 3 /* not hex a dump, but bits: 01111001 */
+
+! static void
+! exit_with_usage(pname)
+! char *pname;
+ {
+ fprintf(stderr, "Usage:\n %s [options] [infile [outfile]]\n", pname);
+ fprintf(stderr, " or\n %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
+--- 225,234 ----
+ #define HEX_CINCLUDE 2
+ #define HEX_BITS 3 /* not hex a dump, but bits: 01111001 */
+
+! static char *pname;
+!
+! static void
+! exit_with_usage()
+ {
+ fprintf(stderr, "Usage:\n %s [options] [infile [outfile]]\n", pname);
+ fprintf(stderr, " or\n %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
+***************
+*** 252,257 ****
+--- 255,269 ----
+ exit(1);
+ }
+
++ static void
++ die(ret)
++ int ret;
++ {
++ fprintf(stderr, "%s: ", pname);
++ perror(NULL);
++ exit(ret);
++ }
++
+ /*
+ * Max. cols binary characters are decoded from the input stream per line.
+ * Two adjacent garbage characters after evaluated data delimit valid data.
+***************
+*** 259,270 ****
+ *
+ * The name is historic and came from 'undo type opt h'.
+ */
+! static int
+! huntype(fpi, fpo, fperr, pname, cols, hextype, base_off)
+! FILE *fpi, *fpo, *fperr;
+! char *pname;
+! int cols, hextype;
+! long base_off;
+ {
+ int c, ign_garb = 1, n1 = -1, n2 = 0, n3, p = cols;
+ long have_off = 0, want_off = 0;
+--- 271,281 ----
+ *
+ * The name is historic and came from 'undo type opt h'.
+ */
+! static int
+! huntype(fpi, fpo, fperr, cols, hextype, base_off)
+! FILE *fpi, *fpo, *fperr;
+! int cols, hextype;
+! long base_off;
+ {
+ int c, ign_garb = 1, n1 = -1, n2 = 0, n3, p = cols;
+ long have_off = 0, want_off = 0;
+***************
+*** 318,324 ****
+
+ if (base_off + want_off != have_off)
+ {
+! fflush(fpo);
+ #ifdef TRY_SEEK
+ c = fseek(fpo, base_off + want_off - have_off, 1);
+ if (c >= 0)
+--- 329,336 ----
+
+ if (base_off + want_off != have_off)
+ {
+! if (fflush(fpo) != 0)
+! die(3);
+ #ifdef TRY_SEEK
+ c = fseek(fpo, base_off + want_off - have_off, 1);
+ if (c >= 0)
+***************
+*** 330,341 ****
+ return 5;
+ }
+ for (; have_off < base_off + want_off; have_off++)
+! putc(0, fpo);
+ }
+
+ if (n2 >= 0 && n1 >= 0)
+ {
+! putc((n2 << 4) | n1, fpo);
+ have_off++;
+ want_off++;
+ n1 = -1;
+--- 342,355 ----
+ return 5;
+ }
+ for (; have_off < base_off + want_off; have_off++)
+! if (putc(0, fpo) == EOF)
+! die(3);
+ }
+
+ if (n2 >= 0 && n1 >= 0)
+ {
+! if (putc((n2 << 4) | n1, fpo) == EOF)
+! die(3);
+ have_off++;
+ want_off++;
+ n1 = -1;
+***************
+*** 345,350 ****
+--- 359,366 ----
+ want_off = 0;
+ while ((c = getc(fpi)) != '\n' && c != EOF)
+ ;
++ if (c == EOF && ferror(fpi))
++ die(2);
+ ign_garb = 1;
+ }
+ }
+***************
+*** 355,369 ****
+ want_off = 0;
+ while ((c = getc(fpi)) != '\n' && c != EOF)
+ ;
+ ign_garb = 1;
+ }
+ }
+! fflush(fpo);
+ #ifdef TRY_SEEK
+ fseek(fpo, 0L, 2);
+ #endif
+! fclose(fpo);
+! fclose(fpi);
+ return 0;
+ }
+
+--- 371,390 ----
+ want_off = 0;
+ while ((c = getc(fpi)) != '\n' && c != EOF)
+ ;
++ if (c == EOF && ferror(fpi))
++ die(2);
+ ign_garb = 1;
+ }
+ }
+! if (fflush(fpo) != 0)
+! die(3);
+ #ifdef TRY_SEEK
+ fseek(fpo, 0L, 2);
+ #endif
+! if (fclose(fpo) != 0)
+! die(3);
+! if (fclose(fpi) != 0)
+! die(2);
+ return 0;
+ }
+
+***************
+*** 379,389 ****
+ *
+ * If nz is always positive, lines are never suppressed.
+ */
+! static void
+ xxdline(fp, l, nz)
+! FILE *fp;
+! char *l;
+! int nz;
+ {
+ static char z[LLEN+1];
+ static int zero_seen = 0;
+--- 400,410 ----
+ *
+ * If nz is always positive, lines are never suppressed.
+ */
+! static void
+ xxdline(fp, l, nz)
+! FILE *fp;
+! char *l;
+! int nz;
+ {
+ static char z[LLEN+1];
+ static int zero_seen = 0;
+***************
+*** 398,409 ****
+ if (nz < 0)
+ zero_seen--;
+ if (zero_seen == 2)
+! fputs(z, fp);
+ if (zero_seen > 2)
+! fputs("*\n", fp);
+ }
+ if (nz >= 0 || zero_seen > 0)
+! fputs(l, fp);
+ if (nz)
+ zero_seen = 0;
+ }
+--- 419,433 ----
+ if (nz < 0)
+ zero_seen--;
+ if (zero_seen == 2)
+! if (fputs(z, fp) == EOF)
+! die(3);
+ if (zero_seen > 2)
+! if (fputs("*\n", fp) == EOF)
+! die(3);
+ }
+ if (nz >= 0 || zero_seen > 0)
+! if (fputs(l, fp) == EOF)
+! die(3);
+ if (nz)
+ zero_seen = 0;
+ }
+***************
+*** 439,448 ****
+ 0070,0071,0372,0373,0374,0375,0376,0377
+ };
+
+! int
+ main(argc, argv)
+! int argc;
+! char *argv[];
+ {
+ FILE *fp, *fpo;
+ int c, e, p = 0, relseek = 1, negseek = 0, revert = 0;
+--- 463,472 ----
+ 0070,0071,0372,0373,0374,0375,0376,0377
+ };
+
+! int
+ main(argc, argv)
+! int argc;
+! char *argv[];
+ {
+ FILE *fp, *fpo;
+ int c, e, p = 0, relseek = 1, negseek = 0, revert = 0;
+***************
+*** 452,458 ****
+ int grplen; /* total chars per octet group */
+ long length = -1, n = 0, seekoff = 0;
+ char l[LLEN+1];
+! char *pname, *pp;
+
+ #ifdef AMIGA
+ /* This program doesn't work when started from the Workbench */
+--- 476,482 ----
+ int grplen; /* total chars per octet group */
+ long length = -1, n = 0, seekoff = 0;
+ char l[LLEN+1];
+! char *pp;
+
+ #ifdef AMIGA
+ /* This program doesn't work when started from the Workbench */
+***************
+*** 495,501 ****
+ else
+ {
+ if (!argv[2])
+! exit_with_usage(pname);
+ cols = (int)strtol(argv[2], NULL, 0);
+ argv++;
+ argc--;
+--- 519,525 ----
+ else
+ {
+ if (!argv[2])
+! exit_with_usage();
+ cols = (int)strtol(argv[2], NULL, 0);
+ argv++;
+ argc--;
+***************
+*** 508,514 ****
+ else
+ {
+ if (!argv[2])
+! exit_with_usage(pname);
+ octspergrp = (int)strtol(argv[2], NULL, 0);
+ argv++;
+ argc--;
+--- 532,538 ----
+ else
+ {
+ if (!argv[2])
+! exit_with_usage();
+ octspergrp = (int)strtol(argv[2], NULL, 0);
+ argv++;
+ argc--;
+***************
+*** 531,537 ****
+ else
+ {
+ if (!argv[2])
+! exit_with_usage(pname);
+ #ifdef TRY_SEEK
+ if (argv[2][0] == '+')
+ relseek++;
+--- 555,561 ----
+ else
+ {
+ if (!argv[2])
+! exit_with_usage();
+ #ifdef TRY_SEEK
+ if (argv[2][0] == '+')
+ relseek++;
+***************
+*** 550,556 ****
+ else
+ {
+ if (!argv[2])
+! exit_with_usage(pname);
+ length = strtol(argv[2], (char **)NULL, 0);
+ argv++;
+ argc--;
+--- 574,580 ----
+ else
+ {
+ if (!argv[2])
+! exit_with_usage();
+ length = strtol(argv[2], (char **)NULL, 0);
+ argv++;
+ argc--;
+***************
+*** 563,569 ****
+ break;
+ }
+ else if (pp[0] == '-' && pp[1]) /* unknown option */
+! exit_with_usage(pname);
+ else
+ break; /* not an option */
+
+--- 587,593 ----
+ break;
+ }
+ else if (pp[0] == '-' && pp[1]) /* unknown option */
+! exit_with_usage();
+ else
+ break; /* not an option */
+
+***************
+*** 602,608 ****
+ octspergrp = cols;
+
+ if (argc > 3)
+! exit_with_usage(pname);
+
+ if (argc == 1 || (argv[1][0] == '-' && !argv[1][1]))
+ BIN_ASSIGN(fp = stdin, !revert);
+--- 626,632 ----
+ octspergrp = cols;
+
+ if (argc > 3)
+! exit_with_usage();
+
+ if (argc == 1 || (argv[1][0] == '-' && !argv[1][1]))
+ BIN_ASSIGN(fp = stdin, !revert);
+***************
+*** 640,646 ****
+ fprintf(stderr, "%s: sorry, cannot revert this type of hexdump\n", pname);
+ return -1;
+ }
+! return huntype(fp, fpo, stderr, pname, cols, hextype,
+ negseek ? -seekoff : seekoff);
+ }
+
+--- 664,670 ----
+ fprintf(stderr, "%s: sorry, cannot revert this type of hexdump\n", pname);
+ return -1;
+ }
+! return huntype(fp, fpo, stderr, cols, hextype,
+ negseek ? -seekoff : seekoff);
+ }
+
+***************
+*** 664,670 ****
+ long s = seekoff;
+
+ while (s--)
+! (void)getc(fp);
+ }
+ }
+
+--- 688,703 ----
+ long s = seekoff;
+
+ while (s--)
+! if (getc(fp) == EOF)
+! if (ferror(fp))
+! {
+! die(2);
+! }
+! else
+! {
+! fprintf(stderr, "%s: sorry cannot seek.\n", pname);
+! return 4;
+! }
+ }
+ }
+
+***************
+*** 672,725 ****
+ {
+ if (fp != stdin)
+ {
+! fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "");
+ for (e = 0; (c = argv[1][e]) != 0; e++)
+! putc(isalnum(c) ? c : '_', fpo);
+! fputs("[] = {\n", fpo);
+ }
+
+ p = 0;
+ while ((length < 0 || p < length) && (c = getc(fp)) != EOF)
+ {
+! fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
+! (p % cols) ? ", " : ",\n "+2*!p, c);
+ p++;
+ }
+
+ if (p)
+! fputs("\n};\n"+3*(fp == stdin), fpo);
+
+ if (fp != stdin)
+ {
+! fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "");
+ for (e = 0; (c = argv[1][e]) != 0; e++)
+! putc(isalnum(c) ? c : '_', fpo);
+! fprintf(fpo, "_len = %d;\n", p);
+ }
+
+! fclose(fp);
+! fclose(fpo);
+ return 0;
+ }
+
+ if (hextype == HEX_POSTSCRIPT)
+ {
+ p = cols;
+ while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
+ {
+! putchar(hexx[(e >> 4) & 0xf]);
+! putchar(hexx[(e ) & 0xf]);
+ n++;
+ if (!--p)
+ {
+! putchar('\n');
+ p = cols;
+ }
+ }
+ if (p < cols)
+! putchar('\n');
+! fclose(fp);
+! fclose(fpo);
+ return 0;
+ }
+
+--- 705,779 ----
+ {
+ if (fp != stdin)
+ {
+! if (fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
+! die(3);
+ for (e = 0; (c = argv[1][e]) != 0; e++)
+! if (putc(isalnum(c) ? c : '_', fpo) == EOF)
+! die(3);
+! if (fputs("[] = {\n", fpo) == EOF)
+! die(3);
+ }
+
+ p = 0;
++ c = 0;
+ while ((length < 0 || p < length) && (c = getc(fp)) != EOF)
+ {
+! if (fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
+! (p % cols) ? ", " : ",\n "+2*!p, c) < 0)
+! die(3);
+ p++;
+ }
++ if (c == EOF && ferror(fp))
++ die(2);
+
+ if (p)
+! if (fputs("\n};\n" + 3 * (fp == stdin), fpo) == EOF)
+! die(3);
+
+ if (fp != stdin)
+ {
+! if (fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
+! die(3);
+ for (e = 0; (c = argv[1][e]) != 0; e++)
+! if (putc(isalnum(c) ? c : '_', fpo) == EOF)
+! die(3);
+! if (fprintf(fpo, "_len = %d;\n", p) < 0)
+! die(3);
+ }
+
+! if (fclose(fp))
+! die(2);
+! if (fclose(fpo))
+! die(3);
+ return 0;
+ }
+
+ if (hextype == HEX_POSTSCRIPT)
+ {
+ p = cols;
++ e = 0;
+ while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
+ {
+! if (putc(hexx[(e >> 4) & 0xf], fpo) == EOF
+! || putc(hexx[e & 0xf], fpo) == EOF)
+! die(3);
+ n++;
+ if (!--p)
+ {
+! if (putc('\n', fpo) == EOF)
+! die(3);
+ p = cols;
+ }
+ }
++ if (e == EOF && ferror(fp))
++ die(2);
+ if (p < cols)
+! if (putc('\n', fpo) == EOF)
+! die(3);
+! if (fclose(fp))
+! die(2);
+! if (fclose(fpo))
+! die(3);
+ return 0;
+ }
+
+***************
+*** 730,735 ****
+--- 784,790 ----
+ else /* hextype == HEX_BITS */
+ grplen = 8 * octspergrp + 1;
+
++ e = 0;
+ while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
+ {
+ if (p == 0)
+***************
+*** 771,776 ****
+--- 826,833 ----
+ p = 0;
+ }
+ }
++ if (e == EOF && ferror(fp))
++ die(2);
+ if (p)
+ {
+ l[c = (11 + (grplen * cols - 1)/octspergrp + p)] = '\n'; l[++c] = '\0';
+***************
+*** 779,785 ****
+ else if (autoskip)
+ xxdline(fpo, l, -1); /* last chance to flush out suppressed lines */
+
+! fclose(fp);
+! fclose(fpo);
+ return 0;
+ }
+--- 836,846 ----
+ else if (autoskip)
+ xxdline(fpo, l, -1); /* last chance to flush out suppressed lines */
+
+! if (fclose(fp))
+! die(2);
+! if (fclose(fpo))
+! die(3);
+ return 0;
+ }
++
++ /* vi:set ts=8 sw=4 sts=2 cino+={2 cino+=n-2 : */
+*** ../vim-7.3.151/src/version.c 2011-04-01 16:28:33.000000000 +0200
+--- src/version.c 2011-04-01 19:00:26.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 152,
+ /**/
+
+--
+Eye have a spelling checker, it came with my PC;
+It plainly marks four my revue mistakes I cannot sea.
+I've run this poem threw it, I'm sure your please to no,
+It's letter perfect in it's weigh, my checker tolled me sew!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.153
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.153 (after 7.3.152)
+Problem: Compiler warning for ambiguous else, missing prototype.
+Solution: Add braces. (Dominique Pelle) Add prototype for die().
+Files: src/xxd/xxd.c
+
+
+*** ../vim-7.3.152/src/xxd/xxd.c 2011-04-01 19:14:35.000000000 +0200
+--- src/xxd/xxd.c 2011-04-02 14:42:54.000000000 +0200
+***************
+*** 210,215 ****
+--- 210,216 ----
+ /* Let's collect some prototypes */
+ /* CodeWarrior is really picky about missing prototypes */
+ static void exit_with_usage __P((void));
++ static void die __P((int));
+ static int huntype __P((FILE *, FILE *, FILE *, int, int, long));
+ static void xxdline __P((FILE *, char *, int));
+
+***************
+*** 689,694 ****
+--- 690,696 ----
+
+ while (s--)
+ if (getc(fp) == EOF)
++ {
+ if (ferror(fp))
+ {
+ die(2);
+***************
+*** 698,703 ****
+--- 700,706 ----
+ fprintf(stderr, "%s: sorry cannot seek.\n", pname);
+ return 4;
+ }
++ }
+ }
+ }
+
+*** ../vim-7.3.152/src/version.c 2011-04-01 19:14:35.000000000 +0200
+--- src/version.c 2011-04-02 14:41:12.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 153,
+ /**/
+
+--
+ |
+
+Ceci n'est pas une pipe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.154
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.154 (after 7.3.148)
+Problem: Can't compile with tiny features. (Tony Mechelynck)
+Solution: Move #define outside of #ifdef.
+Files: src/syntax.c
+
+
+*** ../vim-7.3.153/src/syntax.c 2011-04-01 14:44:54.000000000 +0200
+--- src/syntax.c 2011-04-02 15:11:47.000000000 +0200
+***************
+*** 68,73 ****
+--- 68,75 ----
+
+ #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
+
++ #define MAX_HL_ID 20000 /* maximum value for a highlight ID. */
++
+ #ifdef FEAT_CMDL_COMPL
+ /* Flags to indicate an additional string for highlight name completion. */
+ static int include_none = 0; /* when 1 include "None" */
+***************
+*** 225,236 ****
+ * 22000 - 22999 CONTAINED indicator (current_syn_inc_tag added)
+ * 23000 - 32767 cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
+ */
+! #define SYNID_ALLBUT 20000 /* syntax group ID for contains=ALLBUT */
+ #define SYNID_TOP 21000 /* syntax group ID for contains=TOP */
+ #define SYNID_CONTAINED 22000 /* syntax group ID for contains=CONTAINED */
+ #define SYNID_CLUSTER 23000 /* first syntax group ID for clusters */
+
+- #define MAX_SYNID SYNID_ALLBUT
+ #define MAX_SYN_INC_TAG 999 /* maximum before the above overflow */
+ #define MAX_CLUSTER_ID (32767 - SYNID_CLUSTER)
+
+--- 227,237 ----
+ * 22000 - 22999 CONTAINED indicator (current_syn_inc_tag added)
+ * 23000 - 32767 cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
+ */
+! #define SYNID_ALLBUT MAX_HL_ID /* syntax group ID for contains=ALLBUT */
+ #define SYNID_TOP 21000 /* syntax group ID for contains=TOP */
+ #define SYNID_CONTAINED 22000 /* syntax group ID for contains=CONTAINED */
+ #define SYNID_CLUSTER 23000 /* first syntax group ID for clusters */
+
+ #define MAX_SYN_INC_TAG 999 /* maximum before the above overflow */
+ #define MAX_CLUSTER_ID (32767 - SYNID_CLUSTER)
+
+***************
+*** 6462,6468 ****
+
+ #endif /* FEAT_SYN_HL */
+
+-
+ /**************************************
+ * Highlighting stuff *
+ **************************************/
+--- 6463,6468 ----
+***************
+*** 8996,9004 ****
+ highlight_ga.ga_growsize = 10;
+ }
+
+! if (highlight_ga.ga_len >= MAX_SYNID)
+ {
+! EMSG(_("E849: Too many syntax groups"));
+ vim_free(name);
+ return 0;
+ }
+--- 8996,9004 ----
+ highlight_ga.ga_growsize = 10;
+ }
+
+! if (highlight_ga.ga_len >= MAX_HL_ID)
+ {
+! EMSG(_("E849: Too many highlight and syntax groups"));
+ vim_free(name);
+ return 0;
+ }
+*** ../vim-7.3.153/src/version.c 2011-04-02 14:44:50.000000000 +0200
+--- src/version.c 2011-04-02 14:52:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 154,
+ /**/
+
+--
+BEDEVERE: Why do you think she is a witch?
+SECOND VILLAGER: She turned me into a newt.
+BEDEVERE: A newt?
+SECOND VILLAGER: (After looking at himself for some time) I got better.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.155
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.155
+Problem: Crash when using map(), filter() and remove() on v:. (ZyX)
+ Also for extend(). (Yukihiro Nakadaira)
+Solution: Mark v: as locked. Also correct locking error messages.
+Files: src/eval.c
+
+
+*** ../vim-7.3.154/src/eval.c 2011-04-01 16:07:41.000000000 +0200
+--- src/eval.c 2011-04-11 13:28:34.000000000 +0200
+***************
+*** 853,858 ****
+--- 853,859 ----
+
+ init_var_dict(&globvardict, &globvars_var);
+ init_var_dict(&vimvardict, &vimvars_var);
++ vimvardict.dv_lock = VAR_FIXED;
+ hash_init(&compat_hashtab);
+ hash_init(&func_hashtab);
+
+***************
+*** 8545,8551 ****
+ if (argvars[0].v_type == VAR_LIST)
+ {
+ if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)"add()")
+ && list_append_tv(l, &argvars[1]) == OK)
+ copy_tv(&argvars[0], rettv);
+ }
+--- 8546,8552 ----
+ if (argvars[0].v_type == VAR_LIST)
+ {
+ if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)_("add() argument"))
+ && list_append_tv(l, &argvars[1]) == OK)
+ copy_tv(&argvars[0], rettv);
+ }
+***************
+*** 9946,9951 ****
+--- 9947,9954 ----
+ typval_T *argvars;
+ typval_T *rettv;
+ {
++ char *arg_errmsg = N_("extend() argument");
++
+ if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
+ {
+ list_T *l1, *l2;
+***************
+*** 9955,9961 ****
+
+ l1 = argvars[0].vval.v_list;
+ l2 = argvars[1].vval.v_list;
+! if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)"extend()")
+ && l2 != NULL)
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+--- 9958,9964 ----
+
+ l1 = argvars[0].vval.v_list;
+ l2 = argvars[1].vval.v_list;
+! if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)_(arg_errmsg))
+ && l2 != NULL)
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+***************
+*** 9994,10000 ****
+
+ d1 = argvars[0].vval.v_dict;
+ d2 = argvars[1].vval.v_dict;
+! if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)"extend()")
+ && d2 != NULL)
+ {
+ /* Check the third argument. */
+--- 9997,10003 ----
+
+ d1 = argvars[0].vval.v_dict;
+ d2 = argvars[1].vval.v_dict;
+! if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)_(arg_errmsg))
+ && d2 != NULL)
+ {
+ /* Check the third argument. */
+***************
+*** 10236,10255 ****
+ typval_T save_key;
+ int rem;
+ int todo;
+! char_u *ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
+ int save_did_emsg;
+ int idx = 0;
+
+ if (argvars[0].v_type == VAR_LIST)
+ {
+ if ((l = argvars[0].vval.v_list) == NULL
+! || (map && tv_check_lock(l->lv_lock, ermsg)))
+ return;
+ }
+ else if (argvars[0].v_type == VAR_DICT)
+ {
+ if ((d = argvars[0].vval.v_dict) == NULL
+! || (map && tv_check_lock(d->dv_lock, ermsg)))
+ return;
+ }
+ else
+--- 10239,10260 ----
+ typval_T save_key;
+ int rem;
+ int todo;
+! char_u *ermsg = (char_u *)(map ? "map()" : "filter()");
+! char *arg_errmsg = (map ? N_("map() argument")
+! : N_("filter() argument"));
+ int save_did_emsg;
+ int idx = 0;
+
+ if (argvars[0].v_type == VAR_LIST)
+ {
+ if ((l = argvars[0].vval.v_list) == NULL
+! || tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
+ return;
+ }
+ else if (argvars[0].v_type == VAR_DICT)
+ {
+ if ((d = argvars[0].vval.v_dict) == NULL
+! || tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
+ return;
+ }
+ else
+***************
+*** 10286,10292 ****
+ {
+ --todo;
+ di = HI2DI(hi);
+! if (tv_check_lock(di->di_tv.v_lock, ermsg))
+ break;
+ vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
+ if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
+--- 10291,10298 ----
+ {
+ --todo;
+ di = HI2DI(hi);
+! if (tv_check_lock(di->di_tv.v_lock,
+! (char_u *)_(arg_errmsg)))
+ break;
+ vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
+ if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
+***************
+*** 10305,10311 ****
+
+ for (li = l->lv_first; li != NULL; li = nli)
+ {
+! if (tv_check_lock(li->li_tv.v_lock, ermsg))
+ break;
+ nli = li->li_next;
+ vimvars[VV_KEY].vv_nr = idx;
+--- 10311,10317 ----
+
+ for (li = l->lv_first; li != NULL; li = nli)
+ {
+! if (tv_check_lock(li->li_tv.v_lock, (char_u *)_(arg_errmsg)))
+ break;
+ nli = li->li_next;
+ vimvars[VV_KEY].vv_nr = idx;
+***************
+*** 12910,12916 ****
+ if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listarg), "insert()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)"insert()"))
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ before = get_tv_number_chk(&argvars[2], &error);
+--- 12916,12922 ----
+ if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listarg), "insert()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)_("insert() argument")))
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ before = get_tv_number_chk(&argvars[2], &error);
+***************
+*** 14775,14787 ****
+ char_u *key;
+ dict_T *d;
+ dictitem_T *di;
+
+ if (argvars[0].v_type == VAR_DICT)
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ EMSG2(_(e_toomanyarg), "remove()");
+ else if ((d = argvars[0].vval.v_dict) != NULL
+! && !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
+ {
+ key = get_tv_string_chk(&argvars[1]);
+ if (key != NULL)
+--- 14781,14794 ----
+ char_u *key;
+ dict_T *d;
+ dictitem_T *di;
++ char *arg_errmsg = N_("remove() argument");
+
+ if (argvars[0].v_type == VAR_DICT)
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ EMSG2(_(e_toomanyarg), "remove()");
+ else if ((d = argvars[0].vval.v_dict) != NULL
+! && !tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
+ {
+ key = get_tv_string_chk(&argvars[1]);
+ if (key != NULL)
+***************
+*** 14801,14807 ****
+ else if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listdictarg), "remove()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
+ {
+ int error = FALSE;
+
+--- 14808,14814 ----
+ else if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listdictarg), "remove()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
+ {
+ int error = FALSE;
+
+***************
+*** 15135,15141 ****
+ if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listarg), "reverse()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)"reverse()"))
+ {
+ li = l->lv_last;
+ l->lv_first = l->lv_last = NULL;
+--- 15142,15148 ----
+ if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listarg), "reverse()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)_("reverse() argument")))
+ {
+ li = l->lv_last;
+ l->lv_first = l->lv_last = NULL;
+***************
+*** 16432,16438 ****
+ else
+ {
+ l = argvars[0].vval.v_list;
+! if (l == NULL || tv_check_lock(l->lv_lock, (char_u *)"sort()"))
+ return;
+ rettv->vval.v_list = l;
+ rettv->v_type = VAR_LIST;
+--- 16439,16446 ----
+ else
+ {
+ l = argvars[0].vval.v_list;
+! if (l == NULL || tv_check_lock(l->lv_lock,
+! (char_u *)_("sort() argument")))
+ return;
+ rettv->vval.v_list = l;
+ rettv->v_type = VAR_LIST;
+*** ../vim-7.3.154/src/version.c 2011-04-02 15:12:45.000000000 +0200
+--- src/version.c 2011-04-11 13:13:38.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 155,
+ /**/
+
+--
+I used to be indecisive, now I'm not sure.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.156
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.156
+Problem: Tty names possibly left unterminated.
+Solution: Use vim_strncpy() instead of strncpy().
+Files: src/pty.c
+
+
+*** ../vim-7.3.155/src/pty.c 2010-08-15 21:57:28.000000000 +0200
+--- src/pty.c 2011-04-11 14:02:49.000000000 +0200
+***************
+*** 209,216 ****
+ #ifdef _SEQUENT_
+ fvhangup(s);
+ #endif
+! strncpy(PtyName, m, sizeof(PtyName));
+! strncpy(TtyName, s, sizeof(TtyName));
+ initmaster(f);
+ *ttyn = TtyName;
+ return f;
+--- 209,216 ----
+ #ifdef _SEQUENT_
+ fvhangup(s);
+ #endif
+! vim_strncpy((char_u *)PtyName, (char_u *)m, sizeof(PtyName) - 1);
+! vim_strncpy((char_u *)TtyName, (char_u *)s, sizeof(TtyName) - 1);
+ initmaster(f);
+ *ttyn = TtyName;
+ return f;
+***************
+*** 301,307 ****
+ return -1;
+ }
+ signal(SIGCHLD, sigcld);
+! strncpy(TtyName, m, sizeof(TtyName));
+ initmaster(f);
+ *ttyn = TtyName;
+ return f;
+--- 301,307 ----
+ return -1;
+ }
+ signal(SIGCHLD, sigcld);
+! vim_strncpy((char_u *)TtyName, (char_u *)m, sizeof(TtyName) - 1);
+ initmaster(f);
+ *ttyn = TtyName;
+ return f;
+***************
+*** 326,332 ****
+ /* a dumb looking loop replaced by mycrofts code: */
+ if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
+ return -1;
+! strncpy(TtyName, ttyname(f), sizeof(TtyName));
+ if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
+ {
+ close(f);
+--- 326,332 ----
+ /* a dumb looking loop replaced by mycrofts code: */
+ if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
+ return -1;
+! vim_strncpy((char_u *)TtyName, (char_u *)ttyname(f), sizeof(TtyName) - 1);
+ if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
+ {
+ close(f);
+*** ../vim-7.3.155/src/version.c 2011-04-11 13:46:07.000000000 +0200
+--- src/version.c 2011-04-11 14:23:38.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 156,
+ /**/
+
+--
+I think that you'll agree that engineers are very effective in their social
+interactions. It's the "normal" people who are nuts.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.157
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.157
+Problem: Superfluous assignment.
+Solution: Remove assignment.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.156/src/misc1.c 2011-03-22 13:07:19.000000000 +0100
+--- src/misc1.c 2011-04-11 14:11:17.000000000 +0200
+***************
+*** 6773,6780 ****
+ {
+ curwin->w_cursor.lnum = our_paren_pos.lnum;
+ curwin->w_cursor.col = col;
+! if ((trypos = find_match_paren(ind_maxparen,
+! ind_maxcomment)) != NULL)
+ amount += ind_unclosed2;
+ else
+ amount += ind_unclosed;
+--- 6775,6781 ----
+ {
+ curwin->w_cursor.lnum = our_paren_pos.lnum;
+ curwin->w_cursor.col = col;
+! if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
+ amount += ind_unclosed2;
+ else
+ amount += ind_unclosed;
+*** ../vim-7.3.156/src/version.c 2011-04-11 14:24:33.000000000 +0200
+--- src/version.c 2011-04-11 14:25:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 157,
+ /**/
+
+--
+A radioactive cat has eighteen half-lives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.158
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.158
+Problem: Might use uninitialized memory in C indenting.
+Solution: Init arrays to empty.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.157/src/misc1.c 2011-04-11 14:26:15.000000000 +0200
+--- src/misc1.c 2011-04-11 14:11:17.000000000 +0200
+***************
+*** 6433,6438 ****
+--- 6433,6440 ----
+ /* find how indented the line beginning the comment is */
+ getvcol(curwin, trypos, &col, NULL, NULL);
+ amount = col;
++ *lead_start = NUL;
++ *lead_middle = NUL;
+
+ p = curbuf->b_p_com;
+ while (*p != NUL)
+*** ../vim-7.3.157/src/version.c 2011-04-11 14:26:15.000000000 +0200
+--- src/version.c 2011-04-11 14:27:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 158,
+ /**/
+
+--
+It's totally unfair to suggest - as many have - that engineers are socially
+inept. Engineers simply have different objectives when it comes to social
+interaction.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.159
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.159
+Problem: Using uninitialized pointer when out of memory.
+Solution: Check for NULL return value.
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.158/src/mbyte.c 2010-10-27 13:37:39.000000000 +0200
+--- src/mbyte.c 2011-04-11 14:17:39.000000000 +0200
+***************
+*** 4129,4135 ****
+ done = to - (char *)result;
+ }
+
+! if (resultlenp != NULL)
+ *resultlenp = (int)(to - (char *)result);
+ return result;
+ }
+--- 4129,4135 ----
+ done = to - (char *)result;
+ }
+
+! if (resultlenp != NULL && result != NULL)
+ *resultlenp = (int)(to - (char *)result);
+ return result;
+ }
+*** ../vim-7.3.158/src/version.c 2011-04-11 14:27:34.000000000 +0200
+--- src/version.c 2011-04-11 14:28:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 159,
+ /**/
+
+--
+I learned the customs and mannerisms of engineers by observing them, much the
+way Jane Goodall learned about the great apes, but without the hassle of
+grooming.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.160
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.160
+Problem: Unsafe string copying.
+Solution: Use vim_strncpy() instead of strcpy(). Use vim_strcat() instead
+ of strcat().
+Files: src/buffer.c, src/ex_docmd.c, src/hardcopy.c, src/menu.c,
+ src/misc1.c, src/misc2.c, src/proto/misc2.pro, src/netbeans.c,
+ src/os_unix.c, src/spell.c, src/syntax.c, src/tag.c
+
+*** ../vim-7.3.159/src/buffer.c 2011-02-15 14:24:42.000000000 +0100
+--- src/buffer.c 2011-04-11 16:08:38.000000000 +0200
+***************
+*** 3176,3182 ****
+ /* format: "fname + (path) (1 of 2) - VIM" */
+
+ if (curbuf->b_fname == NULL)
+! STRCPY(buf, _("[No Name]"));
+ else
+ {
+ p = transstr(gettail(curbuf->b_fname));
+--- 3176,3182 ----
+ /* format: "fname + (path) (1 of 2) - VIM" */
+
+ if (curbuf->b_fname == NULL)
+! vim_strncpy(buf, (char_u *)_("[No Name]"), IOSIZE - 100);
+ else
+ {
+ p = transstr(gettail(curbuf->b_fname));
+***************
+*** 3232,3238 ****
+ if (serverName != NULL)
+ {
+ STRCAT(buf, " - ");
+! STRCAT(buf, serverName);
+ }
+ else
+ #endif
+--- 3232,3238 ----
+ if (serverName != NULL)
+ {
+ STRCAT(buf, " - ");
+! vim_strcat(buf, serverName, IOSIZE);
+ }
+ else
+ #endif
+*** ../vim-7.3.159/src/ex_docmd.c 2011-03-03 15:54:45.000000000 +0100
+--- src/ex_docmd.c 2011-04-11 15:43:48.000000000 +0200
+***************
+*** 5096,5102 ****
+ char_u buff[IOSIZE];
+
+ if (n == 1)
+! STRCPY(buff, _("1 more file to edit. Quit anyway?"));
+ else
+ vim_snprintf((char *)buff, IOSIZE,
+ _("%d more files to edit. Quit anyway?"), n);
+--- 5096,5104 ----
+ char_u buff[IOSIZE];
+
+ if (n == 1)
+! vim_strncpy(buff,
+! (char_u *)_("1 more file to edit. Quit anyway?"),
+! IOSIZE - 1);
+ else
+ vim_snprintf((char *)buff, IOSIZE,
+ _("%d more files to edit. Quit anyway?"), n);
+*** ../vim-7.3.159/src/hardcopy.c 2010-08-15 21:57:25.000000000 +0200
+--- src/hardcopy.c 2011-04-11 15:30:09.000000000 +0200
+***************
+*** 1761,1772 ****
+ {
+ char_u buffer[MAXPATHL + 1];
+
+! STRCPY(resource->name, name);
+ /* Look for named resource file in runtimepath */
+ STRCPY(buffer, "print");
+ add_pathsep(buffer);
+! STRCAT(buffer, name);
+! STRCAT(buffer, ".ps");
+ resource->filename[0] = NUL;
+ return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ resource->filename)
+--- 1761,1772 ----
+ {
+ char_u buffer[MAXPATHL + 1];
+
+! vim_strncpy(resource->name, (char_u *)name, 63);
+ /* Look for named resource file in runtimepath */
+ STRCPY(buffer, "print");
+ add_pathsep(buffer);
+! vim_strcat(buffer, (char_u *)name, MAXPATHL);
+! vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
+ resource->filename[0] = NUL;
+ return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ resource->filename)
+*** ../vim-7.3.159/src/menu.c 2011-01-04 17:49:25.000000000 +0100
+--- src/menu.c 2011-04-11 15:17:21.000000000 +0200
+***************
+*** 1394,1400 ****
+ int idx;
+ {
+ static vimmenu_T *menu = NULL;
+! static char_u tbuffer[256]; /*hack*/
+ char_u *str;
+ #ifdef FEAT_MULTI_LANG
+ static int should_advance = FALSE;
+--- 1394,1401 ----
+ int idx;
+ {
+ static vimmenu_T *menu = NULL;
+! #define TBUFFER_LEN 256
+! static char_u tbuffer[TBUFFER_LEN]; /*hack*/
+ char_u *str;
+ #ifdef FEAT_MULTI_LANG
+ static int should_advance = FALSE;
+***************
+*** 1428,1438 ****
+ {
+ #ifdef FEAT_MULTI_LANG
+ if (should_advance)
+! STRCPY(tbuffer, menu->en_dname);
+ else
+ {
+ #endif
+! STRCPY(tbuffer, menu->dname);
+ #ifdef FEAT_MULTI_LANG
+ if (menu->en_dname == NULL)
+ should_advance = TRUE;
+--- 1429,1439 ----
+ {
+ #ifdef FEAT_MULTI_LANG
+ if (should_advance)
+! vim_strncpy(tbuffer, menu->en_dname, TBUFFER_LEN - 2);
+ else
+ {
+ #endif
+! vim_strncpy(tbuffer, menu->dname, TBUFFER_LEN - 2);
+ #ifdef FEAT_MULTI_LANG
+ if (menu->en_dname == NULL)
+ should_advance = TRUE;
+*** ../vim-7.3.159/src/misc1.c 2011-04-11 14:27:34.000000000 +0200
+--- src/misc1.c 2011-04-11 16:03:22.000000000 +0200
+***************
+*** 3332,3350 ****
+ if (pn == 1)
+ {
+ if (n > 0)
+! STRCPY(msg_buf, _("1 more line"));
+ else
+! STRCPY(msg_buf, _("1 line less"));
+ }
+ else
+ {
+ if (n > 0)
+! sprintf((char *)msg_buf, _("%ld more lines"), pn);
+ else
+! sprintf((char *)msg_buf, _("%ld fewer lines"), pn);
+ }
+ if (got_int)
+! STRCAT(msg_buf, _(" (Interrupted)"));
+ if (msg(msg_buf))
+ {
+ set_keep_msg(msg_buf, 0);
+--- 3332,3354 ----
+ if (pn == 1)
+ {
+ if (n > 0)
+! vim_strncpy(msg_buf, (char_u *)_("1 more line"),
+! MSG_BUF_LEN - 1);
+ else
+! vim_strncpy(msg_buf, (char_u *)_("1 line less"),
+! MSG_BUF_LEN - 1);
+ }
+ else
+ {
+ if (n > 0)
+! vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+! _("%ld more lines"), pn);
+ else
+! vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+! _("%ld fewer lines"), pn);
+ }
+ if (got_int)
+! vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
+ if (msg(msg_buf))
+ {
+ set_keep_msg(msg_buf, 0);
+*** ../vim-7.3.159/src/misc2.c 2010-12-08 13:11:15.000000000 +0100
+--- src/misc2.c 2011-04-11 15:30:20.000000000 +0200
+***************
+*** 1647,1652 ****
+--- 1647,1674 ----
+ }
+
+ /*
++ * Like strcat(), but make sure the result fits in "tosize" bytes and is
++ * always NUL terminated.
++ */
++ void
++ vim_strcat(to, from, tosize)
++ char_u *to;
++ char_u *from;
++ size_t tosize;
++ {
++ size_t tolen = STRLEN(to);
++ size_t fromlen = STRLEN(from);
++
++ if (tolen + fromlen + 1 > tosize)
++ {
++ mch_memmove(to + tolen, from, tosize - tolen - 1);
++ to[tosize - 1] = NUL;
++ }
++ else
++ STRCPY(to + tolen, from);
++ }
++
++ /*
+ * Isolate one part of a string option where parts are separated with
+ * "sep_chars".
+ * The part is copied into "buf[maxlen]".
+*** ../vim-7.3.159/src/proto/misc2.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/misc2.pro 2011-04-11 15:29:55.000000000 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+ void copy_chars __ARGS((char_u *ptr, size_t count, int c));
+ void del_trailing_spaces __ARGS((char_u *ptr));
+ void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
++ void vim_strcat __ARGS((char_u *to, char_u *from, size_t tosize));
+ int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
+ void vim_free __ARGS((void *x));
+ int vim_stricmp __ARGS((char *s1, char *s2));
+*** ../vim-7.3.159/src/netbeans.c 2011-04-01 15:33:54.000000000 +0200
+--- src/netbeans.c 2011-04-11 16:02:51.000000000 +0200
+***************
+*** 3914,3927 ****
+ }
+ else
+ {
+! char_u ebuf[BUFSIZ];
+
+! STRCPY(ebuf, (char_u *)_("E505: "));
+! STRCAT(ebuf, IObuff);
+! STRCAT(ebuf, (char_u *)_("is read-only (add ! to override)"));
+! STRCPY(IObuff, ebuf);
+! nbdebug((" %s\n", ebuf ));
+! emsg(IObuff);
+ }
+ }
+
+--- 3914,3925 ----
+ }
+ else
+ {
+! char_u msgbuf[IOSIZE];
+
+! vim_snprintf((char *)msgbuf, IOSIZE,
+! _("E505: %s is read-only (add ! to override)"), IObuff);
+! nbdebug((" %s\n", msgbuf));
+! emsg(msgbuf);
+ }
+ }
+
+*** ../vim-7.3.159/src/os_unix.c 2011-02-15 17:39:14.000000000 +0100
+--- src/os_unix.c 2011-04-11 16:39:11.000000000 +0200
+***************
+*** 5725,5730 ****
+--- 5725,5731 ----
+ if (shell_style == STYLE_PRINT && !did_find_nul)
+ {
+ /* If there is a NUL, set did_find_nul, else set check_spaces */
++ buffer[len] = NUL;
+ if (len && (int)STRLEN(buffer) < (int)len - 1)
+ did_find_nul = TRUE;
+ else
+***************
+*** 6594,6600 ****
+ xterm_hints.x = 2;
+ return TRUE;
+ }
+! if (mouse_code == NULL)
+ {
+ xterm_trace = 0;
+ return FALSE;
+--- 6595,6601 ----
+ xterm_hints.x = 2;
+ return TRUE;
+ }
+! if (mouse_code == NULL || STRLEN(mouse_code) > 45)
+ {
+ xterm_trace = 0;
+ return FALSE;
+*** ../vim-7.3.159/src/spell.c 2011-02-01 13:59:44.000000000 +0100
+--- src/spell.c 2011-04-11 15:50:40.000000000 +0200
+***************
+*** 6957,6963 ****
+ if (ae->ae_add == NULL)
+ *newword = NUL;
+ else
+! STRCPY(newword, ae->ae_add);
+ p = word;
+ if (ae->ae_chop != NULL)
+ {
+--- 6957,6963 ----
+ if (ae->ae_add == NULL)
+ *newword = NUL;
+ else
+! vim_strncpy(newword, ae->ae_add, MAXWLEN - 1);
+ p = word;
+ if (ae->ae_chop != NULL)
+ {
+***************
+*** 6978,6984 ****
+ else
+ {
+ /* suffix: chop/add at the end of the word */
+! STRCPY(newword, word);
+ if (ae->ae_chop != NULL)
+ {
+ /* Remove chop string. */
+--- 6978,6984 ----
+ else
+ {
+ /* suffix: chop/add at the end of the word */
+! vim_strncpy(newword, word, MAXWLEN - 1);
+ if (ae->ae_chop != NULL)
+ {
+ /* Remove chop string. */
+***************
+*** 8654,8660 ****
+ * Write the .sug file.
+ * Make the file name by changing ".spl" to ".sug".
+ */
+! STRCPY(fname, wfname);
+ len = (int)STRLEN(fname);
+ fname[len - 2] = 'u';
+ fname[len - 1] = 'g';
+--- 8654,8660 ----
+ * Write the .sug file.
+ * Make the file name by changing ".spl" to ".sug".
+ */
+! vim_strncpy(fname, wfname, MAXPATHL - 1);
+ len = (int)STRLEN(fname);
+ fname[len - 2] = 'u';
+ fname[len - 1] = 'g';
+***************
+*** 10261,10267 ****
+
+ /* The suggested word may replace only part of the bad word, add
+ * the not replaced part. */
+! STRCPY(wcopy, stp->st_word);
+ if (sug.su_badlen > stp->st_orglen)
+ vim_strncpy(wcopy + stp->st_wordlen,
+ sug.su_badptr + stp->st_orglen,
+--- 10261,10267 ----
+
+ /* The suggested word may replace only part of the bad word, add
+ * the not replaced part. */
+! vim_strncpy(wcopy, stp->st_word, MAXWLEN);
+ if (sug.su_badlen > stp->st_orglen)
+ vim_strncpy(wcopy + stp->st_wordlen,
+ sug.su_badptr + stp->st_orglen,
+***************
+*** 13162,13168 ****
+ pbad = badsound2;
+ }
+
+! if (lendiff > 0)
+ {
+ /* Add part of the bad word to the good word, so that we soundfold
+ * what replaces the bad word. */
+--- 13162,13168 ----
+ pbad = badsound2;
+ }
+
+! if (lendiff > 0 && stp->st_wordlen + lendiff < MAXWLEN)
+ {
+ /* Add part of the bad word to the good word, so that we soundfold
+ * what replaces the bad word. */
+***************
+*** 13875,13881 ****
+ for (i = gap->ga_len - 1; i >= 0; --i)
+ {
+ /* Need to append what follows to check for "the the". */
+! STRCPY(longword, stp[i].st_word);
+ len = stp[i].st_wordlen;
+ vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
+ MAXWLEN - len);
+--- 13875,13881 ----
+ for (i = gap->ga_len - 1; i >= 0; --i)
+ {
+ /* Need to append what follows to check for "the the". */
+! vim_strncpy(longword, stp[i].st_word, MAXWLEN);
+ len = stp[i].st_wordlen;
+ vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
+ MAXWLEN - len);
+***************
+*** 14221,14227 ****
+ *t = NUL;
+ }
+ else
+! STRCPY(word, s);
+
+ smp = (salitem_T *)slang->sl_sal.ga_data;
+
+--- 14221,14227 ----
+ *t = NUL;
+ }
+ else
+! vim_strncpy(word, s, MAXWLEN - 1);
+
+ smp = (salitem_T *)slang->sl_sal.ga_data;
+
+*** ../vim-7.3.159/src/syntax.c 2011-04-02 15:12:45.000000000 +0200
+--- src/syntax.c 2011-04-11 15:44:30.000000000 +0200
+***************
+*** 8576,8583 ****
+ if (iarg & hl_attr_table[i])
+ {
+ if (buf[0] != NUL)
+! STRCAT(buf, ",");
+! STRCAT(buf, hl_name_table[i]);
+ iarg &= ~hl_attr_table[i]; /* don't want "inverse" */
+ }
+ }
+--- 8576,8583 ----
+ if (iarg & hl_attr_table[i])
+ {
+ if (buf[0] != NUL)
+! vim_strcat(buf, (char_u *)",", 100);
+! vim_strcat(buf, (char_u *)hl_name_table[i], 100);
+ iarg &= ~hl_attr_table[i]; /* don't want "inverse" */
+ }
+ }
+*** ../vim-7.3.159/src/tag.c 2011-02-25 15:13:43.000000000 +0100
+--- src/tag.c 2011-04-11 15:34:59.000000000 +0200
+***************
+*** 806,812 ****
+ p = tag_full_fname(&tagp);
+ if (p == NULL)
+ continue;
+! STRCPY(fname, p);
+ vim_free(p);
+
+ /*
+--- 806,812 ----
+ p = tag_full_fname(&tagp);
+ if (p == NULL)
+ continue;
+! vim_strncpy(fname, p, MAXPATHL);
+ vim_free(p);
+
+ /*
+*** ../vim-7.3.159/src/version.c 2011-04-11 14:29:13.000000000 +0200
+--- src/version.c 2011-04-11 16:50:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 160,
+ /**/
+
+--
+If someone questions your market projections, simply point out that your
+target market is "People who are nuts" and "People who will buy any damn
+thing". Nobody is going to tell you there aren't enough of those people
+to go around.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.161
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.161
+Problem: Items on the stack may be too big.
+Solution: Make items static or allocate them.
+Files: src/eval.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c,
+ src/fileio.c, src/hardcopy.c, src/quickfix.c, src/main.c,
+ src/netbeans.c, src/spell.c, src/tag.c, src/vim.h, src/xxd/xxd.c
+
+
+*** ../vim-7.3.160/src/eval.c 2011-04-11 13:46:07.000000000 +0200
+--- src/eval.c 2011-04-11 21:05:50.000000000 +0200
+***************
+*** 11100,11117 ****
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+ {
+! char_u cwd[MAXPATHL];
+
+ rettv->v_type = VAR_STRING;
+! if (mch_dirname(cwd, MAXPATHL) == FAIL)
+! rettv->vval.v_string = NULL;
+! else
+ {
+! rettv->vval.v_string = vim_strsave(cwd);
+ #ifdef BACKSLASH_IN_FILENAME
+! if (rettv->vval.v_string != NULL)
+! slash_adjust(rettv->vval.v_string);
+ #endif
+ }
+ }
+
+--- 11100,11121 ----
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+ {
+! char_u *cwd;
+
+ rettv->v_type = VAR_STRING;
+! rettv->vval.v_string = NULL;
+! cwd = alloc(MAXPATHL);
+! if (cwd != NULL)
+ {
+! if (mch_dirname(cwd, MAXPATHL) != FAIL)
+! {
+! rettv->vval.v_string = vim_strsave(cwd);
+ #ifdef BACKSLASH_IN_FILENAME
+! if (rettv->vval.v_string != NULL)
+! slash_adjust(rettv->vval.v_string);
+ #endif
++ }
++ vim_free(cwd);
+ }
+ }
+
+***************
+*** 14938,14943 ****
+--- 14942,14950 ----
+ typval_T *rettv;
+ {
+ char_u *p;
++ #ifdef HAVE_READLINK
++ char_u *buf = NULL;
++ #endif
+
+ p = get_tv_string(&argvars[0]);
+ #ifdef FEAT_SHORTCUT
+***************
+*** 14953,14959 ****
+ #else
+ # ifdef HAVE_READLINK
+ {
+- char_u buf[MAXPATHL + 1];
+ char_u *cpy;
+ int len;
+ char_u *remain = NULL;
+--- 14960,14965 ----
+***************
+*** 14981,14986 ****
+--- 14987,14996 ----
+ q[-1] = NUL;
+ }
+
++ buf = alloc(MAXPATHL + 1);
++ if (buf == NULL)
++ goto fail;
++
+ for (;;)
+ {
+ for (;;)
+***************
+*** 15124,15129 ****
+--- 15134,15140 ----
+
+ #ifdef HAVE_READLINK
+ fail:
++ vim_free(buf);
+ #endif
+ rettv->v_type = VAR_STRING;
+ }
+***************
+*** 17604,17621 ****
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+ {
+! char_u fname[MAXPATHL + 1];
+ tagname_T tn;
+ int first;
+
+ if (rettv_list_alloc(rettv) == FAIL)
+ return;
+
+ for (first = TRUE; ; first = FALSE)
+ if (get_tagfname(&tn, first, fname) == FAIL
+ || list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
+ break;
+ tagname_free(&tn);
+ }
+
+ /*
+--- 17615,17636 ----
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+ {
+! char_u *fname;
+ tagname_T tn;
+ int first;
+
+ if (rettv_list_alloc(rettv) == FAIL)
+ return;
++ fname = alloc(MAXPATHL);
++ if (fname == NULL)
++ return;
+
+ for (first = TRUE; ; first = FALSE)
+ if (get_tagfname(&tn, first, fname) == FAIL
+ || list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
+ break;
+ tagname_free(&tn);
++ vim_free(fname);
+ }
+
+ /*
+*** ../vim-7.3.160/src/ex_cmds.c 2011-02-01 13:48:47.000000000 +0100
+--- src/ex_cmds.c 2011-04-11 20:51:34.000000000 +0200
+***************
+*** 2777,2783 ****
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if (p_confirm || cmdmod.confirm)
+ {
+! char_u buff[IOSIZE];
+
+ dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
+--- 2777,2783 ----
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if (p_confirm || cmdmod.confirm)
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+
+ dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
+***************
+*** 2795,2801 ****
+ /* For ":w! filename" check that no swap file exists for "filename". */
+ if (other && !emsg_silent)
+ {
+! char_u dir[MAXPATHL];
+ char_u *p;
+ int r;
+ char_u *swapname;
+--- 2795,2801 ----
+ /* For ":w! filename" check that no swap file exists for "filename". */
+ if (other && !emsg_silent)
+ {
+! char_u *dir;
+ char_u *p;
+ int r;
+ char_u *swapname;
+***************
+*** 2806,2825 ****
+ * Use 'shortname' of the current buffer, since there is no buffer
+ * for the written file. */
+ if (*p_dir == NUL)
+ STRCPY(dir, ".");
+ else
+ {
+ p = p_dir;
+ copy_option_part(&p, dir, MAXPATHL, ",");
+ }
+ swapname = makeswapname(fname, ffname, curbuf, dir);
+ r = vim_fexists(swapname);
+ if (r)
+ {
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if (p_confirm || cmdmod.confirm)
+ {
+! char_u buff[IOSIZE];
+
+ dialog_msg(buff,
+ _("Swap file \"%s\" exists, overwrite anyway?"),
+--- 2806,2834 ----
+ * Use 'shortname' of the current buffer, since there is no buffer
+ * for the written file. */
+ if (*p_dir == NUL)
++ {
++ dir = alloc(5);
++ if (dir == NULL)
++ return FAIL;
+ STRCPY(dir, ".");
++ }
+ else
+ {
++ dir = alloc(MAXPATHL);
++ if (dir == NULL)
++ return FAIL;
+ p = p_dir;
+ copy_option_part(&p, dir, MAXPATHL, ",");
+ }
+ swapname = makeswapname(fname, ffname, curbuf, dir);
++ vim_free(dir);
+ r = vim_fexists(swapname);
+ if (r)
+ {
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if (p_confirm || cmdmod.confirm)
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+
+ dialog_msg(buff,
+ _("Swap file \"%s\" exists, overwrite anyway?"),
+***************
+*** 2969,2975 ****
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
+ {
+! char_u buff[IOSIZE];
+
+ if (buf->b_p_ro)
+ dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
+--- 2978,2984 ----
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+
+ if (buf->b_p_ro)
+ dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
+*** ../vim-7.3.160/src/ex_cmds2.c 2011-02-25 14:46:06.000000000 +0100
+--- src/ex_cmds2.c 2011-04-11 20:51:40.000000000 +0200
+***************
+*** 1492,1498 ****
+ buf_T *buf;
+ int checkall; /* may abandon all changed buffers */
+ {
+! char_u buff[IOSIZE];
+ int ret;
+ buf_T *buf2;
+
+--- 1492,1498 ----
+ buf_T *buf;
+ int checkall; /* may abandon all changed buffers */
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+ int ret;
+ buf_T *buf2;
+
+*** ../vim-7.3.160/src/ex_docmd.c 2011-04-11 16:56:29.000000000 +0200
+--- src/ex_docmd.c 2011-04-11 21:20:35.000000000 +0200
+***************
+*** 5093,5106 ****
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
+ {
+! char_u buff[IOSIZE];
+
+ if (n == 1)
+ vim_strncpy(buff,
+ (char_u *)_("1 more file to edit. Quit anyway?"),
+! IOSIZE - 1);
+ else
+! vim_snprintf((char *)buff, IOSIZE,
+ _("%d more files to edit. Quit anyway?"), n);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
+ return OK;
+--- 5093,5106 ----
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+
+ if (n == 1)
+ vim_strncpy(buff,
+ (char_u *)_("1 more file to edit. Quit anyway?"),
+! DIALOG_MSG_SIZE - 1);
+ else
+! vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
+ _("%d more files to edit. Quit anyway?"), n);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
+ return OK;
+***************
+*** 8926,8960 ****
+ failed = TRUE;
+ if (eap->cmdidx == CMD_mksession)
+ {
+! char_u dirnow[MAXPATHL]; /* current directory */
+
+! /*
+! * Change to session file's dir.
+! */
+! if (mch_dirname(dirnow, MAXPATHL) == FAIL
+! || mch_chdir((char *)dirnow) != 0)
+! *dirnow = NUL;
+! if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
+! {
+! if (vim_chdirfile(fname) == OK)
+! shorten_fnames(TRUE);
+! }
+! else if (*dirnow != NUL
+! && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+ {
+! if (mch_chdir((char *)globaldir) == 0)
+! shorten_fnames(TRUE);
+! }
+
+! failed |= (makeopens(fd, dirnow) == FAIL);
+
+! /* restore original dir */
+! if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
+ || ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
+! {
+! if (mch_chdir((char *)dirnow) != 0)
+! EMSG(_(e_prev_dir));
+! shorten_fnames(TRUE);
+ }
+ }
+ else
+--- 8926,8967 ----
+ failed = TRUE;
+ if (eap->cmdidx == CMD_mksession)
+ {
+! char_u *dirnow; /* current directory */
+
+! dirnow = alloc(MAXPATHL);
+! if (dirnow == NULL)
+! failed = TRUE;
+! else
+ {
+! /*
+! * Change to session file's dir.
+! */
+! if (mch_dirname(dirnow, MAXPATHL) == FAIL
+! || mch_chdir((char *)dirnow) != 0)
+! *dirnow = NUL;
+! if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
+! {
+! if (vim_chdirfile(fname) == OK)
+! shorten_fnames(TRUE);
+! }
+! else if (*dirnow != NUL
+! && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+! {
+! if (mch_chdir((char *)globaldir) == 0)
+! shorten_fnames(TRUE);
+! }
+
+! failed |= (makeopens(fd, dirnow) == FAIL);
+
+! /* restore original dir */
+! if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
+ || ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
+! {
+! if (mch_chdir((char *)dirnow) != 0)
+! EMSG(_(e_prev_dir));
+! shorten_fnames(TRUE);
+! }
+! vim_free(dirnow);
+ }
+ }
+ else
+***************
+*** 8985,8994 ****
+ else if (eap->cmdidx == CMD_mksession)
+ {
+ /* successful session write - set this_session var */
+! char_u tbuf[MAXPATHL];
+
+! if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
+! set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+ }
+ #endif
+ #ifdef MKSESSION_NL
+--- 8992,9006 ----
+ else if (eap->cmdidx == CMD_mksession)
+ {
+ /* successful session write - set this_session var */
+! char_u *tbuf;
+
+! tbuf = alloc(MAXPATHL);
+! if (tbuf != NULL)
+! {
+! if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
+! set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+! vim_free(tbuf);
+! }
+ }
+ #endif
+ #ifdef MKSESSION_NL
+***************
+*** 10677,10683 ****
+ unsigned *flagp;
+ {
+ int i;
+! char_u buf[MAXPATHL];
+ char_u *s;
+
+ if (gap->ga_len == 0)
+--- 10689,10695 ----
+ unsigned *flagp;
+ {
+ int i;
+! char_u *buf = NULL;
+ char_u *s;
+
+ if (gap->ga_len == 0)
+***************
+*** 10692,10702 ****
+ {
+ if (fullname)
+ {
+! (void)vim_FullName(s, buf, MAXPATHL, FALSE);
+! s = buf;
+ }
+ if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
+ return FAIL;
+ }
+ }
+ return put_eol(fd);
+--- 10704,10722 ----
+ {
+ if (fullname)
+ {
+! buf = alloc(MAXPATHL);
+! if (buf != NULL)
+! {
+! (void)vim_FullName(s, buf, MAXPATHL, FALSE);
+! s = buf;
+! }
+ }
+ if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
++ {
++ vim_free(buf);
+ return FAIL;
++ }
++ vim_free(buf);
+ }
+ }
+ return put_eol(fd);
+***************
+*** 10925,10931 ****
+
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
+ /*
+! * Make a dialog message in "buff[IOSIZE]".
+ * "format" must contain "%s".
+ */
+ void
+--- 10945,10951 ----
+
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
+ /*
+! * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
+ * "format" must contain "%s".
+ */
+ void
+***************
+*** 10936,10942 ****
+ {
+ if (fname == NULL)
+ fname = (char_u *)_("Untitled");
+! vim_snprintf((char *)buff, IOSIZE, format, fname);
+ }
+ #endif
+
+--- 10956,10962 ----
+ {
+ if (fname == NULL)
+ fname = (char_u *)_("Untitled");
+! vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
+ }
+ #endif
+
+*** ../vim-7.3.160/src/fileio.c 2011-02-25 16:52:13.000000000 +0100
+--- src/fileio.c 2011-04-11 18:35:10.000000000 +0200
+***************
+*** 6023,6037 ****
+ shorten_fname1(full_path)
+ char_u *full_path;
+ {
+! char_u dirname[MAXPATHL];
+ char_u *p = full_path;
+
+ if (mch_dirname(dirname, MAXPATHL) == OK)
+ {
+ p = shorten_fname(full_path, dirname);
+ if (p == NULL || *p == NUL)
+ p = full_path;
+ }
+ return p;
+ }
+ #endif
+--- 6023,6041 ----
+ shorten_fname1(full_path)
+ char_u *full_path;
+ {
+! char_u *dirname;
+ char_u *p = full_path;
+
++ dirname = alloc(MAXPATHL);
++ if (dirname == NULL)
++ return full_path;
+ if (mch_dirname(dirname, MAXPATHL) == OK)
+ {
+ p = shorten_fname(full_path, dirname);
+ if (p == NULL || *p == NUL)
+ p = full_path;
+ }
++ vim_free(dirname);
+ return p;
+ }
+ #endif
+*** ../vim-7.3.160/src/hardcopy.c 2011-04-11 16:56:29.000000000 +0200
+--- src/hardcopy.c 2011-04-11 18:23:38.000000000 +0200
+***************
+*** 1759,1765 ****
+ char *name;
+ struct prt_ps_resource_S *resource;
+ {
+! char_u buffer[MAXPATHL + 1];
+
+ vim_strncpy(resource->name, (char_u *)name, 63);
+ /* Look for named resource file in runtimepath */
+--- 1759,1770 ----
+ char *name;
+ struct prt_ps_resource_S *resource;
+ {
+! char_u *buffer;
+! int retval;
+!
+! buffer = alloc(MAXPATHL + 1);
+! if (buffer == NULL)
+! return FALSE;
+
+ vim_strncpy(resource->name, (char_u *)name, 63);
+ /* Look for named resource file in runtimepath */
+***************
+*** 1768,1776 ****
+ vim_strcat(buffer, (char_u *)name, MAXPATHL);
+ vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
+ resource->filename[0] = NUL;
+! return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ resource->filename)
+ && resource->filename[0] != NUL);
+ }
+
+ /* PS CR and LF characters have platform independent values */
+--- 1773,1783 ----
+ vim_strcat(buffer, (char_u *)name, MAXPATHL);
+ vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
+ resource->filename[0] = NUL;
+! retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ resource->filename)
+ && resource->filename[0] != NUL);
++ vim_free(buffer);
++ return retval;
+ }
+
+ /* PS CR and LF characters have platform independent values */
+***************
+*** 2848,2862 ****
+ double right;
+ double top;
+ double bottom;
+! struct prt_ps_resource_S res_prolog;
+! struct prt_ps_resource_S res_encoding;
+ char buffer[256];
+ char_u *p_encoding;
+ char_u *p;
+ #ifdef FEAT_MBYTE
+! struct prt_ps_resource_S res_cidfont;
+! struct prt_ps_resource_S res_cmap;
+ #endif
+
+ /*
+ * PS DSC Header comments - no PS code!
+--- 2855,2887 ----
+ double right;
+ double top;
+ double bottom;
+! struct prt_ps_resource_S *res_prolog;
+! struct prt_ps_resource_S *res_encoding;
+ char buffer[256];
+ char_u *p_encoding;
+ char_u *p;
+ #ifdef FEAT_MBYTE
+! struct prt_ps_resource_S *res_cidfont;
+! struct prt_ps_resource_S *res_cmap;
+ #endif
++ int retval = FALSE;
++
++ res_prolog = (struct prt_ps_resource_S *)
++ alloc(sizeof(struct prt_ps_resource_S));
++ res_encoding = (struct prt_ps_resource_S *)
++ alloc(sizeof(struct prt_ps_resource_S));
++ #ifdef FEAT_MBYTE
++ res_cidfont = (struct prt_ps_resource_S *)
++ alloc(sizeof(struct prt_ps_resource_S));
++ res_cmap = (struct prt_ps_resource_S *)
++ alloc(sizeof(struct prt_ps_resource_S));
++ #endif
++ if (res_prolog == NULL || res_encoding == NULL
++ #ifdef FEAT_MBYTE
++ || res_cidfont == NULL || res_cmap == NULL
++ #endif
++ )
++ goto theend;
+
+ /*
+ * PS DSC Header comments - no PS code!
+***************
+*** 2932,2958 ****
+ #endif
+
+ /* Search for external resources VIM supplies */
+! if (!prt_find_resource("prolog", &res_prolog))
+ {
+ EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
+ return FALSE;
+ }
+! if (!prt_open_resource(&res_prolog))
+ return FALSE;
+! if (!prt_check_resource(&res_prolog, PRT_PROLOG_VERSION))
+ return FALSE;
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Look for required version of multi-byte printing procset */
+! if (!prt_find_resource("cidfont", &res_cidfont))
+ {
+ EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
+ return FALSE;
+ }
+! if (!prt_open_resource(&res_cidfont))
+ return FALSE;
+! if (!prt_check_resource(&res_cidfont, PRT_CID_PROLOG_VERSION))
+ return FALSE;
+ }
+ #endif
+--- 2957,2983 ----
+ #endif
+
+ /* Search for external resources VIM supplies */
+! if (!prt_find_resource("prolog", res_prolog))
+ {
+ EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
+ return FALSE;
+ }
+! if (!prt_open_resource(res_prolog))
+ return FALSE;
+! if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
+ return FALSE;
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Look for required version of multi-byte printing procset */
+! if (!prt_find_resource("cidfont", res_cidfont))
+ {
+ EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
+ return FALSE;
+ }
+! if (!prt_open_resource(res_cidfont))
+ return FALSE;
+! if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
+ return FALSE;
+ }
+ #endif
+***************
+*** 2968,2974 ****
+ #endif
+ p_encoding = enc_skip(p_penc);
+ if (*p_encoding == NUL
+! || !prt_find_resource((char *)p_encoding, &res_encoding))
+ {
+ /* 'printencoding' not set or not supported - find alternate */
+ #ifdef FEAT_MBYTE
+--- 2993,2999 ----
+ #endif
+ p_encoding = enc_skip(p_penc);
+ if (*p_encoding == NUL
+! || !prt_find_resource((char *)p_encoding, res_encoding))
+ {
+ /* 'printencoding' not set or not supported - find alternate */
+ #ifdef FEAT_MBYTE
+***************
+*** 2977,2989 ****
+ p_encoding = enc_skip(p_enc);
+ props = enc_canon_props(p_encoding);
+ if (!(props & ENC_8BIT)
+! || !prt_find_resource((char *)p_encoding, &res_encoding))
+ /* 8-bit 'encoding' is not supported */
+ #endif
+ {
+ /* Use latin1 as default printing encoding */
+ p_encoding = (char_u *)"latin1";
+! if (!prt_find_resource((char *)p_encoding, &res_encoding))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ p_encoding);
+--- 3002,3014 ----
+ p_encoding = enc_skip(p_enc);
+ props = enc_canon_props(p_encoding);
+ if (!(props & ENC_8BIT)
+! || !prt_find_resource((char *)p_encoding, res_encoding))
+ /* 8-bit 'encoding' is not supported */
+ #endif
+ {
+ /* Use latin1 as default printing encoding */
+ p_encoding = (char_u *)"latin1";
+! if (!prt_find_resource((char *)p_encoding, res_encoding))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ p_encoding);
+***************
+*** 2991,2997 ****
+ }
+ }
+ }
+! if (!prt_open_resource(&res_encoding))
+ return FALSE;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+--- 3016,3022 ----
+ }
+ }
+ }
+! if (!prt_open_resource(res_encoding))
+ return FALSE;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+***************
+*** 3005,3017 ****
+ if (prt_use_courier)
+ {
+ /* Include ASCII range encoding vector */
+! if (!prt_find_resource(prt_ascii_encoding, &res_encoding))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ prt_ascii_encoding);
+ return FALSE;
+ }
+! if (!prt_open_resource(&res_encoding))
+ return FALSE;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+--- 3030,3042 ----
+ if (prt_use_courier)
+ {
+ /* Include ASCII range encoding vector */
+! if (!prt_find_resource(prt_ascii_encoding, res_encoding))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ prt_ascii_encoding);
+ return FALSE;
+ }
+! if (!prt_open_resource(res_encoding))
+ return FALSE;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+***************
+*** 3034,3077 ****
+ if (prt_out_mbyte && prt_custom_cmap)
+ {
+ /* Find user supplied CMap */
+! if (!prt_find_resource(prt_cmap, &res_cmap))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ prt_cmap);
+ return FALSE;
+ }
+! if (!prt_open_resource(&res_cmap))
+ return FALSE;
+ }
+ #endif
+
+ /* List resources supplied */
+! STRCPY(buffer, res_prolog.title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_prolog.version);
+ prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+! STRCPY(buffer, res_cidfont.title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_cidfont.version);
+ prt_dsc_resources(NULL, "procset", buffer);
+
+ if (prt_custom_cmap)
+ {
+! STRCPY(buffer, res_cmap.title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_cmap.version);
+ prt_dsc_resources(NULL, "cmap", buffer);
+ }
+ }
+ if (!prt_out_mbyte || prt_use_courier)
+ #endif
+ {
+! STRCPY(buffer, res_encoding.title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_encoding.version);
+ prt_dsc_resources(NULL, "encoding", buffer);
+ }
+ prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
+--- 3059,3102 ----
+ if (prt_out_mbyte && prt_custom_cmap)
+ {
+ /* Find user supplied CMap */
+! if (!prt_find_resource(prt_cmap, res_cmap))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ prt_cmap);
+ return FALSE;
+ }
+! if (!prt_open_resource(res_cmap))
+ return FALSE;
+ }
+ #endif
+
+ /* List resources supplied */
+! STRCPY(buffer, res_prolog->title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_prolog->version);
+ prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+! STRCPY(buffer, res_cidfont->title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_cidfont->version);
+ prt_dsc_resources(NULL, "procset", buffer);
+
+ if (prt_custom_cmap)
+ {
+! STRCPY(buffer, res_cmap->title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_cmap->version);
+ prt_dsc_resources(NULL, "cmap", buffer);
+ }
+ }
+ if (!prt_out_mbyte || prt_use_courier)
+ #endif
+ {
+! STRCPY(buffer, res_encoding->title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_encoding->version);
+ prt_dsc_resources(NULL, "encoding", buffer);
+ }
+ prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
+***************
+*** 3114,3128 ****
+ prt_dsc_noarg("BeginProlog");
+
+ /* Add required procsets - NOTE: order is important! */
+! if (!prt_add_resource(&res_prolog))
+ return FALSE;
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Add CID font procset, and any user supplied CMap */
+! if (!prt_add_resource(&res_cidfont))
+ return FALSE;
+! if (prt_custom_cmap && !prt_add_resource(&res_cmap))
+ return FALSE;
+ }
+ #endif
+--- 3139,3153 ----
+ prt_dsc_noarg("BeginProlog");
+
+ /* Add required procsets - NOTE: order is important! */
+! if (!prt_add_resource(res_prolog))
+ return FALSE;
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Add CID font procset, and any user supplied CMap */
+! if (!prt_add_resource(res_cidfont))
+ return FALSE;
+! if (prt_custom_cmap && !prt_add_resource(res_cmap))
+ return FALSE;
+ }
+ #endif
+***************
+*** 3132,3138 ****
+ #endif
+ /* There will be only one Roman font encoding to be included in the PS
+ * file. */
+! if (!prt_add_resource(&res_encoding))
+ return FALSE;
+
+ prt_dsc_noarg("EndProlog");
+--- 3157,3163 ----
+ #endif
+ /* There will be only one Roman font encoding to be included in the PS
+ * file. */
+! if (!prt_add_resource(res_encoding))
+ return FALSE;
+
+ prt_dsc_noarg("EndProlog");
+***************
+*** 3248,3254 ****
+ prt_dsc_noarg("EndSetup");
+
+ /* Fail if any problems writing out to the PS file */
+! return !prt_file_error;
+ }
+
+ void
+--- 3273,3289 ----
+ prt_dsc_noarg("EndSetup");
+
+ /* Fail if any problems writing out to the PS file */
+! retval = !prt_file_error;
+!
+! theend:
+! vim_free(res_prolog);
+! vim_free(res_encoding);
+! #ifdef FEAT_MBYTE
+! vim_free(res_cidfont);
+! vim_free(res_cmap);
+! #endif
+!
+! return retval;
+ }
+
+ void
+*** ../vim-7.3.160/src/quickfix.c 2010-12-02 15:33:10.000000000 +0100
+--- src/quickfix.c 2011-04-11 17:54:07.000000000 +0200
+***************
+*** 3049,3056 ****
+ int flags = 0;
+ colnr_T col;
+ long tomatch;
+! char_u dirname_start[MAXPATHL];
+! char_u dirname_now[MAXPATHL];
+ char_u *target_dir = NULL;
+ #ifdef FEAT_AUTOCMD
+ char_u *au_name = NULL;
+--- 3049,3056 ----
+ int flags = 0;
+ colnr_T col;
+ long tomatch;
+! char_u *dirname_start = NULL;
+! char_u *dirname_now = NULL;
+ char_u *target_dir = NULL;
+ #ifdef FEAT_AUTOCMD
+ char_u *au_name = NULL;
+***************
+*** 3128,3133 ****
+--- 3128,3138 ----
+ goto theend;
+ }
+
++ dirname_start = alloc(MAXPATHL);
++ dirname_now = alloc(MAXPATHL);
++ if (dirname_start == NULL || dirname_now == NULL)
++ goto theend;
++
+ /* Remember the current directory, because a BufRead autocommand that does
+ * ":lcd %:p:h" changes the meaning of short path names. */
+ mch_dirname(dirname_start, MAXPATHL);
+***************
+*** 3364,3369 ****
+--- 3369,3376 ----
+ }
+
+ theend:
++ vim_free(dirname_now);
++ vim_free(dirname_start);
+ vim_free(target_dir);
+ vim_free(regmatch.regprog);
+ }
+*** ../vim-7.3.160/src/main.c 2011-03-22 18:10:34.000000000 +0100
+--- src/main.c 2011-04-11 18:06:06.000000000 +0200
+***************
+*** 3814,3820 ****
+ int i;
+ char_u *inicmd = NULL;
+ char_u *p;
+! char_u cwd[MAXPATHL];
+
+ if (filec > 0 && filev[0][0] == '+')
+ {
+--- 3814,3820 ----
+ int i;
+ char_u *inicmd = NULL;
+ char_u *p;
+! char_u *cwd;
+
+ if (filec > 0 && filev[0][0] == '+')
+ {
+***************
+*** 3827,3841 ****
+ mainerr_arg_missing((char_u *)filev[-1]);
+
+ /* Temporarily cd to the current directory to handle relative file names. */
+ if (mch_dirname(cwd, MAXPATHL) != OK)
+ return NULL;
+! if ((p = vim_strsave_escaped_ext(cwd,
+ #ifdef BACKSLASH_IN_FILENAME
+ "", /* rem_backslash() will tell what chars to escape */
+ #else
+ PATH_ESC_CHARS,
+ #endif
+! '\\', TRUE)) == NULL)
+ return NULL;
+ ga_init2(&ga, 1, 100);
+ ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
+--- 3827,3849 ----
+ mainerr_arg_missing((char_u *)filev[-1]);
+
+ /* Temporarily cd to the current directory to handle relative file names. */
++ cwd = alloc(MAXPATHL);
++ if (cwd == NULL)
++ return NULL;
+ if (mch_dirname(cwd, MAXPATHL) != OK)
++ {
++ vim_free(cwd);
+ return NULL;
+! }
+! p = vim_strsave_escaped_ext(cwd,
+ #ifdef BACKSLASH_IN_FILENAME
+ "", /* rem_backslash() will tell what chars to escape */
+ #else
+ PATH_ESC_CHARS,
+ #endif
+! '\\', TRUE);
+! vim_free(cwd);
+! if (p == NULL)
+ return NULL;
+ ga_init2(&ga, 1, 100);
+ ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
+*** ../vim-7.3.160/src/netbeans.c 2011-04-11 16:56:29.000000000 +0200
+--- src/netbeans.c 2011-04-11 18:27:08.000000000 +0200
+***************
+*** 2891,2897 ****
+ char_u *text;
+ linenr_T lnum;
+ int col;
+! char buf[MAXPATHL * 2 + 25];
+ char_u *p;
+
+ /* Don't do anything when 'ballooneval' is off, messages scrolled the
+--- 2891,2897 ----
+ char_u *text;
+ linenr_T lnum;
+ int col;
+! char *buf;
+ char_u *p;
+
+ /* Don't do anything when 'ballooneval' is off, messages scrolled the
+***************
+*** 2905,2919 ****
+ * length. */
+ if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
+ {
+! p = nb_quote(text);
+! if (p != NULL)
+ {
+! vim_snprintf(buf, sizeof(buf),
+! "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+! vim_free(p);
+ }
+- nbdebug(("EVT: %s", buf));
+- nb_send(buf, "netbeans_beval_cb");
+ }
+ vim_free(text);
+ }
+--- 2905,2924 ----
+ * length. */
+ if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
+ {
+! buf = (char *)alloc(MAXPATHL * 2 + 25);
+! if (buf != NULL)
+ {
+! p = nb_quote(text);
+! if (p != NULL)
+! {
+! vim_snprintf(buf, MAXPATHL * 2 + 25,
+! "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+! vim_free(p);
+! }
+! nbdebug(("EVT: %s", buf));
+! nb_send(buf, "netbeans_beval_cb");
+! vim_free(buf);
+ }
+ }
+ vim_free(text);
+ }
+*** ../vim-7.3.160/src/spell.c 2011-04-11 16:56:29.000000000 +0200
+--- src/spell.c 2011-04-11 18:00:49.000000000 +0200
+***************
+*** 8590,8596 ****
+ spellinfo_T *spin;
+ char_u *wfname;
+ {
+! char_u fname[MAXPATHL];
+ int len;
+ slang_T *slang;
+ int free_slang = FALSE;
+--- 8590,8596 ----
+ spellinfo_T *spin;
+ char_u *wfname;
+ {
+! char_u *fname = NULL;
+ int len;
+ slang_T *slang;
+ int free_slang = FALSE;
+***************
+*** 8654,8659 ****
+--- 8654,8662 ----
+ * Write the .sug file.
+ * Make the file name by changing ".spl" to ".sug".
+ */
++ fname = alloc(MAXPATHL);
++ if (fname == NULL)
++ goto theend;
+ vim_strncpy(fname, wfname, MAXPATHL - 1);
+ len = (int)STRLEN(fname);
+ fname[len - 2] = 'u';
+***************
+*** 8661,8666 ****
+--- 8664,8670 ----
+ sug_write(spin, fname);
+
+ theend:
++ vim_free(fname);
+ if (free_slang)
+ slang_free(slang);
+ free_blocks(spin->si_blocks);
+***************
+*** 9106,9113 ****
+ int overwrite; /* overwrite existing output file */
+ int added_word; /* invoked through "zg" */
+ {
+! char_u fname[MAXPATHL];
+! char_u wfname[MAXPATHL];
+ char_u **innames;
+ int incount;
+ afffile_T *(afile[8]);
+--- 9110,9117 ----
+ int overwrite; /* overwrite existing output file */
+ int added_word; /* invoked through "zg" */
+ {
+! char_u *fname = NULL;
+! char_u *wfname;
+ char_u **innames;
+ int incount;
+ afffile_T *(afile[8]);
+***************
+*** 9135,9140 ****
+--- 9139,9148 ----
+ innames = &fnames[1];
+ incount = fcount - 1;
+
++ wfname = alloc(MAXPATHL);
++ if (wfname == NULL)
++ return;
++
+ if (fcount >= 1)
+ {
+ len = (int)STRLEN(fnames[0]);
+***************
+*** 9144,9167 ****
+ * "path/en.latin1.add.spl". */
+ innames = &fnames[0];
+ incount = 1;
+! vim_snprintf((char *)wfname, sizeof(wfname), "%s.spl", fnames[0]);
+ }
+ else if (fcount == 1)
+ {
+ /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
+ innames = &fnames[0];
+ incount = 1;
+! vim_snprintf((char *)wfname, sizeof(wfname), SPL_FNAME_TMPL,
+ fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+ }
+ else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
+ {
+ /* Name ends in ".spl", use as the file name. */
+! vim_strncpy(wfname, fnames[0], sizeof(wfname) - 1);
+ }
+ else
+ /* Name should be language, make the file name from it. */
+! vim_snprintf((char *)wfname, sizeof(wfname), SPL_FNAME_TMPL,
+ fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+
+ /* Check for .ascii.spl. */
+--- 9152,9175 ----
+ * "path/en.latin1.add.spl". */
+ innames = &fnames[0];
+ incount = 1;
+! vim_snprintf((char *)wfname, MAXPATHL, "%s.spl", fnames[0]);
+ }
+ else if (fcount == 1)
+ {
+ /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
+ innames = &fnames[0];
+ incount = 1;
+! vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
+ fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+ }
+ else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
+ {
+ /* Name ends in ".spl", use as the file name. */
+! vim_strncpy(wfname, fnames[0], MAXPATHL - 1);
+ }
+ else
+ /* Name should be language, make the file name from it. */
+! vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
+ fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+
+ /* Check for .ascii.spl. */
+***************
+*** 9186,9199 ****
+ if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
+ {
+ EMSG(_(e_exists));
+! return;
+ }
+ if (mch_isdir(wfname))
+ {
+ EMSG2(_(e_isadir2), wfname);
+! return;
+ }
+
+ /*
+ * Init the aff and dic pointers.
+ * Get the region names if there are more than 2 arguments.
+--- 9194,9211 ----
+ if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
+ {
+ EMSG(_(e_exists));
+! goto theend;
+ }
+ if (mch_isdir(wfname))
+ {
+ EMSG2(_(e_isadir2), wfname);
+! goto theend;
+ }
+
++ fname = alloc(MAXPATHL);
++ if (fname == NULL)
++ goto theend;
++
+ /*
+ * Init the aff and dic pointers.
+ * Get the region names if there are more than 2 arguments.
+***************
+*** 9209,9215 ****
+ || innames[i][len - 3] != '_')
+ {
+ EMSG2(_("E755: Invalid region in %s"), innames[i]);
+! return;
+ }
+ spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
+ spin.si_region_name[i * 2 + 1] =
+--- 9221,9227 ----
+ || innames[i][len - 3] != '_')
+ {
+ EMSG2(_("E755: Invalid region in %s"), innames[i]);
+! goto theend;
+ }
+ spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
+ spin.si_region_name[i * 2 + 1] =
+***************
+*** 9226,9232 ****
+ || spin.si_prefroot == NULL)
+ {
+ free_blocks(spin.si_blocks);
+! return;
+ }
+
+ /* When not producing a .add.spl file clear the character table when
+--- 9238,9244 ----
+ || spin.si_prefroot == NULL)
+ {
+ free_blocks(spin.si_blocks);
+! goto theend;
+ }
+
+ /* When not producing a .add.spl file clear the character table when
+***************
+*** 9247,9253 ****
+ spin.si_conv.vc_type = CONV_NONE;
+ spin.si_region = 1 << i;
+
+! vim_snprintf((char *)fname, sizeof(fname), "%s.aff", innames[i]);
+ if (mch_stat((char *)fname, &st) >= 0)
+ {
+ /* Read the .aff file. Will init "spin->si_conv" based on the
+--- 9259,9265 ----
+ spin.si_conv.vc_type = CONV_NONE;
+ spin.si_region = 1 << i;
+
+! vim_snprintf((char *)fname, MAXPATHL, "%s.aff", innames[i]);
+ if (mch_stat((char *)fname, &st) >= 0)
+ {
+ /* Read the .aff file. Will init "spin->si_conv" based on the
+***************
+*** 9258,9264 ****
+ else
+ {
+ /* Read the .dic file and store the words in the trees. */
+! vim_snprintf((char *)fname, sizeof(fname), "%s.dic",
+ innames[i]);
+ if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
+ error = TRUE;
+--- 9270,9276 ----
+ else
+ {
+ /* Read the .dic file and store the words in the trees. */
+! vim_snprintf((char *)fname, MAXPATHL, "%s.dic",
+ innames[i]);
+ if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
+ error = TRUE;
+***************
+*** 9340,9345 ****
+--- 9352,9361 ----
+ spell_make_sugfile(&spin, wfname);
+
+ }
++
++ theend:
++ vim_free(fname);
++ vim_free(wfname);
+ }
+
+ /*
+***************
+*** 9392,9398 ****
+ buf_T *buf = NULL;
+ int new_spf = FALSE;
+ char_u *fname;
+! char_u fnamebuf[MAXPATHL];
+ char_u line[MAXWLEN * 2];
+ long fpos, fpos_next = 0;
+ int i;
+--- 9408,9414 ----
+ buf_T *buf = NULL;
+ int new_spf = FALSE;
+ char_u *fname;
+! char_u *fnamebuf = NULL;
+ char_u line[MAXWLEN * 2];
+ long fpos, fpos_next = 0;
+ int i;
+***************
+*** 9422,9427 ****
+--- 9438,9446 ----
+ EMSG2(_(e_notset), "spellfile");
+ return;
+ }
++ fnamebuf = alloc(MAXPATHL);
++ if (fnamebuf == NULL)
++ return;
+
+ for (spf = curwin->w_s->b_p_spf, i = 1; *spf != NUL; ++i)
+ {
+***************
+*** 9431,9436 ****
+--- 9450,9456 ----
+ if (*spf == NUL)
+ {
+ EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
++ vim_free(fnamebuf);
+ return;
+ }
+ }
+***************
+*** 9442,9447 ****
+--- 9462,9468 ----
+ if (buf != NULL && bufIsChanged(buf))
+ {
+ EMSG(_(e_bufloaded));
++ vim_free(fnamebuf);
+ return;
+ }
+
+***************
+*** 9536,9541 ****
+--- 9557,9563 ----
+
+ redraw_all_later(SOME_VALID);
+ }
++ vim_free(fnamebuf);
+ }
+
+ /*
+***************
+*** 9544,9550 ****
+ static void
+ init_spellfile()
+ {
+! char_u buf[MAXPATHL];
+ int l;
+ char_u *fname;
+ char_u *rtp;
+--- 9566,9572 ----
+ static void
+ init_spellfile()
+ {
+! char_u *buf;
+ int l;
+ char_u *fname;
+ char_u *rtp;
+***************
+*** 9554,9559 ****
+--- 9576,9585 ----
+
+ if (*curwin->w_s->b_p_spl != NUL && curwin->w_s->b_langp.ga_len > 0)
+ {
++ buf = alloc(MAXPATHL);
++ if (buf == NULL)
++ return;
++
+ /* Find the end of the language name. Exclude the region. If there
+ * is a path separator remember the start of the tail. */
+ for (lend = curwin->w_s->b_p_spl; *lend != NUL
+***************
+*** 9597,9603 ****
+ "/%.*s", (int)(lend - lstart), lstart);
+ }
+ l = (int)STRLEN(buf);
+! fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)->lp_slang->sl_fname;
+ vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
+ fname != NULL
+ && strstr((char *)gettail(fname), ".ascii.") != NULL
+--- 9623,9630 ----
+ "/%.*s", (int)(lend - lstart), lstart);
+ }
+ l = (int)STRLEN(buf);
+! fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)
+! ->lp_slang->sl_fname;
+ vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
+ fname != NULL
+ && strstr((char *)gettail(fname), ".ascii.") != NULL
+***************
+*** 9607,9612 ****
+--- 9634,9641 ----
+ }
+ aspath = FALSE;
+ }
++
++ vim_free(buf);
+ }
+ }
+
+*** ../vim-7.3.160/src/tag.c 2011-04-11 16:56:29.000000000 +0200
+--- src/tag.c 2011-04-11 20:54:36.000000000 +0200
+***************
+*** 775,791 ****
+ {
+ list_T *list;
+ char_u tag_name[128 + 1];
+! char_u fname[MAXPATHL + 1];
+! char_u cmd[CMDBUFFSIZE + 1];
+
+ /*
+ * Add the matching tags to the location list for the current
+ * window.
+ */
+
+ list = list_alloc();
+! if (list == NULL)
+ goto end_do_tag;
+
+ for (i = 0; i < num_matches; ++i)
+ {
+--- 775,799 ----
+ {
+ list_T *list;
+ char_u tag_name[128 + 1];
+! char_u *fname;
+! char_u *cmd;
+
+ /*
+ * Add the matching tags to the location list for the current
+ * window.
+ */
+
++ fname = alloc(MAXPATHL + 1);
++ cmd = alloc(CMDBUFFSIZE + 1);
+ list = list_alloc();
+! if (list == NULL || fname == NULL || cmd == NULL)
+! {
+! vim_free(cmd);
+! vim_free(fname);
+! if (list != NULL)
+! list_free(list, TRUE);
+ goto end_do_tag;
++ }
+
+ for (i = 0; i < num_matches; ++i)
+ {
+***************
+*** 911,916 ****
+--- 919,926 ----
+ set_errorlist(curwin, list, ' ', IObuff);
+
+ list_free(list, TRUE);
++ vim_free(fname);
++ vim_free(cmd);
+
+ cur_match = 0; /* Jump to the first tag */
+ }
+***************
+*** 3777,3784 ****
+ char_u *start; /* start of the value */
+ char_u *end; /* after the value; can be NULL */
+ {
+! char_u buf[MAXPATHL];
+ int len = 0;
+
+ /* check that the field name doesn't exist yet */
+ if (dict_find(dict, (char_u *)field_name, -1) != NULL)
+--- 3787,3795 ----
+ char_u *start; /* start of the value */
+ char_u *end; /* after the value; can be NULL */
+ {
+! char_u *buf;
+ int len = 0;
++ int retval;
+
+ /* check that the field name doesn't exist yet */
+ if (dict_find(dict, (char_u *)field_name, -1) != NULL)
+***************
+*** 3791,3796 ****
+--- 3802,3810 ----
+ }
+ return FAIL;
+ }
++ buf = alloc(MAXPATHL);
++ if (buf == NULL)
++ return FAIL;
+ if (start != NULL)
+ {
+ if (end == NULL)
+***************
+*** 3800,3811 ****
+ --end;
+ }
+ len = (int)(end - start);
+! if (len > (int)sizeof(buf) - 1)
+! len = sizeof(buf) - 1;
+ vim_strncpy(buf, start, len);
+ }
+ buf[len] = NUL;
+! return dict_add_nr_str(dict, field_name, 0L, buf);
+ }
+
+ /*
+--- 3814,3827 ----
+ --end;
+ }
+ len = (int)(end - start);
+! if (len > MAXPATHL - 1)
+! len = MAXPATHL - 1;
+ vim_strncpy(buf, start, len);
+ }
+ buf[len] = NUL;
+! retval = dict_add_nr_str(dict, field_name, 0L, buf);
+! vim_free(buf);
+! return retval;
+ }
+
+ /*
+*** ../vim-7.3.160/src/vim.h 2010-12-30 12:30:26.000000000 +0100
+--- src/vim.h 2011-04-11 20:50:54.000000000 +0200
+***************
+*** 1435,1440 ****
+--- 1435,1442 ----
+
+ #define IOSIZE (1024+1) /* file i/o and sprintf buffer size */
+
++ #define DIALOG_MSG_SIZE 1000 /* buffer size for dialog_msg() */
++
+ #ifdef FEAT_MBYTE
+ # define MSG_BUF_LEN 480 /* length of buffer for small messages */
+ # define MSG_BUF_CLEN (MSG_BUF_LEN / 6) /* cell length (worst case: utf-8
+*** ../vim-7.3.160/src/xxd/xxd.c 2011-04-02 14:44:50.000000000 +0200
+--- src/xxd/xxd.c 2011-04-11 16:40:48.000000000 +0200
+***************
+*** 476,482 ****
+ int octspergrp = -1; /* number of octets grouped in output */
+ int grplen; /* total chars per octet group */
+ long length = -1, n = 0, seekoff = 0;
+! char l[LLEN+1];
+ char *pp;
+
+ #ifdef AMIGA
+--- 476,482 ----
+ int octspergrp = -1; /* number of octets grouped in output */
+ int grplen; /* total chars per octet group */
+ long length = -1, n = 0, seekoff = 0;
+! static char l[LLEN+1]; /* static because it may be too big for stack */
+ char *pp;
+
+ #ifdef AMIGA
+*** ../vim-7.3.160/src/version.c 2011-04-11 16:56:29.000000000 +0200
+--- src/version.c 2011-04-11 21:15:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 161,
+ /**/
+
+--
+The process for understanding customers primarily involves sitting around with
+other marketing people and talking about what you would to if you were dumb
+enough to be a customer.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.162
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.162
+Problem: No error message when assigning to a list with an index out of
+ range. (Yukihiro Nakadaira)
+Solution: Add the error message.
+Files: src/eval.c
+
+
+*** ../vim-7.3.161/src/eval.c 2011-04-11 21:35:03.000000000 +0200
+--- src/eval.c 2011-04-21 13:40:38.000000000 +0200
+***************
+*** 2794,2799 ****
+--- 2794,2801 ----
+ {
+ if (lp->ll_range && !lp->ll_empty2)
+ clear_tv(&var2);
++ if (!quiet)
++ EMSGN(_(e_listidx), lp->ll_n1);
+ return NULL;
+ }
+
+***************
+*** 2811,2817 ****
+--- 2813,2823 ----
+ {
+ ni = list_find(lp->ll_list, lp->ll_n2);
+ if (ni == NULL)
++ {
++ if (!quiet)
++ EMSGN(_(e_listidx), lp->ll_n2);
+ return NULL;
++ }
+ lp->ll_n2 = list_idx_of_item(lp->ll_list, ni);
+ }
+
+***************
+*** 2819,2825 ****
+--- 2825,2835 ----
+ if (lp->ll_n1 < 0)
+ lp->ll_n1 = list_idx_of_item(lp->ll_list, lp->ll_li);
+ if (lp->ll_n2 < lp->ll_n1)
++ {
++ if (!quiet)
++ EMSGN(_(e_listidx), lp->ll_n2);
+ return NULL;
++ }
+ }
+
+ lp->ll_tv = &lp->ll_li->li_tv;
+*** ../vim-7.3.161/src/version.c 2011-04-11 21:35:03.000000000 +0200
+--- src/version.c 2011-04-21 13:44:46.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 162,
+ /**/
+
+--
+Far back in the mists of ancient time, in the great and glorious days of the
+former Galactic Empire, life was wild, rich and largely tax free.
+Mighty starships plied their way between exotic suns, seeking adventure and
+reward among the furthest reaches of Galactic space. In those days, spirits
+were brave, the stakes were high, men were real men, women were real women
+and small furry creatures from Alpha Centauri were real small furry creatures
+from Alpha Centauri. And all dared to brave unknown terrors, to do mighty
+deeds, to boldly split infinitives that no man had split before -- and thus
+was the Empire forged.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.163
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.163
+Problem: For the default of 'shellpipe' "mksh" and "pdksh" are not
+ recognized.
+Solution: Recognize these shell names.
+Files: src/option.c
+
+
+*** ../vim-7.3.162/src/option.c 2011-03-22 14:35:01.000000000 +0100
+--- src/option.c 2011-04-15 20:49:54.000000000 +0200
+***************
+*** 3846,3851 ****
+--- 3846,3853 ----
+ # ifndef OS2 /* Always use bourne shell style redirection if we reach this */
+ if ( fnamecmp(p, "sh") == 0
+ || fnamecmp(p, "ksh") == 0
++ || fnamecmp(p, "mksh") == 0
++ || fnamecmp(p, "pdksh") == 0
+ || fnamecmp(p, "zsh") == 0
+ || fnamecmp(p, "zsh-beta") == 0
+ || fnamecmp(p, "bash") == 0
+***************
+*** 3853,3858 ****
+--- 3855,3862 ----
+ || fnamecmp(p, "cmd") == 0
+ || fnamecmp(p, "sh.exe") == 0
+ || fnamecmp(p, "ksh.exe") == 0
++ || fnamecmp(p, "mksh.exe") == 0
++ || fnamecmp(p, "pdksh.exe") == 0
+ || fnamecmp(p, "zsh.exe") == 0
+ || fnamecmp(p, "zsh-beta.exe") == 0
+ || fnamecmp(p, "bash.exe") == 0
+*** ../vim-7.3.162/src/version.c 2011-04-21 14:27:21.000000000 +0200
+--- src/version.c 2011-04-28 12:56:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 163,
+ /**/
+
+--
+If you put 7 of the most talented OSS developers in a room for a week
+and asked them to fix a bug in a spreadsheet program, in 1 week
+you'd have 2 new mail readers and a text-based web browser.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.164
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.164
+Problem: C-indenting: a preprocessor statement confuses detection of a
+ function delcaration.
+Solution: Ignore preprocessor lines. (Lech Lorens) Also recognize the style
+ to put a comma before the argument name.
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.163/src/misc1.c 2011-04-11 16:56:29.000000000 +0200
+--- src/misc1.c 2011-04-28 12:49:55.000000000 +0200
+***************
+*** 5396,5403 ****
+ cin_ispreproc(s)
+ char_u *s;
+ {
+! s = skipwhite(s);
+! if (*s == '#')
+ return TRUE;
+ return FALSE;
+ }
+--- 5396,5402 ----
+ cin_ispreproc(s)
+ char_u *s;
+ {
+! if (*skipwhite(s) == '#')
+ return TRUE;
+ return FALSE;
+ }
+***************
+*** 5513,5518 ****
+--- 5512,5521 ----
+ else
+ s = *sp;
+
++ /* Ignore line starting with #. */
++ if (cin_ispreproc(s))
++ return FALSE;
++
+ while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
+ {
+ if (cin_iscomment(s)) /* ignore comments */
+***************
+*** 5538,5550 ****
+ retval = TRUE;
+ goto done;
+ }
+! if (*s == ',' && cin_nocode(s + 1))
+ {
+! /* ',' at the end: continue looking in the next line */
+ if (lnum >= curbuf->b_ml.ml_line_count)
+ break;
+!
+! s = ml_get(++lnum);
+ }
+ else if (cin_iscomment(s)) /* ignore comments */
+ s = cin_skipcomment(s);
+--- 5541,5569 ----
+ retval = TRUE;
+ goto done;
+ }
+! if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s))
+ {
+! int comma = (*s == ',');
+!
+! /* ',' at the end: continue looking in the next line.
+! * At the end: check for ',' in the next line, for this style:
+! * func(arg1
+! * , arg2) */
+! for (;;)
+! {
+! if (lnum >= curbuf->b_ml.ml_line_count)
+! break;
+! s = ml_get(++lnum);
+! if (!cin_ispreproc(s))
+! break;
+! }
+ if (lnum >= curbuf->b_ml.ml_line_count)
+ break;
+! /* Require a comma at end of the line or a comma or ')' at the
+! * start of next line. */
+! s = skipwhite(s);
+! if (!comma && *s != ',' && *s != ')')
+! break;
+ }
+ else if (cin_iscomment(s)) /* ignore comments */
+ s = cin_skipcomment(s);
+*** ../vim-7.3.163/src/testdir/test3.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test3.in 2011-04-28 12:15:12.000000000 +0200
+***************
+*** 1315,1320 ****
+--- 1315,1349 ----
+ }
+
+ STARTTEST
++ :set cino=(0,ts
++ 2kdd=][
++ ENDTEST
++
++ void func(int a
++ #if defined(FOO)
++ , int b
++ , int c
++ #endif
++ )
++ {
++ }
++
++ STARTTEST
++ :set cino=(0
++ 2kdd=][
++ ENDTEST
++
++ void
++ func(int a
++ #if defined(FOO)
++ , int b
++ , int c
++ #endif
++ )
++ {
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.163/src/testdir/test3.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test3.ok 2011-04-28 12:54:04.000000000 +0200
+***************
+*** 1183,1185 ****
+--- 1183,1206 ----
+ foo;
+ }
+
++
++ void func(int a
++ #if defined(FOO)
++ , int b
++ , int c
++ #endif
++ )
++ {
++ }
++
++
++ void
++ func(int a
++ #if defined(FOO)
++ , int b
++ , int c
++ #endif
++ )
++ {
++ }
++
+*** ../vim-7.3.163/src/version.c 2011-04-28 12:56:57.000000000 +0200
+--- src/version.c 2011-04-28 12:59:55.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 164,
+ /**/
+
+--
+Due knot trussed yore spell chequer two fined awl miss steaks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.165
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.165
+Problem: ":find" completion does not escape spaces in a directory name.
+ (Isz)
+Solution: Add backslashes for EXPAND_FILES_IN_PATH. (Carlo Teubner)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.164/src/ex_getln.c 2010-12-02 16:01:23.000000000 +0100
+--- src/ex_getln.c 2011-04-28 12:52:12.000000000 +0200
+***************
+*** 3702,3707 ****
+--- 3702,3708 ----
+ if (options & WILD_ESCAPE)
+ {
+ if (xp->xp_context == EXPAND_FILES
++ || xp->xp_context == EXPAND_FILES_IN_PATH
+ || xp->xp_context == EXPAND_SHELLCMD
+ || xp->xp_context == EXPAND_BUFFERS
+ || xp->xp_context == EXPAND_DIRECTORIES)
+*** ../vim-7.3.164/src/version.c 2011-04-28 13:01:59.000000000 +0200
+--- src/version.c 2011-04-28 17:17:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 165,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+38. You wake up at 3 a.m. to go to the bathroom and stop and check your e-mail
+ on the way back to bed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.166
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.166
+Problem: Buffer on the stack may be too big
+Solution: Allocate the space.
+Files: src/option.c
+
+
+*** ../vim-7.3.165/src/option.c 2011-04-28 12:56:57.000000000 +0200
+--- src/option.c 2011-04-15 20:49:54.000000000 +0200
+***************
+*** 9185,9191 ****
+ int expand;
+ {
+ char_u *s;
+! char_u buf[MAXPATHL];
+
+ if (fprintf(fd, "%s %s=", cmd, name) < 0)
+ return FAIL;
+--- 9185,9191 ----
+ int expand;
+ {
+ char_u *s;
+! char_u *buf;
+
+ if (fprintf(fd, "%s %s=", cmd, name) < 0)
+ return FAIL;
+***************
+*** 9203,9211 ****
+--- 9203,9218 ----
+ }
+ else if (expand)
+ {
++ buf = alloc(MAXPATHL);
++ if (buf == NULL)
++ return FAIL;
+ home_replace(NULL, *valuep, buf, MAXPATHL, FALSE);
+ if (put_escstr(fd, buf, 2) == FAIL)
++ {
++ vim_free(buf);
+ return FAIL;
++ }
++ vim_free(buf);
+ }
+ else if (put_escstr(fd, *valuep, 2) == FAIL)
+ return FAIL;
+*** ../vim-7.3.165/src/version.c 2011-04-28 17:21:49.000000000 +0200
+--- src/version.c 2011-04-28 17:23:24.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 166,
+ /**/
+
+--
+He who laughs last, thinks slowest.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.167
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.167
+Problem: When using the internal grep QuickFixCmdPost is not triggered.
+ (Yukihiro Nakadaira)
+Solution: Change the place where autocommands are triggered.
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.166/src/quickfix.c 2011-04-11 21:35:03.000000000 +0200
+--- src/quickfix.c 2011-04-28 13:28:03.000000000 +0200
+***************
+*** 2742,2747 ****
+--- 2742,2754 ----
+ #ifdef FEAT_AUTOCMD
+ char_u *au_name = NULL;
+
++ /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
++ if (grep_internal(eap->cmdidx))
++ {
++ ex_vimgrep(eap);
++ return;
++ }
++
+ switch (eap->cmdidx)
+ {
+ case CMD_make: au_name = (char_u *)"make"; break;
+***************
+*** 2763,2775 ****
+ }
+ #endif
+
+- /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
+- if (grep_internal(eap->cmdidx))
+- {
+- ex_vimgrep(eap);
+- return;
+- }
+-
+ if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
+ || eap->cmdidx == CMD_lgrepadd)
+ wp = curwin;
+--- 2770,2775 ----
+***************
+*** 3057,3066 ****
+
+ switch (eap->cmdidx)
+ {
+! case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
+! case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
+! case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
+ case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
+ default: break;
+ }
+ if (au_name != NULL)
+--- 3057,3070 ----
+
+ switch (eap->cmdidx)
+ {
+! case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
+! case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
+! case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
+ case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
++ case CMD_grep: au_name = (char_u *)"grep"; break;
++ case CMD_lgrep: au_name = (char_u *)"lgrep"; break;
++ case CMD_grepadd: au_name = (char_u *)"grepadd"; break;
++ case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
+ default: break;
+ }
+ if (au_name != NULL)
+*** ../vim-7.3.166/src/version.c 2011-04-28 17:24:54.000000000 +0200
+--- src/version.c 2011-04-28 17:26:17.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 167,
+ /**/
+
+--
+Micro$oft: where do you want to go today?
+ Linux: where do you want to go tomorrow?
+ FreeBSD: are you guys coming, or what?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.168
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.168
+Problem: When the second argument of input() contains a CR the text up to
+ that is used without asking the user. (Yasuhiro Matsumoto)
+Solution: Change CR, NL and ESC in the text to a space.
+Files: src/getchar.c
+
+
+*** ../vim-7.3.167/src/getchar.c 2011-03-22 13:07:19.000000000 +0100
+--- src/getchar.c 2011-04-28 14:50:26.000000000 +0200
+***************
+*** 635,645 ****
+--- 635,648 ----
+ /*
+ * Stuff "s" into the stuff buffer, leaving special key codes unmodified and
+ * escaping other K_SPECIAL and CSI bytes.
++ * Change CR, LF and ESC into a space.
+ */
+ void
+ stuffReadbuffSpec(s)
+ char_u *s;
+ {
++ int c;
++
+ while (*s != NUL)
+ {
+ if (*s == K_SPECIAL && s[1] != NUL && s[2] != NUL)
+***************
+*** 649,659 ****
+ s += 3;
+ }
+ else
+ #ifdef FEAT_MBYTE
+! stuffcharReadbuff(mb_ptr2char_adv(&s));
+ #else
+! stuffcharReadbuff(*s++);
+ #endif
+ }
+ }
+ #endif
+--- 652,667 ----
+ s += 3;
+ }
+ else
++ {
+ #ifdef FEAT_MBYTE
+! c = mb_ptr2char_adv(&s);
+ #else
+! c = *s++;
+ #endif
++ if (c == CAR || c == NL || c == ESC)
++ c = ' ';
++ stuffcharReadbuff(c);
++ }
+ }
+ }
+ #endif
+*** ../vim-7.3.167/src/version.c 2011-04-28 17:27:05.000000000 +0200
+--- src/version.c 2011-04-28 17:28:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 168,
+ /**/
+
+--
+Everyone has a photographic memory. Some don't have film.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.169
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.169
+Problem: Freeing memory already freed, warning from static code analyzer.
+Solution: Initialize pointers to NULL, correct use of "mustfree". (partly by
+ Dominique Pelle)
+Files: src/mis1.c
+
+
+*** ../vim-7.3.168/src/misc1.c 2011-04-28 13:01:59.000000000 +0200
+--- src/misc1.c 2011-04-28 17:42:00.000000000 +0200
+***************
+*** 3505,3511 ****
+ if (enc_utf8 && var != NULL)
+ {
+ int len;
+! char_u *pp;
+
+ /* Convert from active codepage to UTF-8. Other conversions are
+ * not done, because they would fail for non-ASCII characters. */
+--- 3505,3511 ----
+ if (enc_utf8 && var != NULL)
+ {
+ int len;
+! char_u *pp = NULL;
+
+ /* Convert from active codepage to UTF-8. Other conversions are
+ * not done, because they would fail for non-ASCII characters. */
+***************
+*** 3872,3882 ****
+ * Vim's version of getenv().
+ * Special handling of $HOME, $VIM and $VIMRUNTIME.
+ * Also does ACP to 'enc' conversion for Win32.
+ */
+ char_u *
+ vim_getenv(name, mustfree)
+ char_u *name;
+! int *mustfree; /* set to TRUE when returned is allocated */
+ {
+ char_u *p;
+ char_u *pend;
+--- 3872,3884 ----
+ * Vim's version of getenv().
+ * Special handling of $HOME, $VIM and $VIMRUNTIME.
+ * Also does ACP to 'enc' conversion for Win32.
++ * "mustfree" is set to TRUE when returned is allocated, it must be
++ * initialized to FALSE by the caller.
+ */
+ char_u *
+ vim_getenv(name, mustfree)
+ char_u *name;
+! int *mustfree;
+ {
+ char_u *p;
+ char_u *pend;
+***************
+*** 3898,3904 ****
+ if (enc_utf8)
+ {
+ int len;
+! char_u *pp;
+
+ /* Convert from active codepage to UTF-8. Other conversions are
+ * not done, because they would fail for non-ASCII characters. */
+--- 3900,3906 ----
+ if (enc_utf8)
+ {
+ int len;
+! char_u *pp = NULL;
+
+ /* Convert from active codepage to UTF-8. Other conversions are
+ * not done, because they would fail for non-ASCII characters. */
+***************
+*** 3942,3948 ****
+ if (enc_utf8)
+ {
+ int len;
+! char_u *pp;
+
+ /* Convert from active codepage to UTF-8. Other conversions
+ * are not done, because they would fail for non-ASCII
+--- 3944,3950 ----
+ if (enc_utf8)
+ {
+ int len;
+! char_u *pp = NULL;
+
+ /* Convert from active codepage to UTF-8. Other conversions
+ * are not done, because they would fail for non-ASCII
+***************
+*** 3950,3956 ****
+ acp_to_enc(p, (int)STRLEN(p), &pp, &len);
+ if (pp != NULL)
+ {
+! if (mustfree)
+ vim_free(p);
+ p = pp;
+ *mustfree = TRUE;
+--- 3952,3958 ----
+ acp_to_enc(p, (int)STRLEN(p), &pp, &len);
+ if (pp != NULL)
+ {
+! if (*mustfree)
+ vim_free(p);
+ p = pp;
+ *mustfree = TRUE;
+*** ../vim-7.3.168/src/version.c 2011-04-28 17:30:05.000000000 +0200
+--- src/version.c 2011-04-28 17:48:04.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 169,
+ /**/
+
+--
+A day without sunshine is like, well, night.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.170
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.170
+Problem: VMS Makefile for testing was not updated for test77.
+Solution: Add test77 to the Makefile.
+Files: src/testdir/Make_vms.mms
+
+
+*** ../vim-7.3.169/src/testdir/Make_vms.mms 2010-11-10 16:54:16.000000000 +0100
+--- src/testdir/Make_vms.mms 2011-03-03 17:04:56.000000000 +0100
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2010 Nov 10
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Mar 03
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 74,80 ****
+ test56.out test57.out test60.out \
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+! test71.out test72.out test74.out test75.out test76.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 74,81 ----
+ test56.out test57.out test60.out \
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+! test71.out test72.out test74.out test75.out test76.out \
+! test77.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.169/src/version.c 2011-04-28 17:48:39.000000000 +0200
+--- src/version.c 2011-04-28 19:04:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 170,
+ /**/
+
+--
+The users that I support would double-click on a landmine to find out
+what happens. -- A system administrator
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.171
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.171
+Problem: When the clipboard isn't supported: ":yank*" gives a confusing
+ error message.
+Solution: Specifically mention that the register name is invalid.
+ (Jean-Rene David)
+Files: runtime/doc/change.txt, src/ex_docmd.c, src/globals.h
+
+
+*** ../vim-7.3.170/runtime/doc/change.txt 2010-08-15 21:57:18.000000000 +0200
+--- runtime/doc/change.txt 2011-05-05 13:48:00.000000000 +0200
+***************
+*** 916,923 ****
+ {Visual}["x]Y Yank the highlighted lines [into register x] (for
+ {Visual} see |Visual-mode|). {not in Vi}
+
+! *:y* *:yank*
+! :[range]y[ank] [x] Yank [range] lines [into register x].
+
+ :[range]y[ank] [x] {count}
+ Yank {count} lines, starting with last line number
+--- 917,926 ----
+ {Visual}["x]Y Yank the highlighted lines [into register x] (for
+ {Visual} see |Visual-mode|). {not in Vi}
+
+! *:y* *:yank* *E850*
+! :[range]y[ank] [x] Yank [range] lines [into register x]. Yanking to the
+! "* or "+ registers is possible only in GUI versions or
+! when the |+xterm_clipboard| feature is included.
+
+ :[range]y[ank] [x] {count}
+ Yank {count} lines, starting with last line number
+*** ../vim-7.3.170/src/ex_docmd.c 2011-04-11 21:35:03.000000000 +0200
+--- src/ex_docmd.c 2011-05-05 13:48:57.000000000 +0200
+***************
+*** 2424,2448 ****
+ if ( (ea.argt & REGSTR)
+ && *ea.arg != NUL
+ #ifdef FEAT_USR_CMDS
+- && valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+- && USER_CMDIDX(ea.cmdidx)))
+ /* Do not allow register = for user commands */
+ && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+- #else
+- && valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+ #endif
+ && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+ {
+! ea.regname = *ea.arg++;
+! #ifdef FEAT_EVAL
+! /* for '=' register: accept the rest of the line as an expression */
+! if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+ {
+! set_expr_line(vim_strsave(ea.arg));
+! ea.arg += STRLEN(ea.arg);
+ }
+ #endif
+! ea.arg = skipwhite(ea.arg);
+ }
+
+ /*
+--- 2424,2462 ----
+ if ( (ea.argt & REGSTR)
+ && *ea.arg != NUL
+ #ifdef FEAT_USR_CMDS
+ /* Do not allow register = for user commands */
+ && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+ #endif
+ && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+ {
+! #ifndef FEAT_CLIPBOARD
+! /* check these explicitly for a more specific error message */
+! if (*ea.arg == '*' || *ea.arg == '+')
+ {
+! errormsg = (char_u *)_(e_invalidreg);
+! goto doend;
+ }
+ #endif
+! if (
+! #ifdef FEAT_USR_CMDS
+! valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+! && USER_CMDIDX(ea.cmdidx)))
+! #else
+! valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+! #endif
+! )
+! {
+! ea.regname = *ea.arg++;
+! #ifdef FEAT_EVAL
+! /* for '=' register: accept the rest of the line as an expression */
+! if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+! {
+! set_expr_line(vim_strsave(ea.arg));
+! ea.arg += STRLEN(ea.arg);
+! }
+! #endif
+! ea.arg = skipwhite(ea.arg);
+! }
+ }
+
+ /*
+*** ../vim-7.3.170/src/globals.h 2011-02-15 17:39:14.000000000 +0100
+--- src/globals.h 2011-05-05 13:47:44.000000000 +0200
+***************
+*** 1561,1566 ****
+--- 1561,1569 ----
+ (defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
+ EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set"));
+ #endif
++ #ifndef FEAT_CLIPBOARD
++ EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name"));
++ #endif
+
+ #ifdef MACOS_X_UNIX
+ EXTERN short disallow_gui INIT(= FALSE);
+*** ../vim-7.3.170/src/version.c 2011-04-28 19:05:01.000000000 +0200
+--- src/version.c 2011-05-05 14:24:39.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 171,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+53. To find out what time it is, you send yourself an e-mail and check the
+ "Date:" field.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.172
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.172
+Problem: MS-Windows: rename() might delete the file if the name differs but
+ it's actually the same file.
+Solution: Use the file handle to check if it's the same file. (Yukihiro
+ Nakadaira)
+Files: src/if_cscope.c, src/fileio.c, src/os_win32.c,
+ src/proto/os_win32.pro, src/vim.h
+
+
+*** ../vim-7.3.171/src/if_cscope.c 2011-03-03 15:01:25.000000000 +0100
+--- src/if_cscope.c 2011-05-05 16:16:38.000000000 +0200
+***************
+*** 1412,1428 ****
+ {
+ short i, j;
+ #ifndef UNIX
+- HANDLE hFile;
+ BY_HANDLE_FILE_INFORMATION bhfi;
+
+- vim_memset(&bhfi, 0, sizeof(bhfi));
+ /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
+ if (!mch_windows95())
+ {
+! hFile = CreateFile(fname, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
+! FILE_ATTRIBUTE_NORMAL, NULL);
+! if (hFile == INVALID_HANDLE_VALUE)
+ {
+ if (p_csverbose)
+ {
+ char *cant_msg = _("E625: cannot open cscope database: %s");
+--- 1412,1426 ----
+ {
+ short i, j;
+ #ifndef UNIX
+ BY_HANDLE_FILE_INFORMATION bhfi;
+
+ /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
+ if (!mch_windows95())
+ {
+! switch (win32_fileinfo(fname, &bhfi))
+ {
++ case FILEINFO_ENC_FAIL: /* enc_to_utf16() failed */
++ case FILEINFO_READ_FAIL: /* CreateFile() failed */
+ if (p_csverbose)
+ {
+ char *cant_msg = _("E625: cannot open cscope database: %s");
+***************
+*** 1438,1452 ****
+ (void)EMSG2(cant_msg, fname);
+ }
+ return -1;
+! }
+! if (!GetFileInformationByHandle(hFile, &bhfi))
+! {
+! CloseHandle(hFile);
+ if (p_csverbose)
+ (void)EMSG(_("E626: cannot get cscope database information"));
+ return -1;
+ }
+- CloseHandle(hFile);
+ }
+ #endif
+
+--- 1436,1447 ----
+ (void)EMSG2(cant_msg, fname);
+ }
+ return -1;
+!
+! case FILEINFO_INFO_FAIL: /* GetFileInformationByHandle() failed */
+ if (p_csverbose)
+ (void)EMSG(_("E626: cannot get cscope database information"));
+ return -1;
+ }
+ }
+ #endif
+
+*** ../vim-7.3.171/src/fileio.c 2011-04-11 21:35:03.000000000 +0200
+--- src/fileio.c 2011-05-05 16:22:22.000000000 +0200
+***************
+*** 6555,6560 ****
+--- 6555,6575 ----
+ use_tmp_file = TRUE;
+ }
+ #endif
++ #ifdef WIN3264
++ {
++ BY_HANDLE_FILE_INFORMATION info1, info2;
++
++ /* It's possible for the source and destination to be the same file.
++ * In that case go through a temp file name. This makes rename("foo",
++ * "./foo") a no-op (in a complicated way). */
++ if (win32_fileinfo(from, &info1) == FILEINFO_OK
++ && win32_fileinfo(to, &info2) == FILEINFO_OK
++ && info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
++ && info1.nFileIndexHigh == info2.nFileIndexHigh
++ && info1.nFileIndexLow == info2.nFileIndexLow)
++ use_tmp_file = TRUE;
++ }
++ #endif
+
+ #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
+ if (use_tmp_file)
+*** ../vim-7.3.171/src/os_win32.c 2011-02-01 13:48:47.000000000 +0100
+--- src/os_win32.c 2011-05-05 16:24:17.000000000 +0200
+***************
+*** 2645,2669 ****
+ int
+ mch_is_linked(char_u *fname)
+ {
+ HANDLE hFile;
+! int res = 0;
+! BY_HANDLE_FILE_INFORMATION inf;
+ #ifdef FEAT_MBYTE
+ WCHAR *wn = NULL;
+
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+ wn = enc_to_utf16(fname, NULL);
+ if (wn != NULL)
+ {
+ hFile = CreateFileW(wn, /* file name */
+ GENERIC_READ, /* access mode */
+! 0, /* share mode */
+ NULL, /* security descriptor */
+ OPEN_EXISTING, /* creation disposition */
+! 0, /* file attributes */
+ NULL); /* handle to template file */
+ if (hFile == INVALID_HANDLE_VALUE
+! && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ /* Retry with non-wide function (for Windows 98). */
+ vim_free(wn);
+--- 2645,2688 ----
+ int
+ mch_is_linked(char_u *fname)
+ {
++ BY_HANDLE_FILE_INFORMATION info;
++
++ return win32_fileinfo(fname, &info) == FILEINFO_OK
++ && info.nNumberOfLinks > 1;
++ }
++
++ /*
++ * Get the by-handle-file-information for "fname".
++ * Returns FILEINFO_OK when OK.
++ * returns FILEINFO_ENC_FAIL when enc_to_utf16() failed.
++ * Returns FILEINFO_READ_FAIL when CreateFile() failed.
++ * Returns FILEINFO_INFO_FAIL when GetFileInformationByHandle() failed.
++ */
++ int
++ win32_fileinfo(char_u *fname, BY_HANDLE_FILE_INFORMATION *info)
++ {
+ HANDLE hFile;
+! int res = FILEINFO_READ_FAIL;
+ #ifdef FEAT_MBYTE
+ WCHAR *wn = NULL;
+
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++ {
+ wn = enc_to_utf16(fname, NULL);
++ if (wn == NULL)
++ res = FILEINFO_ENC_FAIL;
++ }
+ if (wn != NULL)
+ {
+ hFile = CreateFileW(wn, /* file name */
+ GENERIC_READ, /* access mode */
+! FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
+ NULL, /* security descriptor */
+ OPEN_EXISTING, /* creation disposition */
+! FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
+ NULL); /* handle to template file */
+ if (hFile == INVALID_HANDLE_VALUE
+! && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ /* Retry with non-wide function (for Windows 98). */
+ vim_free(wn);
+***************
+*** 2674,2690 ****
+ #endif
+ hFile = CreateFile(fname, /* file name */
+ GENERIC_READ, /* access mode */
+! 0, /* share mode */
+ NULL, /* security descriptor */
+ OPEN_EXISTING, /* creation disposition */
+! 0, /* file attributes */
+ NULL); /* handle to template file */
+
+ if (hFile != INVALID_HANDLE_VALUE)
+ {
+! if (GetFileInformationByHandle(hFile, &inf) != 0
+! && inf.nNumberOfLinks > 1)
+! res = 1;
+ CloseHandle(hFile);
+ }
+
+--- 2693,2710 ----
+ #endif
+ hFile = CreateFile(fname, /* file name */
+ GENERIC_READ, /* access mode */
+! FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
+ NULL, /* security descriptor */
+ OPEN_EXISTING, /* creation disposition */
+! FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
+ NULL); /* handle to template file */
+
+ if (hFile != INVALID_HANDLE_VALUE)
+ {
+! if (GetFileInformationByHandle(hFile, info) != 0)
+! res = FILEINFO_OK;
+! else
+! res = FILEINFO_INFO_FAIL;
+ CloseHandle(hFile);
+ }
+
+*** ../vim-7.3.171/src/proto/os_win32.pro 2010-10-23 14:02:48.000000000 +0200
+--- src/proto/os_win32.pro 2011-05-05 16:17:42.000000000 +0200
+***************
+*** 21,26 ****
+--- 21,27 ----
+ void mch_hide __ARGS((char_u *name));
+ int mch_isdir __ARGS((char_u *name));
+ int mch_is_linked __ARGS((char_u *fname));
++ int win32_fileinfo __ARGS((char_u *name, BY_HANDLE_FILE_INFORMATION *lpFileInfo));
+ int mch_writable __ARGS((char_u *name));
+ int mch_can_exe __ARGS((char_u *name));
+ int mch_nodetype __ARGS((char_u *name));
+*** ../vim-7.3.171/src/vim.h 2011-04-11 21:35:03.000000000 +0200
+--- src/vim.h 2011-05-05 16:16:57.000000000 +0200
+***************
+*** 2217,2220 ****
+--- 2217,2226 ----
+ #define KEYLEN_PART_MAP -2 /* keylen value for incomplete mapping */
+ #define KEYLEN_REMOVED 9999 /* keylen value for removed sequence */
+
++ /* Return values from win32_fileinfo(). */
++ #define FILEINFO_OK 0
++ #define FILEINFO_ENC_FAIL 1 /* enc_to_utf16() failed */
++ #define FILEINFO_READ_FAIL 2 /* CreateFile() failed */
++ #define FILEINFO_INFO_FAIL 3 /* GetFileInformationByHandle() failed */
++
+ #endif /* VIM__H */
+*** ../vim-7.3.171/src/version.c 2011-05-05 14:26:37.000000000 +0200
+--- src/version.c 2011-05-05 16:39:35.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 172,
+ /**/
+
+--
+Q: What is a patch 22?
+A: A patch you need to include to make it possible to include patches.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.173
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.173
+Problem: After using setqflist() to make the quickfix list empty ":cwindow"
+ may open the window anyway. Also after ":vimgrep".
+Solution: Correctly check whether the list is empty. (Ingo Karkat)
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.172/src/quickfix.c 2011-04-28 17:27:05.000000000 +0200
+--- src/quickfix.c 2011-05-05 16:55:47.000000000 +0200
+***************
+*** 1164,1170 ****
+
+ /* When no valid entries are present in the list, qf_ptr points to
+ * the first item in the list */
+! if (to_qfl->qf_nonevalid == TRUE)
+ to_qfl->qf_ptr = to_qfl->qf_start;
+ }
+
+--- 1164,1170 ----
+
+ /* When no valid entries are present in the list, qf_ptr points to
+ * the first item in the list */
+! if (to_qfl->qf_nonevalid)
+ to_qfl->qf_ptr = to_qfl->qf_start;
+ }
+
+***************
+*** 2243,2248 ****
+--- 2243,2249 ----
+ * it if we have errors; otherwise, leave it closed.
+ */
+ if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
++ || qi->qf_lists[qi->qf_curlist].qf_count == 0
+ || qi->qf_curlist >= qi->qf_listcount)
+ {
+ if (win != NULL)
+***************
+*** 3711,3717 ****
+ }
+
+ if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
+! /* empty list or no valid entry */
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
+ else
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+--- 3712,3718 ----
+ }
+
+ if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
+! /* no valid entry */
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
+ else
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+*** ../vim-7.3.172/src/version.c 2011-05-05 16:41:19.000000000 +0200
+--- src/version.c 2011-05-05 17:11:57.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 173,
+ /**/
+
+--
+"I can't complain, but sometimes I still do." (Joe Walsh)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.174
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.174
+Problem: When Exuberant ctags binary is exctags it's not found.
+Solution: Add configure check for exctags. (Hong Xu)
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.173/src/configure.in 2011-02-09 17:42:53.000000000 +0100
+--- src/configure.in 2011-05-05 17:18:21.000000000 +0200
+***************
+*** 2619,2625 ****
+ dnl On HP-UX 10.10 termcap or termlib should be used instead of
+ dnl curses, because curses is much slower.
+ dnl Newer versions of ncurses are preferred over anything, except
+! dnl when tinfo has been split off, it conains all we need.
+ dnl Older versions of ncurses have bugs, get a new one!
+ dnl Digital Unix (OSF1) should use curses (Ronald Schild).
+ dnl On SCO Openserver should prefer termlib (Roger Cornelius).
+--- 2619,2625 ----
+ dnl On HP-UX 10.10 termcap or termlib should be used instead of
+ dnl curses, because curses is much slower.
+ dnl Newer versions of ncurses are preferred over anything, except
+! dnl when tinfo has been split off, it contains all we need.
+ dnl Older versions of ncurses have bugs, get a new one!
+ dnl Digital Unix (OSF1) should use curses (Ronald Schild).
+ dnl On SCO Openserver should prefer termlib (Roger Cornelius).
+***************
+*** 3370,3376 ****
+ AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
+
+ dnl Check how we can run ctags. Default to "ctags" when nothing works.
+! dnl --version for Exuberant ctags (preferred)
+ dnl Add --fields=+S to get function signatures for omni completion.
+ dnl -t for typedefs (many ctags have this)
+ dnl -s for static functions (Elvis ctags only?)
+--- 3370,3376 ----
+ AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
+
+ dnl Check how we can run ctags. Default to "ctags" when nothing works.
+! dnl Use --version to detect Exuberant ctags (preferred)
+ dnl Add --fields=+S to get function signatures for omni completion.
+ dnl -t for typedefs (many ctags have this)
+ dnl -s for static functions (Elvis ctags only?)
+***************
+*** 3378,3384 ****
+ dnl -i+m to test for older Exuberant ctags
+ AC_MSG_CHECKING(how to create tags)
+ test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+--- 3378,3386 ----
+ dnl -i+m to test for older Exuberant ctags
+ AC_MSG_CHECKING(how to create tags)
+ test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+! TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+*** ../vim-7.3.173/src/auto/configure 2011-02-09 17:42:53.000000000 +0100
+--- src/auto/configure 2011-05-05 17:19:26.000000000 +0200
+***************
+*** 12031,12037 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+ $as_echo_n "checking how to create tags... " >&6; }
+ test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+--- 12031,12039 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+ $as_echo_n "checking how to create tags... " >&6; }
+ test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+! TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+*** ../vim-7.3.173/src/version.c 2011-05-05 17:14:07.000000000 +0200
+--- src/version.c 2011-05-05 17:19:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 174,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+54. You start tilting your head sideways to smile. :-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.175
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.175
+Problem: When 'colorcolumn' is set locally to a window, ":new" opens a
+ window with the same highlighting but 'colorcolumn' is empty.
+ (Tyru)
+Solution: Call check_colorcolumn() after clearing and copying options.
+ (Christian Brabandt)
+Files: src/buffer.c
+
+
+*** ../vim-7.3.174/src/buffer.c 2011-04-11 16:56:29.000000000 +0200
+--- src/buffer.c 2011-05-05 17:28:24.000000000 +0200
+***************
+*** 2527,2532 ****
+--- 2527,2535 ----
+ if (p_fdls >= 0)
+ curwin->w_p_fdl = p_fdls;
+ #endif
++ #ifdef FEAT_SYN_HL
++ check_colorcolumn(curwin);
++ #endif
+ }
+
+ /*
+*** ../vim-7.3.174/src/version.c 2011-05-05 17:23:58.000000000 +0200
+--- src/version.c 2011-05-05 17:30:32.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 175,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+55. You ask your doctor to implant a gig in your brain.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.176
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.176
+Problem: Ruby linking doesn't work properly on Mac OS X.
+Solution: Fix the configure check for Ruby. (Bjorn Winckler)
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.175/src/configure.in 2011-05-05 17:23:58.000000000 +0200
+--- src/configure.in 2011-05-05 18:03:38.000000000 +0200
+***************
+*** 1387,1396 ****
+ AC_MSG_RESULT($enable_rubyinterp)
+ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+ AC_MSG_CHECKING(--with-ruby-command argument)
+ AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
+! RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
+ RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
+- AC_SUBST(vi_cv_path_ruby)
+ AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
+ if test "X$vi_cv_path_ruby" != "X"; then
+ AC_MSG_CHECKING(Ruby version)
+--- 1387,1396 ----
+ AC_MSG_RESULT($enable_rubyinterp)
+ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+ AC_MSG_CHECKING(--with-ruby-command argument)
++ AC_SUBST(vi_cv_path_ruby)
+ AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
+! RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
+ RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
+ AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
+ if test "X$vi_cv_path_ruby" != "X"; then
+ AC_MSG_CHECKING(Ruby version)
+***************
+*** 1412,1429 ****
+ RUBY_LIBS="$rubylibs"
+ fi
+ librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
+! if test -f "$rubyhdrdir/$librubyarg"; then
+! librubyarg="$rubyhdrdir/$librubyarg"
+! else
+! rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
+! if test -f "$rubylibdir/$librubyarg"; then
+! librubyarg="$rubylibdir/$librubyarg"
+! elif test "$librubyarg" = "libruby.a"; then
+! dnl required on Mac OS 10.3 where libruby.a doesn't exist
+! librubyarg="-lruby"
+! else
+! librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
+! fi
+ fi
+
+ if test "X$librubyarg" != "X"; then
+--- 1412,1426 ----
+ RUBY_LIBS="$rubylibs"
+ fi
+ librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
+! librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBY_A"]])'`
+! rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
+! if test -f "$rubylibdir/$librubya"; then
+! librubyarg="$librubyarg"
+! RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+! elif test "$librubyarg" = "libruby.a"; then
+! dnl required on Mac OS 10.3 where libruby.a doesn't exist
+! librubyarg="-lruby"
+! RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+ fi
+
+ if test "X$librubyarg" != "X"; then
+*** ../vim-7.3.175/src/auto/configure 2011-05-05 17:23:58.000000000 +0200
+--- src/auto/configure 2011-05-05 18:06:47.000000000 +0200
+***************
+*** 6218,6233 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+ $as_echo_n "checking --with-ruby-command argument... " >&6; }
+
+ # Check whether --with-ruby-command was given.
+ if test "${with_ruby_command+set}" = set; then :
+! withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+ $as_echo "$RUBY_CMD" >&6; }
+ else
+ RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
+ $as_echo "defaulting to $RUBY_CMD" >&6; }
+ fi
+
+-
+ # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
+ set dummy $RUBY_CMD; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+--- 6218,6233 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+ $as_echo_n "checking --with-ruby-command argument... " >&6; }
+
++
+ # Check whether --with-ruby-command was given.
+ if test "${with_ruby_command+set}" = set; then :
+! withval=$with_ruby_command; RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+ $as_echo "$RUBY_CMD" >&6; }
+ else
+ RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
+ $as_echo "defaulting to $RUBY_CMD" >&6; }
+ fi
+
+ # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
+ set dummy $RUBY_CMD; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+***************
+*** 6292,6308 ****
+ RUBY_LIBS="$rubylibs"
+ fi
+ librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
+! if test -f "$rubyhdrdir/$librubyarg"; then
+! librubyarg="$rubyhdrdir/$librubyarg"
+! else
+! rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
+! if test -f "$rubylibdir/$librubyarg"; then
+! librubyarg="$rubylibdir/$librubyarg"
+! elif test "$librubyarg" = "libruby.a"; then
+! librubyarg="-lruby"
+! else
+! librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
+! fi
+ fi
+
+ if test "X$librubyarg" != "X"; then
+--- 6292,6305 ----
+ RUBY_LIBS="$rubylibs"
+ fi
+ librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
+! librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBY_A"])'`
+! rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
+! if test -f "$rubylibdir/$librubya"; then
+! librubyarg="$librubyarg"
+! RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+! elif test "$librubyarg" = "libruby.a"; then
+! librubyarg="-lruby"
+! RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+ fi
+
+ if test "X$librubyarg" != "X"; then
+*** ../vim-7.3.175/src/version.c 2011-05-05 17:32:40.000000000 +0200
+--- src/version.c 2011-05-05 18:08:52.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 176,
+ /**/
+
+--
+"I simultaneously try to keep my head in the clouds and my feet on the
+ground. Sometimes it's a stretch, though." -- Larry Wall
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.177
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.177
+Problem: MS-Windows: mkdir() doesn't work properly when 'encoding' is
+ "utf-8".
+Solution: Convert to utf-16. (Yukihiro Nakadaira)
+Files: src/os_win32.c, src/os_win32.h, src/proto/os_win32.pro
+
+
+*** ../vim-7.3.176/src/os_win32.c 2011-05-05 16:41:19.000000000 +0200
+--- src/os_win32.c 2011-05-05 18:24:36.000000000 +0200
+***************
+*** 2640,2645 ****
+--- 2640,2669 ----
+ }
+
+ /*
++ * Create directory "name".
++ * Return 0 on success, -1 on error.
++ */
++ int
++ mch_mkdir(char_u *name)
++ {
++ #ifdef FEAT_MBYTE
++ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++ {
++ WCHAR *p;
++ int retval;
++
++ p = enc_to_utf16(name, NULL);
++ if (p == NULL)
++ return -1;
++ retval = _wmkdir(p);
++ vim_free(p);
++ return retval;
++ }
++ #endif
++ return _mkdir(name);
++ }
++
++ /*
+ * Return TRUE if file "fname" has more than one link.
+ */
+ int
+*** ../vim-7.3.176/src/os_win32.h 2010-08-15 21:57:30.000000000 +0200
+--- src/os_win32.h 2011-05-05 18:25:44.000000000 +0200
+***************
+*** 191,195 ****
+ #ifdef __BORLANDC__
+ # define vim_mkdir(x, y) mkdir(x)
+ #else
+! # define vim_mkdir(x, y) _mkdir(x)
+ #endif
+--- 191,195 ----
+ #ifdef __BORLANDC__
+ # define vim_mkdir(x, y) mkdir(x)
+ #else
+! # define vim_mkdir(x, y) mch_mkdir(x)
+ #endif
+*** ../vim-7.3.176/src/proto/os_win32.pro 2011-05-05 16:41:19.000000000 +0200
+--- src/proto/os_win32.pro 2011-05-05 18:26:20.000000000 +0200
+***************
+*** 20,25 ****
+--- 20,26 ----
+ int mch_setperm __ARGS((char_u *name, long perm));
+ void mch_hide __ARGS((char_u *name));
+ int mch_isdir __ARGS((char_u *name));
++ int mch_mkdir __ARGS((char_u *name));
+ int mch_is_linked __ARGS((char_u *fname));
+ int win32_fileinfo __ARGS((char_u *name, BY_HANDLE_FILE_INFORMATION *lpFileInfo));
+ int mch_writable __ARGS((char_u *name));
+*** ../vim-7.3.176/src/version.c 2011-05-05 18:10:11.000000000 +0200
+--- src/version.c 2011-05-05 18:27:56.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 177,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+56. You leave the modem speaker on after connecting because you think it
+ sounds like the ocean wind...the perfect soundtrack for "surfing the net".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.178
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.178
+Problem: C-indent doesn't handle code right after { correctly.
+Solution: Fix detecting unterminated line. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.177/src/misc1.c 2011-04-28 17:48:39.000000000 +0200
+--- src/misc1.c 2011-05-10 11:35:09.000000000 +0200
+***************
+*** 4983,4989 ****
+ }
+
+ /*
+! * Return TRUE if there there is no code at *s. White space and comments are
+ * not considered code.
+ */
+ static int
+--- 4983,4989 ----
+ }
+
+ /*
+! * Return TRUE if there is no code at *s. White space and comments are
+ * not considered code.
+ */
+ static int
+***************
+*** 5458,5465 ****
+ }
+
+ /*
+! * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
+ * Don't consider "} else" a terminated line.
+ * Return the character terminating the line (ending char's have precedence if
+ * both apply in order to determine initializations).
+ */
+--- 5458,5468 ----
+ }
+
+ /*
+! * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+! * '}'.
+ * Don't consider "} else" a terminated line.
++ * Don't consider a line where there are unmatched opening braces before '}',
++ * ';' or ',' a terminated line.
+ * Return the character terminating the line (ending char's have precedence if
+ * both apply in order to determine initializations).
+ */
+***************
+*** 5470,5475 ****
+--- 5473,5479 ----
+ int incl_comma; /* recognize a trailing comma */
+ {
+ char_u found_start = 0;
++ unsigned n_open = 0;
+
+ s = cin_skipcomment(s);
+
+***************
+*** 5480,5489 ****
+ {
+ /* skip over comments, "" strings and 'c'haracters */
+ s = skip_string(cin_skipcomment(s));
+! if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
+! || (incl_comma && *s == ','))
+ && cin_nocode(s + 1))
+ return *s;
+
+ if (*s)
+ s++;
+--- 5484,5502 ----
+ {
+ /* skip over comments, "" strings and 'c'haracters */
+ s = skip_string(cin_skipcomment(s));
+! if (*s == '}' && n_open > 0)
+! --n_open;
+! if (n_open == 0
+! && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
+ && cin_nocode(s + 1))
+ return *s;
++ else if (*s == '{')
++ {
++ if (incl_open && cin_nocode(s + 1))
++ return *s;
++ else
++ ++n_open;
++ }
+
+ if (*s)
+ s++;
+*** ../vim-7.3.177/src/testdir/test3.in 2011-04-28 13:01:59.000000000 +0200
+--- src/testdir/test3.in 2011-05-10 11:34:13.000000000 +0200
+***************
+*** 1344,1349 ****
+--- 1344,1365 ----
+ }
+
+ STARTTEST
++ :set cino&
++ 2kdd=][
++ ENDTEST
++
++ void func(void)
++ {
++ if(x==y)
++ if(y==z)
++ foo=1;
++ else { bar=1;
++ baz=2;
++ }
++ printf("Foo!\n");
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.177/src/testdir/test3.ok 2011-04-28 13:01:59.000000000 +0200
+--- src/testdir/test3.ok 2011-05-10 11:34:13.000000000 +0200
+***************
+*** 1204,1206 ****
+--- 1204,1218 ----
+ {
+ }
+
++
++ void func(void)
++ {
++ if(x==y)
++ if(y==z)
++ foo=1;
++ else { bar=1;
++ baz=2;
++ }
++ printf("Foo!\n");
++ }
++
+*** ../vim-7.3.177/src/version.c 2011-05-05 18:31:54.000000000 +0200
+--- src/version.c 2011-05-10 11:37:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 178,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+69. Yahoo welcomes you with your own start page
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.179
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.179
+Problem: C-indent doesn't handle colon in string correctly.
+Solution: Skip the string. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.178/src/misc1.c 2011-05-10 11:39:13.000000000 +0200
+--- src/misc1.c 2011-05-10 11:50:14.000000000 +0200
+***************
+*** 5801,5807 ****
+ continue;
+ }
+
+! if (s[0] == ':')
+ {
+ if (s[1] == ':')
+ {
+--- 5801,5809 ----
+ continue;
+ }
+
+! if (s[0] == '"')
+! s = skip_string(s) + 1;
+! else if (s[0] == ':')
+ {
+ if (s[1] == ':')
+ {
+*** ../vim-7.3.178/src/testdir/test3.in 2011-05-10 11:39:13.000000000 +0200
+--- src/testdir/test3.in 2011-05-10 11:53:02.000000000 +0200
+***************
+*** 1360,1365 ****
+--- 1360,1378 ----
+ }
+
+ STARTTEST
++ :set cino&
++ 2kdd=][
++ ENDTEST
++
++ void func(void)
++ {
++ cout << "a"
++ << "b"
++ << ") :"
++ << "c";
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.178/src/testdir/test3.ok 2011-05-10 11:39:13.000000000 +0200
+--- src/testdir/test3.ok 2011-05-10 11:50:14.000000000 +0200
+***************
+*** 1216,1218 ****
+--- 1216,1227 ----
+ printf("Foo!\n");
+ }
+
++
++ void func(void)
++ {
++ cout << "a"
++ << "b"
++ << ") :"
++ << "c";
++ }
++
+*** ../vim-7.3.178/src/version.c 2011-05-10 11:39:13.000000000 +0200
+--- src/version.c 2011-05-10 11:53:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 179,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+71. You wonder how people walk
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.180
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.180
+Problem: When both a middle part of 'comments' matches and an end part, the
+ middle part was used errornously.
+Solution: After finding the middle part match continue looking for a better
+ end part match. (partly by Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.179/src/misc1.c 2011-05-10 11:56:26.000000000 +0200
+--- src/misc1.c 2011-05-10 13:24:38.000000000 +0200
+***************
+*** 1561,1566 ****
+--- 1561,1569 ----
+ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
+ char_u *string; /* pointer to comment string */
+ char_u *list;
++ int middle_match_len = 0;
++ char_u *prev_list;
++ char_u *saved_flags;
+
+ i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+***************
+*** 1569,1575 ****
+ /*
+ * Repeat to match several nested comment strings.
+ */
+! while (line[i])
+ {
+ /*
+ * scan through the 'comments' option for a match
+--- 1572,1578 ----
+ /*
+ * Repeat to match several nested comment strings.
+ */
+! while (line[i] != NUL)
+ {
+ /*
+ * scan through the 'comments' option for a match
+***************
+*** 1577,1658 ****
+ found_one = FALSE;
+ for (list = curbuf->b_p_com; *list; )
+ {
+! /*
+! * Get one option part into part_buf[]. Advance list to next one.
+! * put string at start of string.
+! */
+! if (!got_com && flags != NULL) /* remember where flags started */
+! *flags = list;
+ (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+ string = vim_strchr(part_buf, ':');
+ if (string == NULL) /* missing ':', ignore this part */
+ continue;
+ *string++ = NUL; /* isolate flags from string */
+
+! /*
+! * When already found a nested comment, only accept further
+! * nested comments.
+! */
+ if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+ continue;
+
+! /* When 'O' flag used don't use for "O" command */
+ if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+ continue;
+
+! /*
+! * Line contents and string must match.
+ * When string starts with white space, must have some white space
+ * (but the amount does not need to match, there might be a mix of
+! * TABs and spaces).
+! */
+ if (vim_iswhite(string[0]))
+ {
+ if (i == 0 || !vim_iswhite(line[i - 1]))
+! continue;
+ while (vim_iswhite(string[0]))
+ ++string;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ ;
+ if (string[j] != NUL)
+! continue;
+
+! /*
+! * When 'b' flag used, there must be white space or an
+! * end-of-line after the string in the line.
+! */
+ if (vim_strchr(part_buf, COM_BLANK) != NULL
+ && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+ continue;
+
+! /*
+! * We have found a match, stop searching.
+! */
+! i += j;
+! got_com = TRUE;
+ found_one = TRUE;
+ break;
+ }
+
+! /*
+! * No match found, stop scanning.
+! */
+ if (!found_one)
+ break;
+
+! /*
+! * Include any trailing white space.
+! */
+ while (vim_iswhite(line[i]))
+ ++i;
+
+! /*
+! * If this comment doesn't nest, stop here.
+! */
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
+ return (got_com ? i : 0);
+ }
+ #endif
+--- 1580,1683 ----
+ found_one = FALSE;
+ for (list = curbuf->b_p_com; *list; )
+ {
+! /* Get one option part into part_buf[]. Advance "list" to next
+! * one. Put "string" at start of string. */
+! if (!got_com && flags != NULL)
+! *flags = list; /* remember where flags started */
+! prev_list = list;
+ (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+ string = vim_strchr(part_buf, ':');
+ if (string == NULL) /* missing ':', ignore this part */
+ continue;
+ *string++ = NUL; /* isolate flags from string */
+
+! /* If we found a middle match previously, use that match when this
+! * is not a middle or end. */
+! if (middle_match_len != 0
+! && vim_strchr(part_buf, COM_MIDDLE) == NULL
+! && vim_strchr(part_buf, COM_END) == NULL)
+! break;
+!
+! /* When we already found a nested comment, only accept further
+! * nested comments. */
+ if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+ continue;
+
+! /* When 'O' flag present and using "O" command skip this one. */
+ if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+ continue;
+
+! /* Line contents and string must match.
+ * When string starts with white space, must have some white space
+ * (but the amount does not need to match, there might be a mix of
+! * TABs and spaces). */
+ if (vim_iswhite(string[0]))
+ {
+ if (i == 0 || !vim_iswhite(line[i - 1]))
+! continue; /* missing shite space */
+ while (vim_iswhite(string[0]))
+ ++string;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ ;
+ if (string[j] != NUL)
+! continue; /* string doesn't match */
+
+! /* When 'b' flag used, there must be white space or an
+! * end-of-line after the string in the line. */
+ if (vim_strchr(part_buf, COM_BLANK) != NULL
+ && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+ continue;
+
+! /* We have found a match, stop searching unless this is a middle
+! * comment. The middle comment can be a substring of the end
+! * comment in which case it's better to return the length of the
+! * end comment and its flags. Thus we keep searching with middle
+! * and end matches and use an end match if it matches better. */
+! if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
+! {
+! if (middle_match_len == 0)
+! {
+! middle_match_len = j;
+! saved_flags = prev_list;
+! }
+! continue;
+! }
+! if (middle_match_len != 0 && j > middle_match_len)
+! /* Use this match instead of the middle match, since it's a
+! * longer thus better match. */
+! middle_match_len = 0;
+!
+! if (middle_match_len == 0)
+! i += j;
+ found_one = TRUE;
+ break;
+ }
+
+! if (middle_match_len != 0)
+! {
+! /* Use the previously found middle match after failing to find a
+! * match with an end. */
+! if (!got_com && flags != NULL)
+! *flags = saved_flags;
+! i += middle_match_len;
+! found_one = TRUE;
+! }
+!
+! /* No match found, stop scanning. */
+ if (!found_one)
+ break;
+
+! /* Include any trailing white space. */
+ while (vim_iswhite(line[i]))
+ ++i;
+
+! /* If this comment doesn't nest, stop here. */
+! got_com = TRUE;
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
++
+ return (got_com ? i : 0);
+ }
+ #endif
+*** ../vim-7.3.179/src/testdir/test3.in 2011-05-10 11:56:26.000000000 +0200
+--- src/testdir/test3.in 2011-05-10 12:05:50.000000000 +0200
+***************
+*** 1373,1378 ****
+--- 1373,1390 ----
+ }
+
+ STARTTEST
++ :set com=s1:/*,m:*,ex:*/
++ ]]3jofoo();\e
++ ENDTEST
++
++ void func(void)
++ {
++ /*
++ * This is a comment.
++ */
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.179/src/testdir/test3.ok 2011-05-10 11:56:26.000000000 +0200
+--- src/testdir/test3.ok 2011-05-10 12:05:50.000000000 +0200
+***************
+*** 1225,1227 ****
+--- 1225,1236 ----
+ << "c";
+ }
+
++
++ void func(void)
++ {
++ /*
++ * This is a comment.
++ */
++ foo();
++ }
++
+*** ../vim-7.3.179/src/version.c 2011-05-10 11:56:26.000000000 +0200
+--- src/version.c 2011-05-10 13:37:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 180,
+ /**/
+
+--
+"Thou shalt not follow the Null Pointer, for at its end Chaos and
+Madness lie."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.181
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.181
+Problem: When repeating the insert of CTRL-V or a digraph the display may
+ not be updated correctly.
+Solution: Only call edit_unputchar() after edit_putchar(). (Lech Lorens)
+Files: src/edit.c
+
+
+*** ../vim-7.3.180/src/edit.c 2010-11-10 17:11:29.000000000 +0100
+--- src/edit.c 2011-05-10 14:16:41.000000000 +0200
+***************
+*** 1553,1564 ****
+--- 1553,1568 ----
+ ins_ctrl_v()
+ {
+ int c;
++ int did_putchar = FALSE;
+
+ /* may need to redraw when no more chars available now */
+ ins_redraw(FALSE);
+
+ if (redrawing() && !char_avail())
++ {
+ edit_putchar('^', TRUE);
++ did_putchar = TRUE;
++ }
+ AppendToRedobuff((char_u *)CTRL_V_STR); /* CTRL-V */
+
+ #ifdef FEAT_CMDL_INFO
+***************
+*** 1566,1573 ****
+ #endif
+
+ c = get_literal();
+! edit_unputchar(); /* when line fits in 'columns' the '^' is at the start
+! of the next line and will not be redrawn */
+ #ifdef FEAT_CMDL_INFO
+ clear_showcmd();
+ #endif
+--- 1570,1579 ----
+ #endif
+
+ c = get_literal();
+! if (did_putchar)
+! /* when the line fits in 'columns' the '^' is at the start of the next
+! * line and will not removed by the redraw */
+! edit_unputchar();
+ #ifdef FEAT_CMDL_INFO
+ clear_showcmd();
+ #endif
+***************
+*** 9637,9642 ****
+--- 9643,9649 ----
+ {
+ int c;
+ int cc;
++ int did_putchar = FALSE;
+
+ pc_status = PC_STATUS_UNSET;
+ if (redrawing() && !char_avail())
+***************
+*** 9645,9650 ****
+--- 9652,9658 ----
+ ins_redraw(FALSE);
+
+ edit_putchar('?', TRUE);
++ did_putchar = TRUE;
+ #ifdef FEAT_CMDL_INFO
+ add_to_showcmd_c(Ctrl_K);
+ #endif
+***************
+*** 9661,9668 ****
+ c = plain_vgetc();
+ --no_mapping;
+ --allow_keys;
+! edit_unputchar(); /* when line fits in 'columns' the '?' is at the start
+! of the next line and will not be redrawn */
+
+ if (IS_SPECIAL(c) || mod_mask) /* special key */
+ {
+--- 9669,9678 ----
+ c = plain_vgetc();
+ --no_mapping;
+ --allow_keys;
+! if (did_putchar)
+! /* when the line fits in 'columns' the '?' is at the start of the next
+! * line and will not be removed by the redraw */
+! edit_unputchar();
+
+ if (IS_SPECIAL(c) || mod_mask) /* special key */
+ {
+***************
+*** 9674,9679 ****
+--- 9684,9690 ----
+ }
+ if (c != ESC)
+ {
++ did_putchar = FALSE;
+ if (redrawing() && !char_avail())
+ {
+ /* may need to redraw when no more chars available now */
+***************
+*** 9681,9691 ****
+
+ if (char2cells(c) == 1)
+ {
+- /* first remove the '?', otherwise it's restored when typing
+- * an ESC next */
+- edit_unputchar();
+ ins_redraw(FALSE);
+ edit_putchar(c, TRUE);
+ }
+ #ifdef FEAT_CMDL_INFO
+ add_to_showcmd_c(c);
+--- 9692,9700 ----
+
+ if (char2cells(c) == 1)
+ {
+ ins_redraw(FALSE);
+ edit_putchar(c, TRUE);
++ did_putchar = TRUE;
+ }
+ #ifdef FEAT_CMDL_INFO
+ add_to_showcmd_c(c);
+***************
+*** 9696,9703 ****
+ cc = plain_vgetc();
+ --no_mapping;
+ --allow_keys;
+! edit_unputchar(); /* when line fits in 'columns' the '?' is at the
+! start of the next line and will not be redrawn */
+ if (cc != ESC)
+ {
+ AppendToRedobuff((char_u *)CTRL_V_STR);
+--- 9705,9714 ----
+ cc = plain_vgetc();
+ --no_mapping;
+ --allow_keys;
+! if (did_putchar)
+! /* when the line fits in 'columns' the '?' is at the start of the
+! * next line and will not be removed by a redraw */
+! edit_unputchar();
+ if (cc != ESC)
+ {
+ AppendToRedobuff((char_u *)CTRL_V_STR);
+*** ../vim-7.3.180/src/version.c 2011-05-10 13:38:23.000000000 +0200
+--- src/version.c 2011-05-10 14:20:40.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 181,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+74. Your most erotic dreams are about cybersex
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.182
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.182 (after 7.3.180)
+Problem: Compiler warning for uninitialized variable.
+Solution: Add dummy initializer.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.181/src/misc1.c 2011-05-10 13:38:23.000000000 +0200
+--- src/misc1.c 2011-05-10 14:37:39.000000000 +0200
+***************
+*** 1563,1569 ****
+ char_u *list;
+ int middle_match_len = 0;
+ char_u *prev_list;
+! char_u *saved_flags;
+
+ i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+--- 1563,1569 ----
+ char_u *list;
+ int middle_match_len = 0;
+ char_u *prev_list;
+! char_u *saved_flags = NULL;
+
+ i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+*** ../vim-7.3.181/src/version.c 2011-05-10 14:22:10.000000000 +0200
+--- src/version.c 2011-05-10 14:38:39.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 182,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+75. You start wondering whether you could actually upgrade your brain
+ with a Pentium Pro microprocessor 80. The upgrade works just fine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.183
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.183 (after 7.3.174)
+Problem: When Exuberant ctags binary is exuberant-ctags it's not found.
+Solution: Add configure check for exuberant-ctags.
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.182/src/configure.in 2011-05-05 18:10:11.000000000 +0200
+--- src/configure.in 2011-05-10 15:39:38.000000000 +0200
+***************
+*** 3375,3384 ****
+ dnl -i+m to test for older Exuberant ctags
+ AC_MSG_CHECKING(how to create tags)
+ test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+! TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+ (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
+--- 3375,3386 ----
+ dnl -i+m to test for older Exuberant ctags
+ AC_MSG_CHECKING(how to create tags)
+ test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
++ elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
++ TAGPRG="exctags -I INIT+ --fields=+S"
++ elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
++ TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+ (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
+*** ../vim-7.3.182/src/auto/configure 2011-05-05 18:10:11.000000000 +0200
+--- src/auto/configure 2011-05-10 15:39:41.000000000 +0200
+***************
+*** 12028,12037 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+ $as_echo_n "checking how to create tags... " >&6; }
+ test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+! TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+ (eval etags /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
+--- 12028,12039 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+ $as_echo_n "checking how to create tags... " >&6; }
+ test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
++ elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
++ TAGPRG="exctags -I INIT+ --fields=+S"
++ elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
++ TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+ (eval etags /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
+*** ../vim-7.3.182/src/version.c 2011-05-10 14:44:07.000000000 +0200
+--- src/version.c 2011-05-10 15:40:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 183,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+78. You find yourself dialing IP numbers on the phone.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.184
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.184
+Problem: Static code analysis errors in riscOS.
+Solution: Make buffer size bigger. (Dominique Pelle)
+Files: src/gui_riscos.c
+
+
+*** ../vim-7.3.183/src/gui_riscos.c 2010-08-15 21:57:28.000000000 +0200
+--- src/gui_riscos.c 2011-05-10 15:49:56.000000000 +0200
+***************
+*** 1756,1762 ****
+
+ if (button & 0x444)
+ {
+! int front_block[10];
+ /* Dragging with Select - bring window to front first */
+ front_block[0] = gui.window_handle;
+ swi(Wimp_GetWindowState, 0, front_block);
+--- 1756,1762 ----
+
+ if (button & 0x444)
+ {
+! int front_block[64];
+ /* Dragging with Select - bring window to front first */
+ front_block[0] = gui.window_handle;
+ swi(Wimp_GetWindowState, 0, front_block);
+***************
+*** 1874,1880 ****
+
+ if (ro_dragging == DRAG_RESIZE_WINDOW)
+ {
+! /* Resizeing the main window. */
+ block[2] = y;
+ block[3] = x;
+ ro_open_main(block);
+--- 1874,1880 ----
+
+ if (ro_dragging == DRAG_RESIZE_WINDOW)
+ {
+! /* Resizing the main window. */
+ block[2] = y;
+ block[3] = x;
+ ro_open_main(block);
+***************
+*** 2651,2657 ****
+ long_u length;
+
+ block[0] = 48; /* Size of block. */
+! block[3] = 0; /* Orinial message. */
+ block[4] = 0x10; /* Data request. */
+ block[5] = gui.window_handle;
+ block[6] = RO_LOAD_CLIPBOARD; /* Internal handle. */
+--- 2651,2657 ----
+ long_u length;
+
+ block[0] = 48; /* Size of block. */
+! block[3] = 0; /* Original message. */
+ block[4] = 0x10; /* Data request. */
+ block[5] = gui.window_handle;
+ block[6] = RO_LOAD_CLIPBOARD; /* Internal handle. */
+*** ../vim-7.3.183/src/version.c 2011-05-10 15:41:59.000000000 +0200
+--- src/version.c 2011-05-10 15:51:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 184,
+ /**/
+
+--
+If bankers can count, how come they have eight windows and
+only four tellers?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.185
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.185
+Problem: ":windo g/pattern/q" closes windows and reports "N more lines".
+ (Tim Chase)
+Solution: Remember what buffer ":global" started in. (Jean-Rene David)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.184/src/ex_cmds.c 2011-04-11 21:35:03.000000000 +0200
+--- src/ex_cmds.c 2011-05-10 15:58:48.000000000 +0200
+***************
+*** 5365,5372 ****
+ global_exe(cmd)
+ char_u *cmd;
+ {
+! linenr_T old_lcount; /* b_ml.ml_line_count before the command */
+! linenr_T lnum; /* line number according to old situation */
+
+ /*
+ * Set current position only once for a global command.
+--- 5365,5373 ----
+ global_exe(cmd)
+ char_u *cmd;
+ {
+! linenr_T old_lcount; /* b_ml.ml_line_count before the command */
+! buf_T *old_buf = curbuf; /* remember what buffer we started in */
+! linenr_T lnum; /* line number according to old situation */
+
+ /*
+ * Set current position only once for a global command.
+***************
+*** 5410,5417 ****
+ msg_didout = FALSE;
+
+ /* If substitutes done, report number of substitutes, otherwise report
+! * number of extra or deleted lines. */
+! if (!do_sub_msg(FALSE))
+ msgmore(curbuf->b_ml.ml_line_count - old_lcount);
+ }
+
+--- 5411,5420 ----
+ msg_didout = FALSE;
+
+ /* If substitutes done, report number of substitutes, otherwise report
+! * number of extra or deleted lines.
+! * Don't report extra or deleted lines in the edge case where the buffer
+! * we are in after execution is different from the buffer we started in. */
+! if (!do_sub_msg(FALSE) && curbuf == old_buf)
+ msgmore(curbuf->b_ml.ml_line_count - old_lcount);
+ }
+
+*** ../vim-7.3.184/src/version.c 2011-05-10 15:52:10.000000000 +0200
+--- src/version.c 2011-05-10 15:57:40.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 185,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+79. All of your most erotic dreams have a scrollbar at the right side.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.186
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.186
+Problem: When 'clipboard' contains "unnamed" or "unnamedplus" the value of
+ v:register is wrong for operators without a specific register.
+Solution: Adjust the register according to 'clipboard'. (Ingo Karkat)
+Files: src/normal.c
+
+
+*** ../vim-7.3.185/src/normal.c 2010-12-17 18:52:56.000000000 +0100
+--- src/normal.c 2011-05-10 16:07:49.000000000 +0200
+***************
+*** 1202,1208 ****
+ {
+ clearop(oap);
+ #ifdef FEAT_EVAL
+! set_reg_var('"');
+ #endif
+ }
+
+--- 1202,1214 ----
+ {
+ clearop(oap);
+ #ifdef FEAT_EVAL
+! {
+! int regname = 0;
+! /* Adjust the register according to 'clipboard', so that when
+! * "unnamed" is present it becomes '*' or '+' instead of '"'. */
+! adjust_clip_reg(®name);
+! set_reg_var(regname);
+! }
+ #endif
+ }
+
+*** ../vim-7.3.185/src/version.c 2011-05-10 16:00:43.000000000 +0200
+--- src/version.c 2011-05-10 16:10:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 186,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.187
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.187
+Problem: The RISC OS port has obvious errors and is not being maintained.
+Solution: Remove the RISC OS files and code.
+Files: src/ascii.h, src/eval.c, src/ex_cmds.c, src/ex_cmds2.c,
+ src/ex_docmd.c, src/fileio.c, src/globals.h, src/gui.c, src/gui.h,
+ src/main.c, src/memfile.c, src/memline.c, src/misc1.c,
+ src/proto.h, src/quickfix.c, src/search.c, src/structs.h,
+ src/term.c, src/termlib.c, src/version.c, src/vim.h,
+ src/gui_riscos.h, src/os_riscos.h, src/gui_riscos.c,
+ src/os_riscos.c, runtime/doc/os_risc.txt
+
+
+*** ../vim-7.3.186/src/ascii.h 2010-08-15 21:57:25.000000000 +0200
+--- src/ascii.h 2011-05-10 16:22:08.000000000 +0200
+***************
+*** 183,193 ****
+ # define PATHSEP psepc
+ # define PATHSEPSTR pseps
+ #else
+! # ifdef RISCOS
+! # define PATHSEP '.'
+! # define PATHSEPSTR "."
+! # else
+! # define PATHSEP '/'
+! # define PATHSEPSTR "/"
+! # endif
+ #endif
+--- 183,188 ----
+ # define PATHSEP psepc
+ # define PATHSEPSTR pseps
+ #else
+! # define PATHSEP '/'
+! # define PATHSEPSTR "/"
+ #endif
+*** ../vim-7.3.186/src/eval.c 2011-04-21 14:27:21.000000000 +0200
+--- src/eval.c 2011-05-10 16:22:21.000000000 +0200
+***************
+*** 11818,11826 ****
+ #ifdef __QNX__
+ "qnx",
+ #endif
+- #ifdef RISCOS
+- "riscos",
+- #endif
+ #ifdef UNIX
+ "unix",
+ #endif
+--- 11818,11823 ----
+*** ../vim-7.3.186/src/ex_cmds.c 2011-05-10 16:00:43.000000000 +0200
+--- src/ex_cmds.c 2011-05-10 16:23:22.000000000 +0200
+***************
+*** 899,907 ****
+ * Handle the ":!cmd" command. Also for ":r !cmd" and ":w !cmd"
+ * Bangs in the argument are replaced with the previously entered command.
+ * Remember the argument.
+- *
+- * RISCOS: Bangs only replaced when followed by a space, since many
+- * pathnames contain one.
+ */
+ void
+ do_bang(addr_count, eap, forceit, do_in, do_out)
+--- 899,904 ----
+***************
+*** 980,990 ****
+ trailarg = NULL;
+ while (*p)
+ {
+! if (*p == '!'
+! #ifdef RISCOS
+! && (p[1] == ' ' || p[1] == NUL)
+! #endif
+! )
+ {
+ if (p > newcmd && p[-1] == '\\')
+ STRMOVE(p - 1, p);
+--- 977,983 ----
+ trailarg = NULL;
+ while (*p)
+ {
+! if (*p == '!')
+ {
+ if (p > newcmd && p[-1] == '\\')
+ STRMOVE(p - 1, p);
+***************
+*** 1578,1591 ****
+ if (p != NULL)
+ *p = NUL;
+ }
+- # ifdef RISCOS
+- STRCAT(buf, " { < "); /* Use RISC OS notation for input. */
+- STRCAT(buf, itmp);
+- STRCAT(buf, " } ");
+- # else
+ STRCAT(buf, " <"); /* " < " causes problems on Amiga */
+ STRCAT(buf, itmp);
+- # endif
+ if (*p_shq == NUL)
+ {
+ p = vim_strchr(cmd, '|');
+--- 1571,1578 ----
+***************
+*** 1634,1649 ****
+ else
+ vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
+ #ifdef FEAT_QUICKFIX
+- # ifndef RISCOS
+- opt != p_sp ? " %s%s" :
+- # endif
+ " %s %s",
+ #else
+- # ifndef RISCOS
+ " %s%s", /* " > %s" causes problems on Amiga */
+- # else
+- " %s %s", /* But is needed for 'shellpipe' and RISC OS */
+- # endif
+ #endif
+ (char *)opt, (char *)fname);
+ }
+--- 1621,1629 ----
+***************
+*** 1844,1854 ****
+ #ifdef VMS
+ (char_u *)"-tmp",
+ #else
+- # ifdef RISCOS
+- (char_u *)"/tmp",
+- # else
+ (char_u *)".tmp",
+- # endif
+ #endif
+ FALSE);
+ if (tempname == NULL) /* out of memory */
+--- 1824,1830 ----
+*** ../vim-7.3.186/src/ex_cmds2.c 2011-04-11 21:35:03.000000000 +0200
+--- src/ex_cmds2.c 2011-05-10 16:23:47.000000000 +0200
+***************
+*** 500,517 ****
+ /* Expand the file name in the same way as do_source(). This means
+ * doing it twice, so that $DIR/file gets expanded when $DIR is
+ * "~/dir". */
+- #ifdef RISCOS
+- q = mch_munge_fname(p);
+- #else
+ q = expand_env_save(p);
+- #endif
+ if (q == NULL)
+ return FAIL;
+- #ifdef RISCOS
+- p = mch_munge_fname(q);
+- #else
+ p = expand_env_save(q);
+- #endif
+ vim_free(q);
+ if (p == NULL)
+ return FAIL;
+--- 500,509 ----
+***************
+*** 2940,2950 ****
+ proftime_T wait_start;
+ #endif
+
+- #ifdef RISCOS
+- p = mch_munge_fname(fname);
+- #else
+ p = expand_env_save(fname);
+- #endif
+ if (p == NULL)
+ return retval;
+ fname_exp = fix_fname(p);
+--- 2932,2938 ----
+*** ../vim-7.3.186/src/ex_docmd.c 2011-05-05 14:26:37.000000000 +0200
+--- src/ex_docmd.c 2011-05-10 16:24:18.000000000 +0200
+***************
+*** 9702,9715 ****
+ valid = 0; /* Must have ":p:h" to be valid */
+ }
+ else
+- #ifdef RISCOS
+- /* Always use the full path for RISC OS if possible. */
+- result = curbuf->b_ffname;
+- if (result == NULL)
+- result = curbuf->b_fname;
+- #else
+ result = curbuf->b_fname;
+- #endif
+ break;
+
+ case SPEC_HASH: /* '#' or "#99": alternate file */
+--- 9702,9708 ----
+***************
+*** 9854,9864 ****
+ if (src[*usedlen] == '<') /* remove the file name extension */
+ {
+ ++*usedlen;
+- #ifdef RISCOS
+- if ((s = vim_strrchr(result, '/')) != NULL && s >= gettail(result))
+- #else
+ if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
+- #endif
+ resultlen = (int)(s - result);
+ }
+ #ifdef FEAT_MODIFY_FNAME
+--- 9847,9853 ----
+***************
+*** 10875,10882 ****
+ else if (vim_ispathsep(*p))
+ {
+ *s++ = '=';
+! #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(RISCOS) \
+! || defined(VMS)
+ if (*p == ':')
+ *s++ = '-';
+ else
+--- 10864,10870 ----
+ else if (vim_ispathsep(*p))
+ {
+ *s++ = '=';
+! #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS)
+ if (*p == ':')
+ *s++ = '-';
+ else
+*** ../vim-7.3.186/src/fileio.c 2011-05-05 16:41:19.000000000 +0200
+--- src/fileio.c 2011-05-10 16:26:06.000000000 +0200
+***************
+*** 504,521 ****
+
+ if (newfile && !read_stdin && !read_buffer)
+ {
+! /* Remember time of file.
+! * For RISCOS, also remember the filetype.
+! */
+ if (mch_stat((char *)fname, &st) >= 0)
+ {
+ buf_store_time(curbuf, &st, fname);
+ curbuf->b_mtime_read = curbuf->b_mtime;
+-
+- #if defined(RISCOS) && defined(FEAT_OSFILETYPE)
+- /* Read the filetype into the buffer local filetype option. */
+- mch_read_filetype(fname);
+- #endif
+ #ifdef UNIX
+ /*
+ * Use the protection bits of the original file for the swap file.
+--- 504,514 ----
+
+ if (newfile && !read_stdin && !read_buffer)
+ {
+! /* Remember time of file. */
+ if (mch_stat((char *)fname, &st) >= 0)
+ {
+ buf_store_time(curbuf, &st, fname);
+ curbuf->b_mtime_read = curbuf->b_mtime;
+ #ifdef UNIX
+ /*
+ * Use the protection bits of the original file for the swap file.
+***************
+*** 557,563 ****
+
+ /*
+ * for UNIX: check readonly with perm and mch_access()
+- * for RISCOS: same as Unix, otherwise file gets re-datestamped!
+ * for MSDOS and Amiga: check readonly by trying to open the file for writing
+ */
+ file_readonly = FALSE;
+--- 550,555 ----
+***************
+*** 3804,3816 ****
+
+ /* make sure we have a valid backup extension to use */
+ if (*p_bex == NUL)
+- {
+- #ifdef RISCOS
+- backup_ext = (char_u *)"/bak";
+- #else
+ backup_ext = (char_u *)".bak";
+- #endif
+- }
+ else
+ backup_ext = p_bex;
+
+--- 3796,3802 ----
+***************
+*** 4724,4734 ****
+ #endif
+ if (perm >= 0) /* set perm. of new file same as old file */
+ (void)mch_setperm(wfname, perm);
+- #ifdef RISCOS
+- if (!append && !filtering)
+- /* Set the filetype after writing the file. */
+- mch_set_filetype(wfname, buf->b_p_oft);
+- #endif
+ #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). */
+--- 4710,4715 ----
+***************
+*** 6262,6280 ****
+ */
+ for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
+ {
+- #ifndef RISCOS
+ if (*ext == '.'
+! # ifdef USE_LONG_FNAME
+ && (!USE_LONG_FNAME || shortname)
+! # else
+! # ifndef SHORT_FNAME
+ && shortname
+- # endif
+ # endif
+ )
+ if (*ptr == '.') /* replace '.' by '_' */
+ *ptr = '_';
+- #endif
+ if (vim_ispathsep(*ptr))
+ {
+ ++ptr;
+--- 6243,6259 ----
+ */
+ for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
+ {
+ if (*ext == '.'
+! #ifdef USE_LONG_FNAME
+ && (!USE_LONG_FNAME || shortname)
+! #else
+! # ifndef SHORT_FNAME
+ && shortname
+ # endif
++ #endif
+ )
+ if (*ptr == '.') /* replace '.' by '_' */
+ *ptr = '_';
+ if (vim_ispathsep(*ptr))
+ {
+ ++ptr;
+***************
+*** 6309,6331 ****
+ if (fname == NULL || *fname == NUL
+ || vim_ispathsep(fname[STRLEN(fname) - 1]))
+ {
+- #ifdef RISCOS
+- if (*ext == '/')
+- #else
+ if (*ext == '.')
+- #endif
+ *s++ = '_';
+ }
+ /*
+ * If the extension starts with '.', truncate the base name at 8
+ * characters
+ */
+- #ifdef RISCOS
+- /* We normally use '/', but swap files are '_' */
+- else if (*ext == '/' || *ext == '_')
+- #else
+ else if (*ext == '.')
+- #endif
+ {
+ if ((size_t)(s - ptr) > (size_t)8)
+ {
+--- 6288,6301 ----
+***************
+*** 6337,6349 ****
+ * If the extension doesn't start with '.', and the file name
+ * doesn't have an extension yet, append a '.'
+ */
+- #ifdef RISCOS
+- else if ((e = vim_strchr(ptr, '/')) == NULL)
+- *s++ = '/';
+- #else
+ else if ((e = vim_strchr(ptr, '.')) == NULL)
+ *s++ = '.';
+- #endif
+ /*
+ * If the extension doesn't start with '.', and there already is an
+ * extension, it may need to be truncated
+--- 6307,6314 ----
+***************
+*** 6371,6393 ****
+ /*
+ * Prepend the dot.
+ */
+! if (prepend_dot && !shortname && *(e = gettail(retval)) !=
+! #ifdef RISCOS
+! '/'
+! #else
+! '.'
+! #endif
+ #ifdef USE_LONG_FNAME
+ && USE_LONG_FNAME
+ #endif
+ )
+ {
+ STRMOVE(e + 1, e);
+- #ifdef RISCOS
+- *e = '/';
+- #else
+ *e = '.';
+- #endif
+ }
+ #endif
+
+--- 6336,6349 ----
+ /*
+ * Prepend the dot.
+ */
+! if (prepend_dot && !shortname && *(e = gettail(retval)) != '.'
+ #ifdef USE_LONG_FNAME
+ && USE_LONG_FNAME
+ #endif
+ )
+ {
+ STRMOVE(e + 1, e);
+ *e = '.';
+ }
+ #endif
+
+***************
+*** 10205,10223 ****
+ ++p;
+ break;
+ case '.':
+- #ifdef RISCOS
+- if (allow_dirs != NULL)
+- *allow_dirs = TRUE;
+- /* FALLTHROUGH */
+- #endif
+ case '~':
+ reg_pat[i++] = '\\';
+ reg_pat[i++] = *p;
+ break;
+ case '?':
+- #ifdef RISCOS
+- case '#':
+- #endif
+ reg_pat[i++] = '.';
+ break;
+ case '\\':
+--- 10161,10171 ----
+*** ../vim-7.3.186/src/globals.h 2011-05-05 14:26:37.000000000 +0200
+--- src/globals.h 2011-05-10 16:26:13.000000000 +0200
+***************
+*** 1513,1519 ****
+ EXTERN char_u e_sandbox[] INIT(= N_("E48: Not allowed in sandbox"));
+ #endif
+ EXTERN char_u e_secure[] INIT(= N_("E523: Not allowed here"));
+! #if defined(AMIGA) || defined(MACOS) || defined(MSWIN) || defined(RISCOS) \
+ || defined(UNIX) || defined(VMS) || defined(OS2)
+ EXTERN char_u e_screenmode[] INIT(= N_("E359: Screen mode setting not supported"));
+ #endif
+--- 1513,1519 ----
+ EXTERN char_u e_sandbox[] INIT(= N_("E48: Not allowed in sandbox"));
+ #endif
+ EXTERN char_u e_secure[] INIT(= N_("E523: Not allowed here"));
+! #if defined(AMIGA) || defined(MACOS) || defined(MSWIN) \
+ || defined(UNIX) || defined(VMS) || defined(OS2)
+ EXTERN char_u e_screenmode[] INIT(= N_("E359: Screen mode setting not supported"));
+ #endif
+*** ../vim-7.3.186/src/gui.c 2011-01-17 20:08:03.000000000 +0100
+--- src/gui.c 2011-05-10 16:26:53.000000000 +0200
+***************
+*** 2156,2162 ****
+
+ if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
+ {
+! #if defined(AMIGA) || defined(RISCOS)
+ gui_mch_set_colors(bg_color, fg_color);
+ #else
+ gui_mch_set_fg_color(bg_color);
+--- 2156,2162 ----
+
+ if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
+ {
+! #if defined(AMIGA)
+ gui_mch_set_colors(bg_color, fg_color);
+ #else
+ gui_mch_set_fg_color(bg_color);
+***************
+*** 2165,2171 ****
+ }
+ else
+ {
+! #if defined(AMIGA) || defined(RISCOS)
+ gui_mch_set_colors(fg_color, bg_color);
+ #else
+ gui_mch_set_fg_color(fg_color);
+--- 2165,2171 ----
+ }
+ else
+ {
+! #if defined(AMIGA)
+ gui_mch_set_colors(fg_color, bg_color);
+ #else
+ gui_mch_set_fg_color(fg_color);
+***************
+*** 2193,2199 ****
+ if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
+ return FAIL;
+
+! #if defined(RISCOS) || defined(FEAT_GUI_GTK)
+ /* If there's no italic font, then fake it.
+ * For GTK2, we don't need a different font for italic style. */
+ if (hl_mask_todo & HL_ITALIC)
+--- 2193,2199 ----
+ if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
+ return FAIL;
+
+! #if defined(FEAT_GUI_GTK)
+ /* If there's no italic font, then fake it.
+ * For GTK2, we don't need a different font for italic style. */
+ if (hl_mask_todo & HL_ITALIC)
+***************
+*** 2985,3010 ****
+ did_clip = TRUE;
+ }
+ /* Allow the left button to start the selection */
+- else if (button ==
+- # ifdef RISCOS
+- /* Only start a drag on a drag event. Otherwise
+- * we don't get a release event. */
+- MOUSE_DRAG
+- # else
+- MOUSE_LEFT
+- # endif
+- )
+- {
+- clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
+- did_clip = TRUE;
+- }
+- # ifdef RISCOS
+ else if (button == MOUSE_LEFT)
+ {
+! clip_clear_selection();
+ did_clip = TRUE;
+ }
+- # endif
+
+ /* Always allow pasting */
+ if (button != MOUSE_MIDDLE)
+--- 2985,2995 ----
+ did_clip = TRUE;
+ }
+ /* Allow the left button to start the selection */
+ else if (button == MOUSE_LEFT)
+ {
+! clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
+ did_clip = TRUE;
+ }
+
+ /* Always allow pasting */
+ if (button != MOUSE_MIDDLE)
+*** ../vim-7.3.186/src/gui.h 2010-08-15 21:57:25.000000000 +0200
+--- src/gui.h 2011-05-10 16:27:19.000000000 +0200
+***************
+*** 52,61 ****
+ # include <SegLoad.h>*/
+ #endif
+
+- #ifdef RISCOS
+- # include "gui_riscos.h"
+- #endif
+-
+ #ifdef FEAT_GUI_PHOTON
+ # include <Ph.h>
+ # include <Pt.h>
+--- 52,57 ----
+***************
+*** 151,157 ****
+ #define DRAW_BOLD 0x02 /* draw bold text */
+ #define DRAW_UNDERL 0x04 /* draw underline text */
+ #define DRAW_UNDERC 0x08 /* draw undercurl text */
+! #if defined(RISCOS) || defined(FEAT_GUI_GTK)
+ # define DRAW_ITALIC 0x10 /* draw italic text */
+ #endif
+ #define DRAW_CURSOR 0x20 /* drawing block cursor (win32) */
+--- 147,153 ----
+ #define DRAW_BOLD 0x02 /* draw bold text */
+ #define DRAW_UNDERL 0x04 /* draw underline text */
+ #define DRAW_UNDERC 0x08 /* draw undercurl text */
+! #if defined(FEAT_GUI_GTK)
+ # define DRAW_ITALIC 0x10 /* draw italic text */
+ #endif
+ #define DRAW_CURSOR 0x20 /* drawing block cursor (win32) */
+***************
+*** 219,227 ****
+ #ifdef FEAT_GUI_MAC
+ ControlHandle id; /* A handle to the scrollbar */
+ #endif
+- #ifdef RISCOS
+- int id; /* Window handle of scrollbar window */
+- #endif
+ #ifdef FEAT_GUI_PHOTON
+ PtWidget_t *id;
+ #endif
+--- 215,220 ----
+***************
+*** 450,463 ****
+ int visibility; /* Is window partially/fully obscured? */
+ #endif
+
+- #ifdef RISCOS
+- int window_handle;
+- char_u *window_title;
+- int window_title_size;
+- int fg_colour; /* in 0xBBGGRR format */
+- int bg_colour;
+- #endif
+-
+ #ifdef FEAT_GUI_PHOTON
+ PtWidget_t *vimWindow; /* PtWindow */
+ PtWidget_t *vimTextArea; /* PtRaw */
+--- 443,448 ----
+*** ../vim-7.3.186/src/main.c 2011-04-11 21:35:03.000000000 +0200
+--- src/main.c 2011-05-10 16:27:33.000000000 +0200
+***************
+*** 3276,3286 ****
+ main_msg(_("+reverse\t\tDon't use reverse video (also: +rv)"));
+ main_msg(_("-xrm <resource>\tSet the specified resource"));
+ #endif /* FEAT_GUI_X11 */
+- #if defined(FEAT_GUI) && defined(RISCOS)
+- mch_msg(_("\nArguments recognised by gvim (RISC OS version):\n"));
+- main_msg(_("--columns <number>\tInitial width of window in columns"));
+- main_msg(_("--rows <number>\tInitial height of window in rows"));
+- #endif
+ #ifdef FEAT_GUI_GTK
+ mch_msg(_("\nArguments recognised by gvim (GTK+ version):\n"));
+ main_msg(_("-font <font>\t\tUse <font> for normal text (also: -fn)"));
+--- 3276,3281 ----
+*** ../vim-7.3.186/src/memfile.c 2011-03-22 18:10:34.000000000 +0100
+--- src/memfile.c 2011-05-10 16:27:38.000000000 +0200
+***************
+*** 1307,1313 ****
+ * fname cannot be NameBuff, because it must have been allocated.
+ */
+ mf_set_ffname(mfp);
+! #if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+ /*
+ * A ":!cd e:xxx" may change the directory without us knowning, use the
+ * full pathname always. Careful: This frees fname!
+--- 1307,1313 ----
+ * fname cannot be NameBuff, because it must have been allocated.
+ */
+ mf_set_ffname(mfp);
+! #if defined(MSDOS) || defined(MSWIN)
+ /*
+ * A ":!cd e:xxx" may change the directory without us knowning, use the
+ * full pathname always. Careful: This frees fname!
+*** ../vim-7.3.186/src/memline.c 2011-02-15 11:56:56.000000000 +0100
+--- src/memline.c 2011-05-10 16:28:40.000000000 +0200
+***************
+*** 748,754 ****
+ continue;
+ if (mf_open_file(mfp, fname) == OK) /* consumes fname! */
+ {
+! #if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+ /*
+ * set full pathname for swap file now, because a ":!cd dir" may
+ * change directory without us knowing it.
+--- 748,754 ----
+ continue;
+ if (mf_open_file(mfp, fname) == OK) /* consumes fname! */
+ {
+! #if defined(MSDOS) || defined(MSWIN)
+ /*
+ * set full pathname for swap file now, because a ":!cd dir" may
+ * change directory without us knowing it.
+***************
+*** 933,939 ****
+ b0p->b0_fname[0] = NUL;
+ else
+ {
+! #if defined(MSDOS) || defined(MSWIN) || defined(AMIGA) || defined(RISCOS)
+ /* Systems that cannot translate "~user" back into a path: copy the
+ * file name unmodified. Do use slashes instead of backslashes for
+ * portability. */
+--- 933,939 ----
+ b0p->b0_fname[0] = NUL;
+ else
+ {
+! #if defined(MSDOS) || defined(MSWIN) || defined(AMIGA)
+ /* Systems that cannot translate "~user" back into a path: copy the
+ * file name unmodified. Do use slashes instead of backslashes for
+ * portability. */
+***************
+*** 1103,1109 ****
+ fname = (char_u *)"";
+ len = (int)STRLEN(fname);
+ if (len >= 4 &&
+! #if defined(VMS) || defined(RISCOS)
+ STRNICMP(fname + len - 4, "_s" , 2)
+ #else
+ STRNICMP(fname + len - 4, ".s" , 2)
+--- 1103,1109 ----
+ fname = (char_u *)"";
+ len = (int)STRLEN(fname);
+ if (len >= 4 &&
+! #if defined(VMS)
+ STRNICMP(fname + len - 4, "_s" , 2)
+ #else
+ STRNICMP(fname + len - 4, ".s" , 2)
+***************
+*** 1773,1783 ****
+ #ifdef VMS
+ names[0] = vim_strsave((char_u *)"*_sw%");
+ #else
+- # ifdef RISCOS
+- names[0] = vim_strsave((char_u *)"*_sw#");
+- # else
+ names[0] = vim_strsave((char_u *)"*.sw?");
+- # endif
+ #endif
+ #if defined(UNIX) || defined(WIN3264)
+ /* For Unix names starting with a dot are special. MS-Windows
+--- 1773,1779 ----
+***************
+*** 1804,1814 ****
+ #ifdef VMS
+ names[0] = concat_fnames(dir_name, (char_u *)"*_sw%", TRUE);
+ #else
+- # ifdef RISCOS
+- names[0] = concat_fnames(dir_name, (char_u *)"*_sw#", TRUE);
+- # else
+ names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
+- # endif
+ #endif
+ #if defined(UNIX) || defined(WIN3264)
+ /* For Unix names starting with a dot are special. MS-Windows
+--- 1800,1806 ----
+***************
+*** 1877,1883 ****
+ char_u *swapname;
+
+ swapname = modname(fname_res,
+! #if defined(VMS) || defined(RISCOS)
+ (char_u *)"_swp", FALSE
+ #else
+ (char_u *)".swp", TRUE
+--- 1869,1875 ----
+ char_u *swapname;
+
+ swapname = modname(fname_res,
+! #if defined(VMS)
+ (char_u *)"_swp", FALSE
+ #else
+ (char_u *)".swp", TRUE
+***************
+*** 2176,2186 ****
+ #ifdef VMS
+ names[num_names] = concat_fnames(path, (char_u *)"_sw%", FALSE);
+ #else
+- # ifdef RISCOS
+- names[num_names] = concat_fnames(path, (char_u *)"_sw#", FALSE);
+- # else
+ names[num_names] = concat_fnames(path, (char_u *)".sw?", FALSE);
+- # endif
+ #endif
+ if (names[num_names] == NULL)
+ goto end;
+--- 2168,2174 ----
+***************
+*** 2207,2217 ****
+ #ifdef VMS
+ names[num_names] = modname(path, (char_u *)"_sw%", FALSE);
+ #else
+- # ifdef RISCOS
+- names[num_names] = modname(path, (char_u *)"_sw#", FALSE);
+- # else
+ names[num_names] = modname(path, (char_u *)".sw?", FALSE);
+- # endif
+ #endif
+ if (names[num_names] == NULL)
+ goto end;
+--- 2195,2201 ----
+***************
+*** 3205,3211 ****
+ mf_free(mfp, hp); /* free the data block */
+ buf->b_ml.ml_locked = NULL;
+
+! for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; --stack_idx)
+ {
+ buf->b_ml.ml_stack_top = 0; /* stack is invalid when failing */
+ ip = &(buf->b_ml.ml_stack[stack_idx]);
+--- 3189,3196 ----
+ mf_free(mfp, hp); /* free the data block */
+ buf->b_ml.ml_locked = NULL;
+
+! for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0;
+! --stack_idx)
+ {
+ buf->b_ml.ml_stack_top = 0; /* stack is invalid when failing */
+ ip = &(buf->b_ml.ml_stack[stack_idx]);
+***************
+*** 3956,3969 ****
+ #else
+ (buf->b_p_sn || buf->b_shortname),
+ #endif
+- #ifdef RISCOS
+- /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
+- ffname,
+- #else
+ fname_res,
+- #endif
+ (char_u *)
+! #if defined(VMS) || defined(RISCOS)
+ "_swp",
+ #else
+ ".swp",
+--- 3941,3949 ----
+ #else
+ (buf->b_p_sn || buf->b_shortname),
+ #endif
+ fname_res,
+ (char_u *)
+! #if defined(VMS)
+ "_swp",
+ #else
+ ".swp",
+***************
+*** 4427,4440 ****
+ }
+ close(fd);
+ }
+- #ifdef RISCOS
+- else
+- /* Can't open swap file, though it does exist.
+- * Assume that the user is editing two files with
+- * the same name in different directories. No error.
+- */
+- differ = TRUE;
+- #endif
+
+ /* give the ATTENTION message when there is an old swap file
+ * for the current file, and the buffer was not recovered. */
+--- 4407,4412 ----
+*** ../vim-7.3.186/src/misc1.c 2011-05-10 14:44:07.000000000 +0200
+--- src/misc1.c 2011-05-10 16:29:29.000000000 +0200
+***************
+*** 4589,4613 ****
+ vim_ispathsep(c)
+ int c;
+ {
+! #ifdef RISCOS
+! return (c == '.' || c == ':');
+! #else
+! # ifdef UNIX
+ return (c == '/'); /* UNIX has ':' inside file names */
+! # else
+! # ifdef BACKSLASH_IN_FILENAME
+ return (c == ':' || c == '/' || c == '\\');
+! # else
+! # ifdef VMS
+ /* server"user passwd"::device:[full.path.name]fname.extension;version" */
+ return (c == ':' || c == '[' || c == ']' || c == '/'
+ || c == '<' || c == '>' || c == '"' );
+! # else /* Amiga */
+ return (c == ':' || c == '/');
+! # endif /* VMS */
+! # endif
+ # endif
+! #endif /* RISC OS */
+ }
+
+ #if defined(FEAT_SEARCHPATH) || defined(PROTO)
+--- 4589,4609 ----
+ vim_ispathsep(c)
+ int c;
+ {
+! #ifdef UNIX
+ return (c == '/'); /* UNIX has ':' inside file names */
+! #else
+! # ifdef BACKSLASH_IN_FILENAME
+ return (c == ':' || c == '/' || c == '\\');
+! # else
+! # ifdef VMS
+ /* server"user passwd"::device:[full.path.name]fname.extension;version" */
+ return (c == ':' || c == '[' || c == ']' || c == '/'
+ || c == '<' || c == '>' || c == '"' );
+! # else
+ return (c == ':' || c == '/');
+! # endif /* VMS */
+ # endif
+! #endif
+ }
+
+ #if defined(FEAT_SEARCHPATH) || defined(PROTO)
+*** ../vim-7.3.186/src/proto.h 2010-08-15 21:57:29.000000000 +0200
+--- src/proto.h 2011-05-10 16:29:45.000000000 +0200
+***************
+*** 62,70 ****
+ # ifdef __BEOS__
+ # include "os_beos.pro"
+ # endif
+- # ifdef RISCOS
+- # include "os_riscos.pro"
+- # endif
+ # ifdef __QNX__
+ # include "os_qnx.pro"
+ # endif
+--- 62,67 ----
+***************
+*** 245,253 ****
+ # ifdef FEAT_GUI_X11
+ # include "gui_x11.pro"
+ # endif
+- # ifdef RISCOS
+- # include "gui_riscos.pro"
+- # endif
+ # ifdef FEAT_GUI_PHOTON
+ # include "gui_photon.pro"
+ # endif
+--- 242,247 ----
+*** ../vim-7.3.186/src/quickfix.c 2011-05-05 17:14:07.000000000 +0200
+--- src/quickfix.c 2011-05-10 16:30:18.000000000 +0200
+***************
+*** 1182,1202 ****
+ if (fname == NULL || *fname == NUL) /* no file name */
+ return 0;
+ {
+- #ifdef RISCOS
+- /* Name is reported as `main.c', but file is `c.main' */
+- return ro_buflist_add(fname);
+- #else
+ char_u *ptr;
+ int fnum;
+
+! # ifdef VMS
+ vms_remove_version(fname);
+! # endif
+! # ifdef BACKSLASH_IN_FILENAME
+ if (directory != NULL)
+ slash_adjust(directory);
+ slash_adjust(fname);
+! # endif
+ if (directory != NULL && !vim_isAbsName(fname)
+ && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+ {
+--- 1182,1198 ----
+ if (fname == NULL || *fname == NUL) /* no file name */
+ return 0;
+ {
+ char_u *ptr;
+ int fnum;
+
+! #ifdef VMS
+ vms_remove_version(fname);
+! #endif
+! #ifdef BACKSLASH_IN_FILENAME
+ if (directory != NULL)
+ slash_adjust(directory);
+ slash_adjust(fname);
+! #endif
+ if (directory != NULL && !vim_isAbsName(fname)
+ && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+ {
+***************
+*** 1221,1227 ****
+ return fnum;
+ }
+ return buflist_add(fname, 0);
+- #endif
+ }
+ }
+
+--- 1217,1222 ----
+*** ../vim-7.3.186/src/search.c 2011-02-25 18:38:29.000000000 +0100
+--- src/search.c 2011-05-10 16:30:38.000000000 +0200
+***************
+*** 4581,4589 ****
+ char_u *already = NULL;
+ char_u *startp = NULL;
+ char_u *inc_opt = NULL;
+- #ifdef RISCOS
+- int previous_munging = __riscosify_control;
+- #endif
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+ win_T *curwin_save = NULL;
+ #endif
+--- 4581,4586 ----
+***************
+*** 4596,4606 ****
+ if (file_line == NULL)
+ return;
+
+- #ifdef RISCOS
+- /* UnixLib knows best how to munge c file names - turn munging back on. */
+- int __riscosify_control = 0;
+- #endif
+-
+ if (type != CHECK_PATH && type != FIND_DEFINE
+ #ifdef FEAT_INS_EXPAND
+ /* when CONT_SOL is set compare "ptr" with the beginning of the line
+--- 4593,4598 ----
+***************
+*** 5228,5238 ****
+ vim_free(regmatch.regprog);
+ vim_free(incl_regmatch.regprog);
+ vim_free(def_regmatch.regprog);
+-
+- #ifdef RISCOS
+- /* Restore previous file munging state. */
+- __riscosify_control = previous_munging;
+- #endif
+ }
+
+ static void
+--- 5220,5225 ----
+*** ../vim-7.3.186/src/structs.h 2011-03-22 18:10:34.000000000 +0100
+--- src/structs.h 2011-05-10 16:30:49.000000000 +0200
+***************
+*** 2366,2376 ****
+ MenuHandle menu_handle;
+ MenuHandle submenu_handle;
+ #endif
+- #ifdef RISCOS
+- int *id; /* Not used, but gui.c needs it */
+- int greyed_out; /* Flag */
+- int hidden;
+- #endif
+ #ifdef FEAT_GUI_PHOTON
+ PtWidget_t *id;
+ PtWidget_t *submenu_id;
+--- 2366,2371 ----
+*** ../vim-7.3.186/src/term.c 2010-12-30 14:47:32.000000000 +0100
+--- src/term.c 2011-05-10 16:31:41.000000000 +0200
+***************
+*** 52,58 ****
+
+ /*
+ * Here are the builtin termcap entries. They are not stored as complete
+! * Tcarr structures, as such a structure is too big.
+ *
+ * The entries are compact, therefore they normally are included even when
+ * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
+--- 52,58 ----
+
+ /*
+ * Here are the builtin termcap entries. They are not stored as complete
+! * structures with all entries, as such a structure is too big.
+ *
+ * The entries are compact, therefore they normally are included even when
+ * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
+***************
+*** 199,269 ****
+ #endif
+
+ #ifndef NO_BUILTIN_TCAPS
+- # if defined(RISCOS) || defined(ALL_BUILTIN_TCAPS)
+- /*
+- * Default for the Acorn.
+- */
+- {(int)KS_NAME, "riscos"},
+- {(int)KS_CL, "\014"}, /* Cls and Home Cursor */
+- {(int)KS_CM, "\001%d\001%d\002"}, /* Position cursor */
+-
+- {(int)KS_CCO, "16"}, /* Allow 16 colors */
+-
+- {(int)KS_CAF, "\001%d\021"}, /* Set foreground colour */
+- {(int)KS_CAB, "\001%d\022"}, /* Set background colour */
+-
+-
+- {(int)KS_ME, "\004"}, /* Normal mode */
+- {(int)KS_MR, "\005"}, /* Reverse */
+-
+- {(int)KS_VI, "\016"}, /* Cursor invisible */
+- {(int)KS_VE, "\017"}, /* Cursor visible */
+- {(int)KS_VS, "\020"}, /* Cursor very visible */
+-
+- {(int)KS_CS, "\001%d\001%d\003"}, /* Set scroll region */
+- {(int)KS_SR, "\023"}, /* Scroll text down */
+- {K_UP, "\217"},
+- {K_DOWN, "\216"},
+- {K_LEFT, "\214"},
+- {K_RIGHT, "\215"},
+- {K_S_UP, "\237"},
+- {K_S_DOWN, "\236"},
+- {K_S_LEFT, "\234"},
+- {K_S_RIGHT, "\235"},
+-
+- {K_F1, "\201"},
+- {K_F2, "\202"},
+- {K_F3, "\203"},
+- {K_F4, "\204"},
+- {K_F5, "\205"},
+- {K_F6, "\206"},
+- {K_F7, "\207"},
+- {K_F8, "\210"},
+- {K_F9, "\211"},
+- {K_F10, "\312"},
+- {K_F11, "\313"},
+- {K_F12, "\314"},
+- {K_S_F1, "\221"},
+- {K_S_F2, "\222"},
+- {K_S_F3, "\223"},
+- {K_S_F4, "\224"},
+- {K_S_F5, "\225"},
+- {K_S_F6, "\226"},
+- {K_S_F7, "\227"},
+- {K_S_F8, "\230"},
+- {K_S_F9, "\231"},
+- {K_S_F10, "\332"},
+- {K_S_F11, "\333"},
+- {K_S_F12, "\334"},
+- {K_BS, "\010"},
+- {K_INS, "\315"},
+- {K_DEL, "\177"},
+- {K_HOME, "\036"},
+- {K_END, "\213"},
+- {K_PAGEUP, "\237"},
+- {K_PAGEDOWN, "\236"},
+- # endif /* Acorn terminal */
+-
+
+ # if defined(AMIGA) || defined(ALL_BUILTIN_TCAPS)
+ /*
+--- 199,204 ----
+***************
+*** 1399,1408 ****
+ /*
+ * DEFAULT_TERM is used, when no terminal is specified with -T option or $TERM.
+ */
+- #ifdef RISCOS
+- # define DEFAULT_TERM (char_u *)"riscos"
+- #endif
+-
+ #ifdef AMIGA
+ # define DEFAULT_TERM (char_u *)"amiga"
+ #endif
+--- 1334,1339 ----
+*** ../vim-7.3.186/src/termlib.c 2010-08-15 21:57:30.000000000 +0200
+--- src/termlib.c 2011-05-10 16:31:58.000000000 +0200
+***************
+*** 13,19 ****
+ #include "vim.h"
+ #include "termlib.pro"
+
+! #if !defined(AMIGA) && !defined(VMS) && !defined(MACOS) && !defined(RISCOS)
+ # include <sgtty.h>
+ #endif
+
+--- 13,19 ----
+ #include "vim.h"
+ #include "termlib.pro"
+
+! #if !defined(AMIGA) && !defined(VMS) && !defined(MACOS)
+ # include <sgtty.h>
+ #endif
+
+*** ../vim-7.3.186/src/version.c 2011-05-10 16:12:40.000000000 +0200
+--- src/version.c 2011-05-10 16:37:20.000000000 +0200
+***************
+*** 1205,1213 ****
+ # endif
+ #endif
+
+- #ifdef RISCOS
+- MSG_PUTS(_("\nRISC OS version"));
+- #endif
+ #ifdef VMS
+ MSG_PUTS(_("\nOpenVMS version"));
+ # ifdef HAVE_PATHDEF
+--- 1207,1212 ----
+*** ../vim-7.3.186/src/vim.h 2011-05-05 16:41:19.000000000 +0200
+--- src/vim.h 2011-05-10 16:32:40.000000000 +0200
+***************
+*** 184,192 ****
+ # define SIZEOF_INT 2
+ # endif
+ #endif
+- #ifdef RISCOS
+- # define SIZEOF_INT 4
+- #endif
+
+
+ #include "feature.h" /* #defines for optionals and features */
+--- 184,189 ----
+***************
+*** 340,349 ****
+ # include "os_mac.h"
+ #endif
+
+- #ifdef RISCOS
+- # include "os_riscos.h"
+- #endif
+-
+ #ifdef __QNX__
+ # include "os_qnx.h"
+ #endif
+--- 337,342 ----
+*** ../vim-7.3.186/src/gui_riscos.h 2010-08-15 21:57:28.000000000 +0200
+--- src/gui_riscos.h 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,32 ****
+- /* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved by Bram Moolenaar
+- *
+- * Do ":help uganda" in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- */
+-
+- #define FEAT_BROWSE
+-
+- #define TASK 0x4b534154
+-
+- /* Nested wimp flags: */
+- #define CHILD_FIX_TO_WORKAREA 0
+- #define CHILD_FIX_TO_LEFT 1
+- #define CHILD_FIX_TO_BOTTOM 1
+- #define CHILD_FIX_TO_RIGHT 2
+- #define CHILD_FIX_TO_TOP 2
+-
+- #define CHILD_SELF_SCROLL 0
+- #define CHILD_PARENT_SCROLL 1
+-
+- #define CHILD_LEFT 16
+- #define CHILD_BOTTOM 18
+- #define CHILD_RIGHT 20
+- #define CHILD_TOP 22
+- #define CHILD_SCROLL_X 24
+- #define CHILD_SCROLL_Y 26
+-
+- int wimp_poll(int mask, int *block);
+- int wimp_poll_idle(int mask, int *block, int end_time);
+- void ro_open_main(int *block);
+--- 0 ----
+*** ../vim-7.3.186/src/os_riscos.h 2010-08-15 21:57:30.000000000 +0200
+--- src/os_riscos.h 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,166 ****
+- /* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved by Bram Moolenaar
+- *
+- * Do ":help uganda" in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- */
+-
+- #include <sys/types.h>
+- #include <sys/stat.h>
+- #include <sys/ioctl.h>
+- #include <termios.h>
+- #include <stdlib.h>
+- #include <unixlib/local.h>
+- #include <errno.h>
+- #include <fcntl.h>
+-
+- #define CASE_INSENSITIVE_FILENAME
+- #define FEAT_MODIFY_FNAME
+- #define FEAT_OSFILETYPE
+- #define DFLT_OFT "Text"
+- #define USE_TERM_CONSOLE
+- #define HAVE_AVAIL_MEM
+-
+- /* Longer filenames now accessible to all */
+- #ifndef BASENAMELEN
+- # define BASENAMELEN 64 /* Same length as unzip */
+- #endif
+-
+- #ifndef TEMNAME
+- # define TEMPNAME "<Wimp$ScrapDir>.v?XXXXXX"
+- # define TEMPNAMELEN 25
+- #endif
+-
+- #ifndef DFLT_HELPFILE
+- # define DFLT_HELPFILE "Vim:doc.help"
+- #endif
+-
+- #ifndef DFLT_BDIR
+- # define DFLT_BDIR ".,<Wimp$ScrapDir>." /* default for 'backupdir' */
+- #endif
+-
+- /* Paths to try putting swap file in. */
+- #ifndef DFLT_DIR
+- # define DFLT_DIR "<Wimp$ScrapDir>.,." /* default for 'directory' */
+- #endif
+-
+- #ifndef DFLT_VDIR
+- # define DFLT_VDIR "Choices:Vim.view" /* default for 'viewdir' */
+- #endif
+-
+- #ifndef TERMCAPFILE
+- # define TERMCAPFILE "Vim:TermCap"
+- #endif
+- #define HAVE_TGETENT
+-
+- #ifndef SYNTAX_FNAME
+- # define SYNTAX_FNAME "Vim:Syntax.%s"
+- #endif
+-
+- #ifndef EVIM_FILE
+- # define EVIM_FILE "Vim:Evim"
+- #endif
+-
+- #define FEAT_VIMINFO
+-
+- #ifndef VIMINFO_FILE
+- # define VIMINFO_FILE "<Choices$Write>.Vim.VimInfo"
+- #endif
+- #ifndef VIMINFO_FILE2
+- # define VIMINFO_FILE2 "Choices:Vim.VimInfo"
+- #endif
+-
+- #ifndef VIMRC_FILE
+- # define VIMRC_FILE "/vimrc"
+- #endif
+- #ifndef EXRC_FILE
+- # define EXRC_FILE "/exrc"
+- #endif
+- #ifndef GVIMRC_FILE
+- # define GVIMRC_FILE "/gvimrc"
+- #endif
+- #ifndef USR_VIMRC_FILE
+- # define USR_VIMRC_FILE "Vim:Evim"
+- #endif
+- #ifndef SESSION_FILE
+- # define SESSION_FILE "/Session.vim"
+- #endif
+- #ifndef USR_VIMRC_FILE
+- # define USR_VIMRC_FILE "Choices:Vim.VimRC"
+- #endif
+- #ifndef USR_GVIMRC_FILE
+- # define USR_GVIMRC_FILE "Choices:Vim.GVimRC"
+- #endif
+- #ifndef USR_EXRC_FILE
+- # define USR_EXRC_FILE "Choices:Vim.ExRC"
+- #endif
+- #ifndef SYS_VIMRC_FILE
+- # define SYS_VIMRC_FILE "Vim:VimRC"
+- #endif
+- #ifndef SYS_GVIMRC_FILE
+- # define SYS_GVIMRC_FILE "Vim:GVimRC"
+- #endif
+- #ifndef SYS_MENU_FILE
+- # define SYS_MENU_FILE "Vim:Menu"
+- #endif
+- #ifndef SYS_OPTWIN_FILE
+- # define SYS_OPTWIN_FILE "Vim:Optwin"
+- #endif
+- #ifndef FILETYPE_FILE
+- # define FILETYPE_FILE "Vim:Filetype"
+- #endif
+- #ifndef FTPLUGIN_FILE
+- # define FTPLUGIN_FILE "Vim:Ftplugin/vim"
+- #endif
+- #ifndef INDENT_FILE
+- # define INDENT_FILE "Vim:Indent/vim"
+- #endif
+- #ifndef FTOFF_FILE
+- # define FTOFF_FILE "Vim:Ftoff"
+- #endif
+- #ifndef FTPLUGOF_FILE
+- # define FTPLUGOF_FILE "Vim:Ftplugof"
+- #endif
+- #ifndef INDOFF_FILE
+- # define INDOFF_FILE "Vim:Indoff"
+- #endif
+-
+- #define DFLT_ERRORFILE "errors/vim"
+- #define DFLT_RUNTIMEPATH "Choices:Vim,Vim:,Choices:Vim.after"
+-
+- /*
+- * RISC PCs have plenty of memory, use large buffers
+- */
+- #define CMDBUFFSIZE 1024 /* size of the command processing buffer */
+- #define MAXPATHL 256 /* paths are always quite short though */
+-
+- #ifndef DFLT_MAXMEM
+- # define DFLT_MAXMEM (5*1024) /* use up to 5 Mbyte for a buffer */
+- #endif
+-
+- #ifndef DFLT_MAXMEMTOT
+- # define DFLT_MAXMEMTOT (10*1024) /* use up to 10 Mbyte for Vim */
+- #endif
+-
+- #ifdef HAVE_SIGSET
+- # define signal sigset
+- #endif
+-
+- #define n_flag (1<<31)
+- #define z_flag (1<<30)
+- #define c_flag (1<<29)
+- #define v_flag (1<<28)
+-
+- /* These take r0-r7 as inputs, returns r0-r7 in global variables. */
+- void swi(int swinum, ...); /* Handles errors itself */
+- int xswi(int swinum, ...); /* Returns errors using v flag */
+- extern int r0, r1, r2, r3, r4, r5, r6, r7; /* For return values */
+-
+- #include <kernel.h>
+- #include <swis.h>
+-
+- #define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
+- #define mch_rename(src, dst) rename(src, dst)
+- #define mch_getenv(x) (char_u *)getenv((char *)x)
+- #define mch_setenv(name, val, x) setenv(name, val, x)
+--- 0 ----
+*** ../vim-7.3.186/src/gui_riscos.c 2011-05-10 15:52:10.000000000 +0200
+--- src/gui_riscos.c 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,3558 ****
+- /* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved by Bram Moolenaar
+- *
+- * Do ":help uganda" in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- * See README.txt for an overview of the Vim source code.
+- */
+-
+- #include "vim.h"
+- #include <string.h>
+-
+- /*
+- * gui_riscos.c
+- *
+- * Thomas Leonard <tal197@ecs.soton.ac.uk>
+- * Updated by Andy Wingate <andy@sparse.net>
+- */
+-
+- extern int time_of_last_poll;
+-
+- int task_handle = 0; /* Zero means we are not yet a Wimp task */
+- int child_handle = 0; /* Task handle of our child process (zero if none). */
+- int *wimp_menu = (int *) -1; /* Pointer to a Wimp menu structure (or -1) */
+- int save_window = -1; /* Save As window handle */
+-
+- int *redraw_block = NULL; /* NULL means not in a redraw loop. */
+- int ro_return_early = FALSE; /* Break out of gui_mch_wait_for_chars() */
+-
+- int leaf_ref = 0; /* Wimp message number - send via Wimp$Scrap */
+- char_u *leaf_name = NULL; /* Leaf name from DataSave */
+-
+- int default_columns = 120; /* These values are used if the --rows and --columns */
+- int default_rows = 32; /* options aren't used on startup. */
+-
+- #define DRAG_FALSE 0
+- #define DRAG_SELECTION 1
+- #define DRAG_RESIZE_WINDOW 2
+- int ro_dragging = DRAG_FALSE;
+- int drag_button;
+- int drag_modifiers;
+- int drag_x_offset;
+- int drag_y_offset;
+-
+- int nested_wimp = FALSE; /* Bool - can we use the new wimp? */
+-
+- int changed_mode = FALSE;
+- int x_eigen_factor;
+- int y_eigen_factor;
+-
+- /* If ro_current_font is non-zero then use the outline font with that handle,
+- * otherwise, if zap_redraw is TRUE then use ZapRedraw, otherwise use the
+- * system font.
+- *
+- * If zap_redraw is TRUE then zap_file[] contains valid Zap font file
+- * pointers (or NULLs).
+- */
+- int ro_current_font = 0; /* 0 is system font, or ZapRedraw */
+- int font_x_offset = 0; /* Where to position each char in its box */
+- int font_y_offset = 0;
+-
+- int zap_redraw = FALSE;
+- int double_height = FALSE; /* Plot each line twice? */
+-
+- #define grgb(r,g,b) ((b<<16) + (g<<8) + (r))
+- #define UNUSED_COLOUR (gui.back_pixel)
+-
+- #define RO_LOAD_CLIPBOARD -2 /* Internal handle for DataSave message. */
+-
+- /* Changes by John Kortink, 22-23 July 1998
+- *
+- * Stuff to make redraw a lot faster. Almost all of it is right here below,
+- * elsewhere changes are marked with 'JK230798'. Apart from a small change in
+- * 'gui.c' all changes are limited to this file, 'gui_riscos.c'. The change in
+- * 'gui.c' is to make Vim stop being 'smart' not redrawing characters that are
+- * 'already there' (i.e. from the previous line, by coincidence). This caused a
+- * lot more calls to the redraw code, which we want to avoid because a few nice
+- * big strings at a time is a lot faster than a truckload of small ones. ('Dear
+- * Bram ...').
+- */
+-
+- /* The ZapRedraw structure */
+-
+- static struct
+- {
+- int r_flags;
+- int r_minx;
+- int r_miny;
+- int r_maxx;
+- int r_maxy;
+- int r_screen;
+- int r_bpl;
+- int r_bpp;
+- int r_charw;
+- int r_charh;
+- char *r_caddr;
+- int r_cbpl;
+- int r_cbpc;
+- int r_linesp;
+- int r_data;
+- int r_scrollx;
+- int r_scrolly;
+- int *r_palette;
+- int r_for;
+- int r_bac;
+- char *r_workarea;
+- int r_magx;
+- int r_magy;
+- int r_xsize;
+- int r_ysize;
+- int r_mode;
+- }
+- zap_redraw_block;
+-
+- /* Other globals */
+-
+- static int zap_redraw_initialised = FALSE;
+- static int zap_redraw_update_colours;
+- static int zap_redraw_colours[2];
+- static int zap_redraw_palette[16];
+-
+- /* Holds the current Zap font file(s).
+- * The font is recreated from this block on a mode change.
+- * When using zap, element ZAP_NORMAL is always valid, but
+- * the others can be NULL.
+- */
+-
+- #define ZAP_NORMAL 0
+- #define ZAP_BOLD 1
+- #define ZAP_ITALIC 2
+- #define ZAP_BITALIC 3
+- #define ZAP_STYLES 4
+-
+- /* Zap font file format data */
+- static char *zap_file[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
+-
+- /* r_caddr format for current mode */
+- static char *zap_caddr[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
+-
+- static void ro_remove_menu(int *menu);
+-
+- /*
+- * Initialise all the ZapRedraw stuff.
+- * Call this when changing font and after each mode change.
+- * zap_redraw_bitmap must contain a valid Zap font file (possibly
+- * created from the system font).
+- *
+- * Return FAIL to revert to system font (if we can't use ZapRedraw).
+- */
+- int
+- ro_zap_redraw_initialise()
+- {
+- int bytes_per_bitmap_char;
+- int first, last;
+- int i;
+-
+- /* Can't have initialisers for struct members :-(, ok, this way then ... */
+- if (!zap_redraw_initialised)
+- {
+- zap_redraw_block.r_workarea = NULL;
+- zap_redraw_initialised = TRUE;
+- }
+-
+- /* We redraw in DSA mode */
+- zap_redraw_block.r_flags = 0x0;
+-
+- /* Let ZapRedraw get the screen address for us */
+- zap_redraw_block.r_screen = 0;
+-
+- /* Read the font width and height from the font file header.
+- * Assume that all styles are the same size.
+- * ZAP_NORMAL is always present.
+- */
+- zap_redraw_block.r_charw = ((int *) zap_file[ZAP_NORMAL])[2];
+- zap_redraw_block.r_charh = ((int *) zap_file[ZAP_NORMAL])[3];
+-
+- /* We have no linespacing */
+- zap_redraw_block.r_linesp = 0;
+-
+- /* Fix foreground = colour 1 */
+- zap_redraw_block.r_for = 1;
+-
+- /* Fix background = colour 0 */
+- zap_redraw_block.r_bac = 0;
+-
+- /* Colour mask buffer */
+- zap_redraw_block.r_palette = zap_redraw_palette;
+-
+- /* Allocate local workspace (for the few calls following here) */
+- if (zap_redraw_block.r_workarea != NULL)
+- free(zap_redraw_block.r_workarea);
+- zap_redraw_block.r_workarea = (char*) malloc(128);
+- if (!zap_redraw_block.r_workarea)
+- return FAIL; /* Out of memory */
+-
+- /* Fill in VDU variables */
+- if (xswi(ZapRedraw_ReadVduVars, 0, &zap_redraw_block) & v_flag)
+- return FAIL; /* Can't find ZapRedraw module - use VDU instead */
+-
+- /* Determine cbpl and cbpc */
+- swi(ZapRedraw_CachedCharSize, zap_redraw_block.r_bpp, 0,
+- zap_redraw_block.r_charw, zap_redraw_block.r_charh);
+- zap_redraw_block.r_cbpl = r2;
+- zap_redraw_block.r_cbpc = r3;
+-
+- /* Allocate general workspace (for the calls outside) */
+- if (zap_redraw_block.r_workarea != NULL)
+- free(zap_redraw_block.r_workarea);
+- zap_redraw_block.r_workarea = (char*) malloc(128 + zap_redraw_block.r_cbpl);
+- if (!zap_redraw_block.r_workarea)
+- return FAIL; /* Out of memory */
+-
+- /* Now convert the 1 bpp character data ready for the current mode */
+-
+- bytes_per_bitmap_char = (zap_redraw_block.r_charw * zap_redraw_block.r_charh + 7) / 8;
+-
+- /* Convert the fonts from 1bpp to a format suitable for the
+- * current mode.
+- */
+- for (i = 0; i < ZAP_STYLES; i++)
+- {
+- first = ((int *) zap_file[i])[4];
+- last = ((int *) zap_file[i])[5];
+-
+- if (last > 255)
+- last = 255; /* Don't convert cursors (overwrites memory!) */
+-
+- /* Allocate the font cache */
+- vim_free(zap_caddr[i]);
+- if (zap_file[i])
+- zap_caddr[i] = (char*) malloc(zap_redraw_block.r_cbpc * 256);
+- else
+- zap_caddr[i] = NULL; /* No file for this style */
+-
+- if (zap_caddr[i])
+- {
+- zap_redraw_block.r_caddr = zap_caddr[i];
+-
+- swi(ZapRedraw_ConvertBitmap, 0, &zap_redraw_block,
+- first, last, /* Range of characters to convert */
+- zap_file[i] + 0x20 /* Addr of first char provided by font */
+- - first * bytes_per_bitmap_char);
+- }
+- }
+-
+- if (!zap_caddr[ZAP_NORMAL])
+- {
+- zap_redraw = FALSE; /* Out of memory */
+- return FAIL;
+- }
+-
+- /* Next time we need them, we have to update the colour masks */
+- zap_redraw_update_colours = TRUE;
+-
+- return OK;
+- }
+-
+- /*
+- * Redraw a string at OS coordinates <x,y> (top-left, x inclusive, y exclusive).
+- * Graphics clip window is window[0..3] as in R1+28..40 of Wimp_RedrawWindow.
+- * Returns (possibly modified) flags.
+- */
+- int
+- ro_zap_redraw_draw_string(x, y, string, length, flags, clip)
+- int x;
+- int y;
+- char *string;
+- int length;
+- int flags; /* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL, DRAW_ITALIC */
+- int *clip;
+- {
+- char redraw_data[1024];
+- int clip_minx;
+- int clip_miny;
+- int clip_maxx;
+- int clip_maxy;
+- int os_xshift = zap_redraw_block.r_magx;
+- int os_yshift = zap_redraw_block.r_magy;
+-
+- if (flags & DRAW_TRANSP)
+- return flags; /* We don't do transparent plotting yet. */
+-
+- if (flags & DRAW_BOLD)
+- {
+- if (flags & DRAW_ITALIC && zap_caddr[ZAP_BITALIC])
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_BITALIC];
+- else
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_BOLD];
+- }
+- else
+- {
+- if (flags & DRAW_ITALIC)
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_ITALIC];
+- else
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
+- }
+- if (!zap_redraw_block.r_caddr)
+- {
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
+- flags |= DRAW_UNDERL; /* Style missing - we can always underline */
+- }
+-
+- /* Set the vertical scaling flag */
+- if (double_height)
+- zap_redraw_block.r_flags = 1 << 1;
+- else
+- zap_redraw_block.r_flags = 0;
+-
+- /* Update the colour masks (if needed) */
+- if (zap_redraw_update_colours)
+- {
+- swi(ZapRedraw_CreatePalette, 2,
+- &zap_redraw_block,
+- zap_redraw_colours,
+- zap_redraw_block.r_palette, 2);
+- zap_redraw_update_colours = FALSE;
+- }
+-
+- /* Target rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
+- zap_redraw_block.r_minx = x >> os_xshift; /* inclusive */
+- zap_redraw_block.r_miny = zap_redraw_block.r_ysize - (y >> os_yshift); /* inclusive */
+- zap_redraw_block.r_maxx = (x + length * gui.char_width) >> os_xshift; /* exclusive */
+- zap_redraw_block.r_maxy = zap_redraw_block.r_ysize - ((y - gui.char_height) >> os_yshift);
+- /* exclusive */
+-
+- /* Clip rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
+- clip_minx = clip[0] >> os_xshift; /* inclusive */
+- clip_miny = zap_redraw_block.r_ysize - (clip[3] >> os_yshift); /* inclusive */
+- clip_maxx = clip[2] >> os_xshift; /* exclusive */
+- clip_maxy = zap_redraw_block.r_ysize - (clip[1] >> os_yshift); /* exclusive */
+-
+- /* Clip target rectangle against the current graphics window */
+- if (zap_redraw_block.r_minx < clip_minx)
+- {
+- zap_redraw_block.r_scrollx = clip_minx - zap_redraw_block.r_minx;
+- zap_redraw_block.r_minx = clip_minx;
+- }
+- else
+- zap_redraw_block.r_scrollx = 0;
+- if (zap_redraw_block.r_miny < clip_miny)
+- {
+- zap_redraw_block.r_scrolly = clip_miny - zap_redraw_block.r_miny;
+- zap_redraw_block.r_miny = clip_miny;
+- }
+- else
+- zap_redraw_block.r_scrolly = 0;
+- if (zap_redraw_block.r_maxx > clip_maxx)
+- zap_redraw_block.r_maxx = clip_maxx;
+- if (zap_redraw_block.r_maxy > clip_maxy)
+- zap_redraw_block.r_maxy = clip_maxy;
+-
+- /* Fill in the character data structure */
+- if (length > (sizeof(redraw_data) - 2 * 4 - 2))
+- length = sizeof(redraw_data) - 2 * 4 - 2;
+- ((int*) redraw_data)[0] = 2 * 4;
+- ((int*) redraw_data)[1] = 0;
+- strncpy(redraw_data + 2 * 4, string, length);
+- redraw_data[2 * 4 + length + 0] = '\0';
+- redraw_data[2 * 4 + length + 1] = '\x2';
+- zap_redraw_block.r_data = (int) redraw_data;
+-
+- /* Perform the draw */
+- swi(ZapRedraw_RedrawArea, 0, &zap_redraw_block);
+-
+- return flags;
+- }
+-
+- /*
+- * Okay that was it from me, back to Thomas ...
+- */
+-
+- /*
+- * Parse the GUI related command-line arguments. Any arguments used are
+- * deleted from argv, and *argc is decremented accordingly. This is called
+- * when vim is started, whether or not the GUI has been started.
+- */
+- void
+- gui_mch_prepare(int *argc, char **argv)
+- {
+- int arg = 1;
+-
+- while (arg < *argc - 1)
+- {
+- if (strcmp(argv[arg], "--rows") == 0 || strcmp(argv[arg], "--columns") == 0)
+- {
+- int value;
+-
+- value = atoi(argv[arg + 1]);
+-
+- if (argv[arg][2] == 'r')
+- default_rows = value;
+- else
+- default_columns = value;
+-
+- /* Delete argument from argv[]. (hope this is read/write!) */
+-
+- *argc -= 2;
+- if (*argc > arg)
+- mch_memmove(&argv[arg], &argv[arg + 2], (*argc - arg)
+- * sizeof(char *));
+- }
+- else
+- arg++;
+- }
+- }
+-
+- /* Fatal error on initialisation - report it and die. */
+- void
+- ro_die(error)
+- char_u *error; /* RISC OS error block */
+- {
+- swi(Wimp_ReportError, error, 5, "GVim");
+- exit(EXIT_FAILURE);
+- }
+-
+- /* Find the sizes of the window tools:
+- *
+- * Create a test window.
+- * Find inner and outer sizes.
+- * Find the difference.
+- * Delete window.
+- *
+- * While we're here, find the eigen values too.
+- */
+- void
+- ro_measure_tools()
+- {
+- int block[10];
+- int vdu[] = { 4, 5, -1};
+- int test_window[] =
+- {
+- -100, -100, /* Visible area : min X,Y */
+- -50, -50, /* max X,Y */
+- 0, 0, /* Scroll offsets */
+- -1, /* Window in front */
+- 0xd0800150, /* Window flags */
+- 0xff070207, /* Colours */
+- 0x000c0103, /* More colours */
+- 0, -0x4000, /* Workarea extent */
+- 0x4000, 0, /* max X,Y */
+- 0x00000000, /* No title */
+- 0 << 12, /* No workarea button type */
+- 1, /* Wimp sprite area */
+- 0x00010001, /* Minimum width, height */
+- 0, 0, 0, /* Title data (none) */
+- 0 /* No icons */
+- };
+- int inner_max_x, inner_min_y;
+-
+- swi(Wimp_CreateWindow, 0, test_window);
+-
+- block[0] = r0;
+- /* Open the window (and read state).
+- * GetWindowOutline needs it too if the wimp isn't nested.
+- */
+- swi(Wimp_OpenWindow, 0, block);
+- inner_max_x = block[3];
+- inner_min_y = block[2];
+-
+- swi(Wimp_GetWindowOutline, 0, block);
+-
+- gui.scrollbar_width = block[3] - inner_max_x;
+- gui.scrollbar_height = inner_min_y - block[2];
+-
+- swi(Wimp_DeleteWindow, 0, block);
+-
+- /* Read the size of one pixel. */
+- swi(OS_ReadVduVariables, vdu, vdu);
+- x_eigen_factor = vdu[0];
+- y_eigen_factor = vdu[1];
+- }
+-
+- /* Load a template from the current templates file.
+- * Create the window and return its handle.
+- */
+- int
+- ro_load_template(str_name, title, title_size)
+- char_u *str_name; /* Identifier of window in file (max 12 chars) */
+- char_u **title; /* If not NULL then return pointer to title here */
+- int *title_size; /* If not NULL then return the title length here */
+- {
+- int *window;
+- char *data;
+- int name[4];
+-
+- strcpy( (char *) name, str_name);
+-
+- /* Find how big we must make the buffers */
+-
+- if (xswi(Wimp_LoadTemplate, 0, 0, 0, 0, -1, name, 0) & v_flag)
+- ro_die( (char *) r0);
+-
+- window = malloc(r1); /* Don't print text messages from alloc() */
+- data = malloc(r2);
+- if (window == NULL || data == NULL)
+- ro_die("\0\0\0\0Out of memory - Can't load templates");
+-
+- /* Load the template into the buffers */
+-
+- swi(Wimp_LoadTemplate, 0,
+- window, /* Temp block */
+- data, /* Icon data */
+- data + r2 + 1, /* End of icon data */
+- -1, /* No fonts */
+- name, 0); /* First match */
+- if (r6 == 0)
+- ro_die("\0\0\0\0Can't find window in Templates file");
+-
+- /* Create the window */
+-
+- if (xswi(Wimp_CreateWindow, 0, window) & v_flag)
+- ro_die( (char *) r0);
+-
+- if (title)
+- *title = (char_u *) window[18];
+- if (title_size)
+- *title_size = window[20];
+-
+- free(window); /* Free temp block */
+- return r0; /* Return the window handle */
+- }
+-
+- /*
+- * Check if the GUI can be started. Called before gvimrc is sourced.
+- * Return OK or FAIL.
+- */
+- int
+- gui_mch_init_check()
+- {
+- return OK; /* TODO: GUI can always be started? */
+- }
+-
+- /*
+- * Initialise the RISC OS GUI.
+- * Create all the windows.
+- * Returns OK for success, FAIL when the GUI can't be started.
+- */
+- int
+- gui_mch_init()
+- {
+- int messages[] = {
+- 1, 2, 3, 4, /* DataSave, DataSaveAck, DataLoad, DataLoadAck */
+- 8, /* PreQuit */
+- 0xf, /* ClaimEntity (for clipboard) */
+- 0x10, /* DataRequest (for clipboard) */
+- 0x400c1, /* Mode change */
+- 0x400c3, /* TaskCloseDown */
+- 0x400c9, /* MenusDeleted */
+- 0x808c1, /* TW_Output */
+- 0x808c2, /* TW_Ego */
+- 0x808c3, /* TW_Morio */
+- 0x808c4, /* TW_Morite */
+- 0}; /* End-of-list. */
+-
+-
+- /* There may have been some errors reported in the
+- * command window before we get here. Wait if so.
+- */
+- swi(Wimp_ReadSysInfo, 3);
+- if (r0 == 0)
+- swi(Wimp_CommandWindow, 0); /* Window opened - close with prompt */
+-
+- if (xswi(Wimp_Initialise, 310, 0x4b534154, "GVim", messages) & v_flag)
+- return FAIL;
+- nested_wimp = r0 >= 397;
+- task_handle = r1;
+-
+- /* Load the templates. */
+-
+- if (xswi(Wimp_OpenTemplate, 0, "Vim:Templates") & v_flag)
+- ro_die( (char *) r0);
+-
+- gui.window_handle = ro_load_template("editor",
+- &gui.window_title,
+- &gui.window_title_size);
+-
+- save_window = ro_load_template("save", NULL, NULL);
+-
+- swi(Wimp_CloseTemplate);
+-
+- /* Set default foreground and background colours. */
+-
+- gui.norm_pixel = gui.def_norm_pixel;
+- gui.back_pixel = gui.def_back_pixel;
+-
+- /* Get the colours from the "Normal" and "Menu" group (set in syntax.c or
+- * in a vimrc file) */
+-
+- set_normal_colors();
+-
+- /*
+- * Check that none of the colors are the same as the background color
+- */
+-
+- gui_check_colors();
+-
+- /* Get the colours for the highlight groups (gui_check_colors() might have
+- * changed them) */
+-
+- highlight_gui_started(); /* re-init colours and fonts */
+-
+- /* Set geometry based on values read on initialisation. */
+-
+- gui.num_cols = Columns = default_columns;
+- gui.num_rows = Rows = default_rows;
+-
+- /* Get some information about our environment. */
+-
+- ro_measure_tools();
+-
+- return OK;
+- }
+-
+- /*
+- * Called when the foreground or background colour has been changed.
+- */
+- void
+- gui_mch_new_colors()
+- {
+- }
+-
+- /*
+- * Open the GUI window which was created by a call to gui_mch_init().
+- */
+- int
+- gui_mch_open(void)
+- {
+- int block[10];
+-
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- block[7] = -1; /* Open at the top of the stack */
+- swi(Wimp_OpenWindow, 0, block);
+-
+- /* Give the new window the input focus */
+- swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+- if (gui_win_x != -1 && gui_win_y != -1)
+- gui_mch_set_winpos(gui_win_x, gui_win_y);
+-
+- return OK;
+- }
+-
+- void
+- gui_mch_exit(int rc)
+- {
+- int block[64];
+-
+- /* Close window. Stops us from getting troublesome events
+- * if we take a while to die.
+- */
+- block[0] = gui.window_handle;
+- swi(Wimp_CloseWindow, 0, block);
+-
+- if (child_handle)
+- {
+- /* We still have a sub-task running - kill it */
+- block[0] = 20;
+- block[3] = 0;
+- block[4] = 0; /* Quit */
+- if ((xswi(Wimp_SendMessage, 17, block, child_handle) & v_flag) == 0)
+- {
+- /* Idle until child dies. */
+- while (child_handle)
+- {
+- process_event(wimp_poll(1, block), block);
+- }
+- }
+- }
+-
+- exit(rc);
+- }
+-
+- /*
+- * Get the position of the top left corner of the window.
+- */
+- int
+- gui_mch_get_winpos(int *x, int *y)
+- {
+- /* TODO */
+- return FAIL;
+- }
+-
+- /*
+- * Set the position of the top left corner of the window to the given
+- * coordinates.
+- */
+- void
+- gui_mch_set_winpos(int x, int y)
+- {
+- /* TODO */
+- }
+-
+- void
+- gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
+- int width; /* In OS units */
+- int height;
+- int min_width; /* Smallest permissible window size (ignored) */
+- int min_height;
+- int base_width; /* Space for scroll bars, etc */
+- int base_height;
+- int direction;
+- {
+- int s_width, s_height;
+- int block[] = {
+- gui.window_handle,
+- 0,
+- -height + 1,
+- width,
+- 1};
+-
+- gui_mch_get_screen_dimensions(&s_width, &s_height);
+- s_width -= base_width;
+- s_height -= base_height; /* Underestimate - ignores titlebar */
+-
+- swi(Wimp_GetWindowState, 0, block);
+- block[3] = block[1] + width;
+- block[2] = block[4] - height;
+- if (block[3] > s_width)
+- {
+- block[3] = s_width;
+- block[1] = block[3] - width;
+- }
+- if (block[2] < gui.scrollbar_height)
+- {
+- block[2] = gui.scrollbar_height;
+- block[4] = block[2] + height;
+- }
+- swi(Wimp_OpenWindow, 0, block);
+- swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+- }
+-
+- void
+- gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
+- {
+- int block[] = {4, 5, 11, 12, -1};
+-
+- swi(OS_ReadVduVariables, block, block);
+- *screen_w = (block[2] + 1) << block[0];
+- *screen_h = (block[3] + 1) << block[1];
+- }
+-
+- /* Take a font name with options and return a font handle, or
+- * zero for failure.
+- * Replace extension with 'Bold' or 'Italic' depending on modifiers.
+- */
+- int
+- ro_get_font(fullname, weight)
+- char_u *fullname;
+- int weight; /* Initial weights:
+- * BIT MEANING
+- * 0 bold
+- * 1 italic
+- */
+- {
+- char_u *arg;
+- char_u font[41];
+- int width = -1;
+- int height = -1;
+- int name_len;
+- int i;
+- char_u c;
+-
+- for (i = 0; i < 39;)
+- {
+- c = fullname[i];
+- if (c == ':' || c == NUL || c == '.')
+- break;
+- font[i++] = c;
+- }
+-
+- /* find the first modifier, NULL if none */
+- arg = strchr(fullname + i, ':');
+-
+- while (arg)
+- {
+- switch (*++arg)
+- {
+- case 'h':
+- height = strtol(arg + 1, (char **) &arg, 10);
+- break;
+- case 'w':
+- width = strtol(arg + 1, (char **) &arg, 10);
+- break;
+- case 'b':
+- weight |= 1;
+- break;
+- case 'i':
+- weight |= 2;
+- break;
+- default:
+- return 0;
+- }
+- arg = strchr(arg, ':');
+- }
+-
+- if ((weight & 1) && i < 35)
+- {
+- /* Bold goes instead of given suffix */
+- strncpy(font + i, ".Bold", 5);
+- i += 5;
+- }
+- else
+- {
+- /* Copy rest of name unless we are using Bold */
+- while (i < 39)
+- {
+- c = fullname[i];
+- if (c == ':' || c == NUL)
+- break;
+- font[i++] = c;
+- }
+- }
+- if ((weight & 2) && i < 32)
+- {
+- strncpy(font + i, ".Oblique", 8);
+- i += 8;
+- }
+-
+- font[i] = 0;
+-
+- if (height < 1 && width < 1)
+- height = width = 10; /* Default to 10pt */
+- else if (height < 1)
+- height = width;
+- else if (width < 1)
+- width = height;
+-
+- if (xswi(Font_FindFont, 0, font, width << 4, height << 4, 0, 0) & v_flag)
+- return NOFONT; /* Can't find font */
+-
+- return r0;
+- }
+-
+- /* Load a file into allocated memory and check it is valid.
+- * Return a pointer to the allocated block on success.
+- */
+- char *
+- zap_load_file(name, style)
+- char_u *name; /* Name of directory containing styles */
+- char_u *style; /* Name of style within directory */
+- {
+- char_u fname[256];
+- char_u *file;
+-
+- if (strlen(name) + strlen(style) > 254)
+- return NULL; /* Names too long */
+-
+- sprintf(fname, "%s.%s", name, style);
+-
+- /* Load the named font in 1bpp format. */
+- if (xswi(OS_File, 13, fname, 0, 0, "VimFonts:") & v_flag || r0 != 1)
+- return NULL; /* Error reading file info, or not a file */
+-
+- /* Allocate enough memory to load the whole file */
+- file = (char *) alloc(r4);
+- if (!file)
+- return NULL; /* Out of memory */
+-
+- if (xswi(OS_File, 12, fname, file, 0, "VimFonts:") & v_flag)
+- return NULL; /* Unable to load file */
+-
+- if (strncmp(file, "ZapFont\015", 8) == 0)
+- return file; /* Loaded OK! */
+-
+- vim_free(file);
+- return NULL; /* Not a valid font file */
+- }
+-
+- /* Load and convert the named font.
+- * If name is NULL or a null string then convert the system font.
+- * Return OK on success; FAIL and we revert to using the VDU drivers.
+- *
+- * 'name' is the name of a directory.
+- * Tries to load 'name.0', 'name.B', 'name.I' and 'name.IB'.
+- */
+- int
+- zap_load_font(name)
+- char_u *name;
+- {
+- int i;
+-
+- /* Free the existing font files, if any */
+- for (i = 0; i < ZAP_STYLES; i++)
+- {
+- vim_free(zap_file[i]);
+- zap_file[i] = NULL;
+- }
+-
+- if (name && *name == '!')
+- {
+- name++;
+- double_height = TRUE;
+- }
+- else
+- double_height = FALSE;
+-
+- if (name && *name)
+- {
+- zap_file[ZAP_NORMAL] = zap_load_file(name, "0");
+- if (!zap_file[ZAP_NORMAL])
+- return FAIL; /* Can't load the 'normal' style - error */
+-
+- zap_file[ZAP_BOLD] = zap_load_file(name, "B");
+- zap_file[ZAP_ITALIC] = zap_load_file(name, "I");
+- zap_file[ZAP_BITALIC] = zap_load_file(name, "IB");
+- }
+- else
+- {
+- int *header;
+- char workarea[16];
+- char *old_wa;
+-
+- /* Allocate memory for system font (8 x 8 x 256 bits, plus header) */
+- header = (int *) alloc(0x20 + 8 * 256);
+- if (header == NULL)
+- return FAIL;
+- zap_file[ZAP_NORMAL] = (char *) header;
+-
+- /* Store details about the system font */
+- header[2] = 8; /* Width */
+- header[3] = 8; /* Height */
+- header[4] = 0; /* First char */
+- header[5] = 255; /* Last char */
+- header[6] = header[7] = 0; /* Reserved */
+-
+- /* Get system font bitmap */
+- old_wa = zap_redraw_block.r_workarea;
+- zap_redraw_block.r_workarea = workarea;
+- swi(ZapRedraw_ReadSystemChars, zap_file[ZAP_NORMAL] + 0x20, &zap_redraw_block);
+- zap_redraw_block.r_workarea = old_wa;
+- }
+-
+- return ro_zap_redraw_initialise();
+- }
+-
+- /*
+- * Initialise vim to use the font with the given name.
+- * Return FAIL if the font could not be loaded, OK otherwise.
+- */
+- int
+- gui_mch_init_font(char_u *font_name, int fontset)
+- {
+- int new_handle = 0; /* Use the system font by default */
+-
+- if (font_name[0] == '!')
+- {
+- /* Select a ZapRedraw font */
+- if (zap_load_font(font_name + 1))
+- zap_redraw = TRUE;
+- else
+- {
+- EMSG2(_("E610: Can't load Zap font '%s'"), font_name);
+- font_name = "System"; /* Error - use system font */
+- zap_redraw = FALSE;
+- }
+- }
+- else
+- {
+- zap_redraw = FALSE;
+-
+- if (font_name)
+- {
+- /* Extract any extra details about the font */
+- new_handle = ro_get_font(font_name, 0);
+- if (!new_handle)
+- return FAIL;
+- }
+- else
+- font_name = "System";
+- }
+-
+- /* Free the previous font, if any */
+- gui_mch_free_font(gui.norm_font);
+- gui.norm_font = new_handle;
+- gui.char_ascent = 0;
+-
+- if (new_handle)
+- {
+- /* Read details about the chosen font */
+- swi(Font_ReadInfo, new_handle);
+-
+- gui.char_width = r3 - r1;
+- gui.char_height = r4 - r2;
+-
+- font_x_offset = -r1; /* Where to position each char in its box */
+- font_y_offset = -r4;
+-
+- /* Try to load other fonts for bold, italic, and bold-italic */
+- gui_mch_free_font(gui.bold_font);
+- gui.bold_font = ro_get_font(font_name, 1);
+- gui_mch_free_font(gui.ital_font);
+- gui.ital_font = ro_get_font(font_name, 2);
+- gui_mch_free_font(gui.boldital_font);
+- gui.boldital_font = ro_get_font(font_name, 3);
+- }
+- else
+- {
+- /* Use the system font or ZapRedraw. */
+- if (zap_redraw)
+- {
+- gui.char_width = zap_redraw_block.r_charw << zap_redraw_block.r_magx;
+- gui.char_height = zap_redraw_block.r_charh << zap_redraw_block.r_magy;
+- if (double_height)
+- gui.char_height <<= 1;
+- }
+- else
+- {
+- gui.char_width = 16;
+- gui.char_height = 32;
+- }
+-
+- gui_mch_free_font(gui.bold_font);
+- gui.bold_font = 0;
+- gui_mch_free_font(gui.ital_font);
+- gui.ital_font = 0;
+- gui_mch_free_font(gui.boldital_font);
+- gui.boldital_font = 0;
+- }
+- hl_set_font_name(font_name);
+-
+- must_redraw = CLEAR;
+- return OK;
+- }
+-
+- /*
+- * Adjust gui.char_height (after 'linespace' was changed).
+- */
+- int
+- gui_mch_adjust_charheight()
+- {
+- return FAIL;
+- }
+-
+- /*
+- * Get a font structure for highlighting.
+- */
+- GuiFont
+- gui_mch_get_font(name, giveErrorIfMissing)
+- char_u *name;
+- int giveErrorIfMissing;
+- {
+- int handle;
+-
+- if (!name)
+- return NOFONT; /* System font if no name */
+-
+- handle = ro_get_font(name, 0);
+- if (!handle)
+- {
+- if (giveErrorIfMissing)
+- EMSG2(_("E611: Can't use font %s"), name);
+- return NOFONT;
+- }
+-
+- return handle;
+- }
+-
+- #if defined(FEAT_EVAL) || defined(PROTO)
+- /*
+- * Return the name of font "font" in allocated memory.
+- * Don't know how to get the actual name, thus use the provided name.
+- */
+- char_u *
+- gui_mch_get_fontname(font, name)
+- GuiFont font;
+- char_u *name;
+- {
+- if (name == NULL)
+- return NULL;
+- return vim_strsave(name);
+- }
+- #endif
+-
+- /*
+- * Set the current text font.
+- */
+- void
+- gui_mch_set_font(GuiFont font)
+- {
+- ro_current_font = font;
+-
+- if (font)
+- {
+- /* Not the system font or ZapRedraw font - select it */
+- swi(Font_SetFont, font);
+- }
+- }
+-
+- /*
+- * If a font is not going to be used, free its structure.
+- */
+- void
+- gui_mch_free_font(GuiFont font)
+- {
+- if (font)
+- swi(Font_LoseFont, font);
+- }
+-
+- /*
+- * Return the Pixel value (colour) for the given colour name.
+- * Return INVALCOLOR for error.
+- * NB: I've changed Green for now, since it looked really sick
+- */
+- guicolor_T
+- gui_mch_get_color(char_u *name)
+- {
+- int i;
+- struct colour
+- {
+- char_u *name;
+- guicolor_T value;
+- } colours[] =
+- {
+- { "Red", grgb(255, 0, 0) },
+- { "LightRed", grgb(255, 0, 0) },
+- { "DarkRed", grgb(139, 0, 0) },
+-
+- { "Green", grgb(50, 200, 50) },
+- { "LightGreen", grgb(144, 238, 144) },
+- { "DarkGreen", grgb(0, 100, 0) },
+- { "SeaGreen", grgb(46, 139, 87) },
+-
+- { "Blue", grgb(0, 0, 255) },
+- { "LightBlue", grgb(173, 216, 230) },
+- { "DarkBlue", grgb(0, 0, 139) },
+- { "SlateBlue", grgb(160, 90, 205) },
+-
+- { "Cyan", grgb(0, 255, 255) },
+- { "LightCyan", grgb(224, 255, 255) },
+- { "DarkCyan", grgb(0, 139, 139) },
+-
+- { "Magenta", grgb(255, 0, 255) },
+- { "LightMagenta", grgb(255, 224, 255) },
+- { "DarkMagenta", grgb(139, 0, 139) },
+-
+- { "Yellow", grgb(255, 255, 0) },
+- { "LightYellow", grgb(255, 255, 224) },
+- { "DarkYellow", grgb(139, 139, 0) },
+- { "Brown", grgb(165, 42, 42) },
+-
+- { "Gray", grgb(190, 190, 190) },
+- { "Grey", grgb(190, 190, 190) },
+- { "LightGray", grgb(211, 211, 211) },
+- { "LightGrey", grgb(211, 211, 211) },
+- { "DarkGray", grgb(169, 169, 169) },
+- { "DarkGrey", grgb(169, 169, 169) },
+- { "Gray10", grgb(26, 26, 26) },
+- { "Grey10", grgb(26, 26, 26) },
+- { "Gray20", grgb(51, 51, 51) },
+- { "Grey20", grgb(51, 51, 51) },
+- { "Gray30", grgb(77, 77, 77) },
+- { "Grey30", grgb(77, 77, 77) },
+- { "Gray40", grgb(102, 102, 102) },
+- { "Grey40", grgb(102, 102, 102) },
+- { "Gray50", grgb(127, 127, 127) },
+- { "Grey50", grgb(127, 127, 127) },
+- { "Gray60", grgb(153, 153, 153) },
+- { "Grey60", grgb(153, 153, 153) },
+- { "Gray70", grgb(179, 179, 179) },
+- { "Grey70", grgb(179, 179, 179) },
+- { "Gray80", grgb(204, 204, 204) },
+- { "Grey80", grgb(204, 204, 204) },
+- { "Gray90", grgb(229, 229, 229) },
+- { "Grey90", grgb(229, 229, 229) },
+-
+- { "Black", grgb(0, 0, 0) },
+- { "White", grgb(255, 255, 255) },
+-
+- { "Orange", grgb(255, 165, 0) },
+- { "Purple", grgb(160, 32, 240) },
+- { "Violet", grgb(238, 130, 238) },
+- {NULL, 0}
+- };
+-
+- if (name[0] == '#')
+- {
+- char *end;
+- int c;
+-
+- c = strtol(name + 1, &end, 16);
+- return (guicolor_T) ((c >> 16) & 0xff) | (c & 0xff00) | ((c & 0xff) << 16);
+- }
+-
+- for (i = 0; colours[i].name != NULL; i++)
+- {
+- if (STRICMP(name, colours[i].name) == 0)
+- return colours[i].value;
+- }
+- if (strnicmp(name, "grey", 4) == 0 || strnicmp(name, "gray", 4) == 0)
+- {
+- int level = (255 * atoi(name + 4)) / 100;
+- return (guicolor_T) grgb(level, level, level);
+- }
+- return INVALCOLOR;
+- }
+-
+- /*
+- * Set the current text colours.
+- * If we are using fonts then set the antialiasing colours too.
+- */
+- void
+- gui_mch_set_colors(guicolor_T fg, guicolor_T bg)
+- {
+- zap_redraw_colours[0] = bg << 8; /* JK230798, register new background colour */
+- zap_redraw_colours[1] = fg << 8; /* JK230798, register new foreground colour */
+- zap_redraw_update_colours = TRUE; /* JK230798, need update of colour masks */
+-
+- swi(ColourTrans_ReturnGCOL, fg << 8);
+- gui.fg_colour = r0;
+- swi(ColourTrans_ReturnGCOL, bg << 8);
+- gui.bg_colour = r0;
+-
+- if (ro_current_font)
+- swi(ColourTrans_SetFontColours, 0, bg << 8, fg << 8, 14);
+- }
+-
+- void
+- ro_draw_string(x, y, s, len, flags, clip)
+- int x; /* Top-left coord to plot at (x incl, y excl) */
+- int y; /* (screen coords) */
+- char_u *s; /* String to plot */
+- int len; /* Length of string */
+- int flags; /* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL */
+- int* clip; /* JK230798, added clip window */
+- {
+- if (ro_current_font)
+- {
+- int fx;
+- int flen = len; /* Preserve for underline */
+-
+- /* Use the Font manager to paint the string.
+- * Must do one char at a time to get monospacing.
+- */
+-
+- if (flags & DRAW_ITALIC && !gui.ital_font)
+- flags |= DRAW_UNDERL; /* No italic - underline instead */
+-
+- if ((flags & DRAW_TRANSP) == 0)
+- {
+- swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
+- swi(OS_Plot, 4, x, y - gui.char_height);
+- swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
+- }
+-
+- fx = x + font_x_offset;
+- while (flen--)
+- {
+- swi(Font_Paint, 0, s++, 0x90, fx, y + font_y_offset, 0, 0, 1);
+- fx += gui.char_width;
+- }
+- }
+- else
+- {
+- if (zap_redraw)
+- {
+- /* Using fast Zap redraw. */
+- flags = ro_zap_redraw_draw_string(x, y, s, len, flags, clip);
+- }
+- else
+- {
+- /* Using the system font */
+- if (flags & DRAW_ITALIC)
+- flags |= DRAW_UNDERL;
+-
+- if ((flags & DRAW_TRANSP) == 0)
+- {
+- swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
+- swi(OS_Plot, 4, x, y - gui.char_height);
+- swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
+- }
+- swi(OS_Plot, 4, /* Move the drawing cursor */
+- x,
+- y - 1);
+- swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
+- swi(OS_WriteN, s, len);
+-
+- if (flags & DRAW_BOLD)
+- {
+- swi(OS_Plot, 4, x + (1 << x_eigen_factor), y - 1);
+- swi(OS_WriteN, s, len);
+- }
+- }
+- }
+-
+- if (flags & DRAW_UNDERL)
+- {
+- if (ro_current_font || zap_redraw)
+- swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
+- /* Underlined is the same with all plotting methods */
+- swi(OS_Plot, 4, x, y - gui.char_height);
+- swi(OS_Plot, 1, gui.char_width * len, 0);
+- }
+- }
+-
+- void
+- gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
+- {
+- int x, y; /* Workarea x,y */
+- x = col * gui.char_width;
+- y = -row * gui.char_height;
+-
+- if (redraw_block)
+- {
+- ro_draw_string(x + redraw_block[1], y + redraw_block[4],
+- s, len, flags, &redraw_block[7]); /* JK230798, added clip window */
+- }
+- else
+- {
+- int block[44];
+- block[0] = gui.window_handle;
+- block[1] = x;
+- block[2] = y - gui.char_height;
+- block[3] = (col + len) * gui.char_width;
+- block[4] = y;
+- swi(Wimp_UpdateWindow, 0, block);
+- while (r0)
+- {
+- ro_draw_string(x + block[1], y + block[4],
+- s, len, flags, &block[7]); /* JK230798, added clip window */
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- }
+- }
+-
+- /*
+- * Return OK if the key with the termcap name "name" is supported.
+- */
+- int
+- gui_mch_haskey(char_u *name)
+- {
+- return FAIL;
+- }
+-
+- void
+- gui_mch_beep(void)
+- {
+- swi(OS_WriteI + 7);
+- }
+-
+- /*
+- * Visual bell.
+- */
+- void
+- gui_mch_flash(int msec)
+- {
+- /* TODO */
+- }
+-
+-
+- /*
+- * Plot a solid rectangle using the given plot action and colour.
+- * Coordinates are inclusive and window-relative.
+- */
+- void
+- plot_rectangle(plot, colour, minx, miny, maxx, maxy)
+- int plot; /* OS_Plot action */
+- int colour;
+- int minx;
+- int miny;
+- int maxx;
+- int maxy;
+- {
+- if (redraw_block)
+- {
+- swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
+- swi(OS_Plot, 4, minx + redraw_block[1], miny + redraw_block[4]);
+- swi(OS_Plot, plot, maxx + redraw_block[1], maxy + redraw_block[4]);
+- }
+- else
+- {
+- int block[44];
+- block[0] = gui.window_handle;
+- block[1] = minx;
+- block[2] = miny;
+- block[3] = maxx + 1;
+- block[4] = maxy + 1;
+- swi(Wimp_UpdateWindow, 0, block);
+- while (r0)
+- {
+- swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
+- swi(OS_Plot, 4, minx + block[1], miny + block[4]);
+- swi(OS_Plot, plot, maxx + block[1], maxy + block[4]);
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- }
+- }
+-
+- /*
+- * Invert a rectangle from row r, column c, for nr rows and nc columns.
+- */
+- void
+- gui_mch_invert_rectangle(int r, int c, int nr, int nc)
+- {
+- plot_rectangle(96 + 6, 0, FILL_X(c), -FILL_Y(r + nr), FILL_X(c + nc), -FILL_Y(r));
+- }
+-
+- /*
+- * Iconify the GUI window.
+- */
+- void
+- gui_mch_iconify(void)
+- {
+- }
+-
+- #if defined(FEAT_EVAL) || defined(PROTO)
+- /*
+- * Bring the Vim window to the foreground.
+- */
+- void
+- gui_mch_set_foreground()
+- {
+- /* TODO */
+- }
+- #endif
+-
+- /* Draw a hollow rectangle relative to the current
+- * graphics cursor position, with the given width
+- * and height. Start position is top-left.
+- */
+- void
+- draw_hollow(w, h)
+- int w;
+- int h;
+- {
+- swi(OS_Plot, 1, w - 1, 0);
+- swi(OS_Plot, 1, 0, 1 - h);
+- swi(OS_Plot, 1, 1 - w, 0);
+- swi(OS_Plot, 1, 0, h - 1);
+- }
+-
+- /*
+- * Draw a cursor without focus.
+- */
+- void
+- gui_mch_draw_hollow_cursor(guicolor_T colour)
+- {
+- int x = FILL_X(gui.cursor_col); /* Window relative, top-left */
+- int y = -FILL_Y(gui.cursor_row);
+- if (redraw_block == NULL)
+- {
+- int block[11];
+-
+- block[0] = gui.window_handle;
+- block[1] = x;
+- block[2] = y - gui.char_height;
+- block[3] = x + gui.char_width;
+- block[4] = y;
+- swi(Wimp_UpdateWindow, 0, block);
+- while (r0)
+- {
+- swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
+-
+- swi(OS_Plot, 4, x + block[1], y + block[4] - 1);
+- draw_hollow(gui.char_width, gui.char_height);
+-
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- }
+- else
+- {
+- swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
+-
+- swi(OS_Plot, 4, x + redraw_block[1], y + redraw_block[4] - 1);
+- draw_hollow(gui.char_width, gui.char_height);
+- }
+- }
+-
+- /*
+- * Draw part of a cursor, "w" pixels wide, and "h" pixels high, using
+- * color "color".
+- */
+- void
+- gui_mch_draw_part_cursor(w, h, colour)
+- int w;
+- int h;
+- guicolor_T colour;
+- {
+- int x = FILL_X(gui.cursor_col);
+- int y = -FILL_Y(gui.cursor_row);
+- swi(ColourTrans_ReturnGCOL, colour << 8);
+- plot_rectangle(96 + 5, r0, x, y - h, x + w - 1, y - 1);
+- }
+-
+- /*
+- * Catch up with any queued events. This may put keyboard input into the
+- * input buffer, call resize call-backs, trigger timers etc.
+- * If there is nothing in the event queue(& no timers pending), then we return
+- * immediately (well, after a Wimp_Poll).
+- */
+- void
+- gui_mch_update(void)
+- {
+- int block[64];
+- int reason;
+-
+- swi(OS_ReadMonotonicTime);
+- if ((r0 - time_of_last_poll) < 50)
+- return; /* Don't return too often */
+-
+- reason = wimp_poll(0, block);
+- if (reason)
+- process_event(reason, block);
+- ro_return_early = FALSE; /* We're returning anyway. */
+- }
+-
+- void
+- redraw_window(block)
+- int *block;
+- {
+- int x, y; /* Vim workarea coords */
+- int width, height;
+- int blank_col;
+-
+- swi(ColourTrans_ReturnGCOL, UNUSED_COLOUR << 8, 0, 0, 1<<7, 0);
+- blank_col = r0;
+-
+- swi(Wimp_RedrawWindow, 0, block);
+- redraw_block = block;
+- while (r0)
+- {
+- x = block[7] - block[1];
+- y = block[4] - block[10];
+- width = block[9] - block[7];
+- height = block[10] - block[8];
+-
+- if (height + y > Rows * gui.char_height)
+- {
+- /* Blank everything off the bottom. */
+- plot_rectangle(96 + 5, blank_col,
+- 0, block[8] - block[4],
+- block[9] - block[1], -FILL_Y(Rows) - 1);
+- height = Rows * gui.char_height;
+- }
+- if (width + x> Columns * gui.char_width)
+- {
+- /* Blank everything off to the right. */
+- plot_rectangle(96 + 5, blank_col,
+- FILL_X(Columns), block[8] - block[4],
+- block[9] - block[1], 0);
+- width = Columns * gui.char_width;
+- }
+- gui_redraw(x , y, width, height);
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- redraw_block = NULL;
+- }
+-
+- /* Check if we have modified data.
+- * If we do then ack the message to stop the shutdown.
+- * Otherwise, ignore the message.
+- */
+- void
+- ro_prequit(block)
+- int *block;
+- {
+- if (!ro_ok_to_quit())
+- {
+- /* Not OK to quit - stop shutdown */
+- block[3] = block[2];
+- swi(Wimp_SendMessage, 19, block, block[1]);
+- }
+- /* Do nothing. We may get a Message_Quit later. */
+- }
+-
+- /* If there is unsaved data then ask the user if they mind losing it.
+- * Return TRUE if we can quit without saving, FALSE to halt the
+- * shutdown.
+- */
+- int
+- ro_ok_to_quit()
+- {
+- int old_confirm = cmdmod.confirm;
+-
+- cmdmod.confirm = FALSE; /* Use our own, single tasking, box */
+-
+- if (check_changed_any(FALSE))
+- {
+- swi(Wimp_ReportError,
+- "\0\0\0\0Vim contains unsaved data - quit anyway?",
+- 0x17,
+- "Vim");
+- cmdmod.confirm = old_confirm;
+- if (r1 != 1)
+- return FALSE;
+- }
+- cmdmod.confirm = old_confirm;
+- return TRUE;
+- }
+-
+- /* Quit without checking for unsaved data. */
+- void
+- ro_quit()
+- {
+- exiting = TRUE;
+- getout(0);
+-
+- exiting = FALSE; /* probably can't get here */
+- setcursor(); /* position cursor */
+- out_flush();
+- }
+-
+- /* Insent the given vim special code into the input buffer */
+- void
+- ro_press(a, b, modifier)
+- char a;
+- char b;
+- int modifier; /* %<Ctrl><Shift> 0000 0000 */
+- {
+- char_u buf[6];
+- int vim_mod;
+- int key;
+-
+-
+- /* Convert RISC OS modifier to Vim modifier. */
+- vim_mod = ((modifier & 0x10) ? MOD_MASK_SHIFT : 0)
+- | ((modifier & 0x20) ? MOD_MASK_CTRL : 0);
+- key = simplify_key(TERMCAP2KEY(a, b), &vim_mod);
+-
+- buf[3] = CSI;
+- buf[4] = KEY2TERMCAP0(key);
+- buf[5] = KEY2TERMCAP1(key);
+- if (vim_mod)
+- {
+- buf[0] = CSI;
+- buf[1] = KS_MODIFIER;
+- buf[2] = vim_mod;
+- add_to_input_buf(buf, 6);
+- }
+- else
+- add_to_input_buf(buf + 3, 3);
+- }
+-
+- /* Take a wimp key code and insert the vim equivalent
+- * into vim's input buffer.
+- * CTRL-C also sets got_int.
+- */
+- void
+- ro_insert_key(code)
+- char_u *code; /* Wimp_ProcessKey code (4 bytes) */
+- {
+- char a = code[0];
+- char b = code[1];
+- int base, modifier;
+-
+- if (a == 3 && ctrl_c_interrupts)
+- got_int = TRUE;
+-
+- /* Is it a normal key? */
+- if (a > 31 && a < 127)
+- {
+- add_to_input_buf(code, 1);
+- return;
+- }
+-
+- /* We should pass any unrecognised keys on, but
+- * for now just pass on F12 combinations.
+- */
+- switch (b)
+- {
+- case 0:
+- /* Home and Delete are the only special cases */
+- switch (a)
+- {
+- case 0x1e:
+- ro_press('k','h', 0); /* Home */
+- return;
+- case 0x7f:
+- ro_press('k','D', 0); /* Delete */
+- return;
+- case CSI:
+- {
+- /* Turn CSI into K_CSI. Untested! */
+- char_u string[3] = {CSI, KS_EXTRA, KE_CSI};
+-
+- add_to_input_buf(string, 3);
+- return;
+- }
+- default:
+- add_to_input_buf(code, 1);
+- return;
+- }
+- case 1:
+- if ((a & 0xcf) == 0xcc)
+- {
+- /* F12 pressed - pass it on (quick hack) */
+- swi(Wimp_ProcessKey, a | 0x100);
+- return;
+- }
+- base = a & 0xcf;
+- modifier = a & 0x30;
+- switch (base)
+- {
+- case 0x8a: /* Tab */
+- add_to_input_buf("\011", 1);
+- return;
+- case 0x8b: /* Copy (End) */
+- return ro_press('@', '7', modifier);
+- case 0x8c: /* Left */
+- return ro_press('k', 'l', modifier);
+- case 0x8d: /* Right */
+- return ro_press('k', 'r', modifier);
+- case 0x8e: /* Down */
+- if (modifier & 0x10)
+- return ro_press('k', 'N', modifier ^ 0x10);
+- else
+- return ro_press('k', 'd', modifier);
+- case 0x8f: /* Up */
+- if (modifier & 0x10)
+- return ro_press('k', 'P', modifier ^ 0x10);
+- else
+- return ro_press('k', 'u', modifier);
+- case 0xca: /* F10 */
+- return ro_press('k', ';', modifier);
+- case 0xcb: /* F11 */
+- return ro_press('F', '1', modifier);
+- case 0xcd: /* Insert */
+- return ro_press('k', 'I', modifier);
+- default:
+- if (base > 0x80 && base < 0x18a)
+- {
+- /* One of the other function keys */
+- return ro_press('k', '0' + (base & 15), modifier);
+- }
+- }
+- }
+- }
+-
+- /* Process a mouse event. */
+- void
+- ro_mouse(block)
+- int *block;
+- {
+- int x, y, button, vim_button;
+- int modifiers = 0;
+- int min_x, min_y; /* Visible area of editor window */
+- int max_x, max_y;
+-
+- if (block[3] != gui.window_handle || ro_dragging)
+- return; /* Not our window or ignoring clicks*/
+-
+- x = block[0]; /* Click position - screen coords */
+- y = block[1];
+- button = block[2];
+-
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- min_x = block[1];
+- min_y = block[2];
+- max_x = block[3];
+- max_y = block[4];
+-
+- if (block[3] - x < gui.scrollbar_width)
+- {
+- /* Click in that blank area under the scrollbars */
+-
+- if (button & 0x444)
+- {
+- int front_block[64];
+- /* Dragging with Select - bring window to front first */
+- front_block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, front_block);
+- front_block[7] = -1;
+- ro_open_main(front_block);
+- }
+-
+- block[0] = gui.window_handle;
+- block[1] = 7; /* Drag point */
+- block[2] = block[4] = 0; /* Coords of point. */
+- block[3] = block[5] = 0;
+- drag_x_offset = max_x - x;
+- drag_y_offset = min_y - y;
+-
+- /* Parent box. */
+- block[6] = min_x +
+- gui.scrollbar_width * 2 +
+- MIN_COLUMNS * gui.char_width;
+- block[7] = 0;
+- gui_mch_get_screen_dimensions(&block[8], &block[9]);
+- block[9] = max_y -
+- 4 * gui.char_height -
+- gui.scrollbar_height;
+-
+- swi(Wimp_DragBox, 0, block);
+- ro_dragging = DRAG_RESIZE_WINDOW;
+- drag_button = vim_button;
+- drag_modifiers = modifiers;
+- return;
+- }
+-
+- if (button & 0x111)
+- vim_button = MOUSE_RIGHT;
+- else if (button & 0x222)
+- vim_button = MOUSE_MIDDLE;
+- else
+- vim_button = MOUSE_LEFT;
+-
+- swi(OS_Byte, 121, 0x80);
+- if (r1 == 0xff)
+- modifiers |= MOUSE_SHIFT;
+- swi(OS_Byte, 121, 0x81);
+- if (r1 == 0xff)
+- modifiers |= MOUSE_CTRL;
+- swi(OS_Byte, 121, 0x82);
+- if (r1 == 0xff)
+- modifiers |= MOUSE_ALT;
+-
+- if (button == 2)
+- {
+- /* Menu click:
+- * If shift was pressed then do the paste action.
+- * If not, then open the pop-up menu.
+- */
+- modifiers ^= MOUSE_SHIFT;
+- if (modifiers && MOUSE_SHIFT)
+- {
+- vimmenu_T main;
+- /* Shift was NOT pressed - show menu */
+- main.dname = (char_u *) "Vim";
+- main.children = root_menu;
+- gui_mch_show_popupmenu(&main);
+- return;
+- }
+- }
+-
+- /* Gain the input focus */
+- swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+- if (button & 0xf0)
+- {
+- /* Drag operation:
+- *
+- * Tell the Wimp to start a drag.
+- * Monitor null events.
+- */
+- block[1] = 7; /* Drag a point. */
+- block[2] = block[4] = x; /* Coords of point. */
+- block[3] = block[5] = y;
+- block[6] = 0; /* Coords of bounding box. */
+- block[7] = 0;
+- gui_mch_get_screen_dimensions(&block[8], &block[9]);
+-
+- drag_x_offset = drag_y_offset = 0;
+-
+- swi(Wimp_DragBox, 0, block);
+- ro_dragging = DRAG_SELECTION;
+- drag_button = vim_button;
+- drag_modifiers = modifiers;
+-
+- vim_button |= MOUSE_DRAG;
+- }
+-
+- gui_send_mouse_event(
+- vim_button,
+- x - min_x,
+- max_y - y,
+- button & 0xf ? TRUE : FALSE, /* dclick */
+- modifiers);
+- }
+-
+- void
+- ro_continue_drag(block)
+- int *block; /* Just used as scrap. */
+- {
+- int x, y;
+-
+- /* Get screen coords of pointer. */
+- swi(Wimp_GetPointerInfo, 0, block);
+- x = block[0] + drag_x_offset;
+- y = block[1] + drag_y_offset;
+-
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+-
+- if (ro_dragging == DRAG_RESIZE_WINDOW)
+- {
+- /* Resizing the main window. */
+- block[2] = y;
+- block[3] = x;
+- ro_open_main(block);
+- }
+- else
+- {
+- /* Selecting some text. */
+- gui_send_mouse_event(
+- drag_button | MOUSE_DRAG, /* Always report the same button */
+- x - block[1],
+- block[4] - y,
+- FALSE, /* Not a double click. */
+- drag_modifiers);
+- }
+- }
+-
+- /* User has released all mouse buttons, marking the end of a drag. */
+- void
+- ro_drag_finished(block)
+- int *block;
+- {
+- int x;
+- int y;
+- int width, height;
+-
+- /* I don't trust the box returned by Wimp_Poll; look at the pointer
+- * ourselves.
+- */
+- swi(Wimp_GetPointerInfo, 0, block);
+- x = block[0] + drag_x_offset;
+- y = block[1] + drag_y_offset;
+-
+- if (ro_dragging == DRAG_RESIZE_WINDOW)
+- {
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- block[2] = y;
+- block[3] = x;
+- ro_open_main(block);
+-
+- width = (block[3] - block[1]);
+- height = (block[4] - block[2]);
+-
+- swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+- gui_resize_shell(width, height);
+- }
+- else
+- {
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- gui_send_mouse_event(
+- MOUSE_RELEASE,
+- x - block[1],
+- block[4] - y,
+- FALSE, /* not a double click */
+- drag_modifiers);
+- }
+- ro_dragging = DRAG_FALSE;
+- }
+-
+- /* Load the file/pathname given in block into a [new] buffer.
+- *
+- * Modifier Action
+- *
+- * None :confirm e <file>
+- * Ctrl :sp <file>
+- * Shift <file>
+- *
+- * Insert into typebuf, at the start.
+- * If loading from !Scrap then use saved leafname instead, and
+- * delete the scrap file. Also, ignore shift key.
+- *
+- * NB: Doesn't send DataLoadAck (other app might delete temp file?).
+- */
+- void
+- ro_dataload(block)
+- int *block;
+- {
+- char_u new_path[MAXPATHL];
+- char_u *path = ((char_u *) block) + 44;
+- int scrap = FALSE;
+-
+- if (block[3] == leaf_ref && leaf_name)
+- scrap = TRUE;
+-
+- switch (get_real_state() & 0xff)
+- {
+- case INSERT:
+- case CMDLINE:
+- case CMDLINE+LANGMAP:
+- /* For insert mode we can only insert the pathname (currently)
+- * Make sure Shift is pressed.
+- */
+- swi(OS_Byte, 121, 0x80); /* Is Shift pressed? */
+- if (r1 == 0xff)
+- {
+- ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
+- ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
+- ro_return_early = TRUE; /* Return even though nothing was typed. */
+- }
+- else
+- swi(Wimp_ReportError,
+- "\0\0\0\0Sorry, you can only load text in normal mode", 5, "Vim");
+- break;
+-
+- case NORMAL:
+- ro_return_early = TRUE; /* Return even though nothing was typed. */
+-
+- if (scrap) /* Remove <Wimp$Scrap>. Later. */
+- ins_typebuf(":!~remove <Wimp$Scrap>\r", REMAP_NONE, 0, TRUE, FALSE);
+-
+- /* Insert {:sp ,:confirm e }[+f\ <leaf> ]<file><CR> */
+- ins_typebuf("\r", REMAP_NONE, 0, TRUE, FALSE);
+- ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
+- ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
+-
+- if (scrap)
+- {
+- /* Loading via !Scrap - change pathname to stored leafname */
+- ins_typebuf(leaf_name, REMAP_NONE, 0, TRUE, FALSE);
+- ins_typebuf(" +f\\ ", REMAP_NONE, 0, TRUE, FALSE);
+- leaf_ref = 0;
+- vim_free(leaf_name);
+- leaf_name = NULL;
+- }
+-
+- swi(OS_Byte, 121, 0x81); /* Is Ctrl pressed? */
+- if (r1 == 0xff)
+- /* Yes, split window */
+- ins_typebuf(":sp", REMAP_NONE, 0, TRUE, FALSE);
+- else
+- ins_typebuf(":confirm e", REMAP_NONE, 0, TRUE, FALSE);
+- break;
+-
+- default:
+- swi(Wimp_ReportError, "\0\0\0\0You can only load text in normal mode.", 5, "Vim");
+- }
+- /* Send DataSaveAck so other program doesn't think we died
+- * and delete <Wimp$Scrap>.
+- */
+- block[3] = block[2];
+- block[4] = 4;
+- swi(Wimp_SendMessage, 17, block, block[1]);
+- }
+-
+- void
+- ro_datasave(block)
+- int *block;
+- {
+- char_u *path = ((char_u *) block) + 44;
+-
+- /* Preserve the name given so we can use it, not <Wimp$Scrap> */
+- if (leaf_name)
+- vim_free(leaf_name);
+- leaf_name = vim_strsave(path);
+-
+- block[9] = -1; /* File is unsafe. */
+- strcpy(path, "<Wimp$Scrap>");
+- block[0] = 60;
+- block[3] = block[2];
+- block[4] = 2;
+- swi(Wimp_SendMessage, 17, block, block[1]);
+-
+- leaf_ref = block[2];
+- }
+-
+- void
+- ro_message(block)
+- int *block;
+- {
+- char_u *buffer;
+- long_u len;
+-
+- if (block[1] == task_handle)
+- return; /* Don't talk to ourself! */
+- switch (block[4])
+- {
+- case 0: /* Quit. */
+- if (block[4] == 0)
+- ro_quit();
+- break;
+- case 1: /* DataSave */
+- ro_datasave(block);
+- break;
+- case 2: /* DataSaveAck. */
+- if (clip_convert_selection(&buffer, &len, &clip_star) == -1)
+- return;
+-
+- /* Save the clipboard contents to a file. */
+- swi(OS_File, 10, ((char_u *) block) + 44, 0xfff, 0, buffer, buffer + len);
+-
+- /* Ack with DataLoad message. */
+- block[3] = block[2];
+- block[4] = 3;
+- block[9] = len;
+- swi(Wimp_SendMessage, 17, block, block[1]);
+-
+- vim_free(buffer);
+- break;
+- case 3: /* DataLoad */
+- ro_dataload(block);
+- break;
+- case 8: /* PreQuit */
+- ro_prequit(block);
+- break;
+- case 0xf: /* Lose clipboard. */
+- if (block[5] & 4)
+- {
+- clip_free_selection(&clip_star);
+- clip_star.owned = FALSE;
+- }
+- break;
+- case 0x10: /* DataRequest (clip_star) */
+- if (clip_star.owned)
+- {
+- int rows;
+-
+- /* Tell other program that we have the clipboard. */
+- block[0] = 52;
+- block[3] = block[2]; /* Copy myref to yourref. */
+- block[4] = 1; /* DataSave message. */
+- /* Create an estimate for the size (larger or same as true
+- * value) */
+- rows = clip_star.end.lnum - clip_star.start.lnum;
+- if (rows < 0)
+- rows = -rows;
+- block[9] = (rows + 1) * Columns + 1; /* Add one for possible
+- final newline. */
+- block[10] = 0xfff; /* Clipboard is text. */
+- strcpy( ((char_u *) block) + 44, "VimClip");
+- swi(Wimp_SendMessage, 17, block, block[1]);
+- }
+- break;
+- case 0x400c1: /* Mode change */
+- changed_mode = TRUE; /* Flag - update on next OpenWindow */
+- if (zap_redraw)
+- {
+- /* JK230798, re-initialise ZapRedraw stuff */
+- if (ro_zap_redraw_initialise() == FAIL)
+- zap_redraw = FALSE;
+- }
+- break;
+- case 0x400c3: /* TaskCloseDown */
+- if (block[1] == child_handle)
+- child_handle = 0;
+- break;
+- }
+- }
+-
+- /*
+- * Converts a scrollbar's window handle into a scrollbar pointer.
+- * NULL on failure.
+- */
+- scrollbar_T *
+- ro_find_sbar(id)
+- int id;
+- {
+- win_T *wp;
+-
+- if (gui.bottom_sbar.id == id)
+- return &gui.bottom_sbar;
+- FOR_ALL_WINDOWS(wp)
+- {
+- if (wp->w_scrollbars[SBAR_LEFT].id == id)
+- return &wp->w_scrollbars[SBAR_LEFT];
+- if (wp->w_scrollbars[SBAR_RIGHT].id == id)
+- return &wp->w_scrollbars[SBAR_RIGHT];
+- }
+- return NULL;
+- }
+-
+- void
+- scroll_to(line, sb)
+- int sb; /* Scrollbar number */
+- int line;
+- {
+- char_u code[8];
+-
+- /* Don't put events in the input queue now. */
+- if (hold_gui_events)
+- return;
+-
+- /* Send a scroll event:
+- *
+- * A scrollbar event is CSI (NOT K_SPECIAL), KS_VER_SCROLLBAR,
+- * KE_FILLER followed by:
+- * one byte representing the scrollbar number, and then four bytes
+- * representing a long_u which is the new value of the scrollbar.
+- */
+- code[0] = CSI;
+- code[1] = KS_VER_SCROLLBAR;
+- code[2] = KE_FILLER;
+- code[3] = sb;
+- code[4] = line >> 24;
+- code[5] = line >> 16;
+- code[6] = line >> 8;
+- code[7] = line;
+- add_to_input_buf(code, 8);
+- }
+-
+- void
+- h_scroll_to(col)
+- int col;
+- {
+- char_u code[8];
+-
+- /* Don't put events in the input queue now. */
+- if (hold_gui_events)
+- return;
+-
+- /* Send a scroll event:
+- *
+- * A scrollbar event is CSI (NOT K_SPECIAL)
+- *
+- * A horizontal scrollbar event is K_SPECIAL, KS_HOR_SCROLLBAR,
+- * KE_FILLER followed by four bytes representing a long_u which is the
+- * new value of the scrollbar.
+- */
+- code[0] = CSI;
+- code[1] = KS_HOR_SCROLLBAR;
+- code[2] = KE_FILLER;
+- code[4] = col >> 24;
+- code[5] = col >> 16;
+- code[6] = col >> 8;
+- code[7] = col;
+- add_to_input_buf(code, 8);
+- }
+-
+- void
+- ro_scroll(block)
+- int *block;
+- {
+- scrollbar_T *sb;
+- int offset;
+- win_T *wp;
+-
+- /* Block is ready for Wimp_OpenWindow, and also contains:
+- *
+- * +32 = scroll X direction (-2 .. +2)
+- * +36 = scroll Y direction (-2 .. +2)
+- */
+-
+- sb = ro_find_sbar(block[0]);
+- if (!sb)
+- return; /* Window not found (error). */
+-
+- wp = sb-> wp;
+-
+- if (wp == NULL)
+- {
+- /* Horizontal bar. */
+- offset = block[8];
+- if (offset == -2)
+- offset = (block[1] - block[3]) / gui.char_width;
+- else if (offset == 2)
+- offset = (block[3] - block[1]) / gui.char_width;
+-
+- block[5] += offset * gui.char_width;
+-
+- gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
+-
+- swi(Wimp_OpenWindow, 0, block);
+- }
+- else
+- {
+- offset = -block[9];
+- if (offset == -2)
+- offset = -(wp -> w_height - 1);
+- else if (offset == 2)
+- offset = wp -> w_height - 1;
+-
+- /* Possibly we should reposition the scrollbar?
+- * Vim seems to update the bar anyway...
+- */
+- gui_drag_scrollbar(sb, offset - (block[6] / gui.char_height), FALSE);
+- }
+- }
+-
+- /* Move a window by a given offset. Used to simulate the function of the
+- * nested wimp.
+- */
+- void
+- ro_move_child(window, x, y, pos_wanted, pos_got)
+- int window;
+- int x,y; /* offset to move by */
+- int pos_wanted, pos_got;
+- {
+- int block[10];
+-
+- block[0] = window;
+- swi(Wimp_GetWindowState, 0, block);
+- block[1] += x;
+- block[2] += y;
+- block[3] += x;
+- block[4] += y;
+- if (pos_wanted == -1)
+- block[7] = -1;
+- else if (pos_wanted == -2)
+- block[7] = pos_got;
+- swi(Wimp_OpenWindow, 0, block);
+- }
+-
+- /* Open the main window. Also updates scrollbars if we are not
+- * using the nested Wimp.
+- * If we have just changed mode then re-read all values.
+- */
+- void
+- ro_open_main(block)
+- int *block;
+- {
+- int toggle_size;
+-
+- /* Find out if the user clicked on the toggle size icon. */
+- block[20] = block[0];
+- swi(Wimp_GetWindowState, 0, block + 20);
+- toggle_size = block[28] & (1 << 19);
+-
+- if (nested_wimp)
+- {
+- swi(Wimp_OpenWindow, 0, block);
+- }
+- else
+- {
+- int old[10];
+- int x_offset, y_offset; /* Move children same as parent. */
+- int pos_wanted, pos_got;
+- int left_bar = gui.which_scrollbars[SBAR_LEFT];
+- int right_bar = gui.which_scrollbars[SBAR_RIGHT];
+- win_T *wp;
+-
+- /* Three cases to think about:
+- * 1) Move to top. Open each window at the top.
+- * 2) Same stack position. Open each with same position.
+- * 3) Open at bottom. Open children with parent's new position.
+- */
+-
+- old[0] = block[0];
+- swi(Wimp_GetWindowState, 0, old);
+- pos_wanted = block[7];
+- swi(Wimp_OpenWindow, 0, block);
+- /* Block updated by OpenWindow? I don't think so! */
+- swi(Wimp_GetWindowState, 0, block);
+- pos_got = block[7];
+-
+- x_offset = block[1] - old[1];
+- y_offset = block[4] - old[4];
+- if (x_offset || y_offset || pos_wanted == -1 || pos_wanted == -2)
+- {
+- /* If parent has moved, re-open all the child windows. */
+- FOR_ALL_WINDOWS(wp)
+- {
+- /* Reopen scrollbars for this window. */
+- if (left_bar)
+- ro_move_child(wp -> w_scrollbars[SBAR_LEFT].id,
+- x_offset, y_offset,
+- pos_wanted, pos_got);
+- if (right_bar)
+- ro_move_child(wp -> w_scrollbars[SBAR_RIGHT].id,
+- x_offset, y_offset,
+- pos_wanted, pos_got);
+- }
+- }
+- }
+- if (changed_mode || toggle_size)
+- {
+- int width, height;
+-
+- if (changed_mode)
+- ro_measure_tools();
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+-
+- width = block[3] - block[1];
+- height = block[4] - block[2];
+- swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+- gui_resize_shell(width, height);
+- changed_mode = FALSE;
+- }
+- }
+-
+- void
+- ro_open_window(block)
+- int *block;
+- {
+- int pos;
+- scrollbar_T *sb;
+-
+- if (block[0] == gui.window_handle)
+- ro_open_main(block);
+- else
+- {
+- swi(Wimp_OpenWindow, 0, block);
+- if (block[0] != gui.window_handle)
+- {
+- sb = ro_find_sbar(block[0]);
+- if (sb)
+- {
+- if (sb-> wp != NULL)
+- gui_drag_scrollbar(sb, -block[6] / gui.char_height, FALSE);
+- else
+- gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
+- }
+- }
+- }
+- }
+-
+- void
+- ro_menu_selection(block)
+- int *block;
+- {
+- int *item = wimp_menu + 7;
+- vimmenu_T *menu;
+- /* wimp_menu points to a wimp menu structure */
+-
+- for (;;)
+- {
+- while (block[0]--)
+- item += 6;
+- if (block[1] == -1)
+- break;
+- item = ((int *) item[1]) + 7;
+- block++;
+- }
+- /* item points to the wimp menu item structure chosen */
+- menu = (vimmenu_T *) item[5];
+-
+- swi(Wimp_GetPointerInfo, 0, block);
+- if (block[2] == 1)
+- /* Adjust used - keep menu open */
+- swi(Wimp_CreateMenu, 0, wimp_menu);
+-
+- if (menu-> cb)
+- menu-> cb(menu);
+- }
+-
+- void
+- ro_open_parent()
+- {
+- int head;
+- char_u *i = curbuf-> b_ffname;
+- char_u buffer[256];
+-
+- head = 0;
+- for (; *i; i++)
+- {
+- if (*i == '.')
+- head = i - curbuf-> b_ffname;
+- }
+-
+- /* Append head chars to buffer */
+- if (head < 240 && curbuf-> b_ffname && head)
+- {
+- strcpy(buffer, "%filer_opendir ");
+- strncpy(buffer + 15, curbuf-> b_ffname, head);
+- buffer[15 + head] = '\0';
+- swi(OS_CLI, buffer);
+- }
+- }
+-
+- void
+- process_event(event, block)
+- int event;
+- int *block;
+- {
+- switch (event)
+- {
+- case 0: /* Nothing - update drag state. */
+- if (ro_dragging)
+- ro_continue_drag(block);
+- break;
+- case 1: /* Redraw window. */
+- redraw_window(block);
+- break;
+- case 2: /* Open window. */
+- ro_open_window(block);
+- break;
+- case 3: /* Close window. */
+- swi(Wimp_GetPointerInfo, 0, block + 1);
+- if (block[3] == 1)
+- ro_open_parent();
+- else
+- if (ro_ok_to_quit())
+- ro_quit();
+- break;
+- case 6: /* Mouse click. */
+- ro_mouse(block);
+- break;
+- case 7: /* Finished drag. */
+- ro_drag_finished(block);
+- break;
+- case 8: /* Key pressed. */
+- ro_insert_key((char_u *) &block[6]);
+- break;
+- case 9:
+- ro_menu_selection(block);
+- break;
+- case 10: /* Scroll request. */
+- ro_scroll(block);
+- break;
+- case 11: /* Lose caret. */
+- if (block[0] == gui.window_handle)
+- gui_focus_change(FALSE);
+- break;
+- case 12: /* Gain caret. */
+- if (block[0] == gui.window_handle)
+- gui_focus_change(TRUE);
+- break;
+- case 17: /* User message. */
+- case 18: /* User message recorded. */
+- ro_message(block);
+- break;
+- }
+- }
+-
+- /*
+- * GUI input routine called by gui_wait_for_chars(). Waits for a character
+- * from the keyboard.
+- * wtime == -1 Wait forever.
+- * wtime == 0 This should never happen.
+- * wtime > 0 Wait wtime milliseconds for a character.
+- * Returns OK if a character was found to be available within the given time,
+- * or FAIL otherwise.
+- */
+- int
+- gui_mch_wait_for_chars(long wtime)
+- {
+- int block[64];
+- int reason;
+- int start_time = -1;
+- int ctime = wtime / 10; /* delay in cs */
+-
+- if (wtime != -1)
+- {
+- swi(OS_ReadMonotonicTime);
+- start_time = r0;
+- }
+-
+- for (;;)
+- {
+- if (ro_dragging)
+- reason = wimp_poll(0, block); /* Always return immediately */
+- else if (wtime == -1)
+- reason = wimp_poll(1, block);
+- else
+- reason = wimp_pollidle(0, block, start_time + ctime);
+-
+- process_event(reason, block);
+-
+- if (input_available() || ro_return_early)
+- {
+- ro_return_early = FALSE;
+- return OK; /* There is something to process (key / menu event) */
+- }
+-
+- if (wtime != -1)
+- {
+- swi(OS_ReadMonotonicTime);
+- if (r0 - start_time > ctime)
+- return FAIL; /* We've been waiting too long - return failure */
+- }
+- }
+- }
+-
+- /* Flush any output to the screen */
+- void
+- gui_mch_flush(void)
+- {
+- }
+-
+- /*
+- * Clear a rectangular region of the screen from text pos(row1, col1) to
+- * (row2, col2) inclusive.
+- */
+- void
+- gui_mch_clear_block(int row1, int col1, int row2, int col2)
+- {
+- swi(ColourTrans_ReturnGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+- plot_rectangle(96 + 5, r0,
+- FILL_X(col1), -FILL_Y(row2 + 1),
+- FILL_X(col2 + 1), -FILL_Y(row1));
+- }
+-
+- void
+- gui_mch_clear_all(void)
+- {
+- if (redraw_block)
+- {
+- swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+- swi(OS_WriteI + 16);
+- }
+- else
+- {
+- int block[44];
+- block[0] = gui.window_handle;
+- block[1] = 0;
+- block[2] = -gui.num_rows * gui.char_height;
+- block[3] = gui.num_cols * gui.char_width;
+- block[4] = 0;
+- swi(Wimp_UpdateWindow, 0, block);
+- while (r0)
+- {
+- swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+- swi(OS_WriteI + 16);
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- }
+- }
+-
+- /*
+- * Delete the given number of lines from the given row, scrolling up any
+- * text further down within the scroll region.
+- */
+- void
+- gui_mch_delete_lines(int row, int num_lines)
+- {
+- int top_from = -row - num_lines;
+- int bot_from = -gui.scroll_region_bot - 1;
+- int bot_to = bot_from + num_lines;
+-
+- swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
+-
+- /* Changed without checking! */
+- swi(Wimp_BlockCopy, gui.window_handle,
+- gui.scroll_region_left * gui.char_width,
+- bot_from * gui.char_height,
+- (gui.scroll_region_right - gui.scroll_region_left
+- + 1) * gui.char_width,
+- top_from * gui.char_height,
+-
+- gui.scroll_region_left * gui.char_width,
+- bot_to * gui.char_height);
+-
+- gui_clear_block(gui.scroll_region_bot - num_lines + 1,
+- gui.scroll_region_left,
+- gui.scroll_region_bot, gui.scroll_region_right);
+- }
+-
+- /*
+- * Insert the given number of lines before the given row, scrolling down any
+- * following text within the scroll region.
+- */
+- void
+- gui_mch_insert_lines(int row, int num_lines)
+- {
+- int top_from = -row;
+- int bot_to = -gui.scroll_region_bot - 1;
+- int bot_from = bot_to + num_lines;
+-
+- swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
+-
+- swi(Wimp_BlockCopy, gui.window_handle,
+- gui.scroll_region_left * gui.char_width,
+- bot_from * gui.char_height,
+- (gui.scroll_region_right - gui.scroll_region_left
+- + 1) * gui.char_width,
+- top_from * gui.char_height,
+-
+- gui.scroll_region_left * gui.char_width,
+- bot_to * gui.char_height);
+-
+- gui_clear_block(row, gui.scroll_region_left,
+- row + num_lines - 1, gui.scroll_region_right);
+- }
+-
+- /* Put selection in clipboard buffer.
+- * Should we become the new owner?
+- */
+- void
+- clip_mch_request_selection(VimClipboard *cbd)
+- {
+- int block[64]; /* Will be used in Wimp_Poll. */
+- int reason;
+- char_u *buffer;
+- long_u length;
+-
+- block[0] = 48; /* Size of block. */
+- block[3] = 0; /* Original message. */
+- block[4] = 0x10; /* Data request. */
+- block[5] = gui.window_handle;
+- block[6] = RO_LOAD_CLIPBOARD; /* Internal handle. */
+- block[7] = block[8] = 0; /* (x,y) not used. */
+- block[9] = 4;
+- block[10] = 0xfff; /* We want text files if possible, I think. */
+- block[11] = -1; /* End of list. */
+- swi(Wimp_SendMessage, 17, block, 0); /* Broadcast request. */
+-
+- /* OK, we've sent the request. Poll until we get a null poll (failure) or
+- * we load the clipboard.
+- * If we receive a DataSave event with icon handle = -2 then put it on the
+- * clipboard. RISC OS should ensure that key events will not be delivered
+- * until the clipboard operation completes (unless the owner starts idling
+- * - we can't wait forever!).
+- */
+- for (;;)
+- {
+- reason = wimp_poll(0, block);
+- if (reason == 0)
+- return; /* Failed to get clipboard. */
+- if ((reason == 17 || reason == 18) &&
+- block[4] == 1 && block[6] == RO_LOAD_CLIPBOARD)
+- break; /* Got it - stop waiting. */
+- process_event(reason, block);
+- if (ro_return_early)
+- return;
+- }
+- /* Tell owner to save data in <Wimp$Scrap>. */
+- block[0] = 60;
+- block[3] = block[2]; /* Copy myref -> yourref */
+- block[4] = 2; /* DataSaveAck. */
+- block[9] = -1; /* Data is unsafe. */
+- strcpy( ((char_u *) block) + 44, "<Wimp$Scrap>");
+- swi(Wimp_SendMessage, 17, block, block[1]);
+-
+- /* Wait again for reply. */
+- for (;;)
+- {
+- reason = wimp_poll(0, block);
+- if (reason == 0)
+- return; /* Other program has given up! */
+- if ((reason == 17 || reason == 18) && block[4] == 3 && block[6] == RO_LOAD_CLIPBOARD)
+- break; /* Clipboard data saved to <Wimp$Scrap> */
+- process_event(reason, block);
+- if (ro_return_early)
+- return;
+- }
+-
+- /* <Wimp$Scrap> contains clipboard - load it. */
+- if (xswi(OS_File, 17, "<Wimp$Scrap>") & v_flag)
+- return; /* Error! */
+- if (r0 != 1 && r0 != 3)
+- return;
+- length = r4;
+-
+- buffer = lalloc(length, TRUE); /* Claim memory (and report errors). */
+- if (buffer == NULL)
+- return;
+-
+- if (xswi(OS_File, 16, "<Wimp$Scrap>", buffer, 0) & v_flag)
+- return;
+-
+- clip_yank_selection(MCHAR, buffer, length, cbd);
+-
+- vim_free(buffer);
+-
+- swi(OS_FSControl, 27, "<Wimp$Scrap>", 0, 0); /* Delete temp file. */
+-
+- block[4] = 4; /* Send DataLoadAck. */
+- block[3] = block[2]; /* Copy myref -> yourref. */
+- swi(Wimp_SendMessage, 17, block, block[1]);
+- }
+-
+- /* Not sure what this means under RISC OS. */
+- void
+- clip_mch_lose_selection(VimClipboard *cbd)
+- {
+- }
+-
+- /* Tell everyone that we now own the clipboard.
+- * Return OK if our claim is accepted (always, under RISC OS)
+- */
+- int
+- clip_mch_own_selection(VimClipboard *cbd)
+- {
+- int block[6];
+- block[0] = 24; /* Length of block. */
+- block[3] = 0; /* Original message. */
+- block[4] = 0xf; /* ClaimEntity. */
+- block[5] = 0x4; /* Claim clipboard only. */
+- swi(Wimp_SendMessage, 17, block, 0);
+- return OK;
+- }
+-
+- /*
+- * Send the current selection to the clipboard. Do nothing for X because we
+- * will fill in the selection only when requested by another app. Sounds good
+- * for RISC OS too.
+- */
+- void
+- clip_mch_set_selection(VimClipboard *cbd)
+- {
+- clip_get_selection(cbd);
+- }
+-
+- /*
+- * Make a menu either grey or not grey.
+- */
+- void
+- gui_mch_menu_grey(vimmenu_T *menu, int grey)
+- {
+- menu-> greyed_out = grey;
+- }
+-
+- /*
+- * Make menu item hidden or not hidden
+- */
+- void
+- gui_mch_menu_hidden(vimmenu_T *menu, int hidden)
+- {
+- menu-> hidden = hidden;
+- }
+-
+- /*
+- * This is called after setting all the menus to grey/hidden or not.
+- */
+- void
+- gui_mch_draw_menubar(void)
+- {
+- swi(Wimp_CreateMenu, 0, -1);
+- if (wimp_menu != (int *) -1)
+- {
+- ro_remove_menu(wimp_menu);
+- wimp_menu = (int *) -1;
+- }
+- }
+-
+- /* Add or remove a scrollbar. Note that this is only called when
+- * the scrollbar state is changing.
+- * The scroll bar window has already been created.
+- * We can't do anything except remove the scroll bar
+- * until we know what size to use.
+- */
+- void
+- gui_mch_enable_scrollbar(sb, flag)
+- scrollbar_T *sb;
+- int flag;
+- {
+- if (!flag)
+- swi(Wimp_CloseWindow, 0, & (sb->id) );
+- return;
+- }
+-
+- void
+- gui_mch_set_blinking(long waittime, long on, long off)
+- {
+- }
+-
+- /*
+- * Stop the cursor blinking. Show the cursor if it wasn't shown.
+- */
+- void
+- gui_mch_stop_blink(void)
+- {
+- }
+-
+- /*
+- * Start the cursor blinking. If it was already blinking, this restarts the
+- * waiting time and shows the cursor.
+- */
+- void
+- gui_mch_start_blink(void)
+- {
+- }
+-
+- /*
+- * Return the RGB value of a pixel as a long.
+- */
+- long_u
+- gui_mch_get_rgb(guicolor_T pixel)
+- {
+- return (long_u)pixel;
+- }
+-
+- void
+- gui_mch_set_text_area_pos(int x, int y, int w, int h)
+- {
+- }
+-
+- void
+- gui_mch_enable_menu(int flag)
+- {
+- }
+-
+- void
+- gui_mch_set_menu_pos(int x, int y, int w, int h)
+- {
+- }
+-
+- void
+- gui_mch_add_menu(vimmenu_T *menu, int idx)
+- {
+- }
+-
+- void
+- gui_mch_add_menu_item(vimmenu_T *menu, int idx)
+- {
+- }
+-
+- void
+- gui_mch_new_menu_colors(void)
+- {
+- }
+-
+- void
+- gui_mch_destroy_menu(vimmenu_T *menu)
+- {
+- }
+-
+- /* Size of buffer has changed.
+- * Add one to max since gui.c subtracts one more than it should!
+- */
+- void
+- gui_mch_set_scrollbar_thumb(sb, val, size, max)
+- scrollbar_T *sb;
+- long val;
+- long size;
+- long max;
+- {
+- int block[10], width, height;
+-
+- width = (max + 1) * gui.char_width;
+- height = (max + 1 + W_STATUS_HEIGHT(sb->wp)) * gui.char_height;
+-
+- block[0] = block[3] = 0;
+- block[1] = -height + (1 << y_eigen_factor);
+- block[2] = width;
+-
+- swi(Wimp_SetExtent, sb -> id, block);
+-
+- block[0] = sb -> id;
+- swi(Wimp_GetWindowState, 0, block);
+- block[5] = val * gui.char_width;
+- block[6] = -val * gui.char_height;
+- swi(Wimp_OpenWindow, 0, block, 0x4b534154,
+- gui.window_handle, /* Parent window handle. */
+- (CHILD_FIX_TO_RIGHT << CHILD_LEFT ) |
+- (CHILD_FIX_TO_RIGHT << CHILD_RIGHT ) |
+- (CHILD_FIX_TO_BOTTOM << CHILD_TOP ) |
+- (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM) |
+- (CHILD_SELF_SCROLL << CHILD_SCROLL_X) |
+- (CHILD_SELF_SCROLL << CHILD_SCROLL_Y)
+- );
+- }
+-
+- /* Set the position of the scrollbar within the editor
+- * window. Note that, for vertical scrollbars, x and w
+- * are ignored. For horizontal bars y and h are ignored.
+- */
+- void
+- gui_mch_set_scrollbar_pos(sb, x, y, w, h)
+- scrollbar_T *sb;
+- int x; /* Horizontal sb position */
+- int y; /* Top of scroll bar */
+- int w; /* Width */
+- int h; /* Height */
+- {
+- int block[24];
+- int px1, py1; /* Parent window min coords */
+- int px2, py2; /* Parent window max coords */
+-
+- /* Find where the parent window is. */
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- px1 = block[1];
+- py1 = block[2];
+- px2 = block[3];
+- py2 = block[4];
+-
+- block[0] = sb -> id;
+-
+- /* Find out how big the scroll window is at the moment. */
+- swi(Wimp_GetWindowInfo, 0, ((char_u *)block) + 1);
+-
+- if (block[13] < w || block[12] > -h)
+- {
+- /* Current window is too small! */
+- if (block[12] > -h)
+- block[12] = -h;
+- if (block[13] < w)
+- block[13] = w;
+- swi(Wimp_SetExtent, block[0], block + 11);
+- }
+-
+- /* This works better on the nested_wimp. */
+- if (sb-> wp)
+- {
+- /* This is a vertical scrollbar. */
+- block[1] = block[3] = px2 - gui.scrollbar_width + (1 << x_eigen_factor);
+- block[2] = 1 + py2 - (y + h) + (1 << y_eigen_factor);
+- block[4] = 1 + py2 - y;
+- }
+- else
+- {
+- /* This is a horizontal scrollbar. */
+- block[2] = block[4] = py1 + gui.scrollbar_height;
+- block[1] = px1;
+- block[3] = px2 - gui.scrollbar_width;
+- }
+-
+- block[5] = 0;
+- block[6] = 0;
+- block[7] = -1;
+-
+- swi(Wimp_OpenWindow, 0, block, 0x4b534154,
+- gui.window_handle, /* Parent window handle. */
+- (CHILD_FIX_TO_RIGHT << CHILD_LEFT ) |
+- (CHILD_FIX_TO_RIGHT << CHILD_RIGHT ) |
+- (CHILD_FIX_TO_BOTTOM << CHILD_TOP ) |
+- (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM) |
+- (CHILD_SELF_SCROLL << CHILD_SCROLL_X) |
+- (CHILD_SELF_SCROLL << CHILD_SCROLL_Y)
+- );
+- }
+-
+- /* Create a window with no workarea to place inside editor window.
+- * (what happens without the nested wimp?)
+- * Data for scrollbar is invalid.
+- */
+- void
+- gui_mch_create_scrollbar(sb, orient)
+- scrollbar_T *sb;
+- int orient; /* orient is SBAR_HORIZ or SBAR_VERT */
+- {
+- int bar[] =
+- {
+- 0, 0, /* Visible area : min X,Y */
+- 100, 100, /* max X,Y */
+- 0, 0, /* Scroll offsets */
+- -1, /* Window in front */
+- 0x80800150 | (orient == SBAR_HORIZ ? (1 << 30) : (1 << 28)),
+- 0xff070207, /* Colours */
+- 0x000c0103, /* More colours */
+- 0, -0x4000, /* Workarea extent */
+- 0x4000, 0, /* max X,Y */
+- 0x00000000, /* No title */
+- 0 << 12, /* No workarea button type */
+- 1, /* Wimp sprite area */
+- 0x00010001, /* Minimum width, height */
+- 0, 0, 0, /* Title data (none) */
+- 0 /* No icons */
+- };
+- swi(Wimp_CreateWindow, 0, bar);
+- sb -> id = r0;
+- }
+-
+- #if defined(FEAT_WINDOWS) || defined(PROTO)
+- void
+- gui_mch_destroy_scrollbar(scrollbar_T *sb)
+- {
+- swi(Wimp_DeleteWindow, 0, & (sb->id));
+- sb -> id = -1;
+- }
+- #endif
+-
+- void
+- gui_mch_set_scrollbar_colors(scrollbar_T *sb)
+- {
+- /* Always use default RO colour scheme. */
+- }
+-
+- /*
+- * Get current mouse coordinates in text window.
+- * Note: (0,0) is the bottom left corner, positive y is UP.
+- */
+- void
+- gui_mch_getmouse(x, y)
+- int *x;
+- int *y;
+- {
+- int left;
+- int top;
+- int block[10];
+-
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- left = block[1];
+- top = block[4];
+-
+- swi(Wimp_GetPointerInfo, 0, block);
+- *x = block[0] - left;
+- *y = top - block[1];
+- }
+-
+- /* MouseTo(x, y) */
+- void
+- gui_mch_setmouse(x, y)
+- int x;
+- int y;
+- {
+- }
+-
+- void
+- gui_mch_toggle_tearoffs(enable)
+- int enable;
+- {
+- /* no tearoff menus */
+- }
+-
+- /* Redraw a window's title.
+- * For the nested wimp we use the new 'redraw-title-bar' reason code.
+- * For older wimps we mark the area of the screen where the title bar
+- * is as invalid.
+- */
+- void
+- ro_redraw_title(window)
+- int window;
+- {
+- if (nested_wimp)
+- {
+- swi(Wimp_ForceRedraw, window, 0x4b534154, 3);
+- }
+- else
+- {
+- int block[10];
+- int miny;
+-
+- block[0] = window;
+- swi(Wimp_GetWindowState, 0, block);
+- miny = block[4];
+- swi(Wimp_GetWindowOutline, 0, block);
+- swi(Wimp_ForceRedraw, -1,
+- block[1], miny,
+- block[3], block[4]);
+- }
+- }
+-
+- /* Turn a vimmenu_T structure into a wimp menu structure.
+- * -1 if resulting menu is empty.
+- * Only the children and dname items in the root menu are used.
+- */
+- int *
+- ro_build_menu(menu)
+- vimmenu_T *menu;
+- {
+- int *wimp_menu;
+- int width = 4;
+- int w;
+- int size = 28;
+- vimmenu_T *item;
+- int *wimp_item;
+-
+- /* Find out how big the menu is so we can allocate memory for it */
+- for (item = menu-> children; item; item = item-> next)
+- {
+- if (item-> hidden == FALSE && !menu_is_separator(item->name))
+- size += 24;
+- }
+-
+- if (size <= 28)
+- return (int *) -1; /* No children - shouldn't happen */
+-
+- wimp_menu = (int *) alloc(size);
+-
+- wimp_menu[0] = (int) menu-> dname;
+- wimp_menu[1] = -1;
+- wimp_menu[2] = 0;
+- wimp_menu[3] = 0x00070207;
+- wimp_menu[5] = 44;
+- wimp_menu[6] = 0;
+-
+- wimp_item = wimp_menu + 7;
+-
+- for (item = menu-> children; item; item = item-> next)
+- {
+- if (menu_is_separator(item-> name))
+- {
+- /* This menu entry is actually a separator. If it is not the first
+- * menu entry then mark the previous menu item as needing a dotted
+- * line after it.
+- */
+- if (wimp_item > wimp_menu + 7)
+- wimp_item[-6] |= 0x2;
+- }
+- else if (item-> hidden == FALSE)
+- {
+- wimp_item[0] = 0;
+- wimp_item[1] = item-> children ? (int) ro_build_menu(item) : -1;
+- wimp_item[2] = 0x07009131 | (item-> greyed_out << 22);
+- wimp_item[3] = (int) item-> dname;
+- wimp_item[4] = -1;
+- wimp_item[5] = (int) item; /* Stuff the menu address in this unused space */
+-
+- w = strlen(item-> dname) + 1;
+- if (w > width)
+- width = w;
+- wimp_item += 6;
+- }
+- }
+-
+- wimp_menu[4] = (width + 2) * 16;
+- wimp_menu[7] |= 0x100; /* Menu title is indirected */
+- wimp_item[-6] |= 0x080; /* Last entry in menu */
+- return wimp_menu;
+- }
+-
+- static void
+- ro_remove_menu(menu)
+- int *menu;
+- {
+- int *item = menu + 7;
+-
+- if (menu == NULL || menu == (int *) -1)
+- return;
+-
+- for (;;)
+- {
+- if (item[1] != -1)
+- ro_remove_menu((int *) item[1]); /* Remove sub-menu */
+- if (item[0] & 0x80)
+- break; /* This was the last entry */
+- item += 6;
+- }
+- vim_free(menu);
+- }
+-
+- void
+- gui_mch_show_popupmenu(menu)
+- vimmenu_T *menu;
+- {
+- int block[10];
+-
+- /* Remove the existing menu, if any */
+- if (wimp_menu != (int *) -1)
+- {
+- swi(Wimp_CreateMenu, 0, -1);
+- ro_remove_menu(wimp_menu);
+- wimp_menu = (int *) -1;
+- }
+-
+- wimp_menu = ro_build_menu(menu);
+- if (wimp_menu != (int *) -1)
+- {
+- swi(Wimp_GetPointerInfo, 0, block);
+- swi(Wimp_CreateMenu, 0, wimp_menu, block[0] - 64, block[1] + 64);
+- }
+- }
+-
+- /* Run a command using the TaskWindow module.
+- * If SHELL_FILTER is set then output is not echoed to the screen,
+- * If it is not set, then \r is not sent to the output file.
+- */
+- int
+- gui_mch_call_shell(cmd, options)
+- char_u *cmd;
+- int options; /* SHELL_FILTER if called by do_filter() */
+- /* SHELL_COOKED if term needs cooked mode */
+- {
+- char_u task_cmd[256]; /* Contains *TaskWindow command. */
+- int block[64];
+- int reason;
+- char_u *out;
+- char_u c;
+- int old_msg_col;
+- char_u *out_redir;
+- int length;
+- FILE *out_file = NULL;
+-
+- out_redir = strstr(cmd, " > ");
+- if (out_redir == NULL)
+- length = strlen(cmd); /* No redirection. */
+- else
+- {
+- length = out_redir - cmd;
+- out_file = fopen(out_redir + 3, "wb");
+- if (out_file == NULL)
+- smsg("WARNING : Can't open file %s for writing\n", out_redir + 3);
+- }
+-
+- if (length > 180)
+- {
+- if (out_file)
+- fclose(out_file);
+- return FAIL; /* Command too long. */
+- }
+-
+- strcpy(task_cmd, "TaskWindow \"");
+- strncpy(task_cmd + 12, cmd, length);
+- sprintf(task_cmd + 12 + length,
+- "\" -task &%08x -ctrl -quit -name \"Vim command\"",
+- task_handle);
+-
+- if (options & SHELL_COOKED)
+- settmode(TMODE_COOK);
+-
+- if (xswi(Wimp_StartTask, task_cmd) & v_flag)
+- {
+- /* Failed to even start a new task (out of memory?) */
+- settmode(TMODE_RAW);
+- if (out_file)
+- fclose(out_file);
+- return FAIL;
+- }
+-
+- /* Wait for the child process to initialise. */
+- child_handle = 0;
+- while (!child_handle)
+- {
+- reason = wimp_poll(0, block);
+- if ((reason == 17 || reason == 18) && block[4] == 0x808c2)
+- child_handle = block[1];
+- else
+- process_event(reason, block);
+- }
+-
+- /* Block until finished */
+- while (child_handle)
+- {
+- reason = wimp_poll(1, block);
+- if (reason == 3 || (reason == 8 && block[6] == 3))
+- {
+- /* Close window request or CTRL-C - kill child task. */
+- block[0] = 20;
+- block[3] = 0;
+- block[4] = 0x808c4; /* Morite */
+- swi(Wimp_SendMessage, 17, block, child_handle);
+- MSG_PUTS(_("\nSending message to terminate child process.\n"));
+- continue;
+- }
+- else if (reason == 8)
+- {
+- block[0] = 28;
+- block[3] = 0;
+- block[4] = 0x808c0; /* Input */
+- block[5] = 1;
+- /* Block[6] is OK as it is! */
+- swi(Wimp_SendMessage, 17, block, child_handle);
+- continue;
+- }
+- else if (reason == 17 || reason == 18)
+- {
+- if (block[4] == 0x808c1)
+- {
+- /* Ack message. */
+- block[3] = block[2];
+- swi(Wimp_SendMessage, 19, block, block[1]);
+- out = (char_u *)block + 24;
+- old_msg_col = msg_col;
+- while (block[5]--)
+- {
+- c = *out++;
+- if (out_file && (c != '\r' || (options & SHELL_FILTER)))
+- fputc(c, out_file);
+- if ((options & SHELL_FILTER) == 0)
+- {
+- if (c == 127)
+- msg_puts("\b \b");
+- else if (c > 31)
+- msg_putchar(c);
+- else if (c == 10)
+- {
+- lines_left = 8; /* Don't do More prompt! */
+- msg_putchar(10);
+- }
+- }
+- }
+- /* Flush output to the screen. */
+- windgoto(msg_row, msg_col);
+- out_flush();
+- continue;
+- }
+- }
+- process_event(reason, block);
+- }
+- msg_putchar('\n');
+- settmode(TMODE_RAW);
+- if (out_file)
+- fclose(out_file);
+- return OK;
+- }
+-
+- /* Like strsave(), but stops at any control char */
+- char_u *
+- wimp_strsave(str)
+- char *str;
+- {
+- int strlen = 0;
+- char_u *retval;
+- while (str[strlen] > 31)
+- strlen++;
+- retval = alloc(strlen + 1);
+- if (retval)
+- {
+- memcpy(retval, str, strlen);
+- retval[strlen] = '\0';
+- }
+- return retval;
+- }
+-
+- /* If we are saving then pop up a standard RISC OS save box.
+- * Otherwise, open a directory viewer on the given directory (and return NULL)
+- * The string we return will be freed later.
+- */
+- char_u *
+- gui_mch_browse(saving, title, dflt, ext, initdir, filter)
+- int saving; /* write action */
+- char_u *title; /* title for the window */
+- char_u *dflt; /* default file name */
+- char_u *ext; /* extension added */
+- char_u *initdir; /* initial directory, NULL for current dir */
+- char_u *filter; /* file name filter */
+- {
+- char command[256];
+- int length;
+-
+- if (saving)
+- {
+- int block[64];
+- int reason;
+- int done_save = FALSE;
+- char_u *retval = NULL;
+- char_u *sprname;
+- char_u *fname;
+- int dragging_icon = FALSE;
+- int filetype;
+-
+- if (!dflt)
+- dflt = "TextFile";
+-
+- block[0] = save_window;
+- block[1] = 0;
+- swi(Wimp_GetIconState, 0, block);
+- sprname = ((char_u *) block[7]);
+- block[1] = 1;
+- swi(Wimp_GetIconState, 0, block);
+- fname = ((char *) block[7]);
+- strncpy(fname, dflt, 255);
+-
+- if (xswi(OS_FSControl, 31, curbuf->b_p_oft) & v_flag)
+- {
+- filetype = 0xfff;
+- strcpy(sprname + 5, "xxx");
+- }
+- else
+- {
+- filetype = r2;
+- sprintf(sprname + 5, "%03x", filetype);
+- }
+-
+- /* Open the save box */
+-
+- swi(Wimp_GetPointerInfo, 0, block);
+- swi(Wimp_CreateMenu, 0, save_window, block[0] - 64, block[1] + 64);
+- swi(Wimp_SetCaretPosition, save_window, 1, 0, 0, -1, -1);
+-
+- while (!done_save)
+- {
+- reason = wimp_poll(1, block);
+- switch (reason)
+- {
+- case 1:
+- redraw_window(block);
+- break;
+- case 2:
+- if (block[0] == save_window)
+- swi(Wimp_OpenWindow, 0, block);
+- else
+- ro_open_window(block);
+- break;
+- case 3:
+- done_save = TRUE;
+- break;
+- case 6:
+- if (block[3] != save_window)
+- done_save = TRUE;
+- else
+- {
+- int drag_box[4];
+- int min_x, max_y;
+-
+- switch (block[4])
+- {
+- case 0: /* Start drag */
+- block[0] = save_window;
+- swi(Wimp_GetWindowState, 0, block);
+- min_x = block[1];
+- max_y = block[4];
+- block[1] = 0;
+- swi(Wimp_GetIconState, 0, block);
+- drag_box[0] = block[2] + min_x;
+- drag_box[1] = block[3] + max_y;
+- drag_box[2] = block[4] + min_x;
+- drag_box[3] = block[5] + max_y;
+-
+- swi(DragASprite_Start,
+- 0x45,
+- 1,
+- sprname,
+- drag_box);
+- dragging_icon = TRUE;
+- break;
+- case 2: /* OK */
+- retval = wimp_strsave(fname);
+- done_save = TRUE;
+- break;
+- case 3: /* Cancel */
+- done_save = TRUE;
+- break;
+- }
+- }
+- break;
+- case 7:
+- if (dragging_icon)
+- {
+- int len = 0;
+-
+- dragging_icon = FALSE;
+- swi(Wimp_GetPointerInfo, 0, block);
+- block[5] = block[3];
+- block[6] = block[4];
+- block[7] = block[0];
+- block[8] = block[1];
+- block[9] = 0; /* Don't know the size */
+- block[10] = filetype;
+-
+- while (fname[len] > 31)
+- {
+- if (fname[len] == '.')
+- {
+- fname += len + 1;
+- len = 0;
+- }
+- else
+- len++;
+- }
+- if (len > 211)
+- len = 211;
+-
+- memcpy(((char_u *) block) + 44, fname, len);
+- ((char_u *)block)[44 + len] = '\0';
+-
+- block[0] = (len + 48) & 0xfc;
+- block[3] = 0;
+- block[4] = 1; /* DataSave */
+-
+- swi(Wimp_SendMessage, 17, block, block[5], block[6]);
+- }
+- else
+- ro_drag_finished(block);
+- break;
+- case 8:
+- if (block[6] == 13)
+- {
+- retval = wimp_strsave(fname);
+- done_save = TRUE;
+- }
+- else if (block[6] == 0x1b)
+- done_save = TRUE;
+- else
+- swi(Wimp_ProcessKey, block[6]);
+- break;
+- case 17:
+- case 18:
+- if (block[4] == 2 && block[9] != -1)
+- {
+- /* DataSaveAck from dragging icon. */
+- retval = wimp_strsave(((char_u *) block) + 44);
+- done_save = TRUE;
+- }
+- else if (block[4] == 0x400c9)
+- {
+- /* MenusDeleted */
+- done_save = TRUE;
+- }
+- else
+- ro_message(block);
+- break;
+- }
+- }
+- block[0] = save_window;
+- swi(Wimp_CloseWindow, 0, block);
+- swi(Wimp_GetCaretPosition, 0, block);
+- if (block[0] == -1)
+- swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+- return retval;
+- }
+- else if (initdir)
+- {
+- /* Open a directory viewer */
+- length = strlen(initdir);
+-
+- if (length > 240)
+- return NULL; /* Path too long! */
+-
+- length = sprintf(command, "Filer_OpenDir %s", initdir);
+- while (command[length - 1] == '.')
+- length--;
+- command[length] = '\0';
+- swi(OS_CLI, command);
+- }
+- return NULL;
+- }
+--- 0 ----
+*** ../vim-7.3.186/src/os_riscos.c 2010-08-15 21:57:27.000000000 +0200
+--- src/os_riscos.c 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,1292 ****
+- /* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved by Bram Moolenaar
+- *
+- * Do ":help uganda" in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- * See README.txt for an overview of the Vim source code.
+- */
+-
+- #include "vim.h"
+-
+- /*
+- * os_riscos.c
+- *
+- * Thomas Leonard <tal197@ecs.soton.ac.uk>
+- */
+-
+- const char *__dynamic_da_name = "Vim heap"; /* Enable and name our dynamic area */
+- int ro_line_mode = TRUE; /* For Ex mode we much echo chars to the screen ourselves */
+- int windowed; /* Flag - are we running inside a text window? */
+- int WinLeft, WinTop; /* We might be started inside a text window */
+- int ScrollTop; /* Make cursor movements relative to ScrollTop. */
+-
+- int old_escape_state = -1;
+- int old_cursor_state = -1;
+-
+- #define rgb(r,g,b) ((b<<24) + (g<<16) + (r<<8))
+- #define NORMAL_FG 0x00000000
+- #define NORMAL_BG 0xffffffff
+-
+- /* Convert a DOS colour number to an RGB palette entry.
+- * Mappings from X11 rgb/txt file.
+- */
+- static int
+- map_colour(dos)
+- int dos; /* Standard DOS colour number. */
+- {
+- switch (dos)
+- {
+- case 0: return 0; /* Black */
+- case 1: return rgb(0,0,139); /* DarkBlue */
+- case 2: return rgb(0,100,0); /* DarkGreen */
+- case 3: return rgb(0,139,139); /* DarkCyan */
+- case 4: return rgb(139,0,0); /* DarkRed */
+- case 5: return rgb(139,0,139); /* DarkMagenta */
+- case 6: return rgb(165,42,42); /* Brown, DarkYellow */
+- case 7: return rgb(211,211,211); /* LightGray, LightGrey, Gray, Grey */
+- case 8: return rgb(169,169,169); /* DarkGray, DarkGrey */
+- case 9: return rgb(173,216,230); /* Blue, LightBlue */
+- case 10: return rgb(144,238,144); /* Green, LightGreen */
+- case 11: return rgb(224,255,255); /* Cyan, LightCyan */
+- case 12: return rgb(255,0,0); /* Red, LightRed */
+- case 13: return rgb(255,0,255); /* Magenta, LightMagenta */
+- case 14: return rgb(255,255,0); /* Yellow, LightYellow */
+- case 15: return rgb(255,255,255); /* White */
+- }
+- return rgb(100,100,100);
+- }
+-
+- static void
+- text_fg(fg)
+- int fg; /* Foregound colour in the form &BBGGRR00 */
+- {
+- xswi(ColourTrans_SetTextColour, fg, 0, 0, 0);
+- }
+-
+- static void
+- text_bg(bg)
+- int bg; /* Backgound colour in the form &BBGGRR00 */
+- {
+- xswi(ColourTrans_SetTextColour, bg, 0, 0, 1 << 7);
+- }
+-
+- #define OUT_NORMAL 0
+- #define OUT_NUMBER 1 /* Reading in a number */
+-
+- void
+- mch_write(s, len)
+- char_u *s;
+- int len;
+- {
+- static int mode = OUT_NORMAL;
+- static int x, y; /* For reading numbers in. */
+-
+- if (!term_console)
+- {
+- /* Maybe we are running Vim remotely - don't interpret chars */
+- while (len--)
+- {
+- char_u c = *s++;
+- swi(OS_WriteC, c);
+- /* We might need to send a CR too. This shouldn't
+- * hurt if we don't need it, should it?
+- */
+- if (c == 10)
+- swi(OS_WriteI + 13);
+- }
+- return;
+- }
+-
+- while (len--)
+- {
+- char_u c = *s++;
+- switch (mode)
+- {
+- case OUT_NUMBER:
+- if (c < '0' || c > '9')
+- {
+- mode = OUT_NORMAL;
+- }
+- else
+- {
+- x = (x * 10) + c - '0';
+- continue;
+- }
+- /* note: no break here! */
+-
+- case OUT_NORMAL:
+- switch (c)
+- {
+- case 1:
+- /* Number (in decimal) follows. */
+- mode = OUT_NUMBER;
+- y = x;
+- x = 0;
+- break;
+- case 2:
+- /* Position cursor. */
+- swi(OS_WriteI + 31);
+- swi(OS_WriteC, x);
+- swi(OS_WriteC, y - ScrollTop);
+- break;
+- case 3:
+- /* Set scroll region. */
+- if (x == Rows -1 && y == 0 && !windowed)
+- {
+- /* Whole screen - remove text window.
+- * This is MUCH faster.
+- */
+- swi(OS_WriteI + 26);
+- }
+- else
+- {
+- /* Create a text window. */
+- swi(OS_WriteI + 28);
+- swi(OS_WriteC, WinLeft);
+- swi(OS_WriteC, WinTop + x);
+- swi(OS_WriteC, WinLeft + Columns - 1);
+- swi(OS_WriteC, WinTop + y);
+- }
+- ScrollTop = y;
+- break;
+- case 4:
+- /* Normal mode. */
+- text_fg(NORMAL_FG);
+- text_bg(NORMAL_BG);
+- break;
+- case 5:
+- /* Reverse mode. */
+- text_fg(NORMAL_BG);
+- text_bg(NORMAL_FG);
+- break;
+- case 10:
+- swi(OS_NewLine);
+- break;
+- case 14:
+- /* Cursor invisible. */
+- swi(OS_WriteN,
+- "\027\001\000\000\000\000\000\000\000\000",
+- 10);
+- break;
+- case 15:
+- /* Cursor visible. */
+- swi(OS_WriteN,
+- "\027\001\002\000\000\000\000\000\000\000",
+- 10);
+- break;
+- case 16:
+- /* Cursor very visible (flash) */
+- swi(OS_WriteN,
+- "\027\001\003\000\000\000\000\000\000\000",
+- 10);
+- case 17:
+- /* Set foreground colour. */
+- text_fg(map_colour(x));
+- break;
+- case 18:
+- /* Set background colour. */
+- text_bg(map_colour(x));
+- break;
+- case 19:
+- /* Scroll text down. */
+- swi(OS_WriteN,
+- "\027\007\000\002\000\000\000\000\000\000",
+- 10);
+- break;
+- default:
+- swi(OS_WriteC, c);
+- }
+- continue;
+-
+- default:
+- printf("[output error]");
+- mode = OUT_NORMAL;
+- }
+- }
+- }
+-
+- /*
+- * mch_inchar(): low level input funcion.
+- * Get a characters from the keyboard.
+- * Return the number of characters that are available.
+- * If wtime == 0 do not wait for characters.
+- * If wtime == n wait n msecs for characters.
+- * If wtime == -1 wait forever for characters.
+- *
+- * TODO: call convert_input() for 'fileencoding' to 'encoding' conversion.
+- */
+- int
+- mch_inchar(buf, maxlen, wtime, tb_change_cnt)
+- char_u *buf;
+- int maxlen;
+- long wtime;
+- int tb_change_cnt;
+- {
+- int got=0;
+- unsigned int start_time = clock();
+-
+- if (ro_line_mode)
+- {
+- /* We're probably in Ex mode - get whole lines at a time. */
+-
+- static char_u line_buffer[256];
+- static int remaining_chars = 0;
+- static int buf_pos = 0;
+-
+- /* Do we need to fetch another line? */
+- if (remaining_chars == 0)
+- {
+- int old_esc_state;
+- swi(OS_Byte, 200, 1, 0xfe);
+- old_esc_state = r1;
+-
+- buf_pos = 0;
+- if (xswi(OS_ReadLine, line_buffer, 255, 0, 255) & (c_flag | v_flag))
+- {
+- got_int = TRUE; /* ESC pressed */
+- r1 = 0;
+- }
+- line_buffer[r1] = 13;
+- remaining_chars = r1 + 1; /* Count CR as part of input */
+-
+- swi(OS_Byte, 200, old_esc_state, 0);
+- }
+-
+- /* Can we send the rest of the buffer back in one go? */
+- if (remaining_chars <= maxlen)
+- {
+- int got = remaining_chars;
+-
+- memcpy(buf, line_buffer + buf_pos, got);
+- remaining_chars = 0;
+- return got;
+- }
+-
+- /* Send as much as we can */
+- memcpy(buf, line_buffer + buf_pos, maxlen);
+- buf_pos += maxlen;
+- remaining_chars -= maxlen;
+-
+- return maxlen;
+- }
+-
+- if (!term_console)
+- {
+- /* Use OS_ReadC for all input.
+- * Avoids problems with remote access getting interference from
+- * the keyboard.
+- */
+- if (wtime == 0)
+- return 0; /* Ignore quick key checks */
+-
+- if (xswi(OS_ReadC) & c_flag)
+- {
+- got_int = TRUE; /* ESC pressed - can this happen? */
+- swi(OS_Byte, 124); /* Clear Escape state */
+- r0 = 0x1b; /* It *might* not have been Escape! */
+- }
+- buf[0] = r0;
+- return 1;
+- }
+-
+- /*
+- * OK, here's the plan:
+- *
+- * 1) Wait until wtime expires or we get a key
+- * 2) Get keys until the keyboard buffer is empty or buf is full
+- */
+-
+- while (xswi(OS_Byte,145,0) & c_flag)
+- {
+- /* Nothing at all in the keyboard buffer.
+- * Has our time expired yet?
+- */
+- if ( (wtime != -1) && (clock() - start_time) >= wtime )
+- return 0; /* Nothing read - giving up */
+- }
+-
+- /* We've got one char (in r2) - are there any more? */
+-
+- while (got < maxlen)
+- {
+- buf[got++] = r2;
+-
+- if (xswi(OS_Byte,145,0) & c_flag)
+- return got; /* Keyboard buffer empty */
+- }
+- return got; /* buf is full */
+- }
+-
+- /*
+- * return non-zero if a character is available
+- */
+- int
+- mch_char_avail()
+- {
+- if (!term_console)
+- return 0; /* Can't tell */
+- if (xswi(OS_Byte, 152, 0) & c_flag)
+- return 0;
+- return 1;
+- }
+-
+- /* Find out how much free memory we have.
+- * I don't know how to work this out exactly but, since we can claim
+- * more memory from the OS, let's just report the free pool size.
+- * Dynamic area 6 doesn't exist pre 3.6 according to StrongHelp, so
+- * we'll use Wimp_SlotSize. If that fails (outside the desktop?)
+- * then just return a big number and hope.
+- */
+- long_u
+- mch_avail_mem(special)
+- int special;
+- {
+- if (xswi(Wimp_SlotSize, -1, -1) & v_flag)
+- return 0x7fffffff;
+- return r2;
+- }
+-
+- void
+- mch_delay(msec, ignoreinput)
+- long msec;
+- int ignoreinput;
+- {
+- int start_time, time_now;
+- int csec = msec / 10;
+-
+- swi(OS_ReadMonotonicTime);
+- start_time = r0;
+-
+- for (;;)
+- {
+- swi(OS_ReadMonotonicTime);
+- time_now = r0;
+- if (time_now - start_time > csec)
+- return;
+- #ifdef FEAT_GUI
+- /* In the GUI, allow other programs to run while waiting. */
+- if (gui.in_use)
+- gui_mch_wait_for_chars(start_time + csec);
+- #endif
+- }
+- }
+-
+- /*
+- * If the machine has job control, use it to suspend the program,
+- * otherwise fake it by starting a new shell.
+- */
+- void
+- mch_suspend()
+- {
+- suspend_shell();
+- }
+-
+- void
+- mch_init()
+- {
+- /*
+- * Read window size first. Calls to mch_get_shellsize() will
+- * simply return these values in future so that setting the
+- * text window (used for scrolling) won't give strange results.
+- */
+-
+- int buf[7] = {132, 135, 256, 257, 1, 2, -1};
+-
+- /* Command windows are no longer forced open, since if we are
+- * in the desktop then we'll use the GUI version.
+- * Opening a command window here messes up the GUI version startup
+- */
+- #ifndef FEAT_GUI
+- swi(OS_WriteI);
+- #endif
+- swi(OS_ReadVduVariables, buf, buf);
+- WinLeft = buf[0];
+- WinTop = buf[1];
+- Columns = buf[2];
+- Rows = buf[3] + 1; /* Seems to be one off (VduVars wrong?) */
+- ScrollTop = 0;
+-
+- /* Are we running in a textwindow? */
+- if (Rows == buf[5] + 1 && Columns == buf[4] + 1)
+- windowed = 0;
+- else
+- windowed = 1;
+-
+- /* Choose a nice colour scheme. */
+- text_fg(NORMAL_FG);
+- text_bg(NORMAL_BG);
+- }
+-
+- /*
+- * Check_win checks whether we have an interactive stdout.
+- */
+- /* ARGSUSED */
+- int
+- mch_check_win(argc, argv)
+- int argc;
+- char **argv;
+- {
+- return OK;
+- }
+-
+- /*
+- * Return TRUE if the input comes from a terminal, FALSE otherwise.
+- */
+- int
+- mch_input_isatty()
+- {
+- if (xswi(OS_ChangeRedirection, -1, -1) & v_flag)
+- return TRUE; /* Error - TRUE is probably correct though */
+- if (r0 == 0)
+- return TRUE;
+- return FALSE;
+- }
+-
+- #ifdef FEAT_TITLE
+- int
+- mch_can_restore_title()
+- {
+- return FALSE;
+- }
+-
+- int
+- mch_can_restore_icon()
+- {
+- return FALSE;
+- }
+-
+-
+- /*
+- * Set the window title and icon.
+- */
+- void
+- mch_settitle(title, icon)
+- char_u *title;
+- char_u *icon;
+- {
+- if (title == NULL)
+- title = (char_u *) "<untitled>";
+- #ifdef FEAT_GUI
+- if (gui.in_use && strcmp(title, gui.window_title))
+- {
+- int length;
+- length = strlen(title);
+- if (length >= gui.window_title_size)
+- length = gui.window_title_size - 1;
+- strncpy(gui.window_title, title, length);
+- gui.window_title[length] = 0;
+- ro_redraw_title(gui.window_handle);
+- }
+- #endif
+- return;
+- }
+-
+- /*
+- * Restore the window/icon title.
+- * "which" is one of:
+- * 1 only restore title
+- * 2 only restore icon
+- * 3 restore title and icon
+- */
+- void
+- mch_restore_title(which)
+- int which;
+- {
+- return;
+- }
+- #endif
+-
+- /*
+- * Insert user name in s[len].
+- * Return OK if a name found.
+- */
+- int
+- mch_get_user_name(s, len)
+- char_u *s;
+- int len;
+- {
+- /* RISC OS doesn't support user names. */
+- *s = NUL;
+- return FAIL;
+- }
+-
+- /*
+- * Insert host name in s[len].
+- */
+-
+- void
+- mch_get_host_name(s, len)
+- char_u *s;
+- int len;
+- {
+- if (xswi(OS_ReadVarVal, "Machine$Name", s, len, 0, 3) & v_flag)
+- {
+- /* Variable does not exist (normal operation) */
+- vim_strncpy(s, "(unknown)", len - 1);
+- }
+- }
+-
+- /*
+- * return process ID
+- */
+- long
+- mch_get_pid()
+- {
+- if (xswi(Wimp_ReadSysInfo, 5) & v_flag)
+- return 0;
+- return r0;
+- }
+-
+- /*
+- * Get name of current directory into buffer 'buf' of length 'len' bytes.
+- * Return OK for success, FAIL for failure.
+- */
+- int
+- mch_dirname(buf, len)
+- char_u *buf;
+- int len;
+- {
+- if (xswi(OS_FSControl, 37, "@", buf, 0, 0, len) & v_flag)
+- return FAIL;
+- return OK;
+- }
+-
+- /*
+- * Get absolute file name into buffer 'buf' of length 'len' bytes.
+- *
+- * return FAIL for failure, OK for success
+- */
+- int
+- mch_FullName(fname, buf, len, force)
+- char_u *fname, *buf;
+- int len;
+- int force; /* Also expand when already absolute path name.
+- * Not used under RISC OS.
+- */
+- {
+- if (xswi(OS_FSControl, 37, fname, buf, 0, 0, len) & v_flag)
+- return FAIL;
+- return OK;
+- }
+-
+- /*
+- * Return TRUE if "fname" does not depend on the current directory.
+- */
+- int
+- mch_isFullName(fname)
+- char_u *fname;
+- {
+- if (strstr(fname, "::") && strstr(fname,".$."))
+- return TRUE;
+- return FALSE;
+- }
+-
+- /*
+- * Get file permissions for 'name'.
+- * Returns -1 when it doesn't exist.
+- */
+- long
+- mch_getperm(name)
+- char_u *name;
+- {
+- struct stat statb;
+-
+- if (stat((char *)name, &statb))
+- return -1;
+- return statb.st_mode;
+- }
+-
+- /*
+- * set file permission for 'name' to 'perm'
+- *
+- * return FAIL for failure, OK otherwise
+- */
+- int
+- mch_setperm(name, perm)
+- char_u *name;
+- long perm;
+- {
+- return (chmod((char *)name, (mode_t)perm) == 0 ? OK : FAIL);
+- }
+-
+- /*
+- * Set hidden flag for "name".
+- */
+- /* ARGSUSED */
+- void
+- mch_hide(name)
+- char_u *name;
+- {
+- /* can't hide a file */
+- }
+-
+- /*
+- * return TRUE if "name" is a directory
+- * return FALSE if "name" is not a directory
+- * return FALSE for error
+- */
+- int
+- mch_isdir(name)
+- char_u *name;
+- {
+- if (xswi(OS_File, 17, name) & v_flag)
+- return FALSE;
+- if (r0 == 2 || r0 == 3)
+- return TRUE; /* Count image files as directories. */
+- return FALSE;
+- }
+-
+- /*
+- * Return 1 if "name" can be executed, 0 if not.
+- * Return -1 if unknown. Requires which to work.
+- */
+- int
+- mch_can_exe(name)
+- char_u *name;
+- {
+- char_u *buf;
+- char_u *p;
+- int retval;
+-
+- buf = alloc((unsigned)STRLEN(name) + 7);
+- if (buf == NULL)
+- return -1;
+- sprintf((char *)buf, "which %s", name);
+- p = get_cmd_output(buf, NULL, SHELL_SILENT);
+- vim_free(buf);
+- if (p == NULL)
+- return -1;
+- /* result can be: "name: Command not found" */
+- retval = (*p != NUL && strstr((char *)p, "not found") == NULL);
+- vim_free(p);
+- return retval;
+- }
+-
+- /*
+- * Check what "name" is:
+- * NODE_NORMAL: file or directory (or doesn't exist)
+- * NODE_WRITABLE: writable device, socket, fifo, etc.
+- * NODE_OTHER: non-writable things
+- */
+- int
+- mch_nodetype(name)
+- char_u *name;
+- {
+- /* TODO */
+- return NODE_NORMAL;
+- }
+-
+- void
+- mch_early_init()
+- {
+- /* Turn off all the horrible filename munging in UnixLib. */
+- int __riscosify_control = __RISCOSIFY_NO_PROCESS;
+- }
+-
+- void
+- mch_exit(r)
+- int r;
+- {
+- settmode(TMODE_COOK);
+- exiting = TRUE;
+- out_flush();
+- ml_close_all(TRUE); /* remove all memfiles */
+-
+- #ifdef FEAT_GUI
+- if (gui.in_use)
+- gui_exit(r);
+- #endif
+- swi(OS_NewLine);
+- if (old_escape_state != -1)
+- swi(OS_Byte, 229, old_escape_state, 0);
+- if (old_cursor_state != -1)
+- swi(OS_Byte, 4, old_cursor_state);
+- exit(r);
+- }
+-
+- void
+- mch_settmode(tmode)
+- int tmode; /* TMODE_RAW or TMODE_COOK */
+- {
+- if (tmode == TMODE_COOK)
+- {
+- ro_line_mode = TRUE;
+- return;
+- }
+-
+- ro_line_mode = FALSE;
+-
+- if (term_console)
+- {
+- /* Block cursor. */
+- swi(OS_WriteN,
+- "\027\000\012\000\000\000\000\000\000\000",
+- 10);
+-
+- /* Disable the standard cursor key actions. */
+- swi(OS_Byte, 4, 1);
+- if (old_cursor_state == -1)
+- old_cursor_state = r1;
+- }
+-
+- /* Stop Escape from quitting Vim! */
+- swi(OS_Byte, 229, 1, 0);
+- if (old_escape_state == -1)
+- old_escape_state = r1;
+- }
+-
+- /*
+- * set mouse clicks on or off (only works for xterms)
+- */
+- void
+- mch_setmouse(on)
+- int on;
+- {
+- }
+-
+- /*
+- * set screen mode, always fails.
+- */
+- /* ARGSUSED */
+- int
+- mch_screenmode(arg)
+- char_u *arg;
+- {
+- EMSG(_(e_screenmode));
+- return FAIL;
+- }
+-
+- /*
+- * Try to get the current window size.
+- * Return OK when size could be determined, FAIL otherwise.
+- * Simply return results stored by mch_init() if we are the
+- * machine's console. If not, we don't know how big the screen is.
+- */
+- int
+- mch_get_shellsize()
+- {
+- /* if size changed: screenalloc will allocate new screen buffers */
+- return term_console ? OK : FAIL;
+- }
+-
+- /*
+- * Can't change the size.
+- * Assume the user knows what he's doing and use the new values.
+- */
+- void
+- mch_set_shellsize()
+- {
+- /* Assume the user knows what he's doing and use the new values. */
+- }
+-
+- /*
+- * Rows and/or Columns has changed.
+- */
+- void
+- mch_new_shellsize()
+- {
+- /* Nothing to do. */
+- }
+-
+- int
+- mch_call_shell(cmd, options)
+- char_u *cmd;
+- int options; /* SHELL_*, see vim.h */
+- {
+- int retval;
+- int tmode = cur_tmode;
+-
+- if (cmd == NULL)
+- cmd = (char_u *) "GOS";
+-
+- #ifdef FEAT_GUI
+- if (gui.in_use)
+- return gui_mch_call_shell(cmd, options);
+- #endif
+- if (options & SHELL_COOKED)
+- settmode(TMODE_COOK); /* set to normal mode */
+- MSG_PUTS("\n");
+-
+- /* I don't even want to think about what UnixLib must
+- * be doing to allow this to work...
+- */
+- retval = system(cmd);
+- if (retval && !(options & SHELL_SILENT))
+- EMSG(strerror(EOPSYS)); /* Doesn't seem to set errno? */
+-
+- swi(OS_Byte, 229, 1, 0); /* Re-disable escape */
+- if (tmode == TMODE_RAW)
+- settmode(TMODE_RAW); /* set to raw mode */
+- return retval ? FAIL : OK;
+- }
+-
+- /*
+- * Check for Escape being pressed right now.
+- * [ different if !term_console? ]
+- */
+- void
+- mch_breakcheck()
+- {
+- if (xswi(OS_Byte, 121, 0xf0) & v_flag)
+- return;
+- if (r1 == 0xff)
+- {
+- got_int = TRUE;
+- swi(OS_Byte, 15, 1); /* Flush input buffer */
+- }
+- }
+-
+- /*
+- * Recursively expand one path component into all matching files and/or
+- * directories.
+- * "path" has backslashes before chars that are not to be expanded.
+- * Return the number of matches found.
+- */
+- int
+- mch_expandpath(gap, path, flags)
+- garray_T *gap; /* Grow array for results. */
+- char_u *path;
+- int flags; /* EW_* flags */
+- {
+- int got; /* Number of matches. */
+- char_u *pattern;
+-
+- /* Plan:
+- *
+- * 1) Get first part of path - no wildcards
+- * 2) Get next path element (wildcarded)
+- * 3) Get rest of path
+- *
+- * If (3) is nothing then only the leaf is wildcarded - add to gap
+- * Otherwise call recursively for each path in (2), passing (3)
+- *
+- * This is just the header function.
+- */
+-
+- /* We must be able to modifiy path, so make a copy */
+- pattern = vim_strsave(path);
+- if (pattern == NULL)
+- return 0;
+- got = expand_section(gap, (char_u *)"", pattern, flags);
+- vim_free(pattern);
+- return got;
+- }
+-
+- /*
+- * expand_section(gap, "$.Dir1.Dir2", "ABBA*.myleaf##")
+- *
+- * calls expand_section(gap, "$.Dir1.Dir2.ABBA_Gold", "myleaf##")
+- * and expand_section(gap, "$.Dir1.Dir2.ABBA_Live", "myleaf##")
+- *
+- * If rest is just a leaf then all matches are added to gap.
+- *
+- * Returns number of items added to gap.
+- */
+- int
+- expand_section(gap, root, rest, flags)
+- garray_T *gap;
+- char_u *root; /* Non-wildcarded path to search */
+- char_u *rest; /* Wildcarded remainder of path */
+- int flags; /* Add dirs/files/missing objects. */
+- {
+- static char_u buf[MAXPATHL]; /* Temporary buffer. */
+- char_u dir[MAXPATHL];
+- int start_element = -1; /* Start of wildcarded element */
+- char_u c;
+- int i;
+- int got, dir_pos;
+- int buflen; /* Chars used in buf[] */
+- int colon = 0; /* Dir ends in ':' */
+-
+- buflen = strlen(root);
+- STRNCPY(buf, root, buflen); /* Copy root into buffer. */
+-
+- /*
+- * Find end of nonwildcarded section.
+- * Count ':' as a path sep since Vim:Bug* is a valid pathname.
+- */
+-
+- for (i = 0; c = rest[i]; i++)
+- {
+- if (c == PATHSEP)
+- {
+- start_element = i;
+- colon = 0;
+- }
+- if (c == ':')
+- {
+- start_element = i + 1;
+- colon = 1;
+- }
+- if (c == '#' || c == '*')
+- break;
+- }
+- if (c == 0)
+- start_element = i;
+-
+- /*
+- * start_element +> terminator for non-wildcarded section.
+- * Transfer this bit into buf.
+- */
+- if (buflen + start_element + 4 >= MAXPATHL)
+- return 0; /* Buffer full */
+- if (start_element >= 0)
+- {
+- if (*root && !colon)
+- buf[buflen++] = PATHSEP;
+- strncpy(buf + buflen, rest, start_element);
+- buflen += start_element;
+- }
+- buf[buflen] = 0;
+-
+- /*
+- * Did we reach the end of the string without hitting any wildcards?
+- */
+- if (c == 0)
+- {
+- /* Yes - add combined path to grow array and return. */
+- addfile(gap, buf, flags);
+- return 1;
+- }
+-
+- if (start_element < 0 || !colon)
+- start_element++;
+- rest += start_element;
+-
+- /*
+- * rest does contain wildcards if we get here.
+- *
+- * Now : have we reached the leaf names part yet?
+- * If so, add all matches (files and dirs) to gap.
+- * If not, get next path element and scan all matching directories.
+- */
+-
+- start_element = -1;
+- for (i = 0; rest[i]; i++)
+- {
+- if (rest[i] == '.')
+- {
+- start_element = i;
+- rest[i] = 0; /* Break string here. */
+- break;
+- }
+- }
+-
+- /* If start_element is -1 then we are matching leaf names */
+-
+- r3 = 0; /* Number of objs read. */
+- dir_pos = 0; /* Position through directory. */
+- got = 0; /* Files added so far. */
+- while (dir_pos != -1)
+- {
+- buf[buflen] = 0;
+- if (xswi(OS_GBPB, 9,
+- buf, /* Directory to scan. */
+- buf + buflen + (1 - colon), /* Buffer for result. */
+- 1, /* Number of objects to read. */
+- dir_pos, /* Search position. */
+- MAXPATHL - 2 - buflen, /* Size of result buffer. */
+- rest) /* Wildcarded leafname. */
+- & v_flag)
+- {
+- EMSG(r0 + 4);
+- r4 = -1;
+- }
+- dir_pos = r4; /* r4 corrupted by addfile() */
+- if (r3 > 0)
+- {
+- char_u *path = buf;
+- if (buflen == 0)
+- path++; /* Don't do '.File' */
+- else if (!colon)
+- buf[buflen] = '.'; /* Join path and leaf */
+-
+- /* Path -> full path of object found */
+- if (start_element == -1)
+- {
+- addfile(gap, path, flags);
+- got++;
+- }
+- else
+- {
+- /* Scan into subdirectories and images; ignore files */
+- swi(OS_File, 17, path);
+- if (r0 == 2 || r0 == 3)
+- got += expand_section(gap,
+- path,
+- rest + start_element + 1,
+- flags);
+- }
+- }
+- }
+-
+- /* Restore the dot if we removed it. */
+- if (start_element >= 0)
+- rest[start_element] = '.';
+- return got;
+- }
+-
+- /*
+- * mch_expand_wildcards() - this code does wild-card pattern matching using
+- * the shell. It isn't used under RISC OS.
+- *
+- * return OK for success, FAIL for error (you may lose some memory) and put
+- * an error message in *file.
+- *
+- * num_pat is number of input patterns
+- * pat is array of pointers to input patterns
+- * num_file is pointer to number of matched file names
+- * file is pointer to array of pointers to matched file names
+- */
+- int
+- mch_expand_wildcards(num_pat, pat, num_file, file, flags)
+- int num_pat;
+- char_u **pat;
+- int *num_file;
+- char_u ***file;
+- int flags; /* EW_* flags */
+- {
+- /* This doesn't get called unless SPECIAL_WILDCHAR is defined. */
+- return FAIL;
+- }
+-
+- /*
+- * Return TRUE if "p" contains wildcards which can be expanded by
+- * mch_expandpath().
+- */
+- int
+- mch_has_exp_wildcard(p)
+- char_u *p;
+- {
+- if (vim_strpbrk((char_u *)"*#", p))
+- return TRUE;
+- return FALSE;
+- }
+-
+- /* Return TRUE if "p" contains wildcards. */
+- int
+- mch_has_wildcard(p)
+- char_u *p;
+- {
+- if (vim_strpbrk((char_u *)"*#`", p))
+- return TRUE;
+- return FALSE;
+- }
+-
+- int /* see Unix unlink(2) */
+- mch_remove(file)
+- char_u *file; /* Name of file to delete. */
+- {
+- if (xswi(OS_FSControl, 27, file, 0, 0) & v_flag)
+- return EXIT_FAILURE;
+- return EXIT_SUCCESS;
+- }
+-
+- /* Try to make existing scripts work without modification.
+- * Return a pointer to the new string (freed by caller), or NULL
+- *
+- * Two main cases:
+- * - Absolute : $VIM/syntax/help.vim
+- * - Relative : Adfs::4.$.!Vim.Resources.Syntax/help.vim
+- */
+- char_u *
+- mch_munge_fname(fname)
+- char_u *fname;
+- {
+- char_u c;
+- int len;
+- char_u *retval;
+-
+- retval = fname = vim_strsave(fname);
+- if (fname == NULL)
+- return NULL;
+-
+- if (strncmp(fname, "$VIM/", 5) == 0)
+- {
+- strncpy(fname, "Vim:", 4);
+- for (fname += 5; c = *fname; fname++)
+- {
+- if (c == '.')
+- break;
+- if (c == '/')
+- fname[-1] = '.';
+- else
+- fname[-1] = c;
+- }
+- fname[-1] = '\0';
+- }
+- else
+- {
+- /* Check to see if the file exists without modification. */
+- if (xswi(OS_File, 17, fname) & v_flag)
+- r0 == 0; /* Invalid filename? */
+- if (r0)
+- return retval;
+-
+- len = strlen(fname);
+- if (strcmp(fname + len - 4, ".vim") == 0)
+- {
+- fname[len - 4] = '\0';
+- for (; c = *fname; fname++)
+- {
+- if (c == '/')
+- *fname = '.';
+- }
+- }
+- }
+- return retval;
+- }
+-
+- /* QuickFix reads munged names from the error file.
+- * Correct them.
+- */
+- int
+- ro_buflist_add(old_name)
+- char_u *old_name; /* Name of file found by quickfix */
+- {
+- char_u *fname;
+- char_u *leaf; /* Pointer to start of leaf in old_name */
+- char_u *ptr;
+- char_u c;
+- int retval;
+-
+- if (old_name == NULL)
+- return buflist_add(NULL, 0);
+-
+- /* Copy the name so we can mess around with it. */
+- fname = vim_strsave(old_name);
+- if (fname == NULL)
+- /* Out of memory - can't modify name */
+- return buflist_add(old_name, 0);
+-
+- /* Change `dir/main.c' into `dir.c.main' */
+- leaf = fname;
+- for (ptr = fname; c = *ptr; ptr++)
+- {
+- if (c == '/')
+- {
+- leaf = ptr + 1;
+- *ptr = '.';
+- }
+- else if (c == '.')
+- break;
+- }
+- if (c == '.')
+- {
+- /* Change `main.c' into `c.main'
+- * | |
+- * leaf ptr
+- */
+- ptr += old_name - fname;
+- *ptr = '\0';
+- sprintf(leaf,
+- "%s.%s",
+- ptr + 1,
+- leaf - fname + old_name);
+- }
+-
+- retval = buflist_add(fname, 0);
+- free(fname);
+- return retval;
+- }
+-
+- /* Change the current directory.
+- * Strip trailing dots to make it easier to use with filename completion.
+- * Return 0 for success, -1 for failure.
+- */
+- int
+- mch_chdir(dir)
+- char_u *dir;
+- {
+- int length;
+- int retval;
+- char_u *new_dir;
+-
+- if (p_verbose >= 5)
+- {
+- verbose_enter();
+- smsg((char_u *)"chdir(%s)", dir);
+- verbose_leave();
+- }
+- length = strlen(dir);
+- if (dir[length - 1] != '.')
+- return chdir(dir); /* No trailing dots - nothing to do. */
+- new_dir = vim_strsave(dir);
+- if (new_dir == NULL)
+- return chdir(dir); /* Can't allocate memory. */
+-
+- while (new_dir[--length] == '.')
+- new_dir[length] = '\0';
+-
+- retval = chdir(new_dir);
+- vim_free(new_dir);
+- return retval;
+- }
+-
+- /* Examine the named file, and set the 'osfiletype' option
+- * (in curbuf) to the file's type.
+- */
+- void
+- mch_read_filetype(file)
+- char_u *file;
+- {
+- int type;
+- char_u type_string[9];
+- int i;
+-
+- if (xswi(OS_File, 23, file) & v_flag)
+- type = 0xfff; /* Default to Text */
+- else
+- type = r6;
+-
+- /* Type is the numerical value - see if we have a textual equivalent */
+- swi(OS_FSControl, 18, 0, type);
+- ((int *) type_string)[0] = r2;
+- ((int *) type_string)[1] = r3;
+- type_string[8] = 0;
+- for (i = 0; type_string[i] > ' '; i++)
+- ;
+- type_string[i] = 0;
+-
+- set_string_option_direct("osfiletype", -1, type_string, OPT_FREE, 0);
+- return;
+- }
+-
+- void
+- mch_set_filetype(file, type)
+- char_u *file;
+- char_u *type;
+- {
+- if (xswi(OS_FSControl, 31, type) & v_flag)
+- {
+- EMSG(_("E366: Invalid 'osfiletype' option - using Text"));
+- r2 = 0xfff;
+- }
+-
+- swi(OS_File, 18, file, r2);
+- }
+-
+- /* Return TRUE if the file's type matches 'type'
+- * RISC OS types always start with '&'
+- */
+- int
+- mch_check_filetype(fname, type)
+- char_u *fname;
+- char_u *type;
+- {
+- int value;
+- char *end;
+-
+- if (*type != '&')
+- return FALSE;
+-
+- value = strtol(type + 1, &end, 16);
+- if (*end)
+- return FALSE; /* Invalid type (report error?) */
+-
+- if (xswi(OS_File, 23, fname) & v_flag)
+- return FALSE; /* Invalid filename? */
+-
+- return (r0 && r6 == value);
+- }
+--- 0 ----
+*** ../vim-7.3.186/runtime/doc/os_risc.txt 2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/os_risc.txt 2011-05-10 16:19:25.000000000 +0200
+***************
+*** 1,322 ****
+! *os_risc.txt* For Vim version 7.3. Last change: 2010 Aug 07
+
+
+ VIM REFERENCE MANUAL by Thomas Leonard
+
+
+ *riscos* *RISCOS* *RISC-OS*
+! This file contains the particularities for the RISC OS version of Vim.
+
+- The RISC OS port is a completely new port and is not based on the old "archi"
+- port.
+
+- 1. File locations |riscos-locations|
+- 2. Filename munging |riscos-munging|
+- 3. Command-line use |riscos-commandline|
+- 4. Desktop (GUI) use |riscos-gui|
+- 5. Remote use (telnet) |riscos-remote|
+- 6. Temporary files |riscos-temp-files|
+- 7. Interrupting |riscos-interrupt|
+- 8. Memory usage |riscos-memory|
+- 9. Filetypes |riscos-filetypes|
+- 10. The shell |riscos-shell|
+- 11. Porting new releases |riscos-porting|
+-
+- If I've missed anything, email me and I'll try to fix it. In fact, even if I
+- haven't missed anything then email me anyway to give me some confidence that it
+- actually works!
+-
+- Thomas Leonard <tal197@ecs.soton.ac.uk>
+-
+- [these URLs no longer work...]
+- Port homepage: http://www.ecs.soton.ac.uk/~tal197/
+- or try: http://www.soton.ac.uk/~tal197/
+-
+- ==============================================================================
+- *riscos-locations*
+- 1. File locations
+-
+- The Vim executable and shared resource files are all stored inside the !Vim
+- application directory.
+-
+- When !Vim is first seen by the filer, it aliases the *vi and *ex commands to
+- run the command-line versions of Vim (see |riscos-commandline|).
+-
+- !Vim.Resources and !Vim.Resources2 contain the files from the standard Vim
+- distribution, but modified slightly to work within the limits of ADFS, plus
+- some extra files such as the window templates.
+-
+- User choices are read from "Choices:*" and are saved to "<Choices$Write>.*".
+- If you have the new !Boot structure then these should be set up already. If
+- not, set Choices$Path to a list of directories to search when looking for
+- user configuration files. Set Choices$Write to the directory you want files
+- to be saved into (so your search patterns and marks can be remembered between
+- sessions).
+-
+- ==============================================================================
+- *riscos-munging*
+- 2. Filename munging
+-
+- All pathname munging is disabled by default, so Vim should behave like a
+- normal RISC OS application now. So, if you want to edit "doc/html" then you
+- actually type "*vi doc/html".
+-
+- The only times munging is done is when:
+-
+- - Searching included files from C programs, since these are always munged.
+- See |[I|.
+- Note: make sure you are in the right directory when you use this
+- command (i.e. the one with subdirectories "c" and "h").
+-
+- - Sourcing files using |:so|.
+- Paths starting "$VIM/" are munged like this:
+-
+- $VIM/syntax/help.vim -> Vim:syntax.help
+-
+- Also, files ending in ".vim" have their extensions removed, and slashes
+- replaced with dots.
+-
+- Some tag files and script files may have to be edited to work under this port.
+-
+- ==============================================================================
+- *riscos-commandline*
+- 3. Command-line use
+-
+- To use Vim from the command-line use the "*vi" command (or "*ex" for
+- |Ex-mode|).
+-
+- Type "*vi -h" for a list of options.
+-
+- Running the command-line version of Vim in a large high-color mode may cause
+- the scrolling to be very slow. Either change to a mode with fewer colors or
+- use the GUI version.
+-
+- Also, holding down Ctrl will slow it down even more, and Ctrl-Shift will
+- freeze it, as usual for text programs.
+-
+- ==============================================================================
+- *riscos-gui*
+- 4. Desktop use
+-
+- Limitations:
+-
+- - Left scrollbars don't work properly (right and bottom are fine).
+- - Doesn't increase scroll speed if it gets behind.
+-
+- You can resize the window by dragging the lower-right corner, even though
+- there is no icon shown there.
+-
+- You can use the --rows and --columns arguments to specify the initial size of
+- the Vim window, like this: >
+-
+- *Vi -g --rows 20 --columns 80
+-
+- The global clipboard is supported, so you can select some text and then
+- paste it directly into another application (provided it supports the
+- clipboard too).
+-
+- Clicking Menu now opens a menu like a normal RISC OS program. Hold down Shift
+- when clicking Menu to paste (from the global clipboard).
+-
+- Dragging a file to the window replaces the CURRENT buffer (the one with the
+- cursor, NOT the one you dragged to) with the file.
+-
+- Dragging with Ctrl held down causes a new Vim window to be opened for the
+- file (see |:sp|).
+-
+- Dragging a file in with Shift held down in insert mode inserts the pathname of
+- the file.
+-
+- :browse :w opens a standard RISC OS save box.
+- :browse :e opens a directory viewer.
+-
+- For fonts, you have the choice of the system font, an outline font, the system
+- font via ZapRedraw and any of the Zap fonts via ZapRedraw: >
+-
+- :set guifont=
+- < To use the system font via the VDU drivers. Supports
+- bold and underline.
+- >
+- :set guifont=Corpus.Medium
+- < Use the named outline font. You can use any font, but
+- only monospaced ones like Corpus look right.
+- >
+- :set guifont=Corpus.Medium:w8:h12:b:i
+- < As before, but with size of 8 point by 12 point, and
+- in bold italic.
+- If only one of width and height is given then that
+- value is used for both. If neither is given then 10
+- point is used.
+-
+- Thanks to John Kortink, Vim can use the ZapRedraw module. Start the font name
+- with "!" (or "!!" for double height), like this: >
+-
+- :set guifont=!!
+- < Use the system font, but via ZapRedraw. This gives a
+- faster redraw on StrongARM processors, but you can't
+- get bold or italic text. Double height.
+- >
+- :set guifont=!script
+- < Uses the named Zap font (a directory in VimFont$Path).
+- The redraw is the same speed as for "!!", but you get
+- a nicer looking font.
+- Only the "man+" and "script" fonts are supplied
+- currently, but you can use any of the Zap fonts if
+- they are in VimFont$Path.
+- Vim will try to load font files "0", "B", "I" and "IB"
+- from the named directory. Only "0" (normal style) MUST
+- be present. Link files are not currently supported.
+-
+- Note that when using ZapRedraw the edit bar is drawn in front of the character
+- you are on rather than behind it. Also redraw is incorrect for screen modes
+- with eigen values of 0. If the font includes control characters then you can
+- get Vim to display them by changing the 'isprint' option.
+-
+- If you find the scrolling is too slow on your machine, try experimenting
+- with the 'scrolljump' and 'ttyscroll' options.
+-
+- In particular, StrongARM users may find that: >
+-
+- :set ttyscroll=0
+-
+- makes scrolling faster in high-color modes.
+-
+- =============================================================================
+- *riscos-remote*
+- 5. Remote use (telnet)
+-
+- I have included a built-in termcap entry, but you can edit the termcap file to
+- allow other codes to be used if you want to use Vim from a remote terminal.
+-
+- Although I do not have an internet connection to my Acorn, I have managed to
+- run Vim in a FreeTerm window using the loopback connection.
+-
+- It seems to work pretty well now, using "*vi -T ansi".
+-
+- ==============================================================================
+- *riscos-temp-files*
+- 6. Temporary files
+-
+- If Vim crashes then the swap and backup files (if any) will be in the
+- directories set with the 'directory' and 'bdir' options. By default the swap
+- files are in <Wimp$ScrapDir> (i.e. inside !Scrap) and backups are in the
+- directory you were saving to. Vim will allow you to try and recover the file
+- when you next try to edit it.
+-
+- To see a list of swap files, press <F12> and type "*vi -r".
+-
+- Vim no longer brings up ATTENTION warnings if you try to edit two files with
+- the same name in different directories.
+-
+- However, it also no longer warns if you try to edit the same file twice (with
+- two copies of Vim), though you will still be warned when you save that the
+- datestamp has changed.
+-
+- ==============================================================================
+- *riscos-interrupt*
+- 7. Interrupting
+-
+- To break out of a looping macro, or similar, hold down Escape in the
+- command-line version, or press CTRL-C in the GUI version.
+-
+- ==============================================================================
+- *riscos-memory*
+- 8. Memory usage
+-
+- Vim will use dynamic areas on RISC OS 3.5 or later. If you can use them on
+- older machines then edit the !RunTxt and GVim files. I don't know what UnixLib
+- does by default on these machines so I'm playing safe.
+-
+- It doesn't work at all well without dynamic areas, since it can't change its
+- memory allocation once running. Hence you should edit "!Vim.GVim" and
+- "!Vim.!RunTxt" to choose the best size for you. You probably need at least
+- about 1400K.
+-
+- ==============================================================================
+- *riscos-filetypes*
+- 9. Filetypes
+-
+- You can now specify that autocommands are only executed for files of certain
+- types. The filetype is given in the form &xxx, when xxx is the filetype.
+-
+- Filetypes must be specified by number (e.g. &fff for Text).
+-
+- The system has changed from version 5.3. The new sequence of events is:
+-
+- - A file is loaded. |'osfiletype'| is set to the RISC OS filetype.
+- - Based on the filetype and pathname, Vim will try to set |'filetype'| to the
+- Vim-type of the file.
+- - Setting this option may load syntax files and perform other actions.
+- - Saving the file will give it a filetype of |'osfiletype'|.
+-
+- Some examples may make this clearer:
+-
+- Kind of file loaded osfiletype filetype ~
+- C code "c.hellow" Text (&fff) C
+- LaTeX document LaTeX (&2a8) TeX
+- Draw document DrawFile (&aff) (not changed)
+-
+- ==============================================================================
+- *riscos-shell*
+- 10. The shell
+-
+- - Bangs (!s) are only replaced if they are followed by a space or end-of-line,
+- since many pathnames contain them.
+-
+- - You can prefix the command with "~", which stops any output from being
+- displayed. This also means that you don't have to press <Enter> afterwards,
+- and stops the screen from being redrawn. {only in the GUI version}
+-
+- ==============================================================================
+- *riscos-porting*
+- 11. Porting new releases to RISC OS
+-
+- Downloading everything you need:
+-
+- - Get the latest source distribution (see www.vim.org)
+- - Get the runtime environment files (e.g. these help files)
+- - Get the RISC OS binary distribution (if possible)
+-
+-
+- Unarchiving:
+-
+- - Create a raFS disk and put the archives on it
+- - Un-gzip them
+- - Un-tar them (*tar xELf 50 archive/tar)
+-
+-
+- Recompiling the sources:
+-
+- - Create c, s, and h directories.
+- - Put all the header files in "h". \
+- - Put all the C files in "c". | And lose the extensions
+- - Put the assembler file ("swis/s") in "s". /
+- - Rename all the files in "proto" to "h", like this:
+- raFS::VimSrc.source.proto.file/pro
+- becomes
+- raFS::VimSrc.source.h.file_pro
+- - In the files "h.proto" and "c.termlib", search and replace
+- .pro"
+- with
+- _pro.h"
+- - Create a simple Makefile if desired and do "*make -k".
+- Use "CC = gcc -DRISCOS -DUSE_GUI -O2 -x c" in the Makefile.
+- - Save the binary as !Vim.Vim in the binary distribution.
+-
+-
+- Updating the run-time environment:
+-
+- - Replace old or missing files inside !Vim.Resources with the
+- new files.
+- - Remove files in "doc" not ending in "/txt", except for "tags".
+- - Lose the extensions from the files in "doc".
+- - Edit the "doc.tags" file. Remove extensions from the second column: >
+- :%s/^\(.[^\t]*\t.*\)\.txt\t/\1\t/
+- - Remove extensions from the syntax files. Split them into two directories
+- to avoid the 77 entry limit on old ADFS filesystems.
+- - Edit "Vim:FileType" to match "*.c.*" as well as "*/c" and so on.
+- Add filetype checking too.
+- - Edit "Vim:Menu" and remove all the keys from the menus: >
+- :%s/<Tab>[^ \t]*//
+- <
+ vim:tw=78:ts=8:ft=help:norl:
+--- 1,12 ----
+! *os_risc.txt* For Vim version 7.3. Last change: 2011 May 10
+
+
+ VIM REFERENCE MANUAL by Thomas Leonard
+
+
+ *riscos* *RISCOS* *RISC-OS*
+! The RISC OS support has been removed from Vim with patch 7.3.187.
+! If you would like to use Vim on RISC OS get the files from before that patch.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
+*** ../vim-7.3.186/src/version.c 2011-05-10 16:12:40.000000000 +0200
+--- src/version.c 2011-05-10 16:37:20.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 187,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+81. At social functions you introduce your husband as "my domain server."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.188
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.188
+Problem: More RISC OS files to remove.
+Solution: Remove them. Update the file list.
+Files: src/proto/gui_riscos.pro, src/proto/os_riscos.pro, Filelist
+
+
+*** ../vim-7.3.187/src/proto/gui_riscos.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_riscos.pro 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,66 ****
+- /* Prototypes for gui_riscos.c
+- * Based on gui_x11_pro.h (10 March 2002 version)
+- */
+- void gui_mch_prepare __ARGS((int *argc, char **argv));
+- int gui_mch_init_check __ARGS((void));
+- int gui_mch_init __ARGS((void));
+- void gui_mch_uninit __ARGS((void));
+- void gui_mch_new_colors __ARGS((void));
+- int gui_mch_open __ARGS((void));
+- void gui_init_tooltip_font __ARGS((void));
+- void gui_init_menu_font __ARGS((void));void gui_mch_exit __ARGS((int rc));
+- int gui_mch_get_winpos __ARGS((int *x, int *y));
+- void gui_mch_set_winpos __ARGS((int x, int y));
+- void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+- void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+- int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
+- GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
+- int gui_mch_adjust_charheight __ARGS((void));
+- void gui_mch_set_font __ARGS((GuiFont font));
+- void gui_mch_set_fontset __ARGS((GuiFontset fontset));
+- void gui_mch_free_font __ARGS((GuiFont font));
+- void gui_mch_free_fontset __ARGS((GuiFontset fontset));
+- GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
+- guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
+- void gui_mch_set_fg_color __ARGS((guicolor_T color));
+- void gui_mch_set_bg_color __ARGS((guicolor_T color));
+- void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
+- int gui_mch_haskey __ARGS((char_u *name));
+- void gui_mch_beep __ARGS((void));
+- void gui_mch_flash __ARGS((int msec));
+- void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
+- void gui_mch_iconify __ARGS((void));
+- void gui_mch_set_foreground __ARGS((void));
+- void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
+- void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
+- void gui_mch_update __ARGS((void));
+- int gui_mch_wait_for_chars __ARGS((long wtime));
+- void gui_mch_flush __ARGS((void));
+- void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
+- void gui_mch_clear_all __ARGS((void));
+- void gui_mch_delete_lines __ARGS((int row, int num_lines));
+- void gui_mch_insert_lines __ARGS((int row, int num_lines));
+- void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+- int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+- void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+- void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+- void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+- void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
+- void gui_mch_draw_menubar __ARGS((void));
+- void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+- void gui_mch_stop_blink __ARGS((void));
+- void gui_mch_start_blink __ARGS((void));
+- void process_event __ARGS((int event, int *block));
+- void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+- long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
+- void gui_mch_getmouse __ARGS((int *x, int *y));
+- void gui_mch_setmouse __ARGS((int x, int y));
+- void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+- void gui_mch_destroy_sign __ARGS((XImage *sign));
+- void gui_mch_mousehide __ARGS((int hide));
+- void mch_set_mouse_shape __ARGS((int shape));
+- void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
+-
+- void ro_redraw_title __ARGS((int window));
+- int ro_ok_to_quit __ARGS((void));
+- /* vim: set ft=c : */
+--- 0 ----
+*** ../vim-7.3.187/src/proto/os_riscos.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/os_riscos.pro 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,49 ****
+- /* os_riscos.c */
+- void mch_write __ARGS((char_u *s, int len));
+- int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
+- int mch_char_avail __ARGS((void));
+- long_u mch_avail_mem __ARGS((int special));
+- void mch_delay __ARGS((long msec, int ignoreinput));
+- void mch_suspend __ARGS((void));
+- void mch_init __ARGS((void));
+- int mch_check_win __ARGS((int argc, char **argv));
+- int mch_input_isatty __ARGS((void));
+- int mch_can_restore_title __ARGS((void));
+- int mch_can_restore_icon __ARGS((void));
+- void mch_settitle __ARGS((char_u *title, char_u *icon));
+- void mch_restore_title __ARGS((int which));
+- int mch_get_user_name __ARGS((char_u *s, int len));
+- void mch_get_host_name __ARGS((char_u *s, int len));
+- long mch_get_pid __ARGS((void));
+- int mch_dirname __ARGS((char_u *buf, int len));
+- int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
+- int mch_isFullName __ARGS((char_u *fname));
+- long mch_getperm __ARGS((char_u *name));
+- int mch_setperm __ARGS((char_u *name, long perm));
+- void mch_hide __ARGS((char_u *name));
+- int mch_isdir __ARGS((char_u *name));
+- int mch_can_exe __ARGS((char_u *name));
+- int mch_nodetype __ARGS((char_u *name));
+- void mch_early_init __ARGS((void));
+- void mch_exit __ARGS((int r));
+- void mch_settmode __ARGS((int tmode));
+- void mch_setmouse __ARGS((int on));
+- int mch_screenmode __ARGS((char_u *arg));
+- int mch_get_shellsize __ARGS((void));
+- void mch_set_shellsize __ARGS((void));
+- void mch_new_shellsize __ARGS((void));
+- int mch_call_shell __ARGS((char_u *cmd, int options));
+- void mch_breakcheck __ARGS((void));
+- int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+- int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
+- int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+- int mch_has_exp_wildcard __ARGS((char_u *p));
+- int mch_has_wildcard __ARGS((char_u *p));
+- int mch_remove __ARGS((char_u *file));
+- char_u *mch_munge_fname __ARGS((char_u *fname));
+- int ro_buflist_add __ARGS((char_u *old_name));
+- int mch_chdir __ARGS((char_u *dir));
+- void mch_read_filetype __ARGS((char_u *file));
+- void mch_set_filetype __ARGS((char_u *file, char_u *type));
+- int mch_check_filetype __ARGS((char_u *fname, char_u *type));
+- /* vim: set ft=c : */
+--- 0 ----
+*** ../vim-7.3.187/Filelist 2011-03-22 18:10:34.000000000 +0100
+--- Filelist 2011-05-10 17:19:21.000000000 +0200
+***************
+*** 428,435 ****
+ README_os390.txt \
+ src/Make_mint.mak \
+ src/Make_ro.mak \
+- src/gui_riscos.c \
+- src/gui_riscos.h \
+ src/if_sniff.c \
+ src/infplist.xml \
+ src/link.390 \
+--- 428,433 ----
+***************
+*** 437,446 ****
+ src/os_beos.h \
+ src/os_beos.rsrc \
+ src/os_mint.h \
+- src/os_riscos.c \
+- src/os_riscos.h \
+- src/proto/gui_riscos.pro \
+- src/proto/os_riscos.pro \
+ src/os_vms_fix.com \
+ src/toolbar.phi \
+
+--- 435,440 ----
+*** ../vim-7.3.187/src/version.c 2011-05-10 16:41:13.000000000 +0200
+--- src/version.c 2011-05-10 17:20:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 188,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+83. Batteries in the TV remote now last for months.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.189
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.189 (after 7.3.186)
+Problem: Can't build without +clipboard feature. (Christian Ebert)
+Solution: Add the missing #ifdef.
+Files: src/normal.c
+
+
+*** ../vim-7.3.188/src/normal.c 2011-05-10 16:12:40.000000000 +0200
+--- src/normal.c 2011-05-10 17:25:26.000000000 +0200
+***************
+*** 1204,1212 ****
+--- 1204,1215 ----
+ #ifdef FEAT_EVAL
+ {
+ int regname = 0;
++
+ /* Adjust the register according to 'clipboard', so that when
+ * "unnamed" is present it becomes '*' or '+' instead of '"'. */
++ # ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(®name);
++ # endif
+ set_reg_var(regname);
+ }
+ #endif
+*** ../vim-7.3.188/src/version.c 2011-05-10 17:21:34.000000000 +0200
+--- src/version.c 2011-05-10 17:29:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 189,
+ /**/
+
+--
+If your nose runs, and your feet smell, you might be upside down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.190
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.190
+Problem: When there is a "containedin" syntax argument highlighting may be
+ wrong. (Radek)
+Solution: Reset current_next_list. (Ben Schmidt)
+Files: src/syntax.c
+
+
+*** ../vim-7.3.189/src/syntax.c 2011-04-11 16:56:29.000000000 +0200
+--- src/syntax.c 2011-05-19 12:02:43.000000000 +0200
+***************
+*** 2566,2571 ****
+--- 2566,2574 ----
+ #endif
+ update_si_attr(current_state.ga_len - 1);
+
++ /* nextgroup= should not match in the end pattern */
++ current_next_list = NULL;
++
+ /* what matches next may be different now, clear it */
+ next_match_idx = 0;
+ next_match_col = MAXCOL;
+*** ../vim-7.3.189/src/version.c 2011-05-10 17:29:28.000000000 +0200
+--- src/version.c 2011-05-19 12:13:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 190,
+ /**/
+
+--
+From "know your smileys":
+ :'-D Laughing so much that they're crying
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.191
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.191
+Problem: Still some RISC OS stuff to remove.
+Solution: Remove files and lines. (Hong Xu)
+ Remove the 'osfiletype' option code.
+Files: README_extra.txt, src/Make_ro.mak, src/INSTALL, src/Makefile,
+ src/buffer.c, src/eval.c, src/feature.h, src/option.c,
+ src/option.h, src/structs.h, src/version.c, src/pty.c, Filelist
+
+
+*** ../vim-7.3.190/README_extra.txt 2010-08-15 21:57:32.000000000 +0200
+--- README_extra.txt 2011-05-19 12:35:16.000000000 +0200
+***************
+*** 13,21 ****
+
+ src/os_amiga.* Files for the Amiga port.
+
+- src/gui_riscos.*
+- src/os_riscos.* Files for the RISC OS port.
+-
+ src/gui_beos.*
+ src/os_beos.* Files for the BeOS port.
+
+--- 13,18 ----
+*** ../vim-7.3.190/src/Make_ro.mak 2010-08-15 21:57:27.000000000 +0200
+--- src/Make_ro.mak 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,135 ****
+- #
+- # Makefile for Vim on RISC OS - Andy Wingate
+- #
+-
+- GCC = gcc -mthrowback
+- CFLAGS = -DRISCOS -DFEAT_GUI
+- CC = $(GCC) $(CFLAGS) -O2
+- # -DUP_BC_PC_EXTERN for term.c needed as BC defined in termlib.c and term.c
+-
+- TERMFLAG = -DUP_BC_PC_EXTERN
+-
+- ASMFLAGS = -throwback -objasm -gcc
+-
+- OBJS = o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2 \
+- o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar \
+- o.hardcopy o.hashtab o.main o.mark o.mbyte \
+- o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move \
+- o.normal o.ops o.option o.popupmnu o.quickfix o.regexp o.screen \
+- o.search \
+- o.spell o.syntax o.tag o.term o.termlib o.ui o.undo o.version \
+- o.window o.os_riscos o.swis o.gui o.gui_riscos
+-
+- Vim: $(OBJS)
+- $(GCC) -o Vim $(OBJS)
+-
+- install: Vim
+- squeeze -v Vim @.!Vim.Vim
+-
+- clean:
+- create o.!fake! 0
+- wipe o.* ~cf
+- remove Vim
+-
+- o.swis: s.swis
+- as $(ASMFLAGS) -o o.swis s.swis
+-
+- # Rules for object files
+-
+- o.%: c.%
+- $(CC) -c $< -o $@
+-
+- o.buffer: c.buffer
+-
+- o.charset: c.charset
+-
+- o.digraph: c.digraph
+-
+- o.diff: c.diff
+-
+- o.edit: c.edit
+-
+- o.eval: c.eval
+-
+- o.ex_cmds: c.ex_cmds
+-
+- o.ex_cmds2: c.ex_cmds2
+-
+- o.ex_docmd: c.ex_docmd
+-
+- o.ex_eval: c.ex_eval
+-
+- o.ex_getln: c.ex_getln
+-
+- o.fileio: c.fileio
+-
+- o.fold: c.fold
+-
+- o.getchar: c.getchar
+-
+- o.hardcopy: c.hardcopy
+-
+- o.hashtab: c.hashtab
+-
+- o.gui: c.gui
+-
+- o.gui_riscos: c.gui_riscos
+-
+- o.main: c.main
+-
+- o.mark: c.mark
+-
+- o.mbyte: c.mbyte
+-
+- o.memfile: c.memfile
+-
+- o.memline: c.memline
+-
+- o.menu: c.menu
+-
+- o.message: c.message
+-
+- o.misc1: c.misc1
+-
+- o.misc2: c.misc2
+-
+- o.move: c.move
+-
+- o.normal: c.normal
+-
+- o.ops: c.ops
+-
+- o.option: c.option
+-
+- o.os_riscos: c.os_riscos
+-
+- o.pty: c.pty
+-
+- o.popupmnu: c.popupmnu
+-
+- o.quickfix: c.quickfix
+-
+- o.regexp: c.regexp
+-
+- o.screen: c.screen
+-
+- o.search: c.search
+-
+- o.spell: c.spell
+-
+- o.syntax: c.syntax
+-
+- o.tag: c.tag
+-
+- o.term: c.term
+- $(CC) $(TERMFLAG) -c c.term -o o.term
+-
+- o.termlib: c.termlib
+-
+- o.ui: c.ui
+-
+- o.undo: c.undo
+-
+- o.version: c.version
+-
+- o.window: c.window
+--- 0 ----
+*** ../vim-7.3.190/src/INSTALL 2010-08-15 21:57:28.000000000 +0200
+--- src/INSTALL 2011-05-19 12:36:17.000000000 +0200
+***************
+*** 6,14 ****
+ Contents:
+ 1. Generic
+ 2. Unix
+! 3. RISC OS
+! 4. OS/2 (with EMX 0.9b)
+! 5. Atari MiNT
+
+ See INSTALLami.txt for Amiga
+ See INSTALLmac.txt for Macintosh
+--- 6,13 ----
+ Contents:
+ 1. Generic
+ 2. Unix
+! 3. OS/2 (with EMX 0.9b)
+! 4. Atari MiNT
+
+ See INSTALLami.txt for Amiga
+ See INSTALLmac.txt for Macintosh
+***************
+*** 174,198 ****
+ ./configure --without-local-dir
+
+
+! 3. RISC OS
+! =============
+!
+! Much file renaming is needed before you can compile anything.
+! You'll need UnixLib to link against, GCC and GNU make.
+!
+! I suggest you get the RISC OS binary distribution, which includes the
+! Templates file and the loader.
+!
+! Try here: http://www.ecs.soton.ac.uk/~tal197
+!
+! Do
+! :help riscos
+!
+! within the editor for more information, or read the
+! ../runtime/doc/os_risc.txt help file.
+!
+!
+! 4. OS/2
+ =======
+
+ Summary:
+--- 173,179 ----
+ ./configure --without-local-dir
+
+
+! 3. OS/2
+ =======
+
+ Summary:
+***************
+*** 237,243 ****
+ Check ../runtime/doc/os_os2.txt for additional info on running Vim.
+
+
+! 5. Atari MiNT
+ =============
+
+ [NOTE: this is quite old, it might not work anymore]
+--- 218,224 ----
+ Check ../runtime/doc/os_os2.txt for additional info on running Vim.
+
+
+! 4. Atari MiNT
+ =============
+
+ [NOTE: this is quite old, it might not work anymore]
+*** ../vim-7.3.190/src/Makefile 2011-04-01 13:05:37.000000000 +0200
+--- src/Makefile 2011-05-19 12:37:52.000000000 +0200
+***************
+*** 29,35 ****
+ # - Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
+ # want to disable using X11 libraries. This speeds up starting Vim,
+ # but the window title will not be set and the X11 selection can not
+! # used.
+ # - Uncomment the line "CONF_OPT_XSMP = --disable-xsmp" if you have the
+ # X11 Session Management Protocol (XSMP) library (libSM) but do not
+ # want to use it.
+--- 29,35 ----
+ # - Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
+ # want to disable using X11 libraries. This speeds up starting Vim,
+ # but the window title will not be set and the X11 selection can not
+! # be used.
+ # - Uncomment the line "CONF_OPT_XSMP = --disable-xsmp" if you have the
+ # X11 Session Management Protocol (XSMP) library (libSM) but do not
+ # want to use it.
+***************
+*** 730,741 ****
+ ### USL for Unix Systems Laboratories (SYSV 4.2)
+ #EXTRA_DEFS = -DUSL
+
+- ### RISCos on MIPS without X11
+- #EXTRA_DEFS = -DMIPS
+-
+- ### RISCos on MIPS with X11
+- #EXTRA_LIBS = -lsun
+-
+ ### (6) A/UX 3.1.1 with gcc (Jim Jagielski)
+ #CC= gcc -D_POSIX_SOURCE
+ #CFLAGS= -O2
+--- 730,735 ----
+***************
+*** 1633,1639 ****
+ RSRC_DIR = os_mac_rsrc
+
+ PRO_MANUAL = os_amiga.pro os_msdos.pro os_win16.pro os_win32.pro \
+! os_mswin.pro os_beos.pro os_vms.pro os_riscos.pro $(PERL_PRO)
+
+ # Default target is making the executable and tools
+ all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
+--- 1627,1633 ----
+ RSRC_DIR = os_mac_rsrc
+
+ PRO_MANUAL = os_amiga.pro os_msdos.pro os_win16.pro os_win32.pro \
+! os_mswin.pro os_beos.pro os_vms.pro $(PERL_PRO)
+
+ # Default target is making the executable and tools
+ all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
+*** ../vim-7.3.190/src/buffer.c 2011-05-05 17:32:40.000000000 +0200
+--- src/buffer.c 2011-05-19 13:09:25.000000000 +0200
+***************
+*** 1808,1816 ****
+ #ifdef FEAT_AUTOCMD
+ clear_string_option(&buf->b_p_ft);
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- clear_string_option(&buf->b_p_oft);
+- #endif
+ #ifdef FEAT_CINDENT
+ clear_string_option(&buf->b_p_cink);
+ clear_string_option(&buf->b_p_cino);
+--- 1808,1813 ----
+*** ../vim-7.3.190/src/eval.c 2011-05-10 16:41:13.000000000 +0200
+--- src/eval.c 2011-05-19 13:09:43.000000000 +0200
+***************
+*** 12076,12084 ****
+ #ifdef FEAT_OLE
+ "ole",
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- "osfiletype",
+- #endif
+ #ifdef FEAT_PATH_EXTRA
+ "path_extra",
+ #endif
+--- 12076,12081 ----
+*** ../vim-7.3.190/src/feature.h 2010-08-15 21:57:31.000000000 +0200
+--- src/feature.h 2011-05-19 13:09:56.000000000 +0200
+***************
+*** 506,520 ****
+ #endif
+
+ /*
+- * +osfiletype filetype checking in autocommand patterns.
+- * Only on systems that support filetypes (RISC OS).
+- */
+- #if 0
+- # define FEAT_OSFILETYPE
+- # define DFLT_OFT "Text"
+- #endif
+-
+- /*
+ * +viminfo reading/writing the viminfo file. Takes about 8Kbyte
+ * of code.
+ * VIMINFO_FILE Location of user .viminfo file (should start with $).
+--- 506,511 ----
+*** ../vim-7.3.190/src/option.c 2011-04-28 17:24:54.000000000 +0200
+--- src/option.c 2011-05-19 13:11:42.000000000 +0200
+***************
+*** 140,148 ****
+ #define PV_MOD OPT_BUF(BV_MOD)
+ #define PV_MPS OPT_BUF(BV_MPS)
+ #define PV_NF OPT_BUF(BV_NF)
+- #ifdef FEAT_OSFILETYPE
+- # define PV_OFT OPT_BUF(BV_OFT)
+- #endif
+ #ifdef FEAT_COMPL_FUNC
+ # define PV_OFU OPT_BUF(BV_OFU)
+ #endif
+--- 140,145 ----
+***************
+*** 337,345 ****
+ static int p_mod;
+ static char_u *p_mps;
+ static char_u *p_nf;
+- #ifdef FEAT_OSFILETYPE
+- static char_u *p_oft;
+- #endif
+ static int p_pi;
+ #ifdef FEAT_TEXTOBJ
+ static char_u *p_qe;
+--- 334,339 ----
+***************
+*** 1901,1914 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF,
+- #ifdef FEAT_OSFILETYPE
+- (char_u *)&p_oft, PV_OFT,
+- {(char_u *)DFLT_OFT, (char_u *)0L}
+- #else
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L}
+! #endif
+! SCRIPTID_INIT},
+ {"paragraphs", "para", P_STRING|P_VI_DEF,
+ (char_u *)&p_para, PV_NONE,
+ {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
+--- 1895,1902 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"paragraphs", "para", P_STRING|P_VI_DEF,
+ (char_u *)&p_para, PV_NONE,
+ {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
+***************
+*** 5282,5290 ****
+ #ifdef FEAT_AUTOCMD
+ check_string_option(&buf->b_p_ft);
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- check_string_option(&buf->b_p_oft);
+- #endif
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
+ check_string_option(&buf->b_p_cinw);
+ #endif
+--- 5270,5275 ----
+***************
+*** 9665,9673 ****
+ case PV_MA: return (char_u *)&(curbuf->b_p_ma);
+ case PV_MOD: return (char_u *)&(curbuf->b_changed);
+ case PV_NF: return (char_u *)&(curbuf->b_p_nf);
+- #ifdef FEAT_OSFILETYPE
+- case PV_OFT: return (char_u *)&(curbuf->b_p_oft);
+- #endif
+ case PV_PI: return (char_u *)&(curbuf->b_p_pi);
+ #ifdef FEAT_TEXTOBJ
+ case PV_QE: return (char_u *)&(curbuf->b_p_qe);
+--- 9650,9655 ----
+***************
+*** 10018,10026 ****
+ /* Don't copy 'filetype', it must be detected */
+ buf->b_p_ft = empty_option;
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- buf->b_p_oft = vim_strsave(p_oft);
+- #endif
+ buf->b_p_pi = p_pi;
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
+ buf->b_p_cinw = vim_strsave(p_cinw);
+--- 10000,10005 ----
+*** ../vim-7.3.190/src/option.h 2011-02-12 13:59:55.000000000 +0100
+--- src/option.h 2011-05-19 13:11:46.000000000 +0200
+***************
+*** 984,992 ****
+ , BV_MOD
+ , BV_MPS
+ , BV_NF
+- #ifdef FEAT_OSFILETYPE
+- , BV_OFT
+- #endif
+ #ifdef FEAT_COMPL_FUNC
+ , BV_OFU
+ #endif
+--- 984,989 ----
+*** ../vim-7.3.190/src/structs.h 2011-05-10 16:41:13.000000000 +0200
+--- src/structs.h 2011-05-19 13:11:58.000000000 +0200
+***************
+*** 1530,1538 ****
+ int b_p_ml_nobin; /* b_p_ml saved for binary mode */
+ int b_p_ma; /* 'modifiable' */
+ char_u *b_p_nf; /* 'nrformats' */
+- #ifdef FEAT_OSFILETYPE
+- char_u *b_p_oft; /* 'osfiletype' */
+- #endif
+ int b_p_pi; /* 'preserveindent' */
+ #ifdef FEAT_TEXTOBJ
+ char_u *b_p_qe; /* 'quoteescape' */
+--- 1530,1535 ----
+*** ../vim-7.3.190/src/version.c 2011-05-19 12:14:03.000000000 +0200
+--- src/version.c 2011-05-19 13:26:42.000000000 +0200
+***************
+*** 426,436 ****
+ "-ole",
+ # endif
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- "+osfiletype",
+- #else
+- "-osfiletype",
+- #endif
+ #ifdef FEAT_PATH_EXTRA
+ "+path_extra",
+ #else
+--- 426,431 ----
+*** ../vim-7.3.190/src/pty.c 2011-04-11 14:24:33.000000000 +0200
+--- src/pty.c 2011-05-19 12:43:26.000000000 +0200
+***************
+*** 123,130 ****
+ static void initmaster __ARGS((int));
+
+ /*
+! * Open all ptys with O_NOCTTY, just to be on the safe side
+! * (RISCos mips breaks otherwise)
+ */
+ #ifndef O_NOCTTY
+ # define O_NOCTTY 0
+--- 123,129 ----
+ static void initmaster __ARGS((int));
+
+ /*
+! * Open all ptys with O_NOCTTY, just to be on the safe side.
+ */
+ #ifndef O_NOCTTY
+ # define O_NOCTTY 0
+*** ../vim-7.3.190/Filelist 2011-05-10 17:21:34.000000000 +0200
+--- Filelist 2011-05-19 13:37:25.000000000 +0200
+***************
+*** 427,433 ****
+ $(SRC_VMS) \
+ README_os390.txt \
+ src/Make_mint.mak \
+- src/Make_ro.mak \
+ src/if_sniff.c \
+ src/infplist.xml \
+ src/link.390 \
+--- 427,432 ----
+*** ../vim-7.3.190/src/version.c 2011-05-19 12:14:03.000000000 +0200
+--- src/version.c 2011-05-19 13:26:42.000000000 +0200
+***************
+*** 716,717 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 191,
+ /**/
+
+--
+From "know your smileys":
+ :-& Eating spaghetti
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.192
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.192
+Problem: Ex command ":s/ \?/ /g" splits multi-byte characters into bytes.
+ (Dominique Pelle)
+Solution: Advance over whole character instead of one byte.
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.191/src/ex_cmds.c 2011-05-10 16:41:13.000000000 +0200
+--- src/ex_cmds.c 2011-05-19 14:23:33.000000000 +0200
+***************
+*** 4625,4631 ****
+ * for a match in this line again. */
+ skip_match = TRUE;
+ else
+! ++matchcol; /* search for a match at next column */
+ goto skip;
+ }
+
+--- 4625,4639 ----
+ * for a match in this line again. */
+ skip_match = TRUE;
+ else
+! {
+! /* search for a match at next column */
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! matchcol += mb_ptr2len(sub_firstline + matchcol);
+! else
+! #endif
+! ++matchcol;
+! }
+ goto skip;
+ }
+
+*** ../vim-7.3.191/src/version.c 2011-05-19 13:40:47.000000000 +0200
+--- src/version.c 2011-05-19 14:28:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 192,
+ /**/
+
+--
+From "know your smileys":
+ :-F Bucktoothed vampire with one tooth missing
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.193
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.193
+Problem: In the command line window ":close" doesn't work properly. (Tony
+ Mechelynck)
+Solution: Use Ctrl_C instead of K_IGNORE for cmdwin_result. (Jean-Rene
+ David)
+Files: src/ex_docmd.c, src/ex_getln.c
+
+
+*** ../vim-7.3.192/src/ex_docmd.c 2011-05-10 16:41:13.000000000 +0200
+--- src/ex_docmd.c 2011-05-19 14:42:56.000000000 +0200
+***************
+*** 6472,6478 ****
+ {
+ # ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0)
+! cmdwin_result = K_IGNORE;
+ else
+ # endif
+ if (!text_locked()
+--- 6472,6478 ----
+ {
+ # ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0)
+! cmdwin_result = Ctrl_C;
+ else
+ # endif
+ if (!text_locked()
+*** ../vim-7.3.192/src/ex_getln.c 2011-04-28 17:21:49.000000000 +0200
+--- src/ex_getln.c 2011-05-19 14:42:56.000000000 +0200
+***************
+*** 6324,6329 ****
+--- 6324,6335 ----
+ ccline.cmdbuff = vim_strsave((char_u *)"qa");
+ cmdwin_result = CAR;
+ }
++ else if (cmdwin_result == Ctrl_C)
++ {
++ /* :q or :close, don't execute any command
++ * and don't modify the cmd window. */
++ ccline.cmdbuff = NULL;
++ }
+ else
+ ccline.cmdbuff = vim_strsave(ml_get_curline());
+ if (ccline.cmdbuff == NULL)
+*** ../vim-7.3.192/src/version.c 2011-05-19 14:30:07.000000000 +0200
+--- src/version.c 2011-05-19 14:48:12.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 193,
+ /**/
+
+--
+There's no place like $(HOME)!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.194
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.194
+Problem: When "b" is a symlink to directory "a", resolve("b/") doesn't
+ result in "a/". (ZyX)
+Solution: Remove the trailing slash. (Jean-Rene David)
+Files: src/eval.c
+
+
+*** ../vim-7.3.193/src/eval.c 2011-05-19 13:40:47.000000000 +0200
+--- src/eval.c 2011-05-19 14:55:27.000000000 +0200
+***************
+*** 14980,14986 ****
+--- 14980,14989 ----
+
+ len = STRLEN(p);
+ if (len > 0 && after_pathsep(p, p + len))
++ {
+ has_trailing_pathsep = TRUE;
++ p[len - 1] = NUL; /* the trailing slash breaks readlink() */
++ }
+
+ q = getnextcomp(p);
+ if (*q != NUL)
+*** ../vim-7.3.193/src/version.c 2011-05-19 14:50:49.000000000 +0200
+--- src/version.c 2011-05-19 14:54:40.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 194,
+ /**/
+
+--
+Momento mori, ergo carpe diem
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.195
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.195
+Problem: "} else" causes following lines to be indented too much. (Rouben
+ Rostamian)
+Solution: Better detection for the "else". (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.194/src/misc1.c 2011-05-10 16:41:13.000000000 +0200
+--- src/misc1.c 2011-05-19 16:30:28.000000000 +0200
+***************
+*** 5482,5489 ****
+ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+ * '}'.
+ * Don't consider "} else" a terminated line.
+! * Don't consider a line where there are unmatched opening braces before '}',
+! * ';' or ',' a terminated line.
+ * Return the character terminating the line (ending char's have precedence if
+ * both apply in order to determine initializations).
+ */
+--- 5482,5489 ----
+ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+ * '}'.
+ * Don't consider "} else" a terminated line.
+! * If a line begins with an "else", only consider it terminated if no unmatched
+! * opening braces follow (handle "else { foo();" correctly).
+ * Return the character terminating the line (ending char's have precedence if
+ * both apply in order to determine initializations).
+ */
+***************
+*** 5493,5513 ****
+ int incl_open; /* include '{' at the end as terminator */
+ int incl_comma; /* recognize a trailing comma */
+ {
+! char_u found_start = 0;
+! unsigned n_open = 0;
+
+ s = cin_skipcomment(s);
+
+ if (*s == '{' || (*s == '}' && !cin_iselse(s)))
+ found_start = *s;
+
+ while (*s)
+ {
+ /* skip over comments, "" strings and 'c'haracters */
+ s = skip_string(cin_skipcomment(s));
+ if (*s == '}' && n_open > 0)
+ --n_open;
+! if (n_open == 0
+ && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
+ && cin_nocode(s + 1))
+ return *s;
+--- 5493,5517 ----
+ int incl_open; /* include '{' at the end as terminator */
+ int incl_comma; /* recognize a trailing comma */
+ {
+! char_u found_start = 0;
+! unsigned n_open = 0;
+! int is_else = FALSE;
+
+ s = cin_skipcomment(s);
+
+ if (*s == '{' || (*s == '}' && !cin_iselse(s)))
+ found_start = *s;
+
++ if (!found_start)
++ is_else = cin_iselse(s);
++
+ while (*s)
+ {
+ /* skip over comments, "" strings and 'c'haracters */
+ s = skip_string(cin_skipcomment(s));
+ if (*s == '}' && n_open > 0)
+ --n_open;
+! if ((!is_else || n_open == 0)
+ && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
+ && cin_nocode(s + 1))
+ return *s;
+*** ../vim-7.3.194/src/testdir/test3.in 2011-05-10 13:38:23.000000000 +0200
+--- src/testdir/test3.in 2011-05-19 16:29:01.000000000 +0200
+***************
+*** 1345,1351 ****
+
+ STARTTEST
+ :set cino&
+! 2kdd=][
+ ENDTEST
+
+ void func(void)
+--- 1345,1351 ----
+
+ STARTTEST
+ :set cino&
+! 2kdd=4][
+ ENDTEST
+
+ void func(void)
+***************
+*** 1359,1364 ****
+--- 1359,1392 ----
+ printf("Foo!\n");
+ }
+
++ void func1(void)
++ {
++ char* tab[] = {"foo", "bar",
++ "baz", "quux",
++ "this line used", "to be indented incorrectly"};
++ foo();
++ }
++
++ void func2(void)
++ {
++ int tab[] =
++ {1, 2,
++ 3, 4,
++ 5, 6};
++
++ printf("This line used to be indented incorrectly.\n");
++ }
++
++ void func3(void)
++ {
++ int tab[] = {
++ 1, 2,
++ 3, 4,
++ 5, 6};
++
++ printf("Don't you dare indent this line incorrectly!\n);
++ }
++
+ STARTTEST
+ :set cino&
+ 2kdd=][
+*** ../vim-7.3.194/src/testdir/test3.ok 2011-05-10 13:38:23.000000000 +0200
+--- src/testdir/test3.ok 2011-05-19 16:29:01.000000000 +0200
+***************
+*** 1216,1221 ****
+--- 1216,1249 ----
+ printf("Foo!\n");
+ }
+
++ void func1(void)
++ {
++ char* tab[] = {"foo", "bar",
++ "baz", "quux",
++ "this line used", "to be indented incorrectly"};
++ foo();
++ }
++
++ void func2(void)
++ {
++ int tab[] =
++ {1, 2,
++ 3, 4,
++ 5, 6};
++
++ printf("This line used to be indented incorrectly.\n");
++ }
++
++ void func3(void)
++ {
++ int tab[] = {
++ 1, 2,
++ 3, 4,
++ 5, 6};
++
++ printf("Don't you dare indent this line incorrectly!\n);
++ }
++
+
+ void func(void)
+ {
+*** ../vim-7.3.194/src/version.c 2011-05-19 14:59:07.000000000 +0200
+--- src/version.c 2011-05-19 16:34:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 195,
+ /**/
+
+--
+I AM THANKFUL...
+...for the taxes that I pay because it means that I am employed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.196
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.196
+Problem: Can't intercept a character that is going to be inserted.
+Solution: Add the InsertCharPre autocommand event. (Jakson A. Aquino)
+Files: runtime/doc/autocmd.txt, runtime/doc/eval.txt,
+ runtime/doc/map.txt, src/edit.c, src/eval.c, src/fileio.c,
+ src/vim.h
+
+
+*** ../mercurial/vim73/runtime/doc/autocmd.txt 2011-04-28 19:01:26.000000000 +0200
+--- runtime/doc/autocmd.txt 2011-05-19 17:12:17.000000000 +0200
+***************
+*** 299,304 ****
+--- 299,306 ----
+ |InsertEnter| starting Insert mode
+ |InsertChange| when typing <Insert> while in Insert or Replace mode
+ |InsertLeave| when leaving Insert mode
++ |InsertCharPre| when a character was typed in Insert mode, before
++ inserting it
+
+ |ColorScheme| after loading a color scheme
+
+***************
+*** 657,662 ****
+--- 659,675 ----
+ indicates the new mode.
+ Be careful not to move the cursor or do
+ anything else that the user does not expect.
++ *InsertCharPre*
++ InsertCharPre When a character is typed in Insert mode,
++ before inserting the char.
++ The |v:char| variable indicates the char typed
++ and can be changed during the event to insert
++ a different character. When |v:char| is set
++ to more than one character this text is
++ inserted literally.
++ It is not allowed to change the text |textlock|.
++ The event is not triggered when 'paste' is
++ set.
+ *InsertEnter*
+ InsertEnter Just before starting Insert mode. Also for
+ Replace mode and Virtual Replace mode. The
+*** ../mercurial/vim73/runtime/doc/eval.txt 2011-05-19 12:22:41.000000000 +0200
+--- runtime/doc/eval.txt 2011-05-19 16:55:58.000000000 +0200
+***************
+*** 1293,1298 ****
+--- 1293,1299 ----
+ *v:char* *char-variable*
+ v:char Argument for evaluating 'formatexpr' and used for the typed
+ character when using <expr> in an abbreviation |:map-<expr>|.
++ It is also used by the |InsertPreChar| event.
+
+ *v:charconvert_from* *charconvert_from-variable*
+ v:charconvert_from
+*** ../mercurial/vim73/runtime/doc/map.txt 2011-05-10 17:17:38.000000000 +0200
+--- runtime/doc/map.txt 2011-05-19 16:40:34.000000000 +0200
+***************
+*** 226,232 ****
+
+ For abbreviations |v:char| is set to the character that was typed to trigger
+ the abbreviation. You can use this to decide how to expand the {lhs}. You
+! can't change v:char and you should not insert it.
+
+ Be very careful about side effects! The expression is evaluated while
+ obtaining characters, you may very well make the command dysfunctional.
+--- 226,232 ----
+
+ For abbreviations |v:char| is set to the character that was typed to trigger
+ the abbreviation. You can use this to decide how to expand the {lhs}. You
+! you should not either insert or change the v:char.
+
+ Be very careful about side effects! The expression is evaluated while
+ obtaining characters, you may very well make the command dysfunctional.
+*** ../mercurial/vim73/src/edit.c 2011-05-10 14:22:10.000000000 +0200
+--- src/edit.c 2011-05-19 17:20:53.000000000 +0200
+***************
+*** 1381,1390 ****
+ goto do_intr;
+ #endif
+
+ /*
+ * Insert a nomal character.
+ */
+! normalchar:
+ #ifdef FEAT_SMARTINDENT
+ /* Try to perform smart-indenting. */
+ ins_try_si(c);
+--- 1381,1425 ----
+ goto do_intr;
+ #endif
+
++ normalchar:
+ /*
+ * Insert a nomal character.
+ */
+! #ifdef FEAT_AUTOCMD
+! if (!p_paste)
+! {
+! /* Trigger the InsertCharPre event. Lock the text to avoid
+! * weird things from happening. */
+! set_vim_var_char(c);
+! ++textlock;
+! if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL,
+! FALSE, curbuf))
+! {
+! /* Get the new value of v:char. If it is more than one
+! * character insert it literally. */
+! char_u *s = get_vim_var_str(VV_CHAR);
+! if (MB_CHARLEN(s) > 1)
+! {
+! if (stop_arrow() != FAIL)
+! {
+! ins_str(s);
+! AppendToRedobuffLit(s, -1);
+! }
+! c = NUL;
+! }
+! else
+! c = PTR2CHAR(s);
+! }
+!
+! set_vim_var_string(VV_CHAR, NULL, -1);
+! --textlock;
+!
+! /* If the new value is an empty string then don't insert a
+! * char. */
+! if (c == NUL)
+! break;
+! }
+! #endif
+ #ifdef FEAT_SMARTINDENT
+ /* Try to perform smart-indenting. */
+ ins_try_si(c);
+***************
+*** 3491,3501 ****
+ return;
+ }
+ p += len;
+! #ifdef FEAT_MBYTE
+! c = mb_ptr2char(p);
+! #else
+! c = *p;
+! #endif
+ ins_compl_addleader(c);
+ }
+
+--- 3526,3532 ----
+ return;
+ }
+ p += len;
+! c = PTR2CHAR(p);
+ ins_compl_addleader(c);
+ }
+
+*** ../mercurial/vim73/src/eval.c 2011-05-19 14:59:07.000000000 +0200
+--- src/eval.c 2011-05-19 16:40:39.000000000 +0200
+***************
+*** 352,358 ****
+ {VV_NAME("swapname", VAR_STRING), VV_RO},
+ {VV_NAME("swapchoice", VAR_STRING), 0},
+ {VV_NAME("swapcommand", VAR_STRING), VV_RO},
+! {VV_NAME("char", VAR_STRING), VV_RO},
+ {VV_NAME("mouse_win", VAR_NUMBER), 0},
+ {VV_NAME("mouse_lnum", VAR_NUMBER), 0},
+ {VV_NAME("mouse_col", VAR_NUMBER), 0},
+--- 352,358 ----
+ {VV_NAME("swapname", VAR_STRING), VV_RO},
+ {VV_NAME("swapchoice", VAR_STRING), 0},
+ {VV_NAME("swapcommand", VAR_STRING), VV_RO},
+! {VV_NAME("char", VAR_STRING), 0},
+ {VV_NAME("mouse_win", VAR_NUMBER), 0},
+ {VV_NAME("mouse_lnum", VAR_NUMBER), 0},
+ {VV_NAME("mouse_col", VAR_NUMBER), 0},
+*** ../mercurial/vim73/src/fileio.c 2011-05-10 16:41:13.000000000 +0200
+--- src/fileio.c 2011-05-19 16:40:39.000000000 +0200
+***************
+*** 7662,7667 ****
+--- 7662,7668 ----
+ {"InsertChange", EVENT_INSERTCHANGE},
+ {"InsertEnter", EVENT_INSERTENTER},
+ {"InsertLeave", EVENT_INSERTLEAVE},
++ {"InsertCharPre", EVENT_INSERTCHARPRE},
+ {"MenuPopup", EVENT_MENUPOPUP},
+ {"QuickFixCmdPost", EVENT_QUICKFIXCMDPOST},
+ {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE},
+*** ../mercurial/vim73/src/vim.h 2011-05-10 16:41:13.000000000 +0200
+--- src/vim.h 2011-05-19 16:40:39.000000000 +0200
+***************
+*** 1274,1279 ****
+--- 1274,1280 ----
+ EVENT_WINENTER, /* after entering a window */
+ EVENT_WINLEAVE, /* before leaving a window */
+ EVENT_ENCODINGCHANGED, /* after changing the 'encoding' option */
++ EVENT_INSERTCHARPRE, /* before inserting a char */
+ EVENT_CURSORHOLD, /* cursor in same position for a while */
+ EVENT_CURSORHOLDI, /* idem, in Insert mode */
+ EVENT_FUNCUNDEFINED, /* if calling a function which doesn't exist */
+*** ../vim-7.3.195/src/version.c 2011-05-19 16:35:05.000000000 +0200
+--- src/version.c 2011-05-19 17:15:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 196,
+ /**/
+
+--
+I AM THANKFUL...
+...for the mess to clean after a party because it means I have
+been surrounded by friends.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.197
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.197
+Problem: When a QuickfixCmdPost event removes all errors, Vim still tries
+ to jump to the first error, resulting in E42.
+Solution: Get the number of error after the autocmd event. (Mike Lundy)
+Files: src/quickfix.c
+
+
+*** ../mercurial/vim73/src/quickfix.c 2011-05-10 16:41:13.000000000 +0200
+--- src/quickfix.c 2011-05-19 17:34:11.000000000 +0200
+***************
+*** 2813,2829 ****
+ (eap->cmdidx != CMD_grepadd
+ && eap->cmdidx != CMD_lgrepadd),
+ *eap->cmdlinep);
+ #ifdef FEAT_AUTOCMD
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+ #endif
+ if (res > 0 && !eap->forceit)
+- {
+- if (wp != NULL)
+- qi = GET_LOC_LIST(wp);
+ qf_jump(qi, 0, 0, FALSE); /* display first error */
+- }
+
+ mch_remove(fname);
+ vim_free(fname);
+--- 2813,2833 ----
+ (eap->cmdidx != CMD_grepadd
+ && eap->cmdidx != CMD_lgrepadd),
+ *eap->cmdlinep);
++ if (wp != NULL)
++ qi = GET_LOC_LIST(wp);
+ #ifdef FEAT_AUTOCMD
+ if (au_name != NULL)
++ {
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
++ if (qi->qf_curlist < qi->qf_listcount)
++ res = qi->qf_lists[qi->qf_curlist].qf_count;
++ else
++ res = 0;
++ }
+ #endif
+ if (res > 0 && !eap->forceit)
+ qf_jump(qi, 0, 0, FALSE); /* display first error */
+
+ mch_remove(fname);
+ vim_free(fname);
+*** ../vim-7.3.196/src/version.c 2011-05-19 17:25:36.000000000 +0200
+--- src/version.c 2011-05-19 17:41:50.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 197,
+ /**/
+
+--
+I AM THANKFUL...
+...for the clothes that fit a little too snug because it
+means I have more than enough to eat.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.198
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.198
+Problem: No completion for ":lang".
+Solution: Get locales to complete from. (Dominique Pelle)
+Files: src/eval.c, src/ex_cmds2.c, src/ex_getln.c,
+ src/proto/ex_cmds2.pro, src/proto/ex_getln.pro, src/vim.h
+
+
+*** ../mercurial/vim73/src/eval.c 2011-05-19 17:25:36.000000000 +0200
+--- src/eval.c 2011-05-19 17:52:02.000000000 +0200
+***************
+*** 911,916 ****
+--- 911,917 ----
+ hash_clear(&compat_hashtab);
+
+ free_scriptnames();
++ free_locales();
+
+ /* global variables */
+ vars_clear(&globvarht);
+*** ../mercurial/vim73/src/ex_cmds2.c 2011-05-10 16:41:13.000000000 +0200
+--- src/ex_cmds2.c 2011-05-19 18:16:54.000000000 +0200
+***************
+*** 1476,1482 ****
+ #endif
+
+ /*
+! * Ask the user what to do when abondoning a changed buffer.
+ * Must check 'write' option first!
+ */
+ void
+--- 1476,1482 ----
+ #endif
+
+ /*
+! * Ask the user what to do when abandoning a changed buffer.
+ * Must check 'write' option first!
+ */
+ void
+***************
+*** 4153,4158 ****
+--- 4153,4234 ----
+ }
+
+ # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++
++ static char_u **locales = NULL; /* Array of all available locales */
++ static int did_init_locales = FALSE;
++
++ static void init_locales __ARGS((void));
++ static char_u **find_locales __ARGS((void));
++
++ /*
++ * Lazy initialization of all available locales.
++ */
++ static void
++ init_locales()
++ {
++ if (!did_init_locales)
++ {
++ did_init_locales = TRUE;
++ locales = find_locales();
++ }
++ }
++
++ /* Return an array of strings for all available locales + NULL for the
++ * last element. Return NULL in case of error. */
++ static char_u **
++ find_locales()
++ {
++ garray_T locales_ga;
++ char_u *loc;
++
++ /* Find all available locales by running command "locale -a". If this
++ * doesn't work we won't have completion. */
++ char_u *locale_a = get_cmd_output((char_u *)"locale -a",
++ NULL, SHELL_SILENT);
++ if (locale_a == NULL)
++ return NULL;
++ ga_init2(&locales_ga, sizeof(char_u *), 20);
++
++ /* Transform locale_a string where each locale is separated by "\n"
++ * into an array of locale strings. */
++ loc = (char_u *)strtok((char *)locale_a, "\n");
++
++ while (loc != NULL)
++ {
++ if (ga_grow(&locales_ga, 1) == FAIL)
++ break;
++ loc = vim_strsave(loc);
++ if (loc == NULL)
++ break;
++
++ ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
++ loc = (char_u *)strtok(NULL, "\n");
++ }
++ vim_free(locale_a);
++ if (ga_grow(&locales_ga, 1) == FAIL)
++ {
++ ga_clear(&locales_ga);
++ return NULL;
++ }
++ ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
++ return (char_u **)locales_ga.ga_data;
++ }
++
++ # if defined(EXITFREE) || defined(PROTO)
++ void
++ free_locales()
++ {
++ int i;
++ if (locales != NULL)
++ {
++ for (i = 0; locales[i] != NULL; i++)
++ vim_free(locales[i]);
++ vim_free(locales);
++ locales = NULL;
++ }
++ }
++ # endif
++
+ /*
+ * Function given to ExpandGeneric() to obtain the possible arguments of the
+ * ":language" command.
+***************
+*** 4168,4174 ****
+ return (char_u *)"ctype";
+ if (idx == 2)
+ return (char_u *)"time";
+! return NULL;
+ }
+ # endif
+
+--- 4244,4268 ----
+ return (char_u *)"ctype";
+ if (idx == 2)
+ return (char_u *)"time";
+!
+! init_locales();
+! if (locales == NULL)
+! return NULL;
+! return locales[idx - 3];
+! }
+!
+! /*
+! * Function given to ExpandGeneric() to obtain the available locales.
+! */
+! char_u *
+! get_locales(xp, idx)
+! expand_T *xp UNUSED;
+! int idx;
+! {
+! init_locales();
+! if (locales == NULL)
+! return NULL;
+! return locales[idx];
+ }
+ # endif
+
+*** ../mercurial/vim73/src/ex_getln.c 2011-05-19 14:50:49.000000000 +0200
+--- src/ex_getln.c 2011-05-19 18:18:49.000000000 +0200
+***************
+*** 4571,4618 ****
+ int context;
+ char_u *((*func)__ARGS((expand_T *, int)));
+ int ic;
+ } tab[] =
+ {
+! {EXPAND_COMMANDS, get_command_name, FALSE},
+! {EXPAND_BEHAVE, get_behave_arg, TRUE},
+ #ifdef FEAT_USR_CMDS
+! {EXPAND_USER_COMMANDS, get_user_commands, FALSE},
+! {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE},
+! {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE},
+! {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE},
+ #endif
+ #ifdef FEAT_EVAL
+! {EXPAND_USER_VARS, get_user_var_name, FALSE},
+! {EXPAND_FUNCTIONS, get_function_name, FALSE},
+! {EXPAND_USER_FUNC, get_user_func_name, FALSE},
+! {EXPAND_EXPRESSION, get_expr_name, FALSE},
+ #endif
+ #ifdef FEAT_MENU
+! {EXPAND_MENUS, get_menu_name, FALSE},
+! {EXPAND_MENUNAMES, get_menu_names, FALSE},
+ #endif
+ #ifdef FEAT_SYN_HL
+! {EXPAND_SYNTAX, get_syntax_name, TRUE},
+ #endif
+! {EXPAND_HIGHLIGHT, get_highlight_name, TRUE},
+ #ifdef FEAT_AUTOCMD
+! {EXPAND_EVENTS, get_event_name, TRUE},
+! {EXPAND_AUGROUP, get_augroup_name, TRUE},
+ #endif
+ #ifdef FEAT_CSCOPE
+! {EXPAND_CSCOPE, get_cscope_name, TRUE},
+ #endif
+ #ifdef FEAT_SIGNS
+! {EXPAND_SIGN, get_sign_name, TRUE},
+ #endif
+ #ifdef FEAT_PROFILE
+! {EXPAND_PROFILE, get_profile_name, TRUE},
+ #endif
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+! {EXPAND_LANGUAGE, get_lang_arg, TRUE},
+ #endif
+! {EXPAND_ENV_VARS, get_env_name, TRUE},
+ };
+ int i;
+
+--- 4571,4620 ----
+ int context;
+ char_u *((*func)__ARGS((expand_T *, int)));
+ int ic;
++ int escaped;
+ } tab[] =
+ {
+! {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
+! {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
+ #ifdef FEAT_USR_CMDS
+! {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
+! {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
+! {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
+! {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_EVAL
+! {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
+! {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
+! {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
+! {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_MENU
+! {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
+! {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_SYN_HL
+! {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
+ #endif
+! {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
+ #ifdef FEAT_AUTOCMD
+! {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
+! {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_CSCOPE
+! {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_SIGNS
+! {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_PROFILE
+! {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
+ #endif
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+! {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
+! {EXPAND_LOCALES, get_locales, TRUE, FALSE},
+ #endif
+! {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
+ };
+ int i;
+
+***************
+*** 4626,4632 ****
+ {
+ if (tab[i].ic)
+ regmatch.rm_ic = TRUE;
+! ret = ExpandGeneric(xp, ®match, num_file, file, tab[i].func);
+ break;
+ }
+ }
+--- 4628,4635 ----
+ {
+ if (tab[i].ic)
+ regmatch.rm_ic = TRUE;
+! ret = ExpandGeneric(xp, ®match, num_file, file,
+! tab[i].func, tab[i].escaped);
+ break;
+ }
+ }
+***************
+*** 4648,4660 ****
+ * Returns OK when no problems encountered, FAIL for error (out of memory).
+ */
+ int
+! ExpandGeneric(xp, regmatch, num_file, file, func)
+ expand_T *xp;
+ regmatch_T *regmatch;
+ int *num_file;
+ char_u ***file;
+ char_u *((*func)__ARGS((expand_T *, int)));
+ /* returns a string from the list */
+ {
+ int i;
+ int count = 0;
+--- 4651,4664 ----
+ * Returns OK when no problems encountered, FAIL for error (out of memory).
+ */
+ int
+! ExpandGeneric(xp, regmatch, num_file, file, func, escaped)
+ expand_T *xp;
+ regmatch_T *regmatch;
+ int *num_file;
+ char_u ***file;
+ char_u *((*func)__ARGS((expand_T *, int)));
+ /* returns a string from the list */
++ int escaped;
+ {
+ int i;
+ int count = 0;
+***************
+*** 4679,4685 ****
+ {
+ if (round)
+ {
+! str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+ (*file)[count] = str;
+ #ifdef FEAT_MENU
+ if (func == get_menu_names && str != NULL)
+--- 4683,4692 ----
+ {
+ if (round)
+ {
+! if (escaped)
+! str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+! else
+! str = vim_strsave(str);
+ (*file)[count] = str;
+ #ifdef FEAT_MENU
+ if (func == get_menu_names && str != NULL)
+*** ../mercurial/vim73/src/proto/ex_cmds2.pro 2010-05-15 21:22:11.000000000 +0200
+--- src/proto/ex_cmds2.pro 2011-05-19 17:53:52.000000000 +0200
+***************
+*** 83,87 ****
+--- 83,89 ----
+ char_u *get_mess_lang __ARGS((void));
+ void set_lang_var __ARGS((void));
+ void ex_language __ARGS((exarg_T *eap));
++ void free_locales __ARGS((void));
+ char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
++ char_u *get_locales __ARGS((expand_T *xp, int idx));
+ /* vim: set ft=c : */
+*** ../mercurial/vim73/src/proto/ex_getln.pro 2010-08-16 21:23:30.000000000 +0200
+--- src/proto/ex_getln.pro 2011-05-19 17:54:00.000000000 +0200
+***************
+*** 31,37 ****
+ char_u *addstar __ARGS((char_u *fname, int len, int context));
+ void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+ int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+! int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+ char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
+ void init_history __ARGS((void));
+ int get_histtype __ARGS((char_u *name));
+--- 31,37 ----
+ char_u *addstar __ARGS((char_u *fname, int len, int context));
+ void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+ int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+! int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
+ char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
+ void init_history __ARGS((void));
+ int get_histtype __ARGS((char_u *name));
+*** ../mercurial/vim73/src/vim.h 2011-05-19 17:25:36.000000000 +0200
+--- src/vim.h 2011-05-19 17:52:02.000000000 +0200
+***************
+*** 779,784 ****
+--- 779,785 ----
+ #define EXPAND_FILETYPE 37
+ #define EXPAND_FILES_IN_PATH 38
+ #define EXPAND_OWNSYNTAX 39
++ #define EXPAND_LOCALES 40
+
+ /* Values for exmode_active (0 is no exmode) */
+ #define EXMODE_NORMAL 1
+*** ../vim-7.3.197/src/version.c 2011-05-19 17:42:54.000000000 +0200
+--- src/version.c 2011-05-19 18:24:58.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 198,
+ /**/
+
+--
+The primary purpose of the DATA statement is to give names to constants;
+instead of referring to pi as 3.141592653589793 at every appearance, the
+variable PI can be given that value with a DATA statement and used instead
+of the longer form of the constant. This also simplifies modifying the
+program, should the value of pi change.
+ -- FORTRAN manual for Xerox Computers
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.199
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.199
+Problem: MS-Windows: Compilation problem of OLE with MingW compiler.
+Solution: Put #ifdef around declarations. (Guopeng Wen)
+Files: src/if_ole.h
+
+
+*** ../mercurial/vim73/src/if_ole.h 2010-05-15 21:22:11.000000000 +0200
+--- src/if_ole.h 2011-05-25 12:05:50.000000000 +0200
+***************
+*** 46,53 ****
+ /* header files for imported files */
+ #include "oaidl.h"
+
+! void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+! void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+
+ #ifndef __IVim_INTERFACE_DEFINED__
+ #define __IVim_INTERFACE_DEFINED__
+--- 46,56 ----
+ /* header files for imported files */
+ #include "oaidl.h"
+
+! #ifndef __MIDL_user_allocate_free_DEFINED__
+! #define __MIDL_user_allocate_free_DEFINED__
+! void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+! void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+! #endif
+
+ #ifndef __IVim_INTERFACE_DEFINED__
+ #define __IVim_INTERFACE_DEFINED__
+*** ../vim-7.3.198/src/version.c 2011-05-19 18:26:34.000000000 +0200
+--- src/version.c 2011-05-25 12:08:54.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 199,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+104. When people ask about the Presidential Election you ask "Which country?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.200
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.200 (after 7.3.198)
+Problem: CTRL-D doesn't complete :lang.
+Solution: Add the missing part of the change. (Dominique Pelle)
+Files: src/ex_docmd.c
+
+
+*** ../mercurial/vim73/src/ex_docmd.c 2011-05-19 14:50:49.000000000 +0200
+--- src/ex_docmd.c 2011-05-25 12:45:02.000000000 +0200
+***************
+*** 3861,3873 ****
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ case CMD_language:
+! if (*skiptowhite(arg) == NUL)
+ {
+ xp->xp_context = EXPAND_LANGUAGE;
+ xp->xp_pattern = arg;
+ }
+ else
+! xp->xp_context = EXPAND_NOTHING;
+ break;
+ #endif
+ #if defined(FEAT_PROFILE)
+--- 3861,3884 ----
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ case CMD_language:
+! p = skiptowhite(arg);
+! if (*p == NUL)
+ {
+ xp->xp_context = EXPAND_LANGUAGE;
+ xp->xp_pattern = arg;
+ }
+ else
+! {
+! if ( STRNCMP(arg, "messages", p - arg) == 0
+! || STRNCMP(arg, "ctype", p - arg) == 0
+! || STRNCMP(arg, "time", p - arg) == 0)
+! {
+! xp->xp_context = EXPAND_LOCALES;
+! xp->xp_pattern = skipwhite(p);
+! }
+! else
+! xp->xp_context = EXPAND_NOTHING;
+! }
+ break;
+ #endif
+ #if defined(FEAT_PROFILE)
+*** ../vim-7.3.199/src/version.c 2011-05-25 12:09:46.000000000 +0200
+--- src/version.c 2011-05-25 12:49:49.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 200,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+105. When someone asks you for your address, you tell them your URL.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.201
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.201 (after 7.3.195)
+Problem: "} else" still causes following lines to be indented too much.
+Solution: Better detection for the "else" block. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../mercurial/vim73/src/misc1.c 2011-05-19 16:35:05.000000000 +0200
+--- src/misc1.c 2011-05-25 13:29:45.000000000 +0200
+***************
+*** 7541,7557 ****
+
+ /*
+ * When searching for a terminated line, don't use the
+! * one between the "if" and the "else".
+ * Need to use the scope of this "else". XXX
+ * If whilelevel != 0 continue looking for a "do {".
+ */
+! if (cin_iselse(l)
+! && whilelevel == 0
+! && ((trypos = find_start_brace(ind_maxcomment))
+! == NULL
+ || find_match(LOOKFOR_IF, trypos->lnum,
+! ind_maxparen, ind_maxcomment) == FAIL))
+! break;
+ }
+
+ /*
+--- 7541,7565 ----
+
+ /*
+ * When searching for a terminated line, don't use the
+! * one between the "if" and the matching "else".
+ * Need to use the scope of this "else". XXX
+ * If whilelevel != 0 continue looking for a "do {".
+ */
+! if (cin_iselse(l) && whilelevel == 0)
+! {
+! /* If we're looking at "} else", let's make sure we
+! * find the opening brace of the enclosing scope,
+! * not the one from "if () {". */
+! if (*l == '}')
+! curwin->w_cursor.col =
+! (l - ml_get_curline()) + 1;
+!
+! if ((trypos = find_start_brace(ind_maxcomment))
+! == NULL
+ || find_match(LOOKFOR_IF, trypos->lnum,
+! ind_maxparen, ind_maxcomment) == FAIL)
+! break;
+! }
+ }
+
+ /*
+*** ../mercurial/vim73/src/testdir/test3.in 2011-05-19 16:35:05.000000000 +0200
+--- src/testdir/test3.in 2011-05-25 13:23:51.000000000 +0200
+***************
+*** 1413,1418 ****
+--- 1413,1433 ----
+ }
+
+ STARTTEST
++ :set cino&
++ 2kdd=][
++ ENDTEST
++
++ void func(void)
++ {
++ for (int i = 0; i < 10; ++i)
++ if (i & 1) {
++ foo(1);
++ } else
++ foo(0);
++ baz();
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../mercurial/vim73/src/testdir/test3.ok 2011-05-19 16:35:05.000000000 +0200
+--- src/testdir/test3.ok 2011-05-25 13:23:51.000000000 +0200
+***************
+*** 1262,1264 ****
+--- 1262,1275 ----
+ foo();
+ }
+
++
++ void func(void)
++ {
++ for (int i = 0; i < 10; ++i)
++ if (i & 1) {
++ foo(1);
++ } else
++ foo(0);
++ baz();
++ }
++
+*** ../vim-7.3.200/src/version.c 2011-05-25 12:51:17.000000000 +0200
+--- src/version.c 2011-05-25 13:33:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 201,
+ /**/
+
+--
+Laughing helps. It's like jogging on the inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.202
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.202
+Problem: Cannot influence the indent inside a namespace.
+Solution: Add the "N" 'cino' parameter. (Konstantin Lepa)
+Files: runtime/doc/indent.txt, src/misc1.c, src/testdir/test3.in,
+ src/testdir/test3.ok
+
+
+*** ../mercurial/vim73/runtime/doc/indent.txt 2011-04-28 19:01:26.000000000 +0200
+--- runtime/doc/indent.txt 2011-05-25 14:35:37.000000000 +0200
+***************
+*** 128,140 ****
+ used CTRL-T or CTRL-D.
+
+ *cinoptions-values*
+! The 'cinoptions' option sets how Vim performs indentation. In the list below,
+ "N" represents a number of your choice (the number can be negative). When
+ there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
+ "1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc. You can use a
+! decimal point, too: "-0.5s" is minus half a 'shiftwidth'. The examples below
+! assume a 'shiftwidth' of 4.
+!
+ >N Amount added for "normal" indent. Used after a line that should
+ increase the indent (lines starting with "if", an opening brace,
+ etc.). (default 'shiftwidth').
+--- 128,147 ----
+ used CTRL-T or CTRL-D.
+
+ *cinoptions-values*
+! The 'cinoptions' option sets how Vim performs indentation. The value after
+! the option character can be one of these (N is any number):
+! N indent N spaces
+! -N indent N spaces to the left
+! Ns N times 'shiftwidth spaces
+! -Ns N times 'shiftwidth spaces to the left
+!
+! In the list below,
+ "N" represents a number of your choice (the number can be negative). When
+ there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
+ "1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc. You can use a
+! decimal point, too: "-0.5s" is minus half a 'shiftwidth'.
+! The examples below assume a 'shiftwidth' of 4.
+! *cino->*
+ >N Amount added for "normal" indent. Used after a line that should
+ increase the indent (lines starting with "if", an opening brace,
+ etc.). (default 'shiftwidth').
+***************
+*** 145,150 ****
+--- 152,158 ----
+ foo; foo; foo;
+ } } }
+ <
++ *cino-e*
+ eN Add N to the prevailing indent inside a set of braces if the
+ opening brace at the End of the line (more precise: is not the
+ first character in a line). This is useful if you want a
+***************
+*** 160,165 ****
+--- 168,174 ----
+ bar; bar; bar;
+ } } }
+ <
++ *cino-n*
+ nN Add N to the prevailing indent for a statement after an "if",
+ "while", etc., if it is NOT inside a set of braces. This is
+ useful if you want a different indent when there is no '{'
+***************
+*** 174,179 ****
+--- 183,189 ----
+ bar; bar; bar;
+ } } }
+ <
++ *cino-f*
+ fN Place the first opening brace of a function or other block in
+ column N. This applies only for an opening brace that is not
+ inside other braces and is at the start of the line. What comes
+***************
+*** 184,189 ****
+--- 194,200 ----
+ { { {
+ int foo; int foo; int foo;
+ <
++ *cino-{*
+ {N Place opening braces N characters from the prevailing indent.
+ This applies only for opening braces that are inside other
+ braces. (default 0).
+***************
+*** 193,198 ****
+--- 204,210 ----
+ { { {
+ foo; foo; foo;
+ <
++ *cino-}*
+ }N Place closing braces N characters from the matching opening
+ brace. (default 0).
+
+***************
+*** 202,207 ****
+--- 214,220 ----
+ foo; foo; foo;
+ } } }
+ <
++ *cino-^*
+ ^N Add N to the prevailing indent inside a set of braces if the
+ opening brace is in column 0. This can specify a different
+ indent for whole of a function (some may like to set it to a
+***************
+*** 216,221 ****
+--- 229,235 ----
+ } } }
+ } } }
+ <
++ *cino-L*
+ LN Controls placement of jump labels. If N is negative, the label
+ will be placed at column 1. If N is non-negative, the indent of
+ the label will be the prevailing indent minus N. (default -1).
+***************
+*** 229,234 ****
+--- 243,249 ----
+ } } }
+ } } }
+ <
++ *cino-:*
+ :N Place case labels N characters from the indent of the switch().
+ (default 'shiftwidth').
+
+***************
+*** 240,245 ****
+--- 255,261 ----
+ default: default:
+ } }
+ <
++ *cino-=*
+ =N Place statements occurring after a case label N characters from
+ the indent of the label. (default 'shiftwidth').
+
+***************
+*** 247,252 ****
+--- 263,269 ----
+ case 11: case 11: a = a + 1;
+ a = a + 1; b = b + 1;
+ <
++ *cino-l*
+ lN If N != 0 Vim will align with a case label instead of the
+ statement after it in the same line.
+
+***************
+*** 256,261 ****
+--- 273,279 ----
+ break; break;
+ } }
+ <
++ *cino-b*
+ bN If N != 0 Vim will align a final "break" with the case label,
+ so that case..break looks like a sort of block. (default: 0).
+ When using 1, consider adding "0=break" to 'cinkeys'.
+***************
+*** 272,277 ****
+--- 290,296 ----
+ break; break;
+ } }
+ <
++ *cino-g*
+ gN Place C++ scope declarations N characters from the indent of the
+ block they are in. (default 'shiftwidth'). A scope declaration
+ can be "public:", "protected:" or "private:".
+***************
+*** 283,288 ****
+--- 302,308 ----
+ private: private:
+ } }
+ <
++ *cino-h*
+ hN Place statements occurring after a C++ scope declaration N
+ characters from the indent of the label. (default
+ 'shiftwidth').
+***************
+*** 291,296 ****
+--- 311,331 ----
+ public: public: a = a + 1;
+ a = a + 1; b = b + 1;
+ <
++ *cino-N*
++ NN Indent inside C++ namespace N characters extra compared to a
++ normal block. (default 0).
++
++ cino= cino=N-s >
++ namespace { namespace {
++ void function(); void function();
++ } }
++
++ namespace my namespace my
++ { {
++ void function(); void function();
++ } }
++ <
++ *cino-p*
+ pN Parameter declarations for K&R-style function declarations will
+ be indented N characters from the margin. (default
+ 'shiftwidth').
+***************
+*** 300,305 ****
+--- 335,341 ----
+ int a; int a; int a;
+ char b; char b; char b;
+ <
++ *cino-t*
+ tN Indent a function return type declaration N characters from the
+ margin. (default 'shiftwidth').
+
+***************
+*** 307,312 ****
+--- 343,349 ----
+ int int int
+ func() func() func()
+ <
++ *cino-i*
+ iN Indent C++ base class declarations and constructor
+ initializations, if they start in a new line (otherwise they
+ are aligned at the right side of the ':').
+***************
+*** 330,335 ****
+--- 368,374 ----
+ a = b + 9 * a = b + 9 *
+ c; c;
+ <
++ *cino-c*
+ cN Indent comment lines after the comment opener, when there is no
+ other text with which to align, N characters from the comment
+ opener. (default 3). See also |format-comments|.
+***************
+*** 339,344 ****
+--- 378,384 ----
+ text. text.
+ */ */
+ <
++ *cino-C*
+ CN When N is non-zero, indent comment lines by the amount specified
+ with the c flag above even if there is other text behind the
+ comment opener. (default 0).
+***************
+*** 349,360 ****
+--- 389,402 ----
+ ********/ ********/
+ < (Example uses ":set comments& comments-=s1:/* comments^=s0:/*")
+
++ *cino-/*
+ /N Indent comment lines N characters extra. (default 0).
+ cino= cino=/4 >
+ a = b; a = b;
+ /* comment */ /* comment */
+ c = d; c = d;
+ <
++ *cino-(*
+ (N When in unclosed parentheses, indent N characters from the line
+ with the unclosed parentheses. Add a 'shiftwidth' for every
+ unclosed parentheses. When N is 0 or the unclosed parentheses
+***************
+*** 370,375 ****
+--- 412,418 ----
+ (c2 || c3)) (c2 || c3))
+ { {
+ <
++ *cino-u*
+ uN Same as (N, but for one level deeper. (default 'shiftwidth').
+
+ cino= cino=u2 >
+***************
+*** 377,382 ****
+--- 420,426 ----
+ && (c22345 && (c22345
+ || c3)) || c3))
+ <
++ *cino-U*
+ UN When N is non-zero, do not ignore the indenting specified by
+ ( or u in case that the unclosed parentheses is the first
+ non-white character in its line. (default 0).
+***************
+*** 388,393 ****
+--- 432,438 ----
+ c3 c3
+ ) && c4; ) && c4;
+ <
++ *cino-2*
+ wN When in unclosed parentheses and N is non-zero and either
+ using "(0" or "u0", respectively, or using "U0" and the unclosed
+ parentheses is the first non-white character in its line, line
+***************
+*** 400,405 ****
+--- 445,451 ----
+ || c3)) || c3))
+ foo; foo;
+ <
++ *cino-W*
+ WN When in unclosed parentheses and N is non-zero and either
+ using "(0" or "u0", respectively and the unclosed parentheses is
+ the last non-white character in its line and it is not the
+***************
+*** 414,419 ****
+--- 460,466 ----
+ a_short_line(argument, a_short_line(argument,
+ argument); argument);
+ <
++ *cino-m*
+ mN When N is non-zero, line up a line starting with a closing
+ parentheses with the first character of the line with the
+ matching opening parentheses. (default 0).
+***************
+*** 428,433 ****
+--- 475,481 ----
+ ) )
+ foo; foo;
+ <
++ *cino-M*
+ MN When N is non-zero, line up a line starting with a closing
+ parentheses with the first character of the previous line.
+ (default 0).
+***************
+*** 437,443 ****
+ cond2 cond2
+ ) )
+ <
+! *java-cinoptions* *java-indenting*
+ jN Indent java anonymous classes correctly. The value 'N' is
+ currently unused but must be non-zero (e.g. 'j1'). 'j1' will
+ indent for example the following code snippet correctly: >
+--- 485,491 ----
+ cond2 cond2
+ ) )
+ <
+! *java-cinoptions* *java-indenting* *cino-j*
+ jN Indent java anonymous classes correctly. The value 'N' is
+ currently unused but must be non-zero (e.g. 'j1'). 'j1' will
+ indent for example the following code snippet correctly: >
+***************
+*** 448,454 ****
+ }
+ });
+ <
+! *javascript-cinoptions* *javascript-indenting*
+ JN Indent JavaScript object declarations correctly by not confusing
+ them with labels. The value 'N' is currently unused but must be
+ non-zero (e.g. 'J1'). >
+--- 496,502 ----
+ }
+ });
+ <
+! *javascript-cinoptions* *javascript-indenting* *cino-J*
+ JN Indent JavaScript object declarations correctly by not confusing
+ them with labels. The value 'N' is currently unused but must be
+ non-zero (e.g. 'J1'). >
+***************
+*** 483,489 ****
+
+
+ The defaults, spelled out in full, are:
+! cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
+ c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
+
+ Vim puts a line in column 1 if:
+--- 534,540 ----
+
+
+ The defaults, spelled out in full, are:
+! cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+ c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
+
+ Vim puts a line in column 1 if:
+*** ../mercurial/vim73/src/misc1.c 2011-05-25 13:33:59.000000000 +0200
+--- src/misc1.c 2011-05-25 14:57:31.000000000 +0200
+***************
+*** 4959,4964 ****
+--- 4959,4965 ----
+ static int corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos));
+ static int find_last_paren __ARGS((char_u *l, int start, int end));
+ static int find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment));
++ static int cin_is_cpp_namespace __ARGS((char_u *));
+
+ static int ind_hash_comment = 0; /* # starts a comment */
+
+***************
+*** 5221,5226 ****
+--- 5222,5271 ----
+ return (*(s = cin_skipcomment(s + i)) == ':' && s[1] != ':');
+ }
+
++ /* Maximum number of lines to search back for a "namespace" line. */
++ #define FIND_NAMESPACE_LIM 20
++
++ /*
++ * Recognize a "namespace" scope declaration.
++ */
++ static int
++ cin_is_cpp_namespace(s)
++ char_u *s;
++ {
++ char_u *p;
++ int has_name = FALSE;
++
++ s = cin_skipcomment(s);
++ if (STRNCMP(s, "namespace", 9) == 0 && (s[9] == NUL || !vim_iswordc(s[9])))
++ {
++ p = cin_skipcomment(skipwhite(s + 9));
++ while (*p != NUL)
++ {
++ if (vim_iswhite(*p))
++ {
++ has_name = TRUE; /* found end of a name */
++ p = cin_skipcomment(skipwhite(p));
++ }
++ else if (*p == '{')
++ {
++ break;
++ }
++ else if (vim_iswordc(*p))
++ {
++ if (has_name)
++ return FALSE; /* word character after skipping past name */
++ ++p;
++ }
++ else
++ {
++ return FALSE;
++ }
++ }
++ return TRUE;
++ }
++ return FALSE;
++ }
++
+ /*
+ * Return a pointer to the first non-empty non-comment character after a ':'.
+ * Return NULL if not found.
+***************
+*** 6296,6301 ****
+--- 6341,6351 ----
+ */
+ int ind_keep_case_label = 0;
+
++ /*
++ * handle C++ namespace
++ */
++ int ind_cpp_namespace = 0;
++
+ pos_T cur_curpos;
+ int amount;
+ int scope_amount;
+***************
+*** 6336,6341 ****
+--- 6386,6392 ----
+ int n;
+ int iscase;
+ int lookfor_break;
++ int lookfor_cpp_namespace = FALSE;
+ int cont_amount = 0; /* amount for continuation line */
+ int original_line_islabel;
+
+***************
+*** 6409,6414 ****
+--- 6460,6466 ----
+ case 'J': ind_js = n; break;
+ case 'l': ind_keep_case_label = n; break;
+ case '#': ind_hash_comment = n; break;
++ case 'N': ind_cpp_namespace = n; break;
+ }
+ if (*options == ',')
+ ++options;
+***************
+*** 6976,6986 ****
+--- 7028,7051 ----
+ if (start_brace == BRACE_IN_COL0) /* '{' is in column 0 */
+ {
+ amount = ind_open_left_imag;
++ lookfor_cpp_namespace = TRUE;
++ }
++ else if (start_brace == BRACE_AT_START &&
++ lookfor_cpp_namespace) /* '{' is at start */
++ {
++
++ lookfor_cpp_namespace = TRUE;
+ }
+ else
+ {
+ if (start_brace == BRACE_AT_END) /* '{' is at end of line */
++ {
+ amount += ind_open_imag;
++
++ l = skipwhite(ml_get_curline());
++ if (cin_is_cpp_namespace(l))
++ amount += ind_cpp_namespace;
++ }
+ else
+ {
+ /* Compensate for adding ind_open_extra later. */
+***************
+*** 7151,7156 ****
+--- 7216,7261 ----
+ else
+ amount += ind_continuation;
+ }
++ else if (lookfor_cpp_namespace)
++ {
++ if (curwin->w_cursor.lnum == ourscope)
++ continue;
++
++ if (curwin->w_cursor.lnum == 0
++ || curwin->w_cursor.lnum
++ < ourscope - FIND_NAMESPACE_LIM)
++ break;
++
++ l = ml_get_curline();
++
++ /*
++ * If we're in a comment now, skip to the start of the
++ * comment.
++ */
++ trypos = find_start_comment(ind_maxcomment);
++ if (trypos != NULL)
++ {
++ curwin->w_cursor.lnum = trypos->lnum + 1;
++ curwin->w_cursor.col = 0;
++ continue;
++ }
++
++ /*
++ * Skip preprocessor directives and blank lines.
++ */
++ if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
++ continue;
++
++ if (cin_is_cpp_namespace(l))
++ {
++ amount += ind_cpp_namespace;
++ break;
++ }
++
++ if (cin_nocode(l))
++ continue;
++
++ }
+ else if (lookfor != LOOKFOR_TERM
+ && lookfor != LOOKFOR_CPP_BASECLASS)
+ {
+*** ../mercurial/vim73/src/testdir/test3.in 2011-05-25 13:33:59.000000000 +0200
+--- src/testdir/test3.in 2011-05-25 14:47:31.000000000 +0200
+***************
+*** 799,804 ****
+--- 799,867 ----
+ df */
+ hello
+ }
++
++ /* valid namespaces with normal indent */
++ namespace
++ {
++ {
++ 111111111111;
++ }
++ }
++ namespace /* test */
++ {
++ 11111111111111111;
++ }
++ namespace // test
++ {
++ 111111111111111111;
++ }
++ namespace
++ {
++ 111111111111111111;
++ }
++ namespace test
++ {
++ 111111111111111111;
++ }
++ namespace{
++ 111111111111111111;
++ }
++ namespace test{
++ 111111111111111111;
++ }
++ namespace {
++ 111111111111111111;
++ }
++ namespace test {
++ 111111111111111111;
++ namespace test2 {
++ 22222222222222222;
++ }
++ }
++
++ /* invalid namespaces use block indent */
++ namespace test test2 {
++ 111111111111111111111;
++ }
++ namespace11111111111 {
++ 111111111111;
++ }
++ namespace() {
++ 1111111111111;
++ }
++ namespace()
++ {
++ 111111111111111111;
++ }
++ namespace test test2
++ {
++ 1111111111111111111;
++ }
++ namespace111111111
++ {
++ 111111111111111111;
++ }
++
+ /* end of AUTO */
+
+ STARTTEST
+***************
+*** 1428,1433 ****
+--- 1491,1566 ----
+ }
+
+ STARTTEST
++ :set cino=N-s
++ /namespaces
++ =/^NAMESPACEEND
++ ENDTEST
++
++ /* valid namespaces with normal indent */
++ namespace
++ {
++ {
++ 111111111111;
++ }
++ }
++ namespace /* test */
++ {
++ 11111111111111111;
++ }
++ namespace // test
++ {
++ 111111111111111111;
++ }
++ namespace
++ {
++ 111111111111111111;
++ }
++ namespace test
++ {
++ 111111111111111111;
++ }
++ namespace{
++ 111111111111111111;
++ }
++ namespace test{
++ 111111111111111111;
++ }
++ namespace {
++ 111111111111111111;
++ }
++ namespace test {
++ 111111111111111111;
++ namespace test2 {
++ 22222222222222222;
++ }
++ }
++
++ /* invalid namespaces use block indent */
++ namespace test test2 {
++ 111111111111111111111;
++ }
++ namespace11111111111 {
++ 111111111111;
++ }
++ namespace() {
++ 1111111111111;
++ }
++ namespace()
++ {
++ 111111111111111111;
++ }
++ namespace test test2
++ {
++ 1111111111111111111;
++ }
++ namespace111111111
++ {
++ 111111111111111111;
++ }
++ NAMESPACEEND
++
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../mercurial/vim73/src/testdir/test3.ok 2011-05-25 13:33:59.000000000 +0200
+--- src/testdir/test3.ok 2011-05-25 14:48:02.000000000 +0200
+***************
+*** 787,792 ****
+--- 787,855 ----
+ df */
+ hello
+ }
++
++ /* valid namespaces with normal indent */
++ namespace
++ {
++ {
++ 111111111111;
++ }
++ }
++ namespace /* test */
++ {
++ 11111111111111111;
++ }
++ namespace // test
++ {
++ 111111111111111111;
++ }
++ namespace
++ {
++ 111111111111111111;
++ }
++ namespace test
++ {
++ 111111111111111111;
++ }
++ namespace{
++ 111111111111111111;
++ }
++ namespace test{
++ 111111111111111111;
++ }
++ namespace {
++ 111111111111111111;
++ }
++ namespace test {
++ 111111111111111111;
++ namespace test2 {
++ 22222222222222222;
++ }
++ }
++
++ /* invalid namespaces use block indent */
++ namespace test test2 {
++ 111111111111111111111;
++ }
++ namespace11111111111 {
++ 111111111111;
++ }
++ namespace() {
++ 1111111111111;
++ }
++ namespace()
++ {
++ 111111111111111111;
++ }
++ namespace test test2
++ {
++ 1111111111111111111;
++ }
++ namespace111111111
++ {
++ 111111111111111111;
++ }
++
+ /* end of AUTO */
+
+
+***************
+*** 1273,1275 ****
+--- 1336,1403 ----
+ baz();
+ }
+
++
++ /* valid namespaces with normal indent */
++ namespace
++ {
++ {
++ 111111111111;
++ }
++ }
++ namespace /* test */
++ {
++ 11111111111111111;
++ }
++ namespace // test
++ {
++ 111111111111111111;
++ }
++ namespace
++ {
++ 111111111111111111;
++ }
++ namespace test
++ {
++ 111111111111111111;
++ }
++ namespace{
++ 111111111111111111;
++ }
++ namespace test{
++ 111111111111111111;
++ }
++ namespace {
++ 111111111111111111;
++ }
++ namespace test {
++ 111111111111111111;
++ namespace test2 {
++ 22222222222222222;
++ }
++ }
++
++ /* invalid namespaces use block indent */
++ namespace test test2 {
++ 111111111111111111111;
++ }
++ namespace11111111111 {
++ 111111111111;
++ }
++ namespace() {
++ 1111111111111;
++ }
++ namespace()
++ {
++ 111111111111111111;
++ }
++ namespace test test2
++ {
++ 1111111111111111111;
++ }
++ namespace111111111
++ {
++ 111111111111111111;
++ }
++ NAMESPACEEND
++
++
+*** ../vim-7.3.201/src/version.c 2011-05-25 13:33:59.000000000 +0200
+--- src/version.c 2011-05-25 15:14:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 202,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+107. When using your phone you forget that you don't have to use your
+ keyboard.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.203
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.203
+Problem: MS-Windows: Can't run an external command without a console window.
+Solution: Support ":!start /b cmd". (Xaizek)
+Files: runtime/doc/os_win32.txt, src/os_win32.c
+
+
+*** ../mercurial/vim73/src/os_win32.c 2011-05-05 18:31:54.000000000 +0200
+--- src/os_win32.c 2011-05-25 16:45:31.000000000 +0200
+***************
+*** 3401,3406 ****
+--- 3401,3407 ----
+ {
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
++ DWORD flags = CREATE_NEW_CONSOLE;
+
+ si.cb = sizeof(si);
+ si.lpReserved = NULL;
+***************
+*** 3418,3423 ****
+--- 3419,3440 ----
+ si.dwFlags = STARTF_USESHOWWINDOW;
+ si.wShowWindow = SW_SHOWMINNOACTIVE;
+ }
++ else if ((STRNICMP(cmdbase, "/b", 2) == 0)
++ && vim_iswhite(cmdbase[2]))
++ {
++ cmdbase = skipwhite(cmdbase + 2);
++ flags = CREATE_NO_WINDOW;
++ si.dwFlags = STARTF_USESTDHANDLES;
++ si.hStdInput = CreateFile("\\\\.\\NUL", // File name
++ GENERIC_READ, // Access flags
++ 0, // Share flags
++ NULL, // Security att.
++ OPEN_EXISTING, // Open flags
++ FILE_ATTRIBUTE_NORMAL, // File att.
++ NULL); // Temp file
++ si.hStdOutput = si.hStdInput;
++ si.hStdError = si.hStdInput;
++ }
+
+ /* When the command is in double quotes, but 'shellxquote' is
+ * empty, keep the double quotes around the command.
+***************
+*** 3445,3451 ****
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+! CREATE_NEW_CONSOLE, // Creation flags
+ NULL, // Environment
+ NULL, // Current directory
+ &si, // Startup information
+--- 3462,3468 ----
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+! flags, // Creation flags
+ NULL, // Environment
+ NULL, // Current directory
+ &si, // Startup information
+***************
+*** 3458,3463 ****
+--- 3475,3485 ----
+ EMSG(_("E371: Command not found"));
+ #endif
+ }
++ if (si.hStdInput != NULL)
++ {
++ /* Close the handle to \\.\NUL */
++ CloseHandle(si.hStdInput);
++ }
+ /* Close the handles to the subprocess, so that it goes away */
+ CloseHandle(pi.hThread);
+ CloseHandle(pi.hProcess);
+*** ../vim-7.3.202/src/version.c 2011-05-25 15:16:06.000000000 +0200
+--- src/version.c 2011-05-25 17:05:59.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 203,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+108. While reading a magazine, you look for the Zoom icon for a better
+ look at a photograph.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.204
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.204 (after 7.3.201)
+Problem: Compiler warning.
+Solution: Add type cast. (Mike Williams)
+Files: src/misc1.c
+
+
+*** ../mercurial/vim73/src/misc1.c 2011-05-25 15:16:06.000000000 +0200
+--- src/misc1.c 2011-05-25 17:25:10.000000000 +0200
+***************
+*** 7657,7663 ****
+ * not the one from "if () {". */
+ if (*l == '}')
+ curwin->w_cursor.col =
+! (l - ml_get_curline()) + 1;
+
+ if ((trypos = find_start_brace(ind_maxcomment))
+ == NULL
+--- 7657,7663 ----
+ * not the one from "if () {". */
+ if (*l == '}')
+ curwin->w_cursor.col =
+! (colnr_T)(l - ml_get_curline()) + 1;
+
+ if ((trypos = find_start_brace(ind_maxcomment))
+ == NULL
+*** ../vim-7.3.203/src/version.c 2011-05-25 17:06:16.000000000 +0200
+--- src/version.c 2011-05-25 17:29:32.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 204,
+ /**/
+
+--
+In a world without walls and borders, who needs windows and gates?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.205
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.205
+Problem: Syntax "extend" doesn't work correctly.
+Solution: Avoid calling check_state_ends() recursively (Ben Schmidt)
+Files: src/syntax.c
+
+
+*** ../mercurial/vim73/src/syntax.c 2011-05-19 12:14:03.000000000 +0200
+--- src/syntax.c 2011-05-25 17:47:46.000000000 +0200
+***************
+*** 990,996 ****
+--- 990,999 ----
+ * previous line and regions that have "keepend".
+ */
+ if (current_state.ga_len > 0)
++ {
+ syn_update_ends(TRUE);
++ check_state_ends();
++ }
+
+ next_match_idx = -1;
+ ++current_line_id;
+***************
+*** 1064,1070 ****
+ }
+ }
+ check_keepend();
+- check_state_ends();
+ }
+
+ /****************************************
+--- 1067,1072 ----
+***************
+*** 2533,2539 ****
+ check_state_ends()
+ {
+ stateitem_T *cur_si;
+! int had_extend = FALSE;
+
+ cur_si = &CUR_STATE(current_state.ga_len - 1);
+ for (;;)
+--- 2535,2541 ----
+ check_state_ends()
+ {
+ stateitem_T *cur_si;
+! int had_extend;
+
+ cur_si = &CUR_STATE(current_state.ga_len - 1);
+ for (;;)
+***************
+*** 2586,2593 ****
+
+ /* When the ended item has "extend", another item with
+ * "keepend" now needs to check for its end. */
+! if (cur_si->si_flags & HL_EXTEND)
+! had_extend = TRUE;
+
+ pop_current_state();
+
+--- 2588,2594 ----
+
+ /* When the ended item has "extend", another item with
+ * "keepend" now needs to check for its end. */
+! had_extend = (cur_si->si_flags & HL_EXTEND);
+
+ pop_current_state();
+
+*** ../vim-7.3.204/src/version.c 2011-05-25 17:29:40.000000000 +0200
+--- src/version.c 2011-05-25 17:52:57.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 205,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+110. You actually volunteer to become your employer's webmaster.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.206
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.206
+Problem: 64bit MS-Windows compiler warning.
+Solution: Use HandleToLong() instead of type cast. (Mike Williams)
+Files: src/gui_w32.c
+
+
+*** ../mercurial/vim73/src/gui_w32.c 2011-01-17 20:08:04.000000000 +0100
+--- src/gui_w32.c 2011-05-25 21:14:10.000000000 +0200
+***************
+*** 1575,1581 ****
+
+ #ifdef FEAT_EVAL
+ /* set the v:windowid variable */
+! set_vim_var_nr(VV_WINDOWID, (long)s_hwnd);
+ #endif
+
+ theend:
+--- 1575,1581 ----
+
+ #ifdef FEAT_EVAL
+ /* set the v:windowid variable */
+! set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
+ #endif
+
+ theend:
+*** ../vim-7.3.205/src/version.c 2011-05-25 17:56:23.000000000 +0200
+--- src/version.c 2011-05-25 21:16:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 206,
+ /**/
+
+--
+FIXME and XXX are two common keywords used to mark broken or incomplete code
+not only since XXX as a sex reference would grab everybody's attention but
+simply due to the fact that Vim would highlight these words.
+ -- Hendrik Scholz
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.207
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.207
+Problem: Can't compile with MSVC with pentium4 and 64 bit.
+Solution: Only use SSE2 for 32 bit. (Mike Williams)
+Files: src/Make_mvc.mak
+
+
+*** ../mercurial/vim73/src/Make_mvc.mak 2011-02-15 18:06:11.000000000 +0100
+--- src/Make_mvc.mak 2011-06-04 11:59:38.000000000 +0200
+***************
+*** 409,416 ****
+ CPUARG =
+ !endif
+ !else
+! # VC8/9 only allows specifying SSE architecture
+! !if "$(CPUNR)" == "pentium4"
+ CPUARG = /arch:SSE2
+ !endif
+ !endif
+--- 409,416 ----
+ CPUARG =
+ !endif
+ !else
+! # VC8/9/10 only allows specifying SSE architecture but only for 32bit
+! !if "$(ASSEMBLY_ARCHITECTURE)" == "x86" && "$(CPUNR)" == "pentium4"
+ CPUARG = /arch:SSE2
+ !endif
+ !endif
+*** ../vim-7.3.206/src/version.c 2011-05-25 21:18:02.000000000 +0200
+--- src/version.c 2011-06-12 20:30:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 207,
+ /**/
+
+--
+"The question of whether computers can think is just like the question
+of whether submarines can swim." -- Edsger W. Dijkstra
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.208
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.208
+Problem: Early terminated if statement.
+Solution: Remove the semicolon. (Lech Lorens)
+Files: src/gui_mac.c
+
+
+*** ../mercurial/vim73/src/gui_mac.c 2011-01-17 20:08:04.000000000 +0100
+--- src/gui_mac.c 2011-06-06 05:35:46.000000000 +0200
+***************
+*** 1840,1846 ****
+ p.v -= gui.scrollbar_height;
+ p.v -= p.v % gui.char_height;
+ p.v += 2 * gui.border_width;
+! if (gui.which_scrollbars[SBAR_BOTTOM]);
+ p.v += gui.scrollbar_height;
+
+ ZoomWindowIdeal(whichWindow, thePart, &p);
+--- 1840,1846 ----
+ p.v -= gui.scrollbar_height;
+ p.v -= p.v % gui.char_height;
+ p.v += 2 * gui.border_width;
+! if (gui.which_scrollbars[SBAR_BOTTOM])
+ p.v += gui.scrollbar_height;
+
+ ZoomWindowIdeal(whichWindow, thePart, &p);
+*** ../vim-7.3.207/src/version.c 2011-06-12 20:31:25.000000000 +0200
+--- src/version.c 2011-06-12 20:33:00.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 208,
+ /**/
+
+--
+Keep America beautiful. Swallow your beer cans.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.209
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.209
+Problem: MSVC Install instructions point to wrong batch file.
+Solution: Add a batch file for use with MSVC 10.
+Files: src/msvc2010.bat, src/INSTALLpc.txt, Filelist
+
+
+*** ../mercurial/vim73/src/msvc2010.bat 2011-06-12 20:35:31.000000000 +0200
+--- src/msvc2010.bat 2011-06-09 05:08:35.000000000 +0200
+***************
+*** 0 ****
+--- 1,7 ----
++ @echo off
++ rem To be used on MS-Windows for Visual C++ 2010 Express Edition
++ rem aka Microsoft Visual Studio 10.0.
++ rem See INSTALLpc.txt for information.
++ @echo on
++
++ call "%VS100COMNTOOLS%%vsvars32.bat"
+*** ../mercurial/vim73/src/INSTALLpc.txt 2010-08-16 21:23:30.000000000 +0200
+--- src/INSTALLpc.txt 2011-06-08 06:47:46.000000000 +0200
+***************
+*** 28,35 ****
+ 9. MS-DOS
+
+ The currently preferred method is using the free Visual C++ Toolkit 2008
+! |msvc-2008-express|. If you need the executable to run on Windows 98 or ME,
+! use the 2003 one |msvc-2003-toolkit|.
+
+
+ 1. Microsoft Visual C++
+--- 28,36 ----
+ 9. MS-DOS
+
+ The currently preferred method is using the free Visual C++ Toolkit 2008
+! |msvc-2008-express|, the produced binary runs on most MS-Windows systems. If
+! you need the executable to run on Windows 98 or ME, use the 2003 one
+! |msvc-2003-toolkit|.
+
+
+ 1. Microsoft Visual C++
+***************
+*** 176,182 ****
+ http://www.microsoft.com/express/vc/Default.aspx
+ This includes the IDE and the debugger.
+
+! To set the environment execute the msvc2008.bat script. You can then build
+ Vim with Make_mvc.mak.
+
+
+--- 177,183 ----
+ http://www.microsoft.com/express/vc/Default.aspx
+ This includes the IDE and the debugger.
+
+! To set the environment execute the msvc2010.bat script. You can then build
+ Vim with Make_mvc.mak.
+
+
+*** ../mercurial/vim73/Filelist 2011-05-19 13:40:47.000000000 +0200
+--- Filelist 2011-06-09 05:17:25.000000000 +0200
+***************
+*** 262,267 ****
+--- 262,268 ----
+ src/bigvim.bat \
+ src/msvcsetup.bat \
+ src/msvc2008.bat \
++ src/msvc2010.bat \
+ src/dimm.idl \
+ src/dlldata.c \
+ src/dosinst.c \
+*** ../vim-7.3.208/src/version.c 2011-06-12 20:33:30.000000000 +0200
+--- src/version.c 2011-06-12 20:34:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 209,
+ /**/
+
+--
+"Hit any key to continue" is a lie.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.210
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.210
+Problem: Can't always find the file when using cscope.
+Solution: Add the 'cscoperelative' option. (Raghavendra D Prabhu)
+Files: runtime/doc/if_cscop.txt, runtime/doc/options.txt,
+ src/if_cscope.c, src/options.c, src/options.h
+
+
+*** ../mercurial/vim73/runtime/doc/if_cscop.txt 2010-09-30 21:38:08.000000000 +0200
+--- runtime/doc/if_cscop.txt 2011-06-12 19:54:26.000000000 +0200
+***************
+*** 271,276 ****
+--- 271,285 ----
+ :set cst
+ :set nocst
+ <
++ *cscoperelative* *csre*
++ If 'cscoperelative' set, then in absence of a prefix given to cscope (prefx
++ is the argument to -P option of cscope), basename of cscope.out location
++ (usually the project root directory) will be used as the prefix to construt
++ absolute path.The default is off. Note: This option is only effective when
++ cscope (cscopeprg) is initialized without a prefix path (-P). Examples: >
++ :set csre
++ :set nocsre
++ <
+ *cscopetagorder* *csto*
+ The value of 'csto' determines the order in which |:cstag| performs a search.
+ If 'csto' is set to zero, cscope database(s) are searched first, followed
+*** ../mercurial/vim73/runtime/doc/options.txt 2011-05-19 12:22:41.000000000 +0200
+--- runtime/doc/options.txt 2011-06-12 20:00:10.000000000 +0200
+***************
+*** 2209,2214 ****
+--- 2209,2224 ----
+ Specifies whether to use quickfix window to show cscope results.
+ See |cscopequickfix|.
+
++ *'cscoperelative'* *'csre'*
++ 'cscoperelative' 'csre' boolean (default off)
++ global
++ {not available when compiled without the |+cscope|
++ feature}
++ {not in Vi}
++ In the absence of a prefix (-P) for cscope. setting this option enables
++ to use the basename of cscope.out path as the prefix.
++ See |cscoperelative|.
++
+ *'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
+ 'cscopetag' 'cst' boolean (default off)
+ global
+*** ../mercurial/vim73/src/if_cscope.c 2011-05-05 16:41:19.000000000 +0200
+--- src/if_cscope.c 2011-06-12 20:25:17.000000000 +0200
+***************
+*** 2471,2512 ****
+ */
+ static char *
+ cs_resolve_file(i, name)
+! int i;
+ char *name;
+ {
+! char *fullname;
+! int len;
+
+ /*
+! * ppath is freed when we destroy the cscope connection.
+! * fullname is freed after cs_make_vim_style_matches, after it's been
+! * copied into the tag buffer used by vim
+ */
+ len = (int)(strlen(name) + 2);
+ if (csinfo[i].ppath != NULL)
+ len += (int)strlen(csinfo[i].ppath);
+
+ if ((fullname = (char *)alloc(len)) == NULL)
+ return NULL;
+
+! /*
+! * note/example: this won't work if the cscope output already starts
+ * "../.." and the prefix path is also "../..". if something like this
+! * happens, you are screwed up and need to fix how you're using cscope.
+! */
+! if (csinfo[i].ppath != NULL &&
+! (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0) &&
+! (name[0] != '/')
+ #ifdef WIN32
+! && name[0] != '\\' && name[1] != ':'
+ #endif
+! )
+ (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
+ else
+ (void)sprintf(fullname, "%s", name);
+
+ return fullname;
+! } /* cs_resolve_file */
+
+
+ /*
+--- 2471,2531 ----
+ */
+ static char *
+ cs_resolve_file(i, name)
+! int i;
+ char *name;
+ {
+! char *fullname;
+! int len;
+! char_u *csdir = NULL;
+
+ /*
+! * Ppath is freed when we destroy the cscope connection.
+! * Fullname is freed after cs_make_vim_style_matches, after it's been
+! * copied into the tag buffer used by Vim.
+ */
+ len = (int)(strlen(name) + 2);
+ if (csinfo[i].ppath != NULL)
+ len += (int)strlen(csinfo[i].ppath);
++ else if (p_csre && csinfo[i].fname != NULL)
++ {
++ /* If 'cscoperelative' is set and ppath is not set, use cscope.out
++ * path in path resolution. */
++ csdir = alloc(MAXPATHL);
++ if (csdir != NULL)
++ {
++ vim_strncpy(csdir, (char_u *)csinfo[i].fname,
++ gettail((char_u *)csinfo[i].fname) - 1 - (char_u *)csinfo[i].fname);
++ len += (int)STRLEN(csdir);
++ }
++ }
+
+ if ((fullname = (char *)alloc(len)) == NULL)
+ return NULL;
+
+! /* Note/example: this won't work if the cscope output already starts
+ * "../.." and the prefix path is also "../..". if something like this
+! * happens, you are screwed up and need to fix how you're using cscope. */
+! if (csinfo[i].ppath != NULL
+! && (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0)
+! && (name[0] != '/')
+ #ifdef WIN32
+! && name[0] != '\\' && name[1] != ':'
+ #endif
+! )
+ (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
++ else if (csdir != NULL && csinfo[i].fname != NULL && STRLEN(csdir) > 0)
++ {
++ /* Check for csdir to be non empty to avoid empty path concatenated to
++ * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
++ vim_free(fullname);
++ fullname = concat_fnames(csdir, (char_u *)name, TRUE);
++ }
+ else
+ (void)sprintf(fullname, "%s", name);
+
++ vim_free(csdir);
+ return fullname;
+! }
+
+
+ /*
+*** ../vim-7.3.209/src/version.c 2011-06-12 20:36:00.000000000 +0200
+--- src/version.c 2011-06-12 20:37:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 210,
+ /**/
+
+--
+Apathy Error: Don't bother striking any key.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.211
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.211 (after 7.3.210)
+Problem: Compiler warning.
+Solution: Add type cast.
+Files: src/if_cscope.c
+
+
+*** ../mercurial/vim73/src/if_cscope.c 2011-06-12 20:42:17.000000000 +0200
+--- src/if_cscope.c 2011-06-12 21:22:53.000000000 +0200
+***************
+*** 2518,2524 ****
+ /* Check for csdir to be non empty to avoid empty path concatenated to
+ * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
+ vim_free(fullname);
+! fullname = concat_fnames(csdir, (char_u *)name, TRUE);
+ }
+ else
+ (void)sprintf(fullname, "%s", name);
+--- 2518,2524 ----
+ /* Check for csdir to be non empty to avoid empty path concatenated to
+ * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
+ vim_free(fullname);
+! fullname = (char *)concat_fnames(csdir, (char_u *)name, TRUE);
+ }
+ else
+ (void)sprintf(fullname, "%s", name);
+*** ../vim-7.3.210/src/version.c 2011-06-12 20:42:17.000000000 +0200
+--- src/version.c 2011-06-12 21:24:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 211,
+ /**/
+
+--
+Did you ever see a "Hit any key to continue" message in a music piece?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.212
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.212
+Problem: With Python 3.2 ":py3" fails.
+Solution: Move PyEval_InitThreads() to after Py_Initialize(). (Roland
+ Puntaier) Check abiflags in configure. (Andreas Behr)
+Files: src/if_python3.c, src/auto/configure, src/configure.in
+
+
+*** ../mercurial/vim73/src/if_python3.c 2011-02-25 15:18:46.000000000 +0100
+--- src/if_python3.c 2011-06-11 04:24:49.000000000 +0200
+***************
+*** 547,560 ****
+ Py_SetPythonHome(PYTHON3_HOME);
+ #endif
+
+- /* initialise threads */
+- PyEval_InitThreads();
+-
+ #if !defined(MACOS) || defined(MACOS_X_UNIX)
+ Py_Initialize();
+ #else
+ PyMac_Initialize();
+ #endif
+
+ #ifdef DYNAMIC_PYTHON3
+ get_py3_exceptions();
+--- 547,559 ----
+ Py_SetPythonHome(PYTHON3_HOME);
+ #endif
+
+ #if !defined(MACOS) || defined(MACOS_X_UNIX)
+ Py_Initialize();
+ #else
+ PyMac_Initialize();
+ #endif
++ /* initialise threads, must be after Py_Initialize() */
++ PyEval_InitThreads();
+
+ #ifdef DYNAMIC_PYTHON3
+ get_py3_exceptions();
+*** ../mercurial/vim73/src/auto/configure 2011-05-10 15:41:59.000000000 +0200
+--- src/auto/configure 2011-06-12 21:33:16.000000000 +0200
+***************
+*** 5505,5510 ****
+--- 5505,5527 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_version" >&5
+ $as_echo "$vi_cv_var_python3_version" >&6; }
+
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's abiflags" >&5
++ $as_echo_n "checking Python's abiflags... " >&6; }
++ if test "${vi_cv_var_python3_abiflags+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++ else
++
++ vi_cv_var_python3_abiflags=
++ if ${vi_cv_path_python3} -c \
++ "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
++ then
++ vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
++ "import sys; print(sys.abiflags)"`
++ fi
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_abiflags" >&5
++ $as_echo "$vi_cv_var_python3_abiflags" >&6; }
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+ $as_echo_n "checking Python's install prefix... " >&6; }
+ if test "${vi_cv_path_python3_pfx+set}" = set; then :
+***************
+*** 5555,5563 ****
+ else
+
+ vi_cv_path_python3_conf=
+ for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+ for subdir in lib64 lib share; do
+! d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
+ if test -d "$d" && test -f "$d/config.c"; then
+ vi_cv_path_python3_conf="$d"
+ fi
+--- 5572,5584 ----
+ else
+
+ vi_cv_path_python3_conf=
++ config_dir="config"
++ if test "${vi_cv_var_python3_abiflags}" != ""; then
++ config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
++ fi
+ for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+ for subdir in lib64 lib share; do
+! d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
+ if test -d "$d" && test -f "$d/config.c"; then
+ vi_cv_path_python3_conf="$d"
+ fi
+***************
+*** 5592,5598 ****
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+ vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+! vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+
+--- 5613,5619 ----
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+ vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+! vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+
+***************
+*** 5601,5609 ****
+
+ PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ if test "x$MACOSX" = "xyes"; then
+--- 5622,5630 ----
+
+ PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ if test "x$MACOSX" = "xyes"; then
+*** ../mercurial/vim73/src/configure.in 2011-05-10 15:41:59.000000000 +0200
+--- src/configure.in 2011-06-12 21:31:18.000000000 +0200
+***************
+*** 992,997 ****
+--- 992,1008 ----
+ ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
+ ]])
+
++ dnl -- get abiflags for python 3.2 or higher (PEP 3149)
++ AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
++ [
++ vi_cv_var_python3_abiflags=
++ if ${vi_cv_path_python3} -c \
++ "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
++ then
++ vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
++ "import sys; print(sys.abiflags)"`
++ fi ])
++
+ dnl -- find where python3 thinks it was installed
+ AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
+ [ vi_cv_path_python3_pfx=`
+***************
+*** 1021,1029 ****
+ AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
+ [
+ vi_cv_path_python3_conf=
+ for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+ for subdir in lib64 lib share; do
+! d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
+ if test -d "$d" && test -f "$d/config.c"; then
+ vi_cv_path_python3_conf="$d"
+ fi
+--- 1032,1044 ----
+ AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
+ [
+ vi_cv_path_python3_conf=
++ config_dir="config"
++ if test "${vi_cv_var_python3_abiflags}" != ""; then
++ config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
++ fi
+ for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+ for subdir in lib64 lib share; do
+! d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
+ if test -d "$d" && test -f "$d/config.c"; then
+ vi_cv_path_python3_conf="$d"
+ fi
+***************
+*** 1055,1061 ****
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+ vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+! vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
+ dnl remove -ltermcap, it can conflict with an earlier -lncurses
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+--- 1070,1076 ----
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+ vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+! vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ dnl remove -ltermcap, it can conflict with an earlier -lncurses
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+***************
+*** 1063,1071 ****
+
+ PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ dnl For Mac OSX 10.2 config.o is included in the Python library.
+--- 1078,1086 ----
+
+ PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ dnl For Mac OSX 10.2 config.o is included in the Python library.
+*** ../vim-7.3.211/src/version.c 2011-06-12 21:24:56.000000000 +0200
+--- src/version.c 2011-06-12 21:35:31.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 212,
+ /**/
+
+--
+In Joseph Heller's novel "Catch-22", the main character tries to get out of a
+war by proving he is crazy. But the mere fact he wants to get out of the war
+only shows he isn't crazy -- creating the original "Catch-22".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.213
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.213
+Problem: Javascript object literal is not indented correctly.
+Solution: Make a special case for when "J1" is in 'cino'. (Luc Deschenaux)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../mercurial/vim73/src/misc1.c 2011-05-25 17:29:40.000000000 +0200
+--- src/misc1.c 2011-06-10 04:58:10.000000000 +0200
+***************
+*** 6965,6971 ****
+ * ldfd) {
+ * }
+ */
+! if ((ind_keep_case_label
+ && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
+ amount = get_indent();
+ else
+--- 6965,6971 ----
+ * ldfd) {
+ * }
+ */
+! if (ind_js || (ind_keep_case_label
+ && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
+ amount = get_indent();
+ else
+*** ../mercurial/vim73/src/testdir/test3.in 2011-05-25 15:16:06.000000000 +0200
+--- src/testdir/test3.in 2011-06-12 21:44:12.000000000 +0200
+***************
+*** 1492,1501 ****
+
+ STARTTEST
+ :set cino=N-s
+! /namespaces
+ =/^NAMESPACEEND
+ ENDTEST
+
+ /* valid namespaces with normal indent */
+ namespace
+ {
+--- 1492,1502 ----
+
+ STARTTEST
+ :set cino=N-s
+! /^NAMESPACESTART
+ =/^NAMESPACEEND
+ ENDTEST
+
++ NAMESPACESTART
+ /* valid namespaces with normal indent */
+ namespace
+ {
+***************
+*** 1561,1566 ****
+--- 1562,1588 ----
+
+
+ STARTTEST
++ :set cino=J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ var bar = {
++ foo: {
++ that: this,
++ some: ok,
++ },
++ "bar":{
++ a : 2,
++ b: "123abc",
++ x: 4,
++ "y": 5
++ }
++ }
++ JSEND
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../mercurial/vim73/src/testdir/test3.ok 2011-05-25 15:16:06.000000000 +0200
+--- src/testdir/test3.ok 2011-06-12 21:44:26.000000000 +0200
+***************
+*** 1337,1342 ****
+--- 1337,1343 ----
+ }
+
+
++ NAMESPACESTART
+ /* valid namespaces with normal indent */
+ namespace
+ {
+***************
+*** 1401,1403 ****
+--- 1402,1420 ----
+ NAMESPACEEND
+
+
++
++ JSSTART
++ var bar = {
++ foo: {
++ that: this,
++ some: ok,
++ },
++ "bar":{
++ a : 2,
++ b: "123abc",
++ x: 4,
++ "y": 5
++ }
++ }
++ JSEND
++
+*** ../vim-7.3.212/src/version.c 2011-06-12 21:37:06.000000000 +0200
+--- src/version.c 2011-06-12 21:48:34.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 213,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+169. You hire a housekeeper for your home page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.214
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.214
+Problem: The text displayed by ":z-" isn't exactly like old Vi.
+Solution: Add one to the start line number. (ChangZhuo Chen)
+Files: src/ex_cmds.c
+
+
+*** ../mercurial/vim73/src/ex_cmds.c 2011-05-19 14:30:07.000000000 +0200
+--- src/ex_cmds.c 2011-05-19 14:23:33.000000000 +0200
+***************
+*** 4097,4104 ****
+ switch (*kind)
+ {
+ case '-':
+! start = lnum - bigness * (linenr_T)(x - kind);
+! end = start + bigness;
+ curs = end;
+ break;
+
+--- 4097,4104 ----
+ switch (*kind)
+ {
+ case '-':
+! start = lnum - bigness * (linenr_T)(x - kind) + 1;
+! end = start + bigness - 1;
+ curs = end;
+ break;
+
+*** ../vim-7.3.213/src/version.c 2011-06-12 21:51:01.000000000 +0200
+--- src/version.c 2011-06-12 22:02:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 214,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+170. You introduce your wife as "my_lady@home.wife" and refer to your
+ children as "forked processes."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.215
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.215 (after 7.3.210)
+Problem: Wrong file names in previous patch. (Toothpik)
+Solution: Include the option changes.
+Files: src/option.c, src/option.h
+
+
+*** ../mercurial/vim73/src/option.c 2011-05-19 13:40:47.000000000 +0200
+--- src/option.c 2011-06-12 19:58:17.000000000 +0200
+***************
+*** 901,906 ****
+--- 901,913 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
++ {"cscoperelative", "csre", P_BOOL|P_VI_DEF|P_VIM,
++ #ifdef FEAT_CSCOPE
++ (char_u *)&p_csre, PV_NONE,
++ #else
++ (char_u *)NULL, PV_NONE,
++ #endif
++ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"cscopetag", "cst", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_cst, PV_NONE,
+*** ../mercurial/vim73/src/option.h 2011-05-19 13:40:47.000000000 +0200
+--- src/option.h 2011-06-12 19:58:49.000000000 +0200
+***************
+*** 391,396 ****
+--- 391,397 ----
+ EXTERN char_u *p_cpo; /* 'cpoptions' */
+ #ifdef FEAT_CSCOPE
+ EXTERN char_u *p_csprg; /* 'cscopeprg' */
++ EXTERN int p_csre; /* 'cscoperelative' */
+ # ifdef FEAT_QUICKFIX
+ EXTERN char_u *p_csqf; /* 'cscopequickfix' */
+ # define CSQF_CMDS "sgdctefi"
+*** ../vim-7.3.214/src/version.c 2011-06-12 22:03:15.000000000 +0200
+--- src/version.c 2011-06-12 22:12:34.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 215,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+171. You invent another person and chat with yourself in empty chat rooms.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.216
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.216
+Problem: When recovering a file a range of lines is missing. (Charles Jie)
+Solution: Reset the index when advancing to the next pointer block. Add a
+ test to verify recovery works.
+Files: src/memline.c, src/testdir/test78.in, src/testdir/test78.ok,
+ src/testdir/Makefile, src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+ src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../mercurial/vim73/src/memline.c 2011-05-10 16:41:13.000000000 +0200
+--- src/memline.c 2011-06-13 00:56:09.000000000 +0200
+***************
+*** 1507,1512 ****
+--- 1507,1513 ----
+ bnum = pp->pb_pointer[idx].pe_bnum;
+ line_count = pp->pb_pointer[idx].pe_line_count;
+ page_count = pp->pb_pointer[idx].pe_page_count;
++ idx = 0;
+ continue;
+ }
+ }
+*** ../mercurial/vim73/src/testdir/test78.in 2011-06-13 01:05:54.000000000 +0200
+--- src/testdir/test78.in 2011-06-13 00:54:48.000000000 +0200
+***************
+*** 0 ****
+--- 1,46 ----
++ Inserts 10000 lines with text to fill the swap file with two levels of pointer
++ blocks. Then recovers from the swap file and checks all text is restored.
++
++ We need about 10000 lines of 100 characters to get two levels of pointer
++ blocks.
++
++ STARTTEST
++ :so small.vim
++ :set nocp fileformat=unix undolevels=-1
++ :e! Xtest
++ ggdG
++ :let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
++ :let i = 1
++ :let linecount = 10000
++ :while i <= linecount | call append(i - 1, i . text) | let i += 1 | endwhile
++ :preserve
++ :" get the name of the swap file
++ :redir => swapname
++ :swapname
++ :redir END
++ :let swapname = substitute(swapname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
++ :" make a copy of the swap file in Xswap
++ :set bin
++ :exe 'sp ' . swapname
++ :w! Xswap
++ :echo swapname
++ :set nobin
++ :new
++ :only!
++ :bwipe! Xtest
++ :call rename('Xswap', swapname)
++ :recover Xtest
++ :call delete(swapname)
++ :new
++ :call append(0, 'recovery start')
++ :wincmd w
++ :let linedollar = line('$')
++ :if linedollar < linecount | exe 'wincmd w' | call append(line('$'), "expected " . linecount . " lines but found only " . linedollar) | exe 'wincmd w' | let linecount = linedollar | endif
++ :let i = 1
++ :while i <= linecount | if getline(i) != i . text | exe 'wincmd w' | call append(line('$'), i . ' differs') | exe 'wincmd w' | endif | let i += 1 | endwhile
++ :q!
++ :call append(line('$'), 'recovery end')
++ :w! test.out
++ :qa!
++ ENDTEST
++
+*** ../mercurial/vim73/src/testdir/test78.ok 2011-06-13 01:05:54.000000000 +0200
+--- src/testdir/test78.ok 2011-06-13 00:25:05.000000000 +0200
+***************
+*** 0 ****
+--- 1,3 ----
++ recovery start
++
++ recovery end
+*** ../mercurial/vim73/src/testdir/Makefile 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Makefile 2011-06-13 00:35:46.000000000 +0200
+***************
+*** 25,31 ****
+ test59.out test60.out test61.out test62.out test63.out \
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 25,31 ----
+ test59.out test60.out test61.out test62.out test63.out \
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out test78.out
+
+ SCRIPTS_GUI = test16.out
+
+***************
+*** 71,77 ****
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! # -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+--- 71,77 ----
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+*** ../mercurial/vim73/src/testdir/Make_amiga.mak 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Make_amiga.mak 2011-06-13 01:00:42.000000000 +0200
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out
+
+ .SUFFIXES: .in .out
+
+--- 28,34 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 125,127 ****
+--- 125,128 ----
+ test75.out: test75.in
+ test76.out: test76.in
+ test77.out: test77.in
++ test78.out: test78.in
+*** ../mercurial/vim73/src/testdir/Make_dos.mak 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Make_dos.mak 2011-06-13 01:00:55.000000000 +0200
+***************
+*** 28,34 ****
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 28,34 ----
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out test78.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../mercurial/vim73/src/testdir/Make_ming.mak 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Make_ming.mak 2011-06-13 01:01:02.000000000 +0200
+***************
+*** 48,54 ****
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 48,54 ----
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out test78.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../mercurial/vim73/src/testdir/Make_os2.mak 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Make_os2.mak 2011-06-13 01:01:08.000000000 +0200
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out
+
+ .SUFFIXES: .in .out
+
+--- 28,34 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out
+
+ .SUFFIXES: .in .out
+
+*** ../mercurial/vim73/src/testdir/Make_vms.mms 2011-04-28 19:05:01.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-06-13 01:01:29.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Mar 03
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jun 13
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 75,81 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 75,81 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.215/src/version.c 2011-06-12 22:13:37.000000000 +0200
+--- src/version.c 2011-06-13 00:59:02.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 216,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+172. You join listservers just for the extra e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.217
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.217
+Problem: Inside an "if" a ":wincmd" causes problems.
+Solution: When skipping commands let ":wincmd" skip over its argument.
+Files: src/ex_docmd.c
+
+
+*** ../mercurial/vim73/src/ex_docmd.c 2011-05-25 12:51:17.000000000 +0200
+--- src/ex_docmd.c 2011-06-13 01:15:17.000000000 +0200
+***************
+*** 2595,2600 ****
+--- 2595,2601 ----
+ case CMD_unlet:
+ case CMD_verbose:
+ case CMD_vertical:
++ case CMD_wincmd:
+ break;
+
+ default: goto doend;
+***************
+*** 8237,8243 ****
+ p = skipwhite(p);
+ if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
+ EMSG(_(e_invarg));
+! else
+ {
+ /* Pass flags on for ":vertical wincmd ]". */
+ postponed_split_flags = cmdmod.split;
+--- 8238,8244 ----
+ p = skipwhite(p);
+ if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
+ EMSG(_(e_invarg));
+! else if (!eap->skip)
+ {
+ /* Pass flags on for ":vertical wincmd ]". */
+ postponed_split_flags = cmdmod.split;
+*** ../vim-7.3.216/src/version.c 2011-06-13 01:07:22.000000000 +0200
+--- src/version.c 2011-06-13 01:18:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 217,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+173. You keep tracking down the email addresses of all your friends
+ (even childhood friends).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.218
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.218 (after 7.3.212)
+Problem: Tiny configuration problem with Python 3.
+Solution: Add abiflags in one more place. (Andreas Behr)
+Files: src/auto/configure, src/configure.in
+
+
+*** ../mercurial/vim73/src/auto/configure 2011-06-12 21:37:06.000000000 +0200
+--- src/auto/configure 2011-06-13 01:26:50.000000000 +0200
+***************
+*** 5607,5613 ****
+ @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
+ @echo "python3_LIBS='$(LIBS)'"
+ @echo "python3_SYSLIBS='$(SYSLIBS)'"
+- @echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
+ @echo "python3_INSTSONAME='$(INSTSONAME)'"
+ eof
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+--- 5607,5612 ----
+***************
+*** 5624,5630 ****
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ if test "x$MACOSX" = "xyes"; then
+--- 5623,5629 ----
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ if test "x$MACOSX" = "xyes"; then
+*** ../mercurial/vim73/src/configure.in 2011-06-12 21:37:06.000000000 +0200
+--- src/configure.in 2011-06-13 01:26:35.000000000 +0200
+***************
+*** 1063,1069 ****
+ @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
+ @echo "python3_LIBS='$(LIBS)'"
+ @echo "python3_SYSLIBS='$(SYSLIBS)'"
+- @echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
+ @echo "python3_INSTSONAME='$(INSTSONAME)'"
+ eof
+ dnl -- delete the lines from make about Entering/Leaving directory
+--- 1063,1068 ----
+***************
+*** 1080,1086 ****
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ dnl For Mac OSX 10.2 config.o is included in the Python library.
+--- 1079,1085 ----
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ dnl For Mac OSX 10.2 config.o is included in the Python library.
+*** ../vim-7.3.217/src/version.c 2011-06-13 01:19:48.000000000 +0200
+--- src/version.c 2011-06-13 01:29:42.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 218,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+174. You know what a listserv is.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.219
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.219
+Problem: Can't compile with GTK on Mac.
+Solution: Add some #ifdef trickery. (Ben Schmidt)
+Files: src/os_mac_conv.c, src/os_macosx.m, src/vim.h
+
+
+*** ../mercurial/vim73/src/os_mac_conv.c 2010-08-16 21:23:30.000000000 +0200
+--- src/os_mac_conv.c 2011-06-13 01:55:17.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,21 ----
+ */
+
+ #define NO_X11_INCLUDES
++ #define BalloonEval int /* used in header files */
++
+ #include "vim.h"
+ #ifndef FEAT_GUI_MAC
+ # include <CoreServices/CoreServices.h>
+*** ../mercurial/vim73/src/os_macosx.m 2010-10-10 17:08:28.000000000 +0200
+--- src/os_macosx.m 2011-06-13 01:58:47.000000000 +0200
+***************
+*** 18,23 ****
+--- 18,24 ----
+ /* Avoid a conflict for the definition of Boolean between Mac header files and
+ * X11 header files. */
+ #define NO_X11_INCLUDES
++ #define BalloonEval int /* used in header files */
+
+ #include "vim.h"
+ #import <Cocoa/Cocoa.h>
+***************
+*** 27,35 ****
+ * Clipboard support for the console.
+ * Don't include this when building the GUI version, the functions in
+ * gui_mac.c are used then. TODO: remove those instead?
+! * But for MacVim we need these ones.
+ */
+! #if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI) || defined(FEAT_GUI_MACVIM))
+
+ /* Used to identify clipboard data copied from Vim. */
+
+--- 28,36 ----
+ * Clipboard support for the console.
+ * Don't include this when building the GUI version, the functions in
+ * gui_mac.c are used then. TODO: remove those instead?
+! * But for MacVim we do need these ones.
+ */
+! #if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI_ENABLED) || defined(FEAT_GUI_MACVIM))
+
+ /* Used to identify clipboard data copied from Vim. */
+
+*** ../mercurial/vim73/src/vim.h 2011-05-19 18:26:34.000000000 +0200
+--- src/vim.h 2011-06-13 01:57:17.000000000 +0200
+***************
+*** 121,126 ****
+--- 121,127 ----
+ || defined(FEAT_GUI_W32) \
+ || defined(FEAT_GUI_W16) \
+ || defined(FEAT_GUI_PHOTON)
++ # define FEAT_GUI_ENABLED /* also defined with NO_X11_INCLUDES */
+ # if !defined(FEAT_GUI) && !defined(NO_X11_INCLUDES)
+ # define FEAT_GUI
+ # endif
+*** ../vim-7.3.218/src/version.c 2011-06-13 01:32:42.000000000 +0200
+--- src/version.c 2011-06-13 02:03:02.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 219,
+ /**/
+
+--
+If Microsoft would build a car...
+... the oil, water temperature, and alternator warning lights would
+all be replaced by a single "General Protection Fault" warning light.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.220
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.220
+Problem: Python 3: vim.error is a 'str' instead of an 'Exception' object,
+ so 'except' or 'raise' it causes a 'SystemError' exception.
+ Buffer objects do not support slice assignment.
+ When exchanging text between Vim and Python, multibyte texts become
+ gabage or cause Unicode Expceptions, etc.
+ 'py3file' tries to read in the file as Unicode, sometimes causes
+ UnicodeDecodeException
+Solution: Fix the problems. (lilydjwg)
+Files: src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+
+*** ../mercurial/vim73/src/if_py_both.h 2011-03-22 15:47:18.000000000 +0100
+--- src/if_py_both.h 2011-06-18 23:54:25.000000000 +0200
+***************
+*** 65,74 ****
+ OutputWrite(PyObject *self, PyObject *args)
+ {
+ int len;
+! char *str;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "s#", &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+--- 65,74 ----
+ OutputWrite(PyObject *self, PyObject *args)
+ {
+ int len;
+! char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "es#", p_enc, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+***************
+*** 76,81 ****
+--- 76,82 ----
+ writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+ Python_Release_Vim();
+ Py_END_ALLOW_THREADS
++ PyMem_Free(str);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+***************
+*** 104,113 ****
+ for (i = 0; i < n; ++i)
+ {
+ PyObject *line = PyList_GetItem(list, i);
+! char *str;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "s#", &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+--- 105,114 ----
+ for (i = 0; i < n; ++i)
+ {
+ PyObject *line = PyList_GetItem(list, i);
+! char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "es#", p_enc, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+***************
+*** 118,123 ****
+--- 119,125 ----
+ writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+ Python_Release_Vim();
+ Py_END_ALLOW_THREADS
++ PyMem_Free(str);
+ }
+
+ Py_DECREF(list);
+***************
+*** 681,686 ****
+--- 683,689 ----
+ {
+ const char *str;
+ char *save;
++ PyObject *bytes;
+ PyInt len;
+ PyInt i;
+ char *p;
+***************
+*** 691,698 ****
+ return NULL;
+ }
+
+! str = PyString_AsString(obj);
+! len = PyString_Size(obj);
+
+ /*
+ * Error checking: String must not contain newlines, as we
+--- 694,702 ----
+ return NULL;
+ }
+
+! bytes = PyString_AsBytes(obj); /* for Python 2 this does nothing */
+! str = PyString_AsString(bytes);
+! len = PyString_Size(bytes);
+
+ /*
+ * Error checking: String must not contain newlines, as we
+***************
+*** 731,736 ****
+--- 735,741 ----
+ }
+
+ save[i] = '\0';
++ PyString_FreeBytes(bytes); /* Python 2 does nothing here */
+
+ return save;
+ }
+***************
+*** 817,823 ****
+ invalidate_botline();
+ }
+
+! /* Replace a line in the specified buffer. The line number is
+ * in Vim format (1-based). The replacement line is given as
+ * a Python string object. The object is checked for validity
+ * and correct format. Errors are returned as a value of FAIL.
+--- 822,829 ----
+ invalidate_botline();
+ }
+
+! /*
+! * Replace a line in the specified buffer. The line number is
+ * in Vim format (1-based). The replacement line is given as
+ * a Python string object. The object is checked for validity
+ * and correct format. Errors are returned as a value of FAIL.
+***************
+*** 908,913 ****
+--- 914,1106 ----
+ }
+ }
+
++ /* Replace a range of lines in the specified buffer. The line numbers are in
++ * Vim format (1-based). The range is from lo up to, but not including, hi.
++ * The replacement lines are given as a Python list of string objects. The
++ * list is checked for validity and correct format. Errors are returned as a
++ * value of FAIL. The return value is OK on success.
++ * If OK is returned and len_change is not NULL, *len_change
++ * is set to the change in the buffer length.
++ */
++ static int
++ SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
++ {
++ /* First of all, we check the thpe of the supplied Python object.
++ * There are three cases:
++ * 1. NULL, or None - this is a deletion.
++ * 2. A list - this is a replacement.
++ * 3. Anything else - this is an error.
++ */
++ if (list == Py_None || list == NULL)
++ {
++ PyInt i;
++ PyInt n = (int)(hi - lo);
++ buf_T *savebuf = curbuf;
++
++ PyErr_Clear();
++ curbuf = buf;
++
++ if (u_savedel((linenr_T)lo, (long)n) == FAIL)
++ PyErr_SetVim(_("cannot save undo information"));
++ else
++ {
++ for (i = 0; i < n; ++i)
++ {
++ if (ml_delete((linenr_T)lo, FALSE) == FAIL)
++ {
++ PyErr_SetVim(_("cannot delete line"));
++ break;
++ }
++ }
++ if (buf == curwin->w_buffer)
++ py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
++ deleted_lines_mark((linenr_T)lo, (long)i);
++ }
++
++ curbuf = savebuf;
++
++ if (PyErr_Occurred() || VimErrorCheck())
++ return FAIL;
++
++ if (len_change)
++ *len_change = -n;
++
++ return OK;
++ }
++ else if (PyList_Check(list))
++ {
++ PyInt i;
++ PyInt new_len = PyList_Size(list);
++ PyInt old_len = hi - lo;
++ PyInt extra = 0; /* lines added to text, can be negative */
++ char **array;
++ buf_T *savebuf;
++
++ if (new_len == 0) /* avoid allocating zero bytes */
++ array = NULL;
++ else
++ {
++ array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
++ if (array == NULL)
++ {
++ PyErr_NoMemory();
++ return FAIL;
++ }
++ }
++
++ for (i = 0; i < new_len; ++i)
++ {
++ PyObject *line = PyList_GetItem(list, i);
++
++ array[i] = StringToLine(line);
++ if (array[i] == NULL)
++ {
++ while (i)
++ vim_free(array[--i]);
++ vim_free(array);
++ return FAIL;
++ }
++ }
++
++ savebuf = curbuf;
++
++ PyErr_Clear();
++ curbuf = buf;
++
++ if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
++ PyErr_SetVim(_("cannot save undo information"));
++
++ /* If the size of the range is reducing (ie, new_len < old_len) we
++ * need to delete some old_len. We do this at the start, by
++ * repeatedly deleting line "lo".
++ */
++ if (!PyErr_Occurred())
++ {
++ for (i = 0; i < old_len - new_len; ++i)
++ if (ml_delete((linenr_T)lo, FALSE) == FAIL)
++ {
++ PyErr_SetVim(_("cannot delete line"));
++ break;
++ }
++ extra -= i;
++ }
++
++ /* For as long as possible, replace the existing old_len with the
++ * new old_len. This is a more efficient operation, as it requires
++ * less memory allocation and freeing.
++ */
++ if (!PyErr_Occurred())
++ {
++ for (i = 0; i < old_len && i < new_len; ++i)
++ if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
++ == FAIL)
++ {
++ PyErr_SetVim(_("cannot replace line"));
++ break;
++ }
++ }
++ else
++ i = 0;
++
++ /* Now we may need to insert the remaining new old_len. If we do, we
++ * must free the strings as we finish with them (we can't pass the
++ * responsibility to vim in this case).
++ */
++ if (!PyErr_Occurred())
++ {
++ while (i < new_len)
++ {
++ if (ml_append((linenr_T)(lo + i - 1),
++ (char_u *)array[i], 0, FALSE) == FAIL)
++ {
++ PyErr_SetVim(_("cannot insert line"));
++ break;
++ }
++ vim_free(array[i]);
++ ++i;
++ ++extra;
++ }
++ }
++
++ /* Free any left-over old_len, as a result of an error */
++ while (i < new_len)
++ {
++ vim_free(array[i]);
++ ++i;
++ }
++
++ /* Free the array of old_len. All of its contents have now
++ * been dealt with (either freed, or the responsibility passed
++ * to vim.
++ */
++ vim_free(array);
++
++ /* Adjust marks. Invalidate any which lie in the
++ * changed range, and move any in the remainder of the buffer.
++ */
++ mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
++ (long)MAXLNUM, (long)extra);
++ changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
++
++ if (buf == curwin->w_buffer)
++ py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
++
++ curbuf = savebuf;
++
++ if (PyErr_Occurred() || VimErrorCheck())
++ return FAIL;
++
++ if (len_change)
++ *len_change = new_len - old_len;
++
++ return OK;
++ }
++ else
++ {
++ PyErr_BadArgument();
++ return FAIL;
++ }
++ }
+
+ /* Insert a number of lines into the specified buffer after the specifed line.
+ * The line number is in Vim format (1-based). The lines to be inserted are
+***************
+*** 1108,1113 ****
+--- 1301,1340 ----
+ return -1;
+
+ if (new_end)
++ *new_end = end + len_change;
++
++ return 0;
++ }
++
++ static PyInt
++ RBAsSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
++ {
++ PyInt size;
++ PyInt len_change;
++
++ /* Self must be a valid buffer */
++ if (CheckBuffer(self))
++ return -1;
++
++ /* Sort out the slice range */
++ size = end - start + 1;
++
++ if (lo < 0)
++ lo = 0;
++ else if (lo > size)
++ lo = size;
++ if (hi < 0)
++ hi = 0;
++ if (hi < lo)
++ hi = lo;
++ else if (hi > size)
++ hi = size;
++
++ if (SetBufferLineList(self->buf, lo + start, hi + start,
++ val, &len_change) == FAIL)
++ return -1;
++
++ if (new_end)
+ *new_end = end + len_change;
+
+ return 0;
+*** ../mercurial/vim73/src/if_python.c 2011-03-26 18:32:00.000000000 +0100
+--- src/if_python.c 2011-06-19 00:02:15.000000000 +0200
+***************
+*** 56,61 ****
+--- 56,65 ----
+
+ static void init_structs(void);
+
++ /* No-op conversion functions, use with care! */
++ #define PyString_AsBytes(obj) (obj)
++ #define PyString_FreeBytes(obj)
++
+ #if !defined(FEAT_PYTHON) && defined(PROTO)
+ /* Use this to be able to generate prototypes without python being used. */
+ # define PyObject Py_ssize_t
+***************
+*** 129,134 ****
+--- 133,139 ----
+ */
+ # define PyArg_Parse dll_PyArg_Parse
+ # define PyArg_ParseTuple dll_PyArg_ParseTuple
++ # define PyMem_Free dll_PyMem_Free
+ # define PyDict_SetItemString dll_PyDict_SetItemString
+ # define PyErr_BadArgument dll_PyErr_BadArgument
+ # define PyErr_Clear dll_PyErr_Clear
+***************
+*** 189,194 ****
+--- 194,200 ----
+ */
+ static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
+ static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
++ static int(*dll_PyMem_Free)(void *);
+ static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static int(*dll_PyErr_BadArgument)(void);
+ static void(*dll_PyErr_Clear)(void);
+***************
+*** 271,276 ****
+--- 277,283 ----
+ {
+ {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
+ {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
++ {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
+ {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
+ {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
+ {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
+***************
+*** 833,876 ****
+ static PyObject *CurrentGetattr(PyObject *, char *);
+ static int CurrentSetattr(PyObject *, char *, PyObject *);
+
+- /* Common routines for buffers and line ranges
+- * -------------------------------------------
+- */
+-
+- static PyInt
+- RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
+- {
+- PyInt size;
+- PyInt len_change;
+-
+- /* Self must be a valid buffer */
+- if (CheckBuffer(self))
+- return -1;
+-
+- /* Sort out the slice range */
+- size = end - start + 1;
+-
+- if (lo < 0)
+- lo = 0;
+- else if (lo > size)
+- lo = size;
+- if (hi < 0)
+- hi = 0;
+- if (hi < lo)
+- hi = lo;
+- else if (hi > size)
+- hi = size;
+-
+- if (SetBufferLineList(self->buf, lo + start, hi + start,
+- val, &len_change) == FAIL)
+- return -1;
+-
+- if (new_end)
+- *new_end = end + len_change;
+-
+- return 0;
+- }
+-
+ static PySequenceMethods BufferAsSeq = {
+ (PyInquiry) BufferLength, /* sq_length, len(x) */
+ (binaryfunc) 0, /* BufferConcat, */ /* sq_concat, x+y */
+--- 840,845 ----
+***************
+*** 1038,1044 ****
+ static PyInt
+ BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+! return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
+ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ NULL);
+ }
+--- 1007,1013 ----
+ static PyInt
+ BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+! return RBAsSlice((BufferObject *)(self), lo, hi, val, 1,
+ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ NULL);
+ }
+***************
+*** 1088,1094 ****
+ static PyInt
+ RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+! return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val,
+ ((RangeObject *)(self))->start,
+ ((RangeObject *)(self))->end,
+ &((RangeObject *)(self))->end);
+--- 1057,1063 ----
+ static PyInt
+ RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+! return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
+ ((RangeObject *)(self))->start,
+ ((RangeObject *)(self))->end,
+ &((RangeObject *)(self))->end);
+***************
+*** 1435,1628 ****
+ * 4. Utility functions for handling the interface between Vim and Python.
+ */
+
+- /* Replace a range of lines in the specified buffer. The line numbers are in
+- * Vim format (1-based). The range is from lo up to, but not including, hi.
+- * The replacement lines are given as a Python list of string objects. The
+- * list is checked for validity and correct format. Errors are returned as a
+- * value of FAIL. The return value is OK on success.
+- * If OK is returned and len_change is not NULL, *len_change
+- * is set to the change in the buffer length.
+- */
+- static int
+- SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
+- {
+- /* First of all, we check the thpe of the supplied Python object.
+- * There are three cases:
+- * 1. NULL, or None - this is a deletion.
+- * 2. A list - this is a replacement.
+- * 3. Anything else - this is an error.
+- */
+- if (list == Py_None || list == NULL)
+- {
+- PyInt i;
+- PyInt n = (int)(hi - lo);
+- buf_T *savebuf = curbuf;
+-
+- PyErr_Clear();
+- curbuf = buf;
+-
+- if (u_savedel((linenr_T)lo, (long)n) == FAIL)
+- PyErr_SetVim(_("cannot save undo information"));
+- else
+- {
+- for (i = 0; i < n; ++i)
+- {
+- if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+- {
+- PyErr_SetVim(_("cannot delete line"));
+- break;
+- }
+- }
+- if (buf == curwin->w_buffer)
+- py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
+- deleted_lines_mark((linenr_T)lo, (long)i);
+- }
+-
+- curbuf = savebuf;
+-
+- if (PyErr_Occurred() || VimErrorCheck())
+- return FAIL;
+-
+- if (len_change)
+- *len_change = -n;
+-
+- return OK;
+- }
+- else if (PyList_Check(list))
+- {
+- PyInt i;
+- PyInt new_len = PyList_Size(list);
+- PyInt old_len = hi - lo;
+- PyInt extra = 0; /* lines added to text, can be negative */
+- char **array;
+- buf_T *savebuf;
+-
+- if (new_len == 0) /* avoid allocating zero bytes */
+- array = NULL;
+- else
+- {
+- array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
+- if (array == NULL)
+- {
+- PyErr_NoMemory();
+- return FAIL;
+- }
+- }
+-
+- for (i = 0; i < new_len; ++i)
+- {
+- PyObject *line = PyList_GetItem(list, i);
+-
+- array[i] = StringToLine(line);
+- if (array[i] == NULL)
+- {
+- while (i)
+- vim_free(array[--i]);
+- vim_free(array);
+- return FAIL;
+- }
+- }
+-
+- savebuf = curbuf;
+-
+- PyErr_Clear();
+- curbuf = buf;
+-
+- if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
+- PyErr_SetVim(_("cannot save undo information"));
+-
+- /* If the size of the range is reducing (ie, new_len < old_len) we
+- * need to delete some old_len. We do this at the start, by
+- * repeatedly deleting line "lo".
+- */
+- if (!PyErr_Occurred())
+- {
+- for (i = 0; i < old_len - new_len; ++i)
+- if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+- {
+- PyErr_SetVim(_("cannot delete line"));
+- break;
+- }
+- extra -= i;
+- }
+-
+- /* For as long as possible, replace the existing old_len with the
+- * new old_len. This is a more efficient operation, as it requires
+- * less memory allocation and freeing.
+- */
+- if (!PyErr_Occurred())
+- {
+- for (i = 0; i < old_len && i < new_len; ++i)
+- if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
+- == FAIL)
+- {
+- PyErr_SetVim(_("cannot replace line"));
+- break;
+- }
+- }
+- else
+- i = 0;
+-
+- /* Now we may need to insert the remaining new old_len. If we do, we
+- * must free the strings as we finish with them (we can't pass the
+- * responsibility to vim in this case).
+- */
+- if (!PyErr_Occurred())
+- {
+- while (i < new_len)
+- {
+- if (ml_append((linenr_T)(lo + i - 1),
+- (char_u *)array[i], 0, FALSE) == FAIL)
+- {
+- PyErr_SetVim(_("cannot insert line"));
+- break;
+- }
+- vim_free(array[i]);
+- ++i;
+- ++extra;
+- }
+- }
+-
+- /* Free any left-over old_len, as a result of an error */
+- while (i < new_len)
+- {
+- vim_free(array[i]);
+- ++i;
+- }
+-
+- /* Free the array of old_len. All of its contents have now
+- * been dealt with (either freed, or the responsibility passed
+- * to vim.
+- */
+- vim_free(array);
+-
+- /* Adjust marks. Invalidate any which lie in the
+- * changed range, and move any in the remainder of the buffer.
+- */
+- mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
+- (long)MAXLNUM, (long)extra);
+- changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
+-
+- if (buf == curwin->w_buffer)
+- py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
+-
+- curbuf = savebuf;
+-
+- if (PyErr_Occurred() || VimErrorCheck())
+- return FAIL;
+-
+- if (len_change)
+- *len_change = new_len - old_len;
+-
+- return OK;
+- }
+- else
+- {
+- PyErr_BadArgument();
+- return FAIL;
+- }
+- }
+-
+ /* Convert a Vim line into a Python string.
+ * All internal newlines are replaced by null characters.
+ *
+--- 1404,1409 ----
+*** ../mercurial/vim73/src/if_python3.c 2011-06-12 21:37:06.000000000 +0200
+--- src/if_python3.c 2011-06-19 00:10:42.000000000 +0200
+***************
+*** 70,77 ****
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsString(obj) _PyUnicode_AsString(obj)
+! #define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
+ #define PyString_FromString(repr) PyUnicode_FromString(repr)
+
+ #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+--- 70,79 ----
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)p_enc, NULL);
+! #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+! #define PyString_AsString(obj) PyBytes_AsString(obj)
+! #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+ #define PyString_FromString(repr) PyUnicode_FromString(repr)
+
+ #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+***************
+*** 99,104 ****
+--- 101,107 ----
+ # define PyArg_Parse py3_PyArg_Parse
+ # undef PyArg_ParseTuple
+ # define PyArg_ParseTuple py3_PyArg_ParseTuple
++ # define PyMem_Free py3_PyMem_Free
+ # define PyDict_SetItemString py3_PyDict_SetItemString
+ # define PyErr_BadArgument py3_PyErr_BadArgument
+ # define PyErr_Clear py3_PyErr_Clear
+***************
+*** 140,147 ****
+--- 143,155 ----
+ # define PyModule_AddObject py3_PyModule_AddObject
+ # define PyImport_AppendInittab py3_PyImport_AppendInittab
+ # define _PyUnicode_AsString py3__PyUnicode_AsString
++ # undef PyUnicode_AsEncodedString
++ # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
++ # undef PyBytes_AsString
++ # define PyBytes_AsString py3_PyBytes_AsString
+ # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
+ # define PySlice_Type (*py3_PySlice_Type)
++ # define PyErr_NewException py3_PyErr_NewException
+ # ifdef Py_DEBUG
+ # define _Py_NegativeRefcount py3__Py_NegativeRefcount
+ # define _Py_RefTotal (*py3__Py_RefTotal)
+***************
+*** 157,164 ****
+ # define PyModule_Create2 py3_PyModule_Create2
+ # undef PyUnicode_FromString
+ # define PyUnicode_FromString py3_PyUnicode_FromString
+! # undef PyUnicode_FromStringAndSize
+! # define PyUnicode_FromStringAndSize py3_PyUnicode_FromStringAndSize
+
+ # ifdef Py_DEBUG
+ # undef PyObject_NEW
+--- 165,172 ----
+ # define PyModule_Create2 py3_PyModule_Create2
+ # undef PyUnicode_FromString
+ # define PyUnicode_FromString py3_PyUnicode_FromString
+! # undef PyUnicode_Decode
+! # define PyUnicode_Decode py3_PyUnicode_Decode
+
+ # ifdef Py_DEBUG
+ # undef PyObject_NEW
+***************
+*** 199,205 ****
+ static int (*py3_PyType_Ready)(PyTypeObject *type);
+ static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static PyObject* (*py3_PyUnicode_FromString)(const char *u);
+! static PyObject* (*py3_PyUnicode_FromStringAndSize)(const char *u, Py_ssize_t size);
+ static long (*py3_PyLong_AsLong)(PyObject *);
+ static void (*py3_PyErr_SetNone)(PyObject *);
+ static void (*py3_PyEval_InitThreads)(void);
+--- 207,214 ----
+ static int (*py3_PyType_Ready)(PyTypeObject *type);
+ static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static PyObject* (*py3_PyUnicode_FromString)(const char *u);
+! static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size,
+! const char *encoding, const char *errors);
+ static long (*py3_PyLong_AsLong)(PyObject *);
+ static void (*py3_PyErr_SetNone)(PyObject *);
+ static void (*py3_PyEval_InitThreads)(void);
+***************
+*** 207,212 ****
+--- 216,222 ----
+ static PyThreadState*(*py3_PyEval_SaveThread)(void);
+ static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
+ static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
++ static int (*py3_PyMem_Free)(void *);
+ static int (*py3_Py_IsInitialized)(void);
+ static void (*py3_PyErr_Clear)(void);
+ static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
+***************
+*** 214,224 ****
+--- 224,237 ----
+ static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
+ static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
+ static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
++ static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
++ static char* (*py3_PyBytes_AsString)(PyObject *bytes);
+ static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
+ static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
+ static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
+ static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
+ static PyTypeObject* py3_PySlice_Type;
++ static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
+ # ifdef Py_DEBUG
+ static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
+ static Py_ssize_t* py3__Py_RefTotal;
+***************
+*** 259,264 ****
+--- 272,278 ----
+ {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
+ {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
+ {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
++ {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
+ {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
+ {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
+ {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
+***************
+*** 289,295 ****
+ {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread},
+ {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
+ {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse},
+- {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+ {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
+ {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
+ {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
+--- 303,308 ----
+***************
+*** 297,307 ****
+--- 310,322 ----
+ {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
+ {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
+ {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
++ {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
+ {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
+ {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
+ {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
+ {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
+ {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
++ {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
+ # ifdef Py_DEBUG
+ {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
+ {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
+***************
+*** 337,343 ****
+ py3_runtime_link_init(char *libname, int verbose)
+ {
+ int i;
+! void *ucs_from_string, *ucs_from_string_and_size;
+
+ # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
+ /* Can't have Python and Python3 loaded at the same time.
+--- 352,358 ----
+ py3_runtime_link_init(char *libname, int verbose)
+ {
+ int i;
+! void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string;
+
+ # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
+ /* Can't have Python and Python3 loaded at the same time.
+***************
+*** 377,395 ****
+ /* Load unicode functions separately as only the ucs2 or the ucs4 functions
+ * will be present in the library. */
+ ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
+! ucs_from_string_and_size = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS2_FromStringAndSize");
+! if (!ucs_from_string || !ucs_from_string_and_size)
+ {
+ ucs_from_string = symbol_from_dll(hinstPy3,
+ "PyUnicodeUCS4_FromString");
+! ucs_from_string_and_size = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS4_FromStringAndSize");
+ }
+! if (ucs_from_string && ucs_from_string_and_size)
+ {
+ py3_PyUnicode_FromString = ucs_from_string;
+! py3_PyUnicode_FromStringAndSize = ucs_from_string_and_size;
+ }
+ else
+ {
+--- 392,415 ----
+ /* Load unicode functions separately as only the ucs2 or the ucs4 functions
+ * will be present in the library. */
+ ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
+! ucs_decode = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS2_Decode");
+! ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS2_AsEncodedString");
+! if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string)
+ {
+ ucs_from_string = symbol_from_dll(hinstPy3,
+ "PyUnicodeUCS4_FromString");
+! ucs_decode = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS4_Decode");
+! ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS4_AsEncodedString");
+ }
+! if (ucs_from_string && ucs_decode && ucs_as_encoded_string)
+ {
+ py3_PyUnicode_FromString = ucs_from_string;
+! py3_PyUnicode_Decode = ucs_decode;
+! py3_PyUnicode_AsEncodedString = ucs_as_encoded_string;
+ }
+ else
+ {
+***************
+*** 567,574 ****
+ /* Remove the element from sys.path that was added because of our
+ * argv[0] value in Py3Init_vim(). Previously we used an empty
+ * string, but dependinding on the OS we then get an empty entry or
+! * the current directory in sys.path. */
+! PyRun_SimpleString("import sys; sys.path = list(filter(lambda x: x != '/must>not&exist', sys.path))");
+
+ // lock is created and acquired in PyEval_InitThreads() and thread
+ // state is created in Py_Initialize()
+--- 587,597 ----
+ /* Remove the element from sys.path that was added because of our
+ * argv[0] value in Py3Init_vim(). Previously we used an empty
+ * string, but dependinding on the OS we then get an empty entry or
+! * the current directory in sys.path.
+! * Only after vim has been imported, the element does exist in
+! * sys.path.
+! */
+! PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
+
+ // lock is created and acquired in PyEval_InitThreads() and thread
+ // state is created in Py_Initialize()
+***************
+*** 605,610 ****
+--- 628,635 ----
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ char *saved_locale;
+ #endif
++ PyObject *cmdstr;
++ PyObject *cmdbytes;
+
+ #if defined(MACOS) && !defined(MACOS_X_UNIX)
+ GetPort(&oldPort);
+***************
+*** 634,640 ****
+
+ pygilstate = PyGILState_Ensure();
+
+! PyRun_SimpleString((char *)(cmd));
+
+ PyGILState_Release(pygilstate);
+
+--- 659,671 ----
+
+ pygilstate = PyGILState_Ensure();
+
+! /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+! * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)p_enc, NULL);
+! cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
+! Py_XDECREF(cmdstr);
+! PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+! Py_XDECREF(cmdbytes);
+
+ PyGILState_Release(pygilstate);
+
+***************
+*** 693,699 ****
+ * different options under Windows, meaning that stdio pointers aren't
+ * compatible between the two. Yuk.
+ *
+! * construct: exec(compile(open('a_filename').read(), 'a_filename', 'exec'))
+ *
+ * We need to escape any backslashes or single quotes in the file name, so that
+ * Python won't mangle the file name.
+--- 724,733 ----
+ * different options under Windows, meaning that stdio pointers aren't
+ * compatible between the two. Yuk.
+ *
+! * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec'))
+! *
+! * Using bytes so that Python can detect the source encoding as it normally
+! * does. The doc does not say "compile" accept bytes, though.
+ *
+ * We need to escape any backslashes or single quotes in the file name, so that
+ * Python won't mangle the file name.
+***************
+*** 716,723 ****
+ return;
+ if (i==0)
+ {
+! strcpy(p,"').read(),'");
+! p += 11;
+ }
+ else
+ {
+--- 750,757 ----
+ return;
+ if (i==0)
+ {
+! strcpy(p,"','rb').read(),'");
+! p += 16;
+ }
+ else
+ {
+***************
+*** 812,819 ****
+
+ static Py_ssize_t BufferLength(PyObject *);
+ static PyObject *BufferItem(PyObject *, Py_ssize_t);
+- static Py_ssize_t BufferAsItem(PyObject *, Py_ssize_t, PyObject *);
+ static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
+
+
+ /* Line range type - Implementation functions
+--- 846,853 ----
+
+ static Py_ssize_t BufferLength(PyObject *);
+ static PyObject *BufferItem(PyObject *, Py_ssize_t);
+ static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
++ static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val);
+
+
+ /* Line range type - Implementation functions
+***************
+*** 835,841 ****
+ (ssizeargfunc) 0, /* sq_repeat, x*n */
+ (ssizeargfunc) BufferItem, /* sq_item, x[i] */
+ 0, /* was_sq_slice, x[i:j] */
+! (ssizeobjargproc) BufferAsItem, /* sq_ass_item, x[i]=v */
+ 0, /* sq_ass_slice, x[i:j]=v */
+ 0, /* sq_contains */
+ 0, /* sq_inplace_concat */
+--- 869,875 ----
+ (ssizeargfunc) 0, /* sq_repeat, x*n */
+ (ssizeargfunc) BufferItem, /* sq_item, x[i] */
+ 0, /* was_sq_slice, x[i:j] */
+! 0, /* sq_ass_item, x[i]=v */
+ 0, /* sq_ass_slice, x[i:j]=v */
+ 0, /* sq_contains */
+ 0, /* sq_inplace_concat */
+***************
+*** 845,851 ****
+ PyMappingMethods BufferAsMapping = {
+ /* mp_length */ (lenfunc)BufferLength,
+ /* mp_subscript */ (binaryfunc)BufferSubscript,
+! /* mp_ass_subscript */ (objobjargproc)0,
+ };
+
+
+--- 879,885 ----
+ PyMappingMethods BufferAsMapping = {
+ /* mp_length */ (lenfunc)BufferLength,
+ /* mp_subscript */ (binaryfunc)BufferSubscript,
+! /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript,
+ };
+
+
+***************
+*** 897,902 ****
+--- 931,938 ----
+
+ if (this->buf && this->buf != INVALID_BUFFER_VALUE)
+ this->buf->b_python3_ref = NULL;
++
++ Py_TYPE(self)->tp_free((PyObject*)self);
+ }
+
+ static PyObject *
+***************
+*** 975,989 ****
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
+ }
+
+- static Py_ssize_t
+- BufferAsItem(PyObject *self, Py_ssize_t n, PyObject *val)
+- {
+- return RBAsItem((BufferObject *)(self), n, val, 1,
+- (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+- NULL);
+- }
+-
+-
+ static PyObject *
+ BufferSubscript(PyObject *self, PyObject* idx)
+ {
+--- 1011,1016 ----
+***************
+*** 999,1011 ****
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return BufferSlice(self,start,stop+1);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+ }
+
+ static PySequenceMethods RangeAsSeq = {
+ (lenfunc) RangeLength, /* sq_length, len(x) */
+ (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
+--- 1026,1064 ----
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return BufferSlice(self,start,stop);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+ }
+
++ static Py_ssize_t
++ BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
++ {
++ if (PyLong_Check(idx)) {
++ long n = PyLong_AsLong(idx);
++ return RBAsItem((BufferObject *)(self), n, val, 1,
++ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
++ NULL);
++ } else if (PySlice_Check(idx)) {
++ Py_ssize_t start, stop, step, slicelen;
++
++ if (PySlice_GetIndicesEx((PySliceObject *)idx,
++ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
++ &start, &stop,
++ &step, &slicelen) < 0) {
++ return -1;
++ }
++ return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
++ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
++ NULL);
++ } else {
++ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
++ return -1;
++ }
++ }
++
+ static PySequenceMethods RangeAsSeq = {
+ (lenfunc) RangeLength, /* sq_length, len(x) */
+ (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
+***************
+*** 1032,1037 ****
+--- 1085,1091 ----
+ RangeDestructor(PyObject *self)
+ {
+ Py_DECREF(((RangeObject *)(self))->buf);
++ Py_TYPE(self)->tp_free((PyObject*)self);
+ }
+
+ static PyObject *
+***************
+*** 1159,1164 ****
+--- 1213,1220 ----
+
+ if (this->win && this->win != INVALID_WINDOW_VALUE)
+ this->win->w_python3_ref = NULL;
++
++ Py_TYPE(self)->tp_free((PyObject*)self);
+ }
+
+ static PyObject *
+***************
+*** 1350,1357 ****
+ PySys_SetArgv(1, argv);
+
+ mod = PyModule_Create(&vimmodule);
+
+! VimError = Py_BuildValue("s", "vim.error");
+
+ PyModule_AddObject(mod, "error", VimError);
+ Py_INCREF((PyObject *)(void *)&TheBufferList);
+--- 1406,1416 ----
+ PySys_SetArgv(1, argv);
+
+ mod = PyModule_Create(&vimmodule);
++ if (mod == NULL)
++ return NULL;
+
+! VimError = PyErr_NewException("vim.error", NULL, NULL);
+! Py_INCREF(VimError);
+
+ PyModule_AddObject(mod, "error", VimError);
+ Py_INCREF((PyObject *)(void *)&TheBufferList);
+***************
+*** 1404,1410 ****
+ }
+ *p = '\0';
+
+! result = PyUnicode_FromStringAndSize(tmp, len);
+
+ vim_free(tmp);
+ return result;
+--- 1463,1469 ----
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)p_enc, NULL);
+
+ vim_free(tmp);
+ return result;
+*** ../vim-7.3.219/src/version.c 2011-06-13 02:03:55.000000000 +0200
+--- src/version.c 2011-06-19 00:25:38.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 220,
+ /**/
+
+--
+I'm in shape. Round IS a shape.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.221
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.221
+Problem: Text from the clipboard is sometimes handled as linewise, but not
+ consistently.
+Solution: Assume the text is linewise when it ends in a CR or NL.
+Files: src/gui_gtk_x11.c, src/gui_mac.c, src/ops.c, src/os_msdos.c,
+ src/os_mswin.c, src/os_qnx.c, src/ui.c
+
+
+*** ../mercurial/vim73/src/gui_gtk_x11.c 2011-02-25 17:10:22.000000000 +0100
+--- src/gui_gtk_x11.c 2011-06-19 00:58:31.000000000 +0200
+***************
+*** 1173,1179 ****
+ char_u *tmpbuf = NULL;
+ guchar *tmpbuf_utf8 = NULL;
+ int len;
+! int motion_type;
+
+ if (data->selection == clip_plus.gtk_sel_atom)
+ cbd = &clip_plus;
+--- 1173,1179 ----
+ char_u *tmpbuf = NULL;
+ guchar *tmpbuf_utf8 = NULL;
+ int len;
+! int motion_type = MAUTO;
+
+ if (data->selection == clip_plus.gtk_sel_atom)
+ cbd = &clip_plus;
+***************
+*** 1182,1188 ****
+
+ text = (char_u *)data->data;
+ len = data->length;
+- motion_type = MCHAR;
+
+ if (text == NULL || len <= 0)
+ {
+--- 1182,1187 ----
+*** ../mercurial/vim73/src/gui_mac.c 2011-06-12 20:33:30.000000000 +0200
+--- src/gui_mac.c 2011-06-19 00:59:07.000000000 +0200
+***************
+*** 4671,4677 ****
+ if (flavor)
+ type = **textOfClip;
+ else
+! type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
+
+ tempclip = lalloc(scrapSize + 1, TRUE);
+ mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
+--- 4671,4677 ----
+ if (flavor)
+ type = **textOfClip;
+ else
+! type = MAUTO;
+
+ tempclip = lalloc(scrapSize + 1, TRUE);
+ mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
+*** ../mercurial/vim73/src/ops.c 2011-04-01 16:28:33.000000000 +0200
+--- src/ops.c 2011-06-19 00:59:39.000000000 +0200
+***************
+*** 5733,5739 ****
+ }
+ }
+
+! /* Convert from the GUI selection string into the '*'/'+' register */
+ void
+ clip_yank_selection(type, str, len, cbd)
+ int type;
+--- 5733,5741 ----
+ }
+ }
+
+! /*
+! * Convert from the GUI selection string into the '*'/'+' register.
+! */
+ void
+ clip_yank_selection(type, str, len, cbd)
+ int type;
+***************
+*** 6090,6098 ****
+ if (yank_type == MBLOCK)
+ yank_type = MAUTO;
+ #endif
+- if (yank_type == MAUTO)
+- yank_type = ((len > 0 && (str[len - 1] == '\n' || str[len - 1] == '\r'))
+- ? MLINE : MCHAR);
+ str_to_reg(y_current, yank_type, str, len, block_len);
+
+ # ifdef FEAT_CLIPBOARD
+--- 6092,6097 ----
+***************
+*** 6113,6125 ****
+ * is appended.
+ */
+ static void
+! str_to_reg(y_ptr, type, str, len, blocklen)
+ struct yankreg *y_ptr; /* pointer to yank register */
+! int type; /* MCHAR, MLINE or MBLOCK */
+ char_u *str; /* string to put in register */
+ long len; /* length of string */
+ long blocklen; /* width of Visual block */
+ {
+ int lnum;
+ long start;
+ long i;
+--- 6112,6125 ----
+ * is appended.
+ */
+ static void
+! str_to_reg(y_ptr, yank_type, str, len, blocklen)
+ struct yankreg *y_ptr; /* pointer to yank register */
+! int yank_type; /* MCHAR, MLINE, MBLOCK, MAUTO */
+ char_u *str; /* string to put in register */
+ long len; /* length of string */
+ long blocklen; /* width of Visual block */
+ {
++ int type; /* MCHAR, MLINE or MBLOCK */
+ int lnum;
+ long start;
+ long i;
+***************
+*** 6136,6141 ****
+--- 6136,6147 ----
+ if (y_ptr->y_array == NULL) /* NULL means empty register */
+ y_ptr->y_size = 0;
+
++ if (yank_type == MAUTO)
++ type = ((len > 0 && (str[len - 1] == NL || str[len - 1] == CAR))
++ ? MLINE : MCHAR);
++ else
++ type = yank_type;
++
+ /*
+ * Count the number of lines within the string
+ */
+*** ../mercurial/vim73/src/os_msdos.c 2010-12-17 18:06:00.000000000 +0100
+--- src/os_msdos.c 2011-06-19 01:00:56.000000000 +0200
+***************
+*** 2232,2238 ****
+ void
+ clip_mch_request_selection(VimClipboard *cbd)
+ {
+! int type = MCHAR;
+ char_u *pAllocated = NULL;
+ char_u *pClipText = NULL;
+ int clip_data_format = 0;
+--- 2232,2238 ----
+ void
+ clip_mch_request_selection(VimClipboard *cbd)
+ {
+! int type = MAUTO;
+ char_u *pAllocated = NULL;
+ char_u *pClipText = NULL;
+ int clip_data_format = 0;
+***************
+*** 2280,2293 ****
+ {
+ clip_data_format = CF_TEXT;
+ pClipText = pAllocated;
+- type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
+ }
+
+ else if ((pAllocated = Win16GetClipboardData(CF_OEMTEXT)) != NULL)
+ {
+ clip_data_format = CF_OEMTEXT;
+ pClipText = pAllocated;
+- type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
+ }
+
+ /* Did we get anything? */
+--- 2280,2291 ----
+*** ../mercurial/vim73/src/os_mswin.c 2011-01-17 20:08:04.000000000 +0100
+--- src/os_mswin.c 2011-06-19 01:01:51.000000000 +0200
+***************
+*** 1410,1418 ****
+ {
+ char_u *temp_clipboard;
+
+! /* If the type is not known guess it. */
+ if (metadata.type == -1)
+! metadata.type = (vim_strchr(str, '\n') == NULL) ? MCHAR : MLINE;
+
+ /* Translate <CR><NL> into <NL>. */
+ temp_clipboard = crnl_to_nl(str, &str_size);
+--- 1410,1418 ----
+ {
+ char_u *temp_clipboard;
+
+! /* If the type is not known detect it. */
+ if (metadata.type == -1)
+! metadata.type = MAUTO;
+
+ /* Translate <CR><NL> into <NL>. */
+ temp_clipboard = crnl_to_nl(str, &str_size);
+*** ../mercurial/vim73/src/os_qnx.c 2010-05-15 21:22:11.000000000 +0200
+--- src/os_qnx.c 2011-06-19 01:02:26.000000000 +0200
+***************
+*** 93,99 ****
+ clip_length = clip_header->length - 1;
+
+ if( clip_text != NULL && is_type_set == FALSE )
+! type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
+ }
+
+ if( (clip_text != NULL) && (clip_length > 0) )
+--- 93,99 ----
+ clip_length = clip_header->length - 1;
+
+ if( clip_text != NULL && is_type_set == FALSE )
+! type = MAUTO;
+ }
+
+ if( (clip_text != NULL) && (clip_length > 0) )
+*** ../mercurial/vim73/src/ui.c 2010-09-21 22:09:28.000000000 +0200
+--- src/ui.c 2011-06-19 01:03:31.000000000 +0200
+***************
+*** 1609,1615 ****
+
+ #if defined(FEAT_HANGULIN) || defined(PROTO)
+ void
+! push_raw_key (s, len)
+ char_u *s;
+ int len;
+ {
+--- 1609,1615 ----
+
+ #if defined(FEAT_HANGULIN) || defined(PROTO)
+ void
+! push_raw_key(s, len)
+ char_u *s;
+ int len;
+ {
+***************
+*** 2016,2022 ****
+ long_u *length;
+ int *format;
+ {
+! int motion_type;
+ long_u len;
+ char_u *p;
+ char **text_list = NULL;
+--- 2016,2022 ----
+ long_u *length;
+ int *format;
+ {
+! int motion_type = MAUTO;
+ long_u len;
+ char_u *p;
+ char **text_list = NULL;
+***************
+*** 2036,2042 ****
+ *(int *)success = FALSE;
+ return;
+ }
+- motion_type = MCHAR;
+ p = (char_u *)value;
+ len = *length;
+ if (*type == vim_atom)
+--- 2036,2041 ----
+*** ../vim-7.3.220/src/version.c 2011-06-19 00:27:46.000000000 +0200
+--- src/version.c 2011-06-19 01:03:59.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 221,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+190. You quickly hand over your wallet, leather jacket, and car keys
+ during a mugging, then proceed to beat the crap out of your
+ assailant when he asks for your laptop.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.22
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.222
+Problem: Warning for building GvimExt.
+Solution: Comment-out the DESCRIPTION line. (Mike Williams)
+Files: src/GvimExt/gvimext.def, src/GvimExt/gvimext_ming.def
+
+
+*** ../mercurial/vim73/src/GvimExt/gvimext.def 2010-05-15 21:22:11.000000000 +0200
+--- src/GvimExt/gvimext.def 2011-06-15 03:50:55.000000000 +0200
+***************
+*** 1,7 ****
+ ;gvimdef.def : Declares the module parameters for the DLL.
+
+ LIBRARY gvimext
+! DESCRIPTION 'Vim Shell Extension'
+
+ EXPORTS
+ DllCanUnloadNow private
+--- 1,7 ----
+ ;gvimdef.def : Declares the module parameters for the DLL.
+
+ LIBRARY gvimext
+! ; DESCRIPTION 'Vim Shell Extension'
+
+ EXPORTS
+ DllCanUnloadNow private
+*** ../mercurial/vim73/src/GvimExt/gvimext_ming.def 2010-05-15 21:22:11.000000000 +0200
+--- src/GvimExt/gvimext_ming.def 2011-06-15 03:51:05.000000000 +0200
+***************
+*** 3,9 ****
+ ;Hence this is the same file as gvimext.def with private removed
+
+ LIBRARY gvimext
+! DESCRIPTION 'Vim Shell Extension build with MinGW'
+
+ EXPORTS
+ DllCanUnloadNow = DllCanUnloadNow@0
+--- 3,9 ----
+ ;Hence this is the same file as gvimext.def with private removed
+
+ LIBRARY gvimext
+! ; DESCRIPTION 'Vim Shell Extension build with MinGW'
+
+ EXPORTS
+ DllCanUnloadNow = DllCanUnloadNow@0
+*** ../vim-7.3.221/src/version.c 2011-06-19 01:14:23.000000000 +0200
+--- src/version.c 2011-06-19 01:26:57.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 222,
+ /**/
+
+--
+What is the difference between a professional and an amateur?
+The ark was built by an amateur; professionals gave us the Titanic.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.223
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.223
+Problem: MingW cross compilation doesn't work with tiny features.
+Solution: Move acp_to_enc(), enc_to_utf16() and utf16_to_enc() outside of
+ "#ifdef CLIPBOARD". Fix typo in makefile.
+Files: src/Make_ming.mak, src/os_mswin.c
+
+
+*** ../mercurial/vim73/src/Make_ming.mak 2010-12-30 14:50:46.000000000 +0100
+--- src/Make_ming.mak 2011-06-19 01:20:16.000000000 +0200
+***************
+*** 87,93 ****
+
+ # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
+ # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
+! # uncomment the following, but I can't build a static versión with them, ?-(|
+ #GETTEXT=c:/gettext-0.10.37-20010430
+ #STATIC_GETTEXT=USE_STATIC_GETTEXT
+ #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
+--- 87,93 ----
+
+ # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
+ # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
+! # uncomment the following, but I can't build a static version with them, ?-(|
+ #GETTEXT=c:/gettext-0.10.37-20010430
+ #STATIC_GETTEXT=USE_STATIC_GETTEXT
+ #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
+*** ../mercurial/vim73/src/os_mswin.c 2011-06-19 01:14:23.000000000 +0200
+--- src/os_mswin.c 2011-06-19 01:25:23.000000000 +0200
+***************
+*** 1105,1236 ****
+ return ret;
+ }
+
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+- /*
+- * Note: the following two functions are only guaranteed to work when using
+- * valid MS-Windows codepages or when iconv() is available.
+- */
+-
+- /*
+- * Convert "str" from 'encoding' to UTF-16.
+- * Input in "str" with length "*lenp". When "lenp" is NULL, use strlen().
+- * Output is returned as an allocated string. "*lenp" is set to the length of
+- * the result. A trailing NUL is always added.
+- * Returns NULL when out of memory.
+- */
+- short_u *
+- enc_to_utf16(char_u *str, int *lenp)
+- {
+- vimconv_T conv;
+- WCHAR *ret;
+- char_u *allocbuf = NULL;
+- int len_loc;
+- int length;
+-
+- if (lenp == NULL)
+- {
+- len_loc = (int)STRLEN(str) + 1;
+- lenp = &len_loc;
+- }
+-
+- if (enc_codepage > 0)
+- {
+- /* We can do any CP### -> UTF-16 in one pass, and we can do it
+- * without iconv() (convert_* may need iconv). */
+- MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
+- }
+- else
+- {
+- /* Use "latin1" by default, we might be called before we have p_enc
+- * set up. Convert to utf-8 first, works better with iconv(). Does
+- * nothing if 'encoding' is "utf-8". */
+- conv.vc_type = CONV_NONE;
+- if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
+- (char_u *)"utf-8") == FAIL)
+- return NULL;
+- if (conv.vc_type != CONV_NONE)
+- {
+- str = allocbuf = string_convert(&conv, str, lenp);
+- if (str == NULL)
+- return NULL;
+- }
+- convert_setup(&conv, NULL, NULL);
+-
+- length = utf8_to_utf16(str, *lenp, NULL, NULL);
+- ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
+- if (ret != NULL)
+- {
+- utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
+- ret[length] = 0;
+- }
+-
+- vim_free(allocbuf);
+- }
+-
+- *lenp = length;
+- return (short_u *)ret;
+- }
+-
+- /*
+- * Convert an UTF-16 string to 'encoding'.
+- * Input in "str" with length (counted in wide characters) "*lenp". When
+- * "lenp" is NULL, use wcslen().
+- * Output is returned as an allocated string. If "*lenp" is not NULL it is
+- * set to the length of the result.
+- * Returns NULL when out of memory.
+- */
+- char_u *
+- utf16_to_enc(short_u *str, int *lenp)
+- {
+- vimconv_T conv;
+- char_u *utf8_str = NULL, *enc_str = NULL;
+- int len_loc;
+-
+- if (lenp == NULL)
+- {
+- len_loc = (int)wcslen(str) + 1;
+- lenp = &len_loc;
+- }
+-
+- if (enc_codepage > 0)
+- {
+- /* We can do any UTF-16 -> CP### in one pass. */
+- int length;
+-
+- WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
+- (LPSTR *)&enc_str, &length, 0, 0);
+- *lenp = length;
+- return enc_str;
+- }
+-
+- /* Avoid allocating zero bytes, it generates an error message. */
+- utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
+- if (utf8_str != NULL)
+- {
+- *lenp = utf16_to_utf8(str, *lenp, utf8_str);
+-
+- /* We might be called before we have p_enc set up. */
+- conv.vc_type = CONV_NONE;
+- convert_setup(&conv, (char_u *)"utf-8",
+- p_enc? p_enc: (char_u *)"latin1");
+- if (conv.vc_type == CONV_NONE)
+- {
+- /* p_enc is utf-8, so we're done. */
+- enc_str = utf8_str;
+- }
+- else
+- {
+- enc_str = string_convert(&conv, utf8_str, lenp);
+- vim_free(utf8_str);
+- }
+-
+- convert_setup(&conv, NULL, NULL);
+- }
+-
+- return enc_str;
+- }
+- #endif /* FEAT_MBYTE */
+-
+ /*
+ * Wait for another process to Close the Clipboard.
+ * Returns TRUE for success.
+--- 1105,1110 ----
+***************
+*** 1436,1467 ****
+ #endif
+ }
+
+- #if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
+- /*
+- * Convert from the active codepage to 'encoding'.
+- * Input is "str[str_size]".
+- * The result is in allocated memory: "out[outlen]". With terminating NUL.
+- */
+- void
+- acp_to_enc(str, str_size, out, outlen)
+- char_u *str;
+- int str_size;
+- char_u **out;
+- int *outlen;
+-
+- {
+- LPWSTR widestr;
+-
+- MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
+- if (widestr != NULL)
+- {
+- ++*outlen; /* Include the 0 after the string */
+- *out = utf16_to_enc((short_u *)widestr, outlen);
+- vim_free(widestr);
+- }
+- }
+- #endif
+-
+ /*
+ * Send the current selection to the clipboard.
+ */
+--- 1310,1315 ----
+***************
+*** 1626,1631 ****
+--- 1474,1631 ----
+
+ #endif /* FEAT_CLIPBOARD */
+
++ #if defined(FEAT_MBYTE) || defined(PROTO)
++ /*
++ * Note: the following two functions are only guaranteed to work when using
++ * valid MS-Windows codepages or when iconv() is available.
++ */
++
++ /*
++ * Convert "str" from 'encoding' to UTF-16.
++ * Input in "str" with length "*lenp". When "lenp" is NULL, use strlen().
++ * Output is returned as an allocated string. "*lenp" is set to the length of
++ * the result. A trailing NUL is always added.
++ * Returns NULL when out of memory.
++ */
++ short_u *
++ enc_to_utf16(char_u *str, int *lenp)
++ {
++ vimconv_T conv;
++ WCHAR *ret;
++ char_u *allocbuf = NULL;
++ int len_loc;
++ int length;
++
++ if (lenp == NULL)
++ {
++ len_loc = (int)STRLEN(str) + 1;
++ lenp = &len_loc;
++ }
++
++ if (enc_codepage > 0)
++ {
++ /* We can do any CP### -> UTF-16 in one pass, and we can do it
++ * without iconv() (convert_* may need iconv). */
++ MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
++ }
++ else
++ {
++ /* Use "latin1" by default, we might be called before we have p_enc
++ * set up. Convert to utf-8 first, works better with iconv(). Does
++ * nothing if 'encoding' is "utf-8". */
++ conv.vc_type = CONV_NONE;
++ if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
++ (char_u *)"utf-8") == FAIL)
++ return NULL;
++ if (conv.vc_type != CONV_NONE)
++ {
++ str = allocbuf = string_convert(&conv, str, lenp);
++ if (str == NULL)
++ return NULL;
++ }
++ convert_setup(&conv, NULL, NULL);
++
++ length = utf8_to_utf16(str, *lenp, NULL, NULL);
++ ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
++ if (ret != NULL)
++ {
++ utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
++ ret[length] = 0;
++ }
++
++ vim_free(allocbuf);
++ }
++
++ *lenp = length;
++ return (short_u *)ret;
++ }
++
++ /*
++ * Convert an UTF-16 string to 'encoding'.
++ * Input in "str" with length (counted in wide characters) "*lenp". When
++ * "lenp" is NULL, use wcslen().
++ * Output is returned as an allocated string. If "*lenp" is not NULL it is
++ * set to the length of the result.
++ * Returns NULL when out of memory.
++ */
++ char_u *
++ utf16_to_enc(short_u *str, int *lenp)
++ {
++ vimconv_T conv;
++ char_u *utf8_str = NULL, *enc_str = NULL;
++ int len_loc;
++
++ if (lenp == NULL)
++ {
++ len_loc = (int)wcslen(str) + 1;
++ lenp = &len_loc;
++ }
++
++ if (enc_codepage > 0)
++ {
++ /* We can do any UTF-16 -> CP### in one pass. */
++ int length;
++
++ WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
++ (LPSTR *)&enc_str, &length, 0, 0);
++ *lenp = length;
++ return enc_str;
++ }
++
++ /* Avoid allocating zero bytes, it generates an error message. */
++ utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
++ if (utf8_str != NULL)
++ {
++ *lenp = utf16_to_utf8(str, *lenp, utf8_str);
++
++ /* We might be called before we have p_enc set up. */
++ conv.vc_type = CONV_NONE;
++ convert_setup(&conv, (char_u *)"utf-8",
++ p_enc? p_enc: (char_u *)"latin1");
++ if (conv.vc_type == CONV_NONE)
++ {
++ /* p_enc is utf-8, so we're done. */
++ enc_str = utf8_str;
++ }
++ else
++ {
++ enc_str = string_convert(&conv, utf8_str, lenp);
++ vim_free(utf8_str);
++ }
++
++ convert_setup(&conv, NULL, NULL);
++ }
++
++ return enc_str;
++ }
++ #endif /* FEAT_MBYTE */
++
++ #if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
++ /*
++ * Convert from the active codepage to 'encoding'.
++ * Input is "str[str_size]".
++ * The result is in allocated memory: "out[outlen]". With terminating NUL.
++ */
++ void
++ acp_to_enc(str, str_size, out, outlen)
++ char_u *str;
++ int str_size;
++ char_u **out;
++ int *outlen;
++
++ {
++ LPWSTR widestr;
++
++ MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
++ if (widestr != NULL)
++ {
++ ++*outlen; /* Include the 0 after the string */
++ *out = utf16_to_enc((short_u *)widestr, outlen);
++ vim_free(widestr);
++ }
++ }
++ #endif
++
+
+ /*
+ * Debugging helper: expose the MCH_WRITE_DUMP stuff to other modules
+*** ../vim-7.3.222/src/version.c 2011-06-19 01:27:29.000000000 +0200
+--- src/version.c 2011-06-19 01:28:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 223,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+191. You rate eating establishments not by the quality of the food,
+ but by the availability of electrical outlets for your PowerBook.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.224
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.224
+Problem: Can't pass dict to sort function.
+Solution: Add the optional {dict} argument to sort(). (ZyX)
+Files: runtime/doc/eval.txt, src/eval.c
+
+
+*** ../mercurial/vim73/runtime/doc/eval.txt 2011-05-19 17:25:36.000000000 +0200
+--- runtime/doc/eval.txt 2011-06-19 02:42:52.000000000 +0200
+***************
+*** 1919,1925 ****
+ simplify( {filename}) String simplify filename as much as possible
+ sin( {expr}) Float sine of {expr}
+ sinh( {expr}) Float hyperbolic sine of {expr}
+! sort( {list} [, {func}]) List sort {list}, using {func} to compare
+ soundfold( {word}) String sound-fold {word}
+ spellbadword() String badly spelled word at cursor
+ spellsuggest( {word} [, {max} [, {capital}]])
+--- 1922,1929 ----
+ simplify( {filename}) String simplify filename as much as possible
+ sin( {expr}) Float sine of {expr}
+ sinh( {expr}) Float hyperbolic sine of {expr}
+! sort( {list} [, {func} [, {dict}]])
+! List sort {list}, using {func} to compare
+ soundfold( {word}) String sound-fold {word}
+ spellbadword() String badly spelled word at cursor
+ spellsuggest( {word} [, {max} [, {capital}]])
+***************
+*** 5275,5281 ****
+ {only available when compiled with the |+float| feature}
+
+
+! sort({list} [, {func}]) *sort()* *E702*
+ Sort the items in {list} in-place. Returns {list}. If you
+ want a list to remain unmodified make a copy first: >
+ :let sortedlist = sort(copy(mylist))
+--- 5279,5285 ----
+ {only available when compiled with the |+float| feature}
+
+
+! sort({list} [, {func} [, {dict}]]) *sort()* *E702*
+ Sort the items in {list} in-place. Returns {list}. If you
+ want a list to remain unmodified make a copy first: >
+ :let sortedlist = sort(copy(mylist))
+***************
+*** 5283,5288 ****
+--- 5287,5294 ----
+ Numbers sort after Strings, |Lists| after Numbers.
+ For sorting text in the current buffer use |:sort|.
+ When {func} is given and it is one then case is ignored.
++ {dict} is for functions with the "dict" attribute. It will be
++ used to set the local variable "self". |Dictionary-function|
+ When {func} is a |Funcref| or a function name, this function
+ is called to compare items. The function is invoked with two
+ items as argument and must return zero if they are equal, 1 or
+*** ../mercurial/vim73/src/eval.c 2011-05-19 18:26:34.000000000 +0200
+--- src/eval.c 2011-06-19 02:51:13.000000000 +0200
+***************
+*** 7930,7936 ****
+ {"sin", 1, 1, f_sin},
+ {"sinh", 1, 1, f_sinh},
+ #endif
+! {"sort", 1, 2, f_sort},
+ {"soundfold", 1, 1, f_soundfold},
+ {"spellbadword", 0, 1, f_spellbadword},
+ {"spellsuggest", 1, 3, f_spellsuggest},
+--- 7930,7936 ----
+ {"sin", 1, 1, f_sin},
+ {"sinh", 1, 1, f_sinh},
+ #endif
+! {"sort", 1, 3, f_sort},
+ {"soundfold", 1, 1, f_soundfold},
+ {"spellbadword", 0, 1, f_spellbadword},
+ {"spellsuggest", 1, 3, f_spellsuggest},
+***************
+*** 16366,16371 ****
+--- 16366,16372 ----
+
+ static int item_compare_ic;
+ static char_u *item_compare_func;
++ static dict_T *item_compare_selfdict;
+ static int item_compare_func_err;
+ #define ITEM_COMPARE_FAIL 999
+
+***************
+*** 16425,16431 ****
+
+ rettv.v_type = VAR_UNKNOWN; /* clear_tv() uses this */
+ res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
+! &rettv, 2, argv, 0L, 0L, &dummy, TRUE, NULL);
+ clear_tv(&argv[0]);
+ clear_tv(&argv[1]);
+
+--- 16426,16433 ----
+
+ rettv.v_type = VAR_UNKNOWN; /* clear_tv() uses this */
+ res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
+! &rettv, 2, argv, 0L, 0L, &dummy, TRUE,
+! item_compare_selfdict);
+ clear_tv(&argv[0]);
+ clear_tv(&argv[1]);
+
+***************
+*** 16471,16478 ****
+--- 16473,16482 ----
+
+ item_compare_ic = FALSE;
+ item_compare_func = NULL;
++ item_compare_selfdict = NULL;
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ {
++ /* optional second argument: {func} */
+ if (argvars[1].v_type == VAR_FUNC)
+ item_compare_func = argvars[1].vval.v_string;
+ else
+***************
+*** 16487,16492 ****
+--- 16491,16507 ----
+ else
+ item_compare_func = get_tv_string(&argvars[1]);
+ }
++
++ if (argvars[2].v_type != VAR_UNKNOWN)
++ {
++ /* optional third argument: {dict} */
++ if (argvars[2].v_type != VAR_DICT)
++ {
++ EMSG(_(e_dictreq));
++ return;
++ }
++ item_compare_selfdict = argvars[2].vval.v_dict;
++ }
+ }
+
+ /* Make an array with each entry pointing to an item in the List. */
+*** ../vim-7.3.223/src/version.c 2011-06-19 01:30:01.000000000 +0200
+--- src/version.c 2011-06-19 02:52:46.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 224,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+193. You ask your girlfriend to drive home so you can sit back with
+ your PDA and download the information to your laptop
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.226
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.226
+Problem: On a 64 bit system "syn sync fromstart" is very slow. (Bjorn
+ Steinbrink)
+Solution: Store the state when starting to parse from the first line.
+Files: src/syntax.c
+
+
+*** ../mercurial/vim73/src/syntax.c 2011-05-25 17:56:23.000000000 +0200
+--- src/syntax.c 2011-06-19 04:47:08.000000000 +0200
+***************
+*** 559,565 ****
+ if (INVALID_STATE(¤t_state))
+ {
+ syn_sync(wp, lnum, last_valid);
+! first_stored = current_lnum + syn_block->b_syn_sync_minlines;
+ }
+ else
+ first_stored = current_lnum;
+--- 559,571 ----
+ if (INVALID_STATE(¤t_state))
+ {
+ syn_sync(wp, lnum, last_valid);
+! if (current_lnum == 1)
+! /* First line is always valid, no matter "minlines". */
+! first_stored = 1;
+! else
+! /* Need to parse "minlines" lines before state can be considered
+! * valid to store. */
+! first_stored = current_lnum + syn_block->b_syn_sync_minlines;
+ }
+ else
+ first_stored = current_lnum;
+*** ../vim-7.3.225/src/version.c 2011-06-19 04:31:54.000000000 +0200
+--- src/version.c 2011-06-19 04:49:53.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 226,
+ /**/
+
+--
+Press any key to continue, press any other key to quit.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.227
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.227 (after 7.3.221)
+Problem: Mac OS doesn't have the linewise clipboard fix.
+Solution: Also change the Mac OS file. (Bjorn Winckler)
+Files: src/os_macosx.m
+
+
+*** ../mercurial/vim73/src/os_macosx.m 2011-06-13 02:03:55.000000000 +0200
+--- src/os_macosx.m 2011-06-20 00:23:57.000000000 +0200
+***************
+*** 65,71 ****
+ NSString *bestType = [pb availableTypeFromArray:supportedTypes];
+ if (!bestType) goto releasepool;
+
+! int motion_type = MCHAR;
+ NSString *string = nil;
+
+ if ([bestType isEqual:VimPboardType])
+--- 65,71 ----
+ NSString *bestType = [pb availableTypeFromArray:supportedTypes];
+ if (!bestType) goto releasepool;
+
+! int motion_type = MAUTO;
+ NSString *string = nil;
+
+ if ([bestType isEqual:VimPboardType])
+***************
+*** 89,97 ****
+
+ if (!string)
+ {
+! /* Use NSStringPboardType. The motion type is set to line-wise if the
+! * string contains at least one EOL character, otherwise it is set to
+! * character-wise (block-wise is never used).
+ */
+ NSMutableString *mstring =
+ [[pb stringForType:NSStringPboardType] mutableCopy];
+--- 89,95 ----
+
+ if (!string)
+ {
+! /* Use NSStringPboardType. The motion type is detected automatically.
+ */
+ NSMutableString *mstring =
+ [[pb stringForType:NSStringPboardType] mutableCopy];
+***************
+*** 108,126 ****
+ options:0 range:range];
+ }
+
+- /* Scan for newline character to decide whether the string should be
+- * pasted line-wise or character-wise.
+- */
+- motion_type = MCHAR;
+- if (0 < n || NSNotFound != [mstring rangeOfString:@"\n"].location)
+- motion_type = MLINE;
+-
+ string = mstring;
+ }
+
+ if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
+ || MAUTO == motion_type))
+! motion_type = MCHAR;
+
+ char_u *str = (char_u*)[string UTF8String];
+ int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+--- 106,118 ----
+ options:0 range:range];
+ }
+
+ string = mstring;
+ }
+
++ /* Default to MAUTO, uses MCHAR or MLINE depending on trailing NL. */
+ if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
+ || MAUTO == motion_type))
+! motion_type = MAUTO;
+
+ char_u *str = (char_u*)[string UTF8String];
+ int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+*** ../vim-7.3.226/src/version.c 2011-06-19 04:54:17.000000000 +0200
+--- src/version.c 2011-06-20 00:21:53.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 227,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ EMULTI Multitasking attempted, system confused
+ EKEYBOARD Keyboard locked, try getting out of this one!
+ EXPLAIN Unexplained error, please tell us what happened
+ EFUTURE Reserved for our future mistakes
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.228
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.228
+Problem: "2gj" does not always move to the correct position.
+Solution: Get length of line after moving to a next line. (James Vega)
+Files: src/normal.c
+
+
+*** ../mercurial/vim73/src/normal.c 2011-05-10 17:29:28.000000000 +0200
+--- src/normal.c 2011-06-20 00:41:43.000000000 +0200
+***************
+*** 4533,4538 ****
+--- 4533,4539 ----
+ }
+ curwin->w_cursor.lnum++;
+ curwin->w_curswant %= width2;
++ linelen = linetabsize(ml_get_curline());
+ }
+ }
+ }
+*** ../vim-7.3.227/src/version.c 2011-06-20 00:25:37.000000000 +0200
+--- src/version.c 2011-06-20 00:45:15.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 228,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+197. Your desk collapses under the weight of your computer peripherals.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.229
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.229
+Problem: Using fork() makes gvim crash on Mac when build with
+ CoreFoundation.
+Solution: Disallow fork() when __APPLE__ is defined. (Hisashi T Fujinaka)
+Files: src/gui.c
+
+
+*** ../mercurial/vim73/src/gui.c 2011-05-10 16:41:13.000000000 +0200
+--- src/gui.c 2011-06-20 00:51:21.000000000 +0200
+***************
+*** 59,65 ****
+ gui_start()
+ {
+ char_u *old_term;
+! #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X)
+ # define MAY_FORK
+ int dofork = TRUE;
+ #endif
+--- 59,66 ----
+ gui_start()
+ {
+ char_u *old_term;
+! #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
+! && !defined(__APPLE__)
+ # define MAY_FORK
+ int dofork = TRUE;
+ #endif
+*** ../vim-7.3.228/src/version.c 2011-06-20 00:45:55.000000000 +0200
+--- src/version.c 2011-06-20 00:50:42.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 229,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+198. You read all the quotes at Netaholics Anonymous and keep thinking
+ "What's wrong with that?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.230
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.230
+Problem: ":wundo" and ":rundo" don't unescape their argument. (Aaron
+ Thoma)
+Solution: Use FILE1 instead of XFILE.
+Files: src/ex_cmds.h
+
+
+*** ../mercurial/vim73/src/ex_cmds.h 2010-08-20 11:09:02.000000000 +0200
+--- src/ex_cmds.h 2011-06-20 04:44:13.000000000 +0200
+***************
+*** 788,794 ****
+ EX(CMD_rubyfile, "rubyfile", ex_rubyfile,
+ RANGE|FILE1|NEEDARG|CMDWIN),
+ EX(CMD_rundo, "rundo", ex_rundo,
+! NEEDARG|EXTRA|XFILE),
+ EX(CMD_rviminfo, "rviminfo", ex_viminfo,
+ BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_substitute, "substitute", do_sub,
+--- 788,794 ----
+ EX(CMD_rubyfile, "rubyfile", ex_rubyfile,
+ RANGE|FILE1|NEEDARG|CMDWIN),
+ EX(CMD_rundo, "rundo", ex_rundo,
+! NEEDARG|FILE1),
+ EX(CMD_rviminfo, "rviminfo", ex_viminfo,
+ BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_substitute, "substitute", do_sub,
+***************
+*** 1078,1084 ****
+ EX(CMD_wsverb, "wsverb", ex_wsverb,
+ EXTRA|NOTADR|NEEDARG),
+ EX(CMD_wundo, "wundo", ex_wundo,
+! BANG|NEEDARG|EXTRA|XFILE),
+ EX(CMD_wviminfo, "wviminfo", ex_viminfo,
+ BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_xit, "xit", ex_exit,
+--- 1078,1084 ----
+ EX(CMD_wsverb, "wsverb", ex_wsverb,
+ EXTRA|NOTADR|NEEDARG),
+ EX(CMD_wundo, "wundo", ex_wundo,
+! BANG|NEEDARG|FILE1),
+ EX(CMD_wviminfo, "wviminfo", ex_viminfo,
+ BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_xit, "xit", ex_exit,
+*** ../vim-7.3.229/src/version.c 2011-06-20 00:53:10.000000000 +0200
+--- src/version.c 2011-06-20 05:02:40.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 230,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+201. When somebody asks you where you are, you tell them in which chat room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.231
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Note: this is a weird patch, it redoes patches from 7.3.202 and 7.3.203
+that failed when applied as a patch, but the mercurial repository
+already had this, thus won't change anything there.
+
+
+Patch 7.3.231
+Problem: Runtime file patches failed.
+Solution: Redo the patches made against the patched files instead of the
+ files in the mercurial repository.
+Files: runtime/doc/indent.txt, runtime/doc/os_win32.txt
+
+
+*** ../vim-7.3.230/runtime/doc/indent.txt 2011-05-25 15:16:06.000000000 +0200
+--- runtime/doc/indent.txt 2011-05-31 22:23:39.000000000 +0200
+***************
+*** 356,363 ****
+ BaseClass(3) BaseClass(3)
+ {} {}
+ <
+! +N Indent a continuation line (a line that spills onto the next) N
+! additional characters. (default 'shiftwidth').
+
+ cino= cino=+10 >
+ a = b + 9 * a = b + 9 *
+--- 357,368 ----
+ BaseClass(3) BaseClass(3)
+ {} {}
+ <
+! *cino-+*
+! +N Indent a continuation line (a line that spills onto the next)
+! inside a function N additional characters. (default
+! 'shiftwidth').
+! Outside of a function, when the previous line ended in a
+! backslash, the 2 * N is used.
+
+ cino= cino=+10 >
+ a = b + 9 * a = b + 9 *
+***************
+*** 509,522 ****
+--- 514,532 ----
+ }
+ }
+ <
++ *cino-)*
+ )N Vim searches for unclosed parentheses at most N lines away.
+ This limits the time needed to search for parentheses. (default
+ 20 lines).
+
++ *cino-star*
+ *N Vim searches for unclosed comments at most N lines away. This
+ limits the time needed to search for the start of a comment.
++ If your /* */ comments stop indenting afer N lines this is the
++ value you will want to change.
+ (default 70 lines).
+
++ *cino-#*
+ #N When N is non-zero recognize shell/Perl comments, starting with
+ '#'. Default N is zero: don't recognizes '#' comments. Note
+ that lines starting with # will still be seen as preprocessor
+*** ../vim-7.3.230/runtime/doc/os_win32.txt 2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/os_win32.txt 2011-05-28 18:17:58.000000000 +0200
+***************
+*** 313,318 ****
+--- 313,349 ----
+ with :!start do not get passed Vim's open file handles, which means they do
+ not have to be closed before Vim.
+ To avoid this special treatment, use ":! start".
++ There are two optional arguments (see the next Q):
++ /min the window will be minimized.
++ /b" no console window will be opened
++ You can only one of these flags at a time. A second second one will be
++ treated as the start of the command.
++
++ Q. How do I avoid getting a window for programs that I run asynchronously?
++ A. You have two possible solutions depending on what exactly do you want:
++ 1) You may use the /min flag in order to run program in a minimized state
++ with no other changes. It will work equally for console and GUI
++ applications.
++ 2) You can use the /b flag to run console applications without creating a
++ console window for them (GUI applications are not affected). But you
++ should use this flag only if the application you run doesn't require any
++ input. Otherwise it will get an EOF error because its input stream
++ (stdin) would be redirected to \\.\NUL (stdoud and stderr too).
++
++ Example for a console application, run Exuberant ctags: >
++ :!start /min ctags -R .
++ < When it has finished you should see file named "tags" in your current
++ directory. You should notice the window title blinking on your taskbar.
++ This is more noticable for commands that take longer.
++ Now delete the "tags" file and run this command: >
++ :!start /b ctags -R .
++ < You should have the same "tags" file, but this time there will be no
++ blinking on the taskbar.
++ Example for a GUI application: >
++ :!start /min notepad
++ :!start /b notepad
++ < The first command runs notepad minimized and the second one runs it
++ normally.
+
+ Q. I'm using Win32s, and when I try to run an external command like "make",
+ Vim doesn't wait for it to finish! Help!
+*** ../vim-7.3.230/src/version.c 2011-06-20 05:02:53.000000000 +0200
+--- src/version.c 2011-06-26 03:14:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 231,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+222. You send more than 20 personal e-mails a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.232
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.232
+Problem: Python doesn't compile without +multi_byte
+Solution: Use "latin1" when MULTI_BYTE is not defined.
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.231/src/if_py_both.h 2011-06-19 00:27:46.000000000 +0200
+--- src/if_py_both.h 2011-06-26 03:58:07.000000000 +0200
+***************
+*** 12,17 ****
+--- 12,23 ----
+ * Common code for if_python.c and if_python3.c.
+ */
+
++ #ifdef FEAT_MBYTE
++ # define ENC_OPT p_enc
++ #else
++ # define ENC_OPT "latin1"
++ #endif
++
+ /*
+ * obtain a lock on the Vim data structures
+ */
+***************
+*** 68,74 ****
+ char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "es#", p_enc, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+--- 74,80 ----
+ char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "es#", ENC_OPT, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+***************
+*** 108,114 ****
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "es#", p_enc, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+--- 114,120 ----
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "es#", ENC_OPT, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+*** ../vim-7.3.231/src/version.c 2011-06-26 03:16:58.000000000 +0200
+--- src/version.c 2011-06-26 04:00:40.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 232,
+ /**/
+
+--
+If evolution theories are correct, humans will soon grow a third
+hand for operating the mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.233
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.233
+Problem: ":scriptnames" and ":breaklist" show long file names.
+Solution: Shorten to use "~/" when possible. (Jean-Rene David)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.232/src/ex_cmds2.c 2011-05-19 18:26:34.000000000 +0200
+--- src/ex_cmds2.c 2011-06-26 04:20:24.000000000 +0200
+***************
+*** 682,691 ****
+ for (i = 0; i < dbg_breakp.ga_len; ++i)
+ {
+ bp = &BREAKP(i);
+ smsg((char_u *)_("%3d %s %s line %ld"),
+ bp->dbg_nr,
+ bp->dbg_type == DBG_FUNC ? "func" : "file",
+! bp->dbg_name,
+ (long)bp->dbg_lnum);
+ }
+ }
+--- 682,693 ----
+ for (i = 0; i < dbg_breakp.ga_len; ++i)
+ {
+ bp = &BREAKP(i);
++ if (bp->dbg_type == DBG_FILE)
++ home_replace(NULL, bp->dbg_name, NameBuff, MAXPATHL, TRUE);
+ smsg((char_u *)_("%3d %s %s line %ld"),
+ bp->dbg_nr,
+ bp->dbg_type == DBG_FUNC ? "func" : "file",
+! bp->dbg_type == DBG_FUNC ? bp->dbg_name : NameBuff,
+ (long)bp->dbg_lnum);
+ }
+ }
+***************
+*** 3268,3274 ****
+
+ for (i = 1; i <= script_items.ga_len && !got_int; ++i)
+ if (SCRIPT_ITEM(i).sn_name != NULL)
+! smsg((char_u *)"%3d: %s", i, SCRIPT_ITEM(i).sn_name);
+ }
+
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+--- 3270,3280 ----
+
+ for (i = 1; i <= script_items.ga_len && !got_int; ++i)
+ if (SCRIPT_ITEM(i).sn_name != NULL)
+! {
+! home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+! NameBuff, MAXPATHL, TRUE);
+! smsg((char_u *)"%3d: %s", i, NameBuff);
+! }
+ }
+
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+*** ../vim-7.3.232/src/version.c 2011-06-26 04:01:37.000000000 +0200
+--- src/version.c 2011-06-26 04:23:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 233,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+223. You set up a web-cam as your home's security system.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.234
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.234
+Problem: With GTK menu may be popping down.
+Solution: Use event time instead of GDK_CURRENT_TIME. (Hong Xu)
+Files: src/gui.c, src/gui.h, src/gui_gtk.c, src/gui_gtk_x11.c
+
+
+*** ../vim-7.3.233/src/gui.c 2011-06-20 00:53:10.000000000 +0200
+--- src/gui.c 2011-06-26 04:38:09.000000000 +0200
+***************
+*** 84,89 ****
+--- 84,93 ----
+ gui.starting = TRUE;
+ full_screen = FALSE;
+
++ #ifdef FEAT_GUI_GTK
++ gui.event_time = GDK_CURRENT_TIME;
++ #endif
++
+ #ifdef MAY_FORK
+ if (!gui.dofork || vim_strchr(p_go, GO_FORG) || recursive)
+ dofork = FALSE;
+*** ../vim-7.3.233/src/gui.h 2011-05-10 16:41:13.000000000 +0200
+--- src/gui.h 2011-06-26 04:41:21.000000000 +0200
+***************
+*** 401,406 ****
+--- 401,408 ----
+ GtkAccelGroup *accel_group;
+ GtkWidget *filedlg; /* file selection dialog */
+ char_u *browse_fname; /* file name from filedlg */
++
++ guint32 event_time;
+ #endif /* FEAT_GUI_GTK */
+
+ #if defined(FEAT_GUI_TABLINE) \
+*** ../vim-7.3.233/src/gui_gtk.c 2011-01-17 20:08:03.000000000 +0100
+--- src/gui_gtk.c 2011-06-26 04:38:09.000000000 +0200
+***************
+*** 1391,1397 ****
+ gtk_menu_popup(GTK_MENU(menu->submenu_id),
+ NULL, NULL,
+ (GtkMenuPositionFunc)NULL, NULL,
+! 3U, (guint32)GDK_CURRENT_TIME);
+ }
+
+ /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
+--- 1391,1397 ----
+ gtk_menu_popup(GTK_MENU(menu->submenu_id),
+ NULL, NULL,
+ (GtkMenuPositionFunc)NULL, NULL,
+! 3U, gui.event_time);
+ }
+
+ /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
+*** ../vim-7.3.233/src/gui_gtk_x11.c 2011-06-19 01:14:22.000000000 +0200
+--- src/gui_gtk_x11.c 2011-06-26 04:39:57.000000000 +0200
+***************
+*** 88,95 ****
+ # include <X11/Sunkeysym.h>
+ #endif
+
+- static guint32 clipboard_event_time = CurrentTime;
+-
+ /*
+ * Easy-to-use macro for multihead support.
+ */
+--- 88,93 ----
+***************
+*** 934,940 ****
+ guint state;
+ char_u *s, *d;
+
+! clipboard_event_time = event->time;
+ key_sym = event->keyval;
+ state = event->state;
+
+--- 932,938 ----
+ guint state;
+ char_u *s, *d;
+
+! gui.event_time = event->time;
+ key_sym = event->keyval;
+ state = event->state;
+
+***************
+*** 1129,1135 ****
+ GdkEventKey *event,
+ gpointer data UNUSED)
+ {
+! clipboard_event_time = event->time;
+ /*
+ * GTK+ 2 input methods may do fancy stuff on key release events too.
+ * With the default IM for instance, you can enter any UCS code point
+--- 1127,1133 ----
+ GdkEventKey *event,
+ gpointer data UNUSED)
+ {
+! gui.event_time = event->time;
+ /*
+ * GTK+ 2 input methods may do fancy stuff on key release events too.
+ * With the default IM for instance, you can enter any UCS code point
+***************
+*** 1622,1628 ****
+ int x, y;
+ int_u vim_modifiers;
+
+! clipboard_event_time = event->time;
+
+ /* Make sure we have focus now we've been selected */
+ if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
+--- 1620,1626 ----
+ int x, y;
+ int_u vim_modifiers;
+
+! gui.event_time = event->time;
+
+ /* Make sure we have focus now we've been selected */
+ if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
+***************
+*** 1733,1739 ****
+ int x, y;
+ int_u vim_modifiers;
+
+! clipboard_event_time = event->time;
+
+ /* Remove any motion "machine gun" timers used for automatic further
+ extension of allocation areas if outside of the applications window
+--- 1731,1737 ----
+ int x, y;
+ int_u vim_modifiers;
+
+! gui.event_time = event->time;
+
+ /* Remove any motion "machine gun" timers used for automatic further
+ extension of allocation areas if outside of the applications window
+***************
+*** 5654,5660 ****
+ int success;
+
+ success = gtk_selection_owner_set(gui.drawarea, cbd->gtk_sel_atom,
+! clipboard_event_time);
+ gui_mch_update();
+ return (success) ? OK : FAIL;
+ }
+--- 5652,5658 ----
+ int success;
+
+ success = gtk_selection_owner_set(gui.drawarea, cbd->gtk_sel_atom,
+! gui.event_time);
+ gui_mch_update();
+ return (success) ? OK : FAIL;
+ }
+*** ../vim-7.3.233/src/version.c 2011-06-26 04:25:24.000000000 +0200
+--- src/version.c 2011-06-26 04:47:02.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 234,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+225. You sign up for free subscriptions for all the computer magazines
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.235
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.235
+Problem: ";" gets stuck on a "t" command, it's not useful.
+Solution: Add the ';' flag in 'cpo'. (Christian Brabandt)
+Files: runtime/doc/motion.txt, runtime/doc/options.txt, src/option.h,
+ src/search.c src/testdir/test81.in, src/testdir/test81.ok,
+ src/testdir/Makefile, src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+ src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../vim-7.3.234/runtime/doc/motion.txt 2010-08-15 21:57:17.000000000 +0200
+--- runtime/doc/motion.txt 2011-06-26 05:15:58.000000000 +0200
+***************
+*** 269,279 ****
+ {char} can be entered like with the |f| command.
+
+ *;*
+! ; Repeat latest f, t, F or T [count] times.
+
+ *,*
+ , Repeat latest f, t, F or T in opposite direction
+! [count] times.
+
+ ==============================================================================
+ 3. Up-down motions *up-down-motions*
+--- 269,279 ----
+ {char} can be entered like with the |f| command.
+
+ *;*
+! ; Repeat latest f, t, F or T [count] times. See |cpo-;|
+
+ *,*
+ , Repeat latest f, t, F or T in opposite direction
+! [count] times. See also |cpo-;|
+
+ ==============================================================================
+ 3. Up-down motions *up-down-motions*
+*** ../vim-7.3.234/runtime/doc/options.txt 2011-06-12 20:42:17.000000000 +0200
+--- runtime/doc/options.txt 2011-06-26 05:15:58.000000000 +0200
+***************
+*** 2090,2095 ****
+--- 2117,2128 ----
+ *cpo->*
+ > When appending to a register, put a line break before
+ the appended text.
++ *cpo-;*
++ ; When using |,| or |;| to repeat the last |t| search
++ and the cursor is right in front of the searched
++ character, the cursor won't move. When not included,
++ the cursor would skip over it and jump to the
++ following occurence.
+
+ POSIX flags. These are not included in the Vi default value, except
+ when $VIM_POSIX was set on startup. |posix|
+*** ../vim-7.3.234/src/option.h 2011-06-12 22:13:37.000000000 +0200
+--- src/option.h 2011-06-26 05:17:58.000000000 +0200
+***************
+*** 169,178 ****
+ #define CPO_SUBPERCENT '/' /* % in :s string uses previous one */
+ #define CPO_BACKSL '\\' /* \ is not special in [] */
+ #define CPO_CHDIR '.' /* don't chdir if buffer is modified */
+ /* default values for Vim, Vi and POSIX */
+ #define CPO_VIM "aABceFs"
+! #define CPO_VI "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>"
+! #define CPO_ALL "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\."
+
+ /* characters for p_ww option: */
+ #define WW_ALL "bshl<>[],~"
+--- 169,180 ----
+ #define CPO_SUBPERCENT '/' /* % in :s string uses previous one */
+ #define CPO_BACKSL '\\' /* \ is not special in [] */
+ #define CPO_CHDIR '.' /* don't chdir if buffer is modified */
++ #define CPO_SCOLON ';' /* using "," and ";" will skip over char if
++ * cursor would not move */
+ /* default values for Vim, Vi and POSIX */
+ #define CPO_VIM "aABceFs"
+! #define CPO_VI "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;"
+! #define CPO_ALL "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\.;"
+
+ /* characters for p_ww option: */
+ #define WW_ALL "bshl<>[],~"
+*** ../vim-7.3.234/src/search.c 2011-05-10 16:41:13.000000000 +0200
+--- src/search.c 2011-06-26 05:20:45.000000000 +0200
+***************
+*** 1546,1551 ****
+--- 1546,1552 ----
+ int col;
+ char_u *p;
+ int len;
++ int stop = TRUE;
+ #ifdef FEAT_MBYTE
+ static char_u bytes[MB_MAXBYTES];
+ static int bytelen = 1; /* >1 for multi-byte char */
+***************
+*** 1580,1585 ****
+--- 1581,1592 ----
+ t_cmd = last_t_cmd;
+ c = lastc;
+ /* For multi-byte re-use last bytes[] and bytelen. */
++
++ /* Force a move of at least one char, so ";" and "," will move the
++ * cursor, even if the cursor is right in front of char we are looking
++ * at. */
++ if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1)
++ stop = FALSE;
+ }
+
+ if (dir == BACKWARD)
+***************
+*** 1612,1625 ****
+ }
+ if (bytelen == 1)
+ {
+! if (p[col] == c)
+ break;
+ }
+ else
+ {
+! if (vim_memcmp(p + col, bytes, bytelen) == 0)
+ break;
+ }
+ }
+ }
+ else
+--- 1619,1633 ----
+ }
+ if (bytelen == 1)
+ {
+! if (p[col] == c && stop)
+ break;
+ }
+ else
+ {
+! if (vim_memcmp(p + col, bytes, bytelen) == 0 && stop)
+ break;
+ }
++ stop = TRUE;
+ }
+ }
+ else
+***************
+*** 1629,1636 ****
+ {
+ if ((col += dir) < 0 || col >= len)
+ return FAIL;
+! if (p[col] == c)
+ break;
+ }
+ }
+ }
+--- 1637,1645 ----
+ {
+ if ((col += dir) < 0 || col >= len)
+ return FAIL;
+! if (p[col] == c && stop)
+ break;
++ stop = TRUE;
+ }
+ }
+ }
+*** ../vim-7.3.234/src/testdir/test81.in 2011-06-26 05:34:33.000000000 +0200
+--- src/testdir/test81.in 2011-06-26 05:30:31.000000000 +0200
+***************
+*** 0 ****
+--- 1,18 ----
++ Test for t movement command and 'cpo-;' setting
++
++ STARTTEST
++ :set nocompatible
++ :set cpo-=;
++ /firstline/
++ j0tt;D
++ $Ty;D:set cpo+=;
++ j0tt;;D
++ $Ty;;D:?firstline?+1,$w! test.out
++ :qa!
++ ENDTEST
++
++ firstline
++ aaa two three four
++ bbb yee yoo four
++ ccc two three four
++ ddd yee yoo four
+*** ../vim-7.3.234/src/testdir/test81.ok 2011-06-26 05:34:33.000000000 +0200
+--- src/testdir/test81.ok 2011-06-26 05:31:33.000000000 +0200
+***************
+*** 0 ****
+--- 1,4 ----
++ aaa two
++ bbb y
++ ccc
++ ddd yee y
+*** ../vim-7.3.234/src/testdir/Makefile 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Makefile 2011-06-26 05:09:56.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,32 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.234/src/testdir/Make_amiga.mak 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_amiga.mak 2011-06-26 05:09:07.000000000 +0200
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out test79.out test80.out
+
+ .SUFFIXES: .in .out
+
+--- 28,35 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out test79.out test80.out \
+! test81.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 128,130 ****
+--- 129,132 ----
+ test78.out: test78.in
+ test79.out: test79.in
+ test80.out: test80.in
++ test81.out: test81.in
+*** ../vim-7.3.234/src/testdir/Make_dos.mak 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_dos.mak 2011-06-26 05:09:16.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,35 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.234/src/testdir/Make_ming.mak 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_ming.mak 2011-06-26 05:09:24.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,55 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.234/src/testdir/Make_os2.mak 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_os2.mak 2011-06-26 05:09:33.000000000 +0200
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out test79.out test80.out
+
+ .SUFFIXES: .in .out
+
+--- 28,35 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out test79.out test80.out \
+! test81.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.234/src/testdir/Make_vms.mms 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-06-26 05:09:42.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jun 19
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jun 26
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 75,81 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out test79.out test80.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 75,81 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out test79.out test80.out test81.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.234/src/version.c 2011-06-26 04:48:56.000000000 +0200
+--- src/version.c 2011-06-26 05:33:53.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 235,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+226. You sit down at the computer right after dinner and your spouse
+ says "See you in the morning."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.236
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.236 (after 7.3.232)
+Problem: Python 3 doesn't compile without +multi_byte
+Solution: Use "latin1" when MULTI_BYTE is not defined. (lilydjwg)
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.235/src/if_python3.c 2011-06-19 00:27:46.000000000 +0200
+--- src/if_python3.c 2011-06-26 19:10:57.000000000 +0200
+***************
+*** 70,76 ****
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)p_enc, NULL);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+--- 70,76 ----
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+***************
+*** 661,667 ****
+
+ /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+ * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)p_enc, NULL);
+ cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
+ Py_XDECREF(cmdstr);
+ PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+--- 661,667 ----
+
+ /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+ * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)ENC_OPT, NULL);
+ cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
+ Py_XDECREF(cmdstr);
+ PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+***************
+*** 1463,1469 ****
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)p_enc, NULL);
+
+ vim_free(tmp);
+ return result;
+--- 1463,1469 ----
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, NULL);
+
+ vim_free(tmp);
+ return result;
+*** ../vim-7.3.235/src/version.c 2011-06-26 05:36:07.000000000 +0200
+--- src/version.c 2011-06-26 19:12:12.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 236,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+228. You spend Saturday night making the counter on your home page
+ pass that 2000 mark.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.237
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.237
+Problem: "filetype" completion doesn't work on Windows. (Yue Wu)
+Solution: Don't use a glob pattern for the directories, use a list of
+ directories. (Dominique Pelle)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.236/src/ex_getln.c 2011-05-19 18:26:34.000000000 +0200
+--- src/ex_getln.c 2011-06-26 19:36:36.000000000 +0200
+***************
+*** 110,116 ****
+ static int expand_showtail __ARGS((expand_T *xp));
+ #ifdef FEAT_CMDL_COMPL
+ static int expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
+! static int ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ static int ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ static int ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
+--- 110,116 ----
+ static int expand_showtail __ARGS((expand_T *xp));
+ #ifdef FEAT_CMDL_COMPL
+ static int expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
+! static int ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ static int ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ static int ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
+***************
+*** 4536,4548 ****
+ || xp->xp_context == EXPAND_TAGS_LISTFILES)
+ return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
+ if (xp->xp_context == EXPAND_COLORS)
+! return ExpandRTDir(pat, num_file, file, "colors");
+ if (xp->xp_context == EXPAND_COMPILER)
+! return ExpandRTDir(pat, num_file, file, "compiler");
+ if (xp->xp_context == EXPAND_OWNSYNTAX)
+! return ExpandRTDir(pat, num_file, file, "syntax");
+ if (xp->xp_context == EXPAND_FILETYPE)
+! return ExpandRTDir(pat, num_file, file, "{syntax,indent,ftplugin}");
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ if (xp->xp_context == EXPAND_USER_LIST)
+ return ExpandUserList(xp, num_file, file);
+--- 4536,4560 ----
+ || xp->xp_context == EXPAND_TAGS_LISTFILES)
+ return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
+ if (xp->xp_context == EXPAND_COLORS)
+! {
+! char *directories[] = {"colors", NULL};
+! return ExpandRTDir(pat, num_file, file, directories);
+! }
+ if (xp->xp_context == EXPAND_COMPILER)
+! {
+! char *directories[] = {"colors", NULL};
+! return ExpandRTDir(pat, num_file, file, directories);
+! }
+ if (xp->xp_context == EXPAND_OWNSYNTAX)
+! {
+! char *directories[] = {"syntax", NULL};
+! return ExpandRTDir(pat, num_file, file, directories);
+! }
+ if (xp->xp_context == EXPAND_FILETYPE)
+! {
+! char *directories[] = {"syntax", "indent", "ftplugin", NULL};
+! return ExpandRTDir(pat, num_file, file, directories);
+! }
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ if (xp->xp_context == EXPAND_USER_LIST)
+ return ExpandUserList(xp, num_file, file);
+***************
+*** 4995,5051 ****
+ /*
+ * Expand color scheme, compiler or filetype names:
+ * 'runtimepath'/{dirnames}/{pat}.vim
+! * dirnames may contain one directory (ex: "colorscheme") or can be a glob
+! * expression matching multiple directories (ex: "{syntax,ftplugin,indent}").
+ */
+ static int
+ ExpandRTDir(pat, num_file, file, dirnames)
+ char_u *pat;
+ int *num_file;
+ char_u ***file;
+! char *dirnames;
+ {
+! char_u *all;
+ char_u *s;
+ char_u *e;
+ garray_T ga;
+
+ *num_file = 0;
+ *file = NULL;
+! s = alloc((unsigned)(STRLEN(pat) + STRLEN(dirnames) + 7));
+! if (s == NULL)
+! return FAIL;
+! sprintf((char *)s, "%s/%s*.vim", dirnames, pat);
+! all = globpath(p_rtp, s, 0);
+! vim_free(s);
+! if (all == NULL)
+! return FAIL;
+
+! ga_init2(&ga, (int)sizeof(char *), 3);
+! for (s = all; *s != NUL; s = e)
+ {
+! e = vim_strchr(s, '\n');
+! if (e == NULL)
+! e = s + STRLEN(s);
+! if (ga_grow(&ga, 1) == FAIL)
+! break;
+! if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+ {
+! for (s = e - 4; s > all; mb_ptr_back(all, s))
+! if (*s == '\n' || vim_ispathsep(*s))
+! break;
+! ++s;
+! ((char_u **)ga.ga_data)[ga.ga_len] =
+ vim_strnsave(s, (int)(e - s - 4));
+! ++ga.ga_len;
+ }
+! if (*e != NUL)
+! ++e;
+ }
+! vim_free(all);
+
+ /* Sort and remove duplicates which can happen when specifying multiple
+! * directories in dirnames such as "{syntax,ftplugin,indent}". */
+ remove_duplicates(&ga);
+
+ *file = ga.ga_data;
+--- 5007,5074 ----
+ /*
+ * Expand color scheme, compiler or filetype names:
+ * 'runtimepath'/{dirnames}/{pat}.vim
+! * "dirnames" is an array with one or more directory names.
+ */
+ static int
+ ExpandRTDir(pat, num_file, file, dirnames)
+ char_u *pat;
+ int *num_file;
+ char_u ***file;
+! char *dirnames[];
+ {
+! char_u *matches;
+ char_u *s;
+ char_u *e;
+ garray_T ga;
++ int i;
++ int pat_len;
+
+ *num_file = 0;
+ *file = NULL;
+! pat_len = STRLEN(pat);
+! ga_init2(&ga, (int)sizeof(char *), 10);
+
+! for (i = 0; dirnames[i] != NULL; ++i)
+ {
+! s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7));
+! if (s == NULL)
+ {
+! ga_clear_strings(&ga);
+! return FAIL;
+! }
+! sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
+! matches = globpath(p_rtp, s, 0);
+! vim_free(s);
+! if (matches == NULL)
+! continue;
+!
+! for (s = matches; *s != NUL; s = e)
+! {
+! e = vim_strchr(s, '\n');
+! if (e == NULL)
+! e = s + STRLEN(s);
+! if (ga_grow(&ga, 1) == FAIL)
+! break;
+! if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+! {
+! for (s = e - 4; s > matches; mb_ptr_back(matches, s))
+! if (*s == '\n' || vim_ispathsep(*s))
+! break;
+! ++s;
+! ((char_u **)ga.ga_data)[ga.ga_len] =
+ vim_strnsave(s, (int)(e - s - 4));
+! ++ga.ga_len;
+! }
+! if (*e != NUL)
+! ++e;
+ }
+! vim_free(matches);
+ }
+! if (ga.ga_len == 0)
+! return FAIL;
+
+ /* Sort and remove duplicates which can happen when specifying multiple
+! * directories in dirnames. */
+ remove_duplicates(&ga);
+
+ *file = ga.ga_data;
+*** ../vim-7.3.236/src/version.c 2011-06-26 19:13:33.000000000 +0200
+--- src/version.c 2011-06-26 19:39:39.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 237,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+230. You spend your Friday nights typing away at your keyboard
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.238
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.238
+Problem: Compiler warning for conversion.
+Solution: Add type cast. (Mike Williams)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.237/src/ex_getln.c 2011-06-26 19:40:14.000000000 +0200
+--- src/ex_getln.c 2011-07-04 14:23:27.000000000 +0200
+***************
+*** 5025,5031 ****
+
+ *num_file = 0;
+ *file = NULL;
+! pat_len = STRLEN(pat);
+ ga_init2(&ga, (int)sizeof(char *), 10);
+
+ for (i = 0; dirnames[i] != NULL; ++i)
+--- 5025,5031 ----
+
+ *num_file = 0;
+ *file = NULL;
+! pat_len = (int)STRLEN(pat);
+ ga_init2(&ga, (int)sizeof(char *), 10);
+
+ for (i = 0; dirnames[i] != NULL; ++i)
+*** ../vim-7.3.237/src/version.c 2011-06-26 19:40:14.000000000 +0200
+--- src/version.c 2011-07-07 15:04:00.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 238,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+255. You work for a newspaper and your editor asks you to write an
+ article about Internet addiction...in the "first person."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.239
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.239
+Problem: Python corrects the cursor column without taking 'virtualedit'
+ into account. (lilydjwg)
+Solution: Call check_cursor_col_win().
+Files: src/if_py_both.h, src/mbyte.c, src/misc2.c, src/normal.c,
+ src/proto/mbyte.pro, src/proto/misc2.pro
+
+
+*** ../vim-7.3.238/src/if_py_both.h 2011-06-26 04:01:37.000000000 +0200
+--- src/if_py_both.h 2011-07-07 14:28:19.000000000 +0200
+***************
+*** 534,540 ****
+ {
+ long lnum;
+ long col;
+- long len;
+
+ if (!PyArg_Parse(val, "(ll)", &lnum, &col))
+ return -1;
+--- 534,539 ----
+***************
+*** 549,566 ****
+ if (VimErrorCheck())
+ return -1;
+
+- /* When column is out of range silently correct it. */
+- len = (long)STRLEN(ml_get_buf(this->win->w_buffer, lnum, FALSE));
+- if (col > len)
+- col = len;
+-
+ this->win->w_cursor.lnum = lnum;
+ this->win->w_cursor.col = col;
+ #ifdef FEAT_VIRTUALEDIT
+ this->win->w_cursor.coladd = 0;
+ #endif
+! update_screen(VALID);
+
+ return 0;
+ }
+ else if (strcmp(name, "height") == 0)
+--- 548,562 ----
+ if (VimErrorCheck())
+ return -1;
+
+ this->win->w_cursor.lnum = lnum;
+ this->win->w_cursor.col = col;
+ #ifdef FEAT_VIRTUALEDIT
+ this->win->w_cursor.coladd = 0;
+ #endif
+! /* When column is out of range silently correct it. */
+! check_cursor_col_win(this->win);
+
++ update_screen(VALID);
+ return 0;
+ }
+ else if (strcmp(name, "height") == 0)
+*** ../vim-7.3.238/src/mbyte.c 2011-04-11 14:29:13.000000000 +0200
+--- src/mbyte.c 2011-07-07 14:27:07.000000000 +0200
+***************
+*** 3563,3569 ****
+ void
+ mb_adjust_cursor()
+ {
+! mb_adjustpos(&curwin->w_cursor);
+ }
+
+ /*
+--- 3563,3569 ----
+ void
+ mb_adjust_cursor()
+ {
+! mb_adjustpos(curbuf, &curwin->w_cursor);
+ }
+
+ /*
+***************
+*** 3571,3577 ****
+ * If it points to a tail byte it's moved backwards to the head byte.
+ */
+ void
+! mb_adjustpos(lp)
+ pos_T *lp;
+ {
+ char_u *p;
+--- 3571,3578 ----
+ * If it points to a tail byte it's moved backwards to the head byte.
+ */
+ void
+! mb_adjustpos(buf, lp)
+! buf_T *buf;
+ pos_T *lp;
+ {
+ char_u *p;
+***************
+*** 3582,3588 ****
+ #endif
+ )
+ {
+! p = ml_get(lp->lnum);
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ #ifdef FEAT_VIRTUALEDIT
+ /* Reset "coladd" when the cursor would be on the right half of a
+--- 3583,3589 ----
+ #endif
+ )
+ {
+! p = ml_get_buf(buf, lp->lnum, FALSE);
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ #ifdef FEAT_VIRTUALEDIT
+ /* Reset "coladd" when the cursor would be on the right half of a
+*** ../vim-7.3.238/src/misc2.c 2011-04-11 16:56:29.000000000 +0200
+--- src/misc2.c 2011-07-07 14:27:50.000000000 +0200
+***************
+*** 333,339 ****
+ #ifdef FEAT_MBYTE
+ /* prevent from moving onto a trail byte */
+ if (has_mbyte)
+! mb_adjustpos(pos);
+ #endif
+
+ if (col < wcol)
+--- 333,339 ----
+ #ifdef FEAT_MBYTE
+ /* prevent from moving onto a trail byte */
+ if (has_mbyte)
+! mb_adjustpos(curbuf, pos);
+ #endif
+
+ if (col < wcol)
+***************
+*** 544,559 ****
+ void
+ check_cursor_col()
+ {
+ colnr_T len;
+ #ifdef FEAT_VIRTUALEDIT
+! colnr_T oldcol = curwin->w_cursor.col;
+! colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd;
+ #endif
+
+! len = (colnr_T)STRLEN(ml_get_curline());
+ if (len == 0)
+! curwin->w_cursor.col = 0;
+! else if (curwin->w_cursor.col >= len)
+ {
+ /* Allow cursor past end-of-line when:
+ * - in Insert mode or restarting Insert mode
+--- 544,569 ----
+ void
+ check_cursor_col()
+ {
++ check_cursor_col_win(curwin);
++ }
++
++ /*
++ * Make sure win->w_cursor.col is valid.
++ */
++ void
++ check_cursor_col_win(win)
++ win_T *win;
++ {
+ colnr_T len;
+ #ifdef FEAT_VIRTUALEDIT
+! colnr_T oldcol = win->w_cursor.col;
+! colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd;
+ #endif
+
+! len = (colnr_T)STRLEN(ml_get_buf(win->w_buffer, win->w_cursor.lnum, FALSE));
+ if (len == 0)
+! win->w_cursor.col = 0;
+! else if (win->w_cursor.col >= len)
+ {
+ /* Allow cursor past end-of-line when:
+ * - in Insert mode or restarting Insert mode
+***************
+*** 567,599 ****
+ || (ve_flags & VE_ONEMORE)
+ #endif
+ || virtual_active())
+! curwin->w_cursor.col = len;
+ else
+ {
+! curwin->w_cursor.col = len - 1;
+ #ifdef FEAT_MBYTE
+! /* prevent cursor from moving on the trail byte */
+ if (has_mbyte)
+! mb_adjust_cursor();
+ #endif
+ }
+ }
+! else if (curwin->w_cursor.col < 0)
+! curwin->w_cursor.col = 0;
+
+ #ifdef FEAT_VIRTUALEDIT
+ /* If virtual editing is on, we can leave the cursor on the old position,
+ * only we must set it to virtual. But don't do it when at the end of the
+ * line. */
+ if (oldcol == MAXCOL)
+! curwin->w_cursor.coladd = 0;
+ else if (ve_flags == VE_ALL)
+ {
+! if (oldcoladd > curwin->w_cursor.col)
+! curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col;
+ else
+ /* avoid weird number when there is a miscalculation or overflow */
+! curwin->w_cursor.coladd = 0;
+ }
+ #endif
+ }
+--- 577,609 ----
+ || (ve_flags & VE_ONEMORE)
+ #endif
+ || virtual_active())
+! win->w_cursor.col = len;
+ else
+ {
+! win->w_cursor.col = len - 1;
+ #ifdef FEAT_MBYTE
+! /* Move the cursor to the head byte. */
+ if (has_mbyte)
+! mb_adjustpos(win->w_buffer, &win->w_cursor);
+ #endif
+ }
+ }
+! else if (win->w_cursor.col < 0)
+! win->w_cursor.col = 0;
+
+ #ifdef FEAT_VIRTUALEDIT
+ /* If virtual editing is on, we can leave the cursor on the old position,
+ * only we must set it to virtual. But don't do it when at the end of the
+ * line. */
+ if (oldcol == MAXCOL)
+! win->w_cursor.coladd = 0;
+ else if (ve_flags == VE_ALL)
+ {
+! if (oldcoladd > win->w_cursor.col)
+! win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
+ else
+ /* avoid weird number when there is a miscalculation or overflow */
+! win->w_cursor.coladd = 0;
+ }
+ #endif
+ }
+*** ../vim-7.3.238/src/normal.c 2011-06-20 00:45:55.000000000 +0200
+--- src/normal.c 2011-07-07 14:27:57.000000000 +0200
+***************
+*** 8774,8780 ****
+ {
+ --pp->col;
+ #ifdef FEAT_MBYTE
+! mb_adjustpos(pp);
+ #endif
+ }
+ else if (pp->lnum > 1)
+--- 8774,8780 ----
+ {
+ --pp->col;
+ #ifdef FEAT_MBYTE
+! mb_adjustpos(curbuf, pp);
+ #endif
+ }
+ else if (pp->lnum > 1)
+*** ../vim-7.3.238/src/proto/mbyte.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/mbyte.pro 2011-07-07 14:27:09.000000000 +0200
+***************
+*** 56,62 ****
+ int utf_valid_string __ARGS((char_u *s, char_u *end));
+ int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
+ void mb_adjust_cursor __ARGS((void));
+! void mb_adjustpos __ARGS((pos_T *lp));
+ char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
+ int mb_charlen __ARGS((char_u *str));
+ int mb_charlen_len __ARGS((char_u *str, int len));
+--- 56,62 ----
+ int utf_valid_string __ARGS((char_u *s, char_u *end));
+ int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
+ void mb_adjust_cursor __ARGS((void));
+! void mb_adjustpos __ARGS((buf_T *buf, pos_T *lp));
+ char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
+ int mb_charlen __ARGS((char_u *str));
+ int mb_charlen_len __ARGS((char_u *str, int len));
+*** ../vim-7.3.238/src/proto/misc2.pro 2011-04-11 16:56:29.000000000 +0200
+--- src/proto/misc2.pro 2011-07-07 14:26:57.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,20 ----
+ linenr_T get_cursor_rel_lnum __ARGS((win_T *wp, linenr_T lnum));
+ void check_cursor_lnum __ARGS((void));
+ void check_cursor_col __ARGS((void));
++ void check_cursor_col_win __ARGS((win_T *win));
+ void check_cursor __ARGS((void));
+ void adjust_cursor_col __ARGS((void));
+ int leftcol_changed __ARGS((void));
+*** ../vim-7.3.238/src/version.c 2011-07-07 15:04:38.000000000 +0200
+--- src/version.c 2011-07-07 15:05:49.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 239,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+256. You are able to write down over 250 symptoms of being an internet
+ addict, even though they only asked for 101.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.240
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Note: I haven't verified this works or even compiles. Please send me a
+patch if you see a problem and can fix it.
+
+Patch 7.3.240
+Problem: External commands can't use pipes on MS-Windows.
+Solution: Implement pipes and use them when 'shelltemp' isn't set. (Vincent
+ Berthoux)
+Files: src/eval.c, src/ex_cmds.c, src/misc2.c, src/os_unix.c,
+ src/os_win32.c, src/proto/misc2.pro, src/ui.c
+
+
+*** ../vim-7.3.239/src/eval.c 2011-06-19 02:55:32.000000000 +0200
+--- src/eval.c 2011-07-07 15:44:56.000000000 +0200
+***************
+*** 11931,11937 ****
+ #ifdef FEAT_SEARCHPATH
+ "file_in_path",
+ #endif
+! #if defined(UNIX) && !defined(USE_SYSTEM)
+ "filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+--- 11931,11937 ----
+ #ifdef FEAT_SEARCHPATH
+ "file_in_path",
+ #endif
+! #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
+ "filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+*** ../vim-7.3.239/src/ex_cmds.c 2011-06-12 22:03:15.000000000 +0200
+--- src/ex_cmds.c 2011-07-07 15:44:56.000000000 +0200
+***************
+*** 1107,1113 ****
+ if (do_out)
+ shell_flags |= SHELL_DOOUT;
+
+! #if !defined(USE_SYSTEM) && defined(UNIX)
+ if (!do_in && do_out && !p_stmp)
+ {
+ /* Use a pipe to fetch stdout of the command, do not use a temp file. */
+--- 1107,1113 ----
+ if (do_out)
+ shell_flags |= SHELL_DOOUT;
+
+! #if (!defined(USE_SYSTEM) && defined(UNIX)) || defined(WIN3264)
+ if (!do_in && do_out && !p_stmp)
+ {
+ /* Use a pipe to fetch stdout of the command, do not use a temp file. */
+*** ../vim-7.3.239/src/misc2.c 2011-07-07 15:08:53.000000000 +0200
+--- src/misc2.c 2011-07-07 15:55:42.000000000 +0200
+***************
+*** 2146,2151 ****
+--- 2146,2170 ----
+ }
+ }
+
++ #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
++ /*
++ * Append the text in "gap" below the cursor line and clear "gap".
++ */
++ void
++ append_ga_line(gap)
++ garray_T *gap;
++ {
++ /* Remove trailing CR. */
++ if (gap->ga_len > 0
++ && !curbuf->b_p_bin
++ && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
++ --gap->ga_len;
++ ga_append(gap, NUL);
++ ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
++ gap->ga_len = 0;
++ }
++ #endif
++
+ /************************************************************************
+ * functions that use lookup tables for various things, generally to do with
+ * special key codes.
+*** ../vim-7.3.239/src/os_unix.c 2011-04-11 16:56:29.000000000 +0200
+--- src/os_unix.c 2011-07-07 15:54:58.000000000 +0200
+***************
+*** 3660,3686 ****
+ /* Nothing to do. */
+ }
+
+- #ifndef USE_SYSTEM
+- static void append_ga_line __ARGS((garray_T *gap));
+-
+- /*
+- * Append the text in "gap" below the cursor line and clear "gap".
+- */
+- static void
+- append_ga_line(gap)
+- garray_T *gap;
+- {
+- /* Remove trailing CR. */
+- if (gap->ga_len > 0
+- && !curbuf->b_p_bin
+- && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
+- --gap->ga_len;
+- ga_append(gap, NUL);
+- ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
+- gap->ga_len = 0;
+- }
+- #endif
+-
+ int
+ mch_call_shell(cmd, options)
+ char_u *cmd;
+--- 3660,3665 ----
+*** ../vim-7.3.239/src/os_win32.c 2011-05-25 17:06:16.000000000 +0200
+--- src/os_win32.c 2011-07-07 16:08:30.000000000 +0200
+***************
+*** 417,422 ****
+--- 417,427 ----
+ static PGNSECINFO pGetNamedSecurityInfo;
+ #endif
+
++ typedef BOOL (WINAPI *PSETHANDLEINFORMATION)(HANDLE, DWORD, DWORD);
++
++ static BOOL allowPiping = FALSE;
++ static PSETHANDLEINFORMATION pSetHandleInformation;
++
+ /*
+ * Set g_PlatformId to VER_PLATFORM_WIN32_NT (NT) or
+ * VER_PLATFORM_WIN32_WINDOWS (Win95).
+***************
+*** 467,472 ****
+--- 472,489 ----
+ }
+ }
+ #endif
++ /*
++ * If we are on windows NT, try to load the pipe functions, only
++ * available from Win2K.
++ */
++ if (g_PlatformId == VER_PLATFORM_WIN32_NT)
++ {
++ HANDLE kernel32 = GetModuleHandle("kernel32");
++ pSetHandleInformation = (PSETHANDLEINFORMATION)GetProcAddress(
++ kernel32, "SetHandleInformation");
++
++ allowPiping = pSetHandleInformation != NULL;
++ }
+ done = TRUE;
+ }
+ }
+***************
+*** 1635,1641 ****
+ }
+
+ #if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
+! __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
+ /*
+ * Bad parameter handler.
+ *
+--- 1652,1658 ----
+ }
+
+ #if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
+! __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
+ /*
+ * Bad parameter handler.
+ *
+***************
+*** 3210,3216 ****
+ * 4. Prompt the user to press a key to close the console window
+ */
+ static int
+! mch_system(char *cmd, int options)
+ {
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+--- 3227,3233 ----
+ * 4. Prompt the user to press a key to close the console window
+ */
+ static int
+! mch_system_classic(char *cmd, int options)
+ {
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+***************
+*** 3315,3320 ****
+--- 3332,3829 ----
+
+ return ret;
+ }
++
++ /*
++ * Thread launched by the gui to send the current buffer data to the
++ * process. This way avoid to hang up vim totally if the children
++ * process take a long time to process the lines.
++ */
++ static DWORD WINAPI
++ sub_process_writer(LPVOID param)
++ {
++ HANDLE g_hChildStd_IN_Wr = param;
++ linenr_T lnum = curbuf->b_op_start.lnum;
++ DWORD len = 0;
++ DWORD l;
++ char_u *lp = ml_get(lnum);
++ char_u *s;
++ int written = 0;
++
++ for (;;)
++ {
++ l = (DWORD)STRLEN(lp + written);
++ if (l == 0)
++ len = 0;
++ else if (lp[written] == NL)
++ {
++ /* NL -> NUL translation */
++ WriteFile(g_hChildStd_IN_Wr, "", 1, &len, NULL);
++ }
++ else
++ {
++ s = vim_strchr(lp + written, NL);
++ WriteFile(g_hChildStd_IN_Wr, (char *)lp + written,
++ s == NULL ? l : (DWORD)(s - (lp + written)),
++ &len, NULL);
++ }
++ if (len == (int)l)
++ {
++ /* Finished a line, add a NL, unless this line should not have
++ * one. */
++ if (lnum != curbuf->b_op_end.lnum
++ || !curbuf->b_p_bin
++ || (lnum != curbuf->b_no_eol_lnum
++ && (lnum != curbuf->b_ml.ml_line_count
++ || curbuf->b_p_eol)))
++ {
++ WriteFile(g_hChildStd_IN_Wr, "\n", 1, &ignored, NULL);
++ }
++
++ ++lnum;
++ if (lnum > curbuf->b_op_end.lnum)
++ break;
++
++ lp = ml_get(lnum);
++ written = 0;
++ }
++ else if (len > 0)
++ written += len;
++ }
++
++ /* finished all the lines, close pipe */
++ CloseHandle(g_hChildStd_IN_Wr);
++ ExitThread(0);
++ }
++
++
++ # define BUFLEN 100 /* length for buffer, stolen from unix version */
++
++ /*
++ * This function read from the children's stdout and write the
++ * data on screen or in the buffer accordingly.
++ */
++ static void
++ dump_pipe(int options,
++ HANDLE g_hChildStd_OUT_Rd,
++ garray_T *ga,
++ char_u buffer[],
++ DWORD *buffer_off)
++ {
++ DWORD availableBytes = 0;
++ DWORD i;
++ int c;
++ char_u *p;
++ int ret;
++ DWORD len;
++ DWORD toRead;
++ int repeatCount;
++
++ /* we query the pipe to see if there is any data to read
++ * to avoid to perform a blocking read */
++ ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
++ NULL, /* optional buffer */
++ 0, /* buffe size */
++ NULL, /* number of read bytes */
++ &availableBytes, /* available bytes total */
++ NULL); /* byteLeft */
++
++ repeatCount = 0;
++ /* We got real data in the pipe, read it */
++ while (ret != 0 && availableBytes > 0 && availableBytes > 0)
++ {
++ repeatCount++;
++ toRead =
++ # ifdef FEAT_MBYTE
++ (DWORD)(BUFLEN - *buffer_off);
++ # else
++ (DWORD)BUFLEN;
++ # endif
++ toRead = availableBytes < toRead ? availableBytes : toRead;
++ ReadFile(g_hChildStd_OUT_Rd, buffer
++ # ifdef FEAT_MBYTE
++ + *buffer_off, toRead
++ # else
++ , toRead
++ # endif
++ , &len, NULL);
++
++ /* If we haven't read anything, there is a problem */
++ if (len == 0)
++ break;
++
++ availableBytes -= len;
++
++ if (options & SHELL_READ)
++ {
++ /* Do NUL -> NL translation, append NL separated
++ * lines to the current buffer. */
++ for (i = 0; i < len; ++i)
++ {
++ if (buffer[i] == NL)
++ append_ga_line(ga);
++ else if (buffer[i] == NUL)
++ ga_append(ga, NL);
++ else
++ ga_append(ga, buffer[i]);
++ }
++ }
++ # ifdef FEAT_MBYTE
++ else if (has_mbyte)
++ {
++ int l;
++
++ len += *buffer_off;
++ buffer[len] = NUL;
++
++ /* Check if the last character in buffer[] is
++ * incomplete, keep these bytes for the next
++ * round. */
++ for (p = buffer; p < buffer + len; p += l)
++ {
++ l = mb_cptr2len(p);
++ if (l == 0)
++ l = 1; /* NUL byte? */
++ else if (MB_BYTE2LEN(*p) != l)
++ break;
++ }
++ if (p == buffer) /* no complete character */
++ {
++ /* avoid getting stuck at an illegal byte */
++ if (len >= 12)
++ ++p;
++ else
++ {
++ *buffer_off = len;
++ return;
++ }
++ }
++ c = *p;
++ *p = NUL;
++ msg_puts(buffer);
++ if (p < buffer + len)
++ {
++ *p = c;
++ *buffer_off = (DWORD)((buffer + len) - p);
++ mch_memmove(buffer, p, *buffer_off);
++ return;
++ }
++ *buffer_off = 0;
++ }
++ # endif /* FEAT_MBYTE */
++ else
++ {
++ buffer[len] = NUL;
++ msg_puts(buffer);
++ }
++
++ windgoto(msg_row, msg_col);
++ cursor_on();
++ out_flush();
++ }
++ }
++
++ /*
++ * Version of system to use for windows NT > 5.0 (Win2K), use pipe
++ * for communication and doesn't open any new window.
++ */
++ static int
++ mch_system_piped(char *cmd, int options)
++ {
++ STARTUPINFO si;
++ PROCESS_INFORMATION pi;
++ DWORD ret = 0;
++
++ HANDLE g_hChildStd_IN_Rd = NULL;
++ HANDLE g_hChildStd_IN_Wr = NULL;
++ HANDLE g_hChildStd_OUT_Rd = NULL;
++ HANDLE g_hChildStd_OUT_Wr = NULL;
++
++ char_u buffer[BUFLEN + 1]; /* reading buffer + size */
++ DWORD len;
++
++ /* buffer used to receive keys */
++ char_u ta_buf[BUFLEN + 1]; /* TypeAHead */
++ int ta_len = 0; /* valid bytes in ta_buf[] */
++
++ DWORD i;
++ int c;
++ int noread_cnt = 0;
++ garray_T ga;
++ int delay = 1;
++ # ifdef FEAT_MBYTE
++ DWORD buffer_off = 0; /* valid bytes in buffer[] */
++ # endif
++
++ SECURITY_ATTRIBUTES saAttr;
++
++ /* Set the bInheritHandle flag so pipe handles are inherited. */
++ saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
++ saAttr.bInheritHandle = TRUE;
++ saAttr.lpSecurityDescriptor = NULL;
++
++ if ( ! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0)
++ /* Ensure the read handle to the pipe for STDOUT is not inherited. */
++ || ! pSetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0)
++ /* Create a pipe for the child process's STDIN. */
++ || ! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0)
++ /* Ensure the write handle to the pipe for STDIN is not inherited. */
++ || ! pSetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) )
++ {
++ CloseHandle(g_hChildStd_IN_Rd);
++ CloseHandle(g_hChildStd_IN_Wr);
++ CloseHandle(g_hChildStd_OUT_Rd);
++ CloseHandle(g_hChildStd_OUT_Wr);
++ MSG_PUTS(_("\nCannot create pipes\n"));
++ }
++
++ si.cb = sizeof(si);
++ si.lpReserved = NULL;
++ si.lpDesktop = NULL;
++ si.lpTitle = NULL;
++ si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
++
++ /* set-up our file redirection */
++ si.hStdError = g_hChildStd_OUT_Wr;
++ si.hStdOutput = g_hChildStd_OUT_Wr;
++ si.hStdInput = g_hChildStd_IN_Rd;
++ si.wShowWindow = SW_HIDE;
++ si.cbReserved2 = 0;
++ si.lpReserved2 = NULL;
++
++ if (options & SHELL_READ)
++ ga_init2(&ga, 1, BUFLEN);
++
++ /* Now, run the command */
++ CreateProcess(NULL, /* Executable name */
++ cmd, /* Command to execute */
++ NULL, /* Process security attributes */
++ NULL, /* Thread security attributes */
++
++ // this command can be litigeous, handle inheritence was
++ // deactivated for pending temp file, but, if we deactivate
++ // it, the pipes don't work for some reason.
++ TRUE, /* Inherit handles, first deactivated,
++ * but needed */
++ CREATE_DEFAULT_ERROR_MODE, /* Creation flags */
++ NULL, /* Environment */
++ NULL, /* Current directory */
++ &si, /* Startup information */
++ &pi); /* Process information */
++
++
++ /* Close our unused side of the pipes */
++ CloseHandle(g_hChildStd_IN_Rd);
++ CloseHandle(g_hChildStd_OUT_Wr);
++
++ if (options & SHELL_WRITE)
++ {
++ HANDLE thread =
++ CreateThread(NULL, /* security attributes */
++ 0, /* default stack size */
++ sub_process_writer, /* function to be executed */
++ g_hChildStd_IN_Wr, /* parameter */
++ 0, /* creation flag, start immediately */
++ NULL); /* we don't care about thread id */
++ CloseHandle(thread);
++ g_hChildStd_IN_Wr = NULL;
++ }
++
++ /* Keep updating the window while waiting for the shell to finish. */
++ for (;;)
++ {
++ MSG msg;
++
++ if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
++ {
++ TranslateMessage(&msg);
++ DispatchMessage(&msg);
++ }
++
++ /* write pipe information in the window */
++ if ((options & (SHELL_READ|SHELL_WRITE))
++ # ifdef FEAT_GUI
++ || gui.in_use
++ # endif
++ )
++ {
++ len = 0;
++ if (!(options & SHELL_EXPAND)
++ && ((options &
++ (SHELL_READ|SHELL_WRITE|SHELL_COOKED))
++ != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
++ # ifdef FEAT_GUI
++ || gui.in_use
++ # endif
++ )
++ && (ta_len > 0 || noread_cnt > 4))
++ {
++ if (ta_len == 0)
++ {
++ /* Get extra characters when we don't have any. Reset the
++ * counter and timer. */
++ noread_cnt = 0;
++ # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
++ gettimeofday(&start_tv, NULL);
++ # endif
++ len = ui_inchar(ta_buf, BUFLEN, 10L, 0);
++ }
++ if (ta_len > 0 || len > 0)
++ {
++ /*
++ * For pipes: Check for CTRL-C: send interrupt signal to
++ * child. Check for CTRL-D: EOF, close pipe to child.
++ */
++ if (len == 1 && cmd != NULL)
++ {
++ if (ta_buf[ta_len] == Ctrl_C)
++ {
++ /* Learn what exit code is expected, for
++ * now put 9 as SIGKILL */
++ TerminateProcess(pi.hProcess, 9);
++ }
++ if (ta_buf[ta_len] == Ctrl_D)
++ {
++ CloseHandle(g_hChildStd_IN_Wr);
++ g_hChildStd_IN_Wr = NULL;
++ }
++ }
++
++ /* replace K_BS by <BS> and K_DEL by <DEL> */
++ for (i = ta_len; i < ta_len + len; ++i)
++ {
++ if (ta_buf[i] == CSI && len - i > 2)
++ {
++ c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]);
++ if (c == K_DEL || c == K_KDEL || c == K_BS)
++ {
++ mch_memmove(ta_buf + i + 1, ta_buf + i + 3,
++ (size_t)(len - i - 2));
++ if (c == K_DEL || c == K_KDEL)
++ ta_buf[i] = DEL;
++ else
++ ta_buf[i] = Ctrl_H;
++ len -= 2;
++ }
++ }
++ else if (ta_buf[i] == '\r')
++ ta_buf[i] = '\n';
++ # ifdef FEAT_MBYTE
++ if (has_mbyte)
++ i += (*mb_ptr2len_len)(ta_buf + i,
++ ta_len + len - i) - 1;
++ # endif
++ }
++
++ /*
++ * For pipes: echo the typed characters. For a pty this
++ * does not seem to work.
++ */
++ for (i = ta_len; i < ta_len + len; ++i)
++ {
++ if (ta_buf[i] == '\n' || ta_buf[i] == '\b')
++ msg_putchar(ta_buf[i]);
++ # ifdef FEAT_MBYTE
++ else if (has_mbyte)
++ {
++ int l = (*mb_ptr2len)(ta_buf + i);
++
++ msg_outtrans_len(ta_buf + i, l);
++ i += l - 1;
++ }
++ # endif
++ else
++ msg_outtrans_len(ta_buf + i, 1);
++ }
++ windgoto(msg_row, msg_col);
++ out_flush();
++
++ ta_len += len;
++
++ /*
++ * Write the characters to the child, unless EOF has been
++ * typed for pipes. Write one character at a time, to
++ * avoid losing too much typeahead. When writing buffer
++ * lines, drop the typed characters (only check for
++ * CTRL-C).
++ */
++ if (options & SHELL_WRITE)
++ ta_len = 0;
++ else if (g_hChildStd_IN_Wr != NULL)
++ {
++ WriteFile(g_hChildStd_IN_Wr, (char*)ta_buf,
++ 1, &len, NULL);
++ // if we are typing in, we want to keep things reactive
++ delay = 1;
++ if (len > 0)
++ {
++ ta_len -= len;
++ mch_memmove(ta_buf, ta_buf + len, ta_len);
++ }
++ }
++ }
++ }
++ }
++
++ if (ta_len)
++ ui_inchar_undo(ta_buf, ta_len);
++
++ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
++ {
++ dump_pipe(options, g_hChildStd_OUT_Rd,
++ &ga, buffer, &buffer_off);
++ break;
++ }
++
++ ++noread_cnt;
++ dump_pipe(options, g_hChildStd_OUT_Rd,
++ &ga, buffer, &buffer_off);
++
++ /* We start waiting for a very short time and then increase it, so
++ * that we respond quickly when the process is quick, and don't
++ * consume too much overhead when it's slow. */
++ if (delay < 50)
++ delay += 10;
++ }
++
++ /* Close the pipe */
++ CloseHandle(g_hChildStd_OUT_Rd);
++ if (g_hChildStd_IN_Wr != NULL)
++ CloseHandle(g_hChildStd_IN_Wr);
++
++ WaitForSingleObject(pi.hProcess, INFINITE);
++
++ /* Get the command exit code */
++ GetExitCodeProcess(pi.hProcess, &ret);
++
++ if (options & SHELL_READ)
++ {
++ if (ga.ga_len > 0)
++ {
++ append_ga_line(&ga);
++ /* remember that the NL was missing */
++ curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
++ }
++ else
++ curbuf->b_no_eol_lnum = 0;
++ ga_clear(&ga);
++ }
++
++ /* Close the handles to the subprocess, so that it goes away */
++ CloseHandle(pi.hThread);
++ CloseHandle(pi.hProcess);
++
++ return ret;
++ }
++
++ static int
++ mch_system(char *cmd, int options)
++ {
++ /* if we can pipe and the shelltemp option is off */
++ if (allowPiping && !p_stmp)
++ return mch_system_piped(cmd, options);
++ else
++ return mch_system_classic(cmd, options);
++ }
+ #else
+
+ # define mch_system(c, o) system(c)
+***************
+*** 3388,3394 ****
+ char_u *newcmd;
+ long_u cmdlen = (
+ #ifdef FEAT_GUI_W32
+! STRLEN(vimrun_path) +
+ #endif
+ STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+
+--- 3897,3903 ----
+ char_u *newcmd;
+ long_u cmdlen = (
+ #ifdef FEAT_GUI_W32
+! (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+ #endif
+ STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+
+***************
+*** 3497,3503 ****
+ MB_ICONWARNING);
+ need_vimrun_warning = FALSE;
+ }
+! if (!s_dont_use_vimrun)
+ /* Use vimrun to execute the command. It opens a console
+ * window, which can be closed without killing Vim. */
+ vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
+--- 4006,4012 ----
+ MB_ICONWARNING);
+ need_vimrun_warning = FALSE;
+ }
+! if (!s_dont_use_vimrun && (!allowPiping || p_stmp))
+ /* Use vimrun to execute the command. It opens a console
+ * window, which can be closed without killing Vim. */
+ vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
+***************
+*** 3521,3527 ****
+ /* Print the return value, unless "vimrun" was used. */
+ if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
+ #if defined(FEAT_GUI_W32)
+! && ((options & SHELL_DOOUT) || s_dont_use_vimrun)
+ #endif
+ )
+ {
+--- 4030,4037 ----
+ /* Print the return value, unless "vimrun" was used. */
+ if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
+ #if defined(FEAT_GUI_W32)
+! && ((options & SHELL_DOOUT) || s_dont_use_vimrun
+! || (allowPiping && !p_stmp))
+ #endif
+ )
+ {
+*** ../vim-7.3.239/src/proto/misc2.pro 2011-07-07 15:08:53.000000000 +0200
+--- src/proto/misc2.pro 2011-07-07 15:56:16.000000000 +0200
+***************
+*** 58,63 ****
+--- 58,64 ----
+ char_u *ga_concat_strings __ARGS((garray_T *gap));
+ void ga_concat __ARGS((garray_T *gap, char_u *s));
+ void ga_append __ARGS((garray_T *gap, int c));
++ void append_ga_line __ARGS((garray_T *gap));
+ int name_to_mod_mask __ARGS((int c));
+ int simplify_key __ARGS((int key, int *modifiers));
+ int handle_x_keys __ARGS((int key));
+*** ../vim-7.3.239/src/ui.c 2011-06-19 01:14:23.000000000 +0200
+--- src/ui.c 2011-07-07 15:44:56.000000000 +0200
+***************
+*** 58,64 ****
+ #endif
+ }
+
+! #if defined(UNIX) || defined(VMS) || defined(PROTO)
+ /*
+ * When executing an external program, there may be some typed characters that
+ * are not consumed by it. Give them back to ui_inchar() and they are stored
+--- 58,64 ----
+ #endif
+ }
+
+! #if defined(UNIX) || defined(VMS) || defined(PROTO) || defined(WIN3264)
+ /*
+ * When executing an external program, there may be some typed characters that
+ * are not consumed by it. Give them back to ui_inchar() and they are stored
+*** ../vim-7.3.239/src/version.c 2011-07-07 15:08:53.000000000 +0200
+--- src/version.c 2011-07-07 16:14:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 240,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+257. Your "hundred-and-one" lists include well over 101 items, since you
+ automatically interpret all numbers in hexadecimal notation.
+ (hex 101 = decimal 257)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.241
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.241
+Problem: Using CTRL-R CTRL-W on the command line may insert only part of
+ the word.
+Solution: Use the cursor position instead of assuming it is at the end of
+ the command. (Tyru)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.240/src/ex_getln.c 2011-07-07 15:04:38.000000000 +0200
+--- src/ex_getln.c 2011-07-07 16:38:50.000000000 +0200
+***************
+*** 3046,3052 ****
+ int len;
+
+ /* Locate start of last word in the cmd buffer. */
+! for (w = ccline.cmdbuff + ccline.cmdlen; w > ccline.cmdbuff; )
+ {
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+--- 3046,3052 ----
+ int len;
+
+ /* Locate start of last word in the cmd buffer. */
+! for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; )
+ {
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+***************
+*** 3064,3070 ****
+ --w;
+ }
+ }
+! len = (int)((ccline.cmdbuff + ccline.cmdlen) - w);
+ if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
+ p += len;
+ }
+--- 3064,3070 ----
+ --w;
+ }
+ }
+! len = (int)((ccline.cmdbuff + ccline.cmdpos) - w);
+ if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
+ p += len;
+ }
+*** ../vim-7.3.240/src/version.c 2011-07-07 16:20:45.000000000 +0200
+--- src/version.c 2011-07-07 16:41:29.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 241,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+258. When you want to see your girlfriend, you surf to her homepage.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.242
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.242
+Problem: Illegal memory access in after_pathsep().
+Solution: Check that the pointer is not at the start of the file name.
+ (Dominique Pelle)
+Files: src/misc2.c
+
+
+*** ../vim-7.3.241/src/misc2.c 2011-07-07 16:20:45.000000000 +0200
+--- src/misc2.c 2011-07-07 17:05:41.000000000 +0200
+***************
+*** 3247,3253 ****
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+ * Return TRUE if "p" points to just after a path separator.
+! * Take care of multi-byte characters.
+ * "b" must point to the start of the file name
+ */
+ int
+--- 3247,3253 ----
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+ * Return TRUE if "p" points to just after a path separator.
+! * Takes care of multi-byte characters.
+ * "b" must point to the start of the file name
+ */
+ int
+***************
+*** 3255,3261 ****
+ char_u *b;
+ char_u *p;
+ {
+! return vim_ispathsep(p[-1])
+ && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
+ }
+ #endif
+--- 3255,3261 ----
+ char_u *b;
+ char_u *p;
+ {
+! return p > b && vim_ispathsep(p[-1])
+ && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
+ }
+ #endif
+*** ../vim-7.3.241/src/version.c 2011-07-07 16:44:33.000000000 +0200
+--- src/version.c 2011-07-07 17:05:49.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 242,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+260. Co-workers have to E-mail you about the fire alarm to get
+ you out of the building.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.243
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.243
+Problem: Illegal memory access in readline().
+Solution: Swap the conditions. (Dominique Pelle)
+Files: src/eval.c
+
+
+*** ../vim-7.3.242/src/eval.c 2011-07-07 16:20:45.000000000 +0200
+--- src/eval.c 2011-07-07 17:32:16.000000000 +0200
+***************
+*** 14318,14324 ****
+ tolist = 0;
+ for ( ; filtd < buflen || readlen <= 0; ++filtd)
+ {
+! if (buf[filtd] == '\n' || readlen <= 0)
+ {
+ /* In binary mode add an empty list item when the last
+ * non-empty line ends in a '\n'. */
+--- 14318,14324 ----
+ tolist = 0;
+ for ( ; filtd < buflen || readlen <= 0; ++filtd)
+ {
+! if (readlen <= 0 || buf[filtd] == '\n')
+ {
+ /* In binary mode add an empty list item when the last
+ * non-empty line ends in a '\n'. */
+*** ../vim-7.3.242/src/version.c 2011-07-07 17:15:29.000000000 +0200
+--- src/version.c 2011-07-07 17:32:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 243,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+261. You find diskettes in your pockets when doing laundry.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.244
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.244
+Problem: MS-Windows: Build problem with old compiler. (John Beckett)
+Solution: Only use HandleToLong() when available. (Mike Williams)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.243/src/gui_w32.c 2011-05-25 21:18:02.000000000 +0200
+--- src/gui_w32.c 2011-07-07 17:42:36.000000000 +0200
+***************
+*** 1574,1579 ****
+--- 1574,1583 ----
+ #endif
+
+ #ifdef FEAT_EVAL
++ # if _MSC_VER < 1400
++ /* HandleToLong() only exists in compilers that can do 64 bit builds */
++ # define HandleToLong(h) ((long)(h))
++ # endif
+ /* set the v:windowid variable */
+ set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
+ #endif
+*** ../vim-7.3.243/src/version.c 2011-07-07 17:36:52.000000000 +0200
+--- src/version.c 2011-07-07 17:43:21.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 244,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+262. Your computer has it's own phone line - but your daughter doesn't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.245
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.245
+Problem: Python 3.2 libraries not correctly detected.
+Solution: Add the suffix to the library name. (Niclas Zeising)
+Files: src/auto/configure, src/configure.in
+
+
+*** ../vim-7.3.244/src/auto/configure 2011-06-13 01:32:42.000000000 +0200
+--- src/auto/configure 2011-07-13 17:57:05.000000000 +0200
+***************
+*** 5611,5617 ****
+ eof
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+! vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+ vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+--- 5611,5617 ----
+ eof
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+! vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+ vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+*** ../vim-7.3.244/src/configure.in 2011-06-13 01:32:42.000000000 +0200
+--- src/configure.in 2011-07-13 17:57:01.000000000 +0200
+***************
+*** 1068,1074 ****
+ dnl -- delete the lines from make about Entering/Leaving directory
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+! vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+ vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ dnl remove -ltermcap, it can conflict with an earlier -lncurses
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+--- 1068,1074 ----
+ dnl -- delete the lines from make about Entering/Leaving directory
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+! vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+ vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ dnl remove -ltermcap, it can conflict with an earlier -lncurses
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+*** ../vim-7.3.244/src/version.c 2011-07-07 17:43:37.000000000 +0200
+--- src/version.c 2011-07-15 13:09:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 245,
+ /**/
+
+
+--
+ When danger reared its ugly head,
+ He bravely turned his tail and fled
+ Yes, Brave Sir Robin turned about
+ And gallantly he chickened out
+ Bravely taking to his feet
+ He beat a very brave retreat
+ Bravest of the brave Sir Robin
+ Petrified of being dead
+ Soiled his pants then brave Sir Robin
+ Turned away and fled.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.246
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.246 (after 7.3.235)
+Problem: Repeating "f4" in "4444" skips one 4.
+Solution: Check the t_cmd flag. (Christian Brabandt)
+Files: src/search.c
+
+
+*** ../vim-7.3.245/src/search.c 2011-06-26 05:36:07.000000000 +0200
+--- src/search.c 2011-07-15 13:16:49.000000000 +0200
+***************
+*** 1585,1591 ****
+ /* Force a move of at least one char, so ";" and "," will move the
+ * cursor, even if the cursor is right in front of char we are looking
+ * at. */
+! if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1)
+ stop = FALSE;
+ }
+
+--- 1585,1591 ----
+ /* Force a move of at least one char, so ";" and "," will move the
+ * cursor, even if the cursor is right in front of char we are looking
+ * at. */
+! if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1 && t_cmd)
+ stop = FALSE;
+ }
+
+*** ../vim-7.3.245/src/version.c 2011-07-15 13:09:46.000000000 +0200
+--- src/version.c 2011-07-15 13:20:40.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 246,
+ /**/
+
+--
+ GALAHAD turns back. We see from his POV the lovely ZOOT standing by him
+ smiling enchantingly and a number of equally delectable GIRLIES draped
+ around in the seductively poulticed room. They look at him smilingly and
+ wave.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.247
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.247
+Problem: Running tests changes the users viminfo file. Test for patch
+ 7.3.246 missing.
+Solution: Add "nviminfo" to the 'viminfo' option. Include the test.
+Files: src/testdir/test78.in, src/testdir/test81.in
+
+
+*** ../vim-7.3.246/src/testdir/test78.in 2011-06-13 01:07:22.000000000 +0200
+--- src/testdir/test78.in 2011-07-15 13:26:22.000000000 +0200
+***************
+*** 6,12 ****
+
+ STARTTEST
+ :so small.vim
+! :set nocp fileformat=unix undolevels=-1
+ :e! Xtest
+ ggdG
+ :let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
+--- 6,12 ----
+
+ STARTTEST
+ :so small.vim
+! :set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo
+ :e! Xtest
+ ggdG
+ :let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
+*** ../vim-7.3.246/src/testdir/test81.in 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/test81.in 2011-07-15 13:25:00.000000000 +0200
+***************
+*** 1,10 ****
+ Test for t movement command and 'cpo-;' setting
+
+ STARTTEST
+! :set nocompatible
+ :set cpo-=;
+ /firstline/
+ j0tt;D
+ $Ty;D:set cpo+=;
+ j0tt;;D
+ $Ty;;D:?firstline?+1,$w! test.out
+--- 1,12 ----
+ Test for t movement command and 'cpo-;' setting
+
+ STARTTEST
+! :set nocompatible viminfo+=nviminfo
+ :set cpo-=;
+ /firstline/
+ j0tt;D
++ 0fz;D
++ $Fy;D
+ $Ty;D:set cpo+=;
+ j0tt;;D
+ $Ty;;D:?firstline?+1,$w! test.out
+***************
+*** 13,18 ****
+--- 15,22 ----
+
+ firstline
+ aaa two three four
++ zzz
++ yyy
+ bbb yee yoo four
+ ccc two three four
+ ddd yee yoo four
+*** ../vim-7.3.246/src/version.c 2011-07-15 13:21:24.000000000 +0200
+--- src/version.c 2011-07-15 13:31:14.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 247,
+ /**/
+
+--
+ZOOT: I'm afraid our life must seem very dull and quiet compared to yours.
+ We are but eightscore young blondes, all between sixteen and
+ nineteen-and-a-half, cut off in this castle, with no one to protect us.
+ Oooh. It is a lonely life ... bathing ... dressing ... undressing ...
+ making exciting underwear....
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.248
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.248
+Problem: PC Install instructions missing install instructions.
+Solution: Step-by-step explanation. (Michael Soyka)
+Files: src/INSTALLpc.txt
+
+
+*** ../vim-7.3.247/src/INSTALLpc.txt 2011-06-12 20:36:00.000000000 +0200
+--- src/INSTALLpc.txt 2011-07-15 13:49:46.000000000 +0200
+***************
+*** 11,19 ****
+ this, then you will get the default behavior as is documented, which should
+ be fine for most people.
+
+! With the exception of the last two sections (Windows 3.1 and MS-DOS),
+! this document assumes that you are building Vim for Win32
+! (Windows NT/2000/XP/2003/Vista and Windows 95/98/Me)
+
+
+ Contents:
+--- 11,19 ----
+ this, then you will get the default behavior as is documented, which should
+ be fine for most people.
+
+! With the exception of two sections (Windows 3.1 and MS-DOS), this document
+! assumes that you are building Vim for Win32 or later.
+! (Windows 95/98/Me/NT/2000/XP/2003/Vista/7)
+
+
+ Contents:
+***************
+*** 27,32 ****
+--- 27,35 ----
+ 8. Windows 3.1
+ 9. MS-DOS
+
++ 10. Installing after building from sources
++
++
+ The currently preferred method is using the free Visual C++ Toolkit 2008
+ |msvc-2008-express|, the produced binary runs on most MS-Windows systems. If
+ you need the executable to run on Windows 98 or ME, use the 2003 one
+***************
+*** 409,411 ****
+--- 412,470 ----
+
+ If you get all kinds of strange error messages when compiling, try adding
+ changing the file format from "unix" to "dos".
++
++
++ 10. Installing after building from sources
++ ==========================================
++
++ [provided by Michael Soyka]
++
++ After you've built the Vim binaries as described above, you're ready to
++ install Vim on your system. However, if you've obtained the Vim sources
++ using Mercurial or by downloading them as a unix tar file, you must first
++ create a "vim73" directory. If you instead downloaded the sources as
++ zip files, you can skip this setup as the zip archives already have the
++ correct directory structure.
++
++ A. Create a Vim "runtime" subdirectory named "vim73"
++ -----------------------------------------------------
++ If you obtained your Vim sources as zip files, you can skip this step.
++ Otherwise, continue reading.
++
++ Go to the directory that contains the Vim "src" and "runtime"
++ directories and create a new subdirectory named "vim73".
++
++ Copy the "runtime" files into "vim73":
++ copy runtime\* vim73
++
++ B. Copy the new binaries into the "vim73" directory
++ ----------------------------------------------------
++ Regardless of how you installed the Vim sources, you need to copy the
++ new binaries you created above into "vim73":
++
++ copy src\*.exe vim73
++ copy src\GvimExt\gvimext.dll vim73
++ copy src\xxd\xxd.exe vim73
++
++ C. Move the "vim73" directory into the Vim installation subdirectory
++ ---------------------------------------------------------------------
++ Move the "vim73" subdirectory into the subdirectory where you want Vim
++ to be installed. Typically, this subdirectory will be named "vim".
++ If you already have a "vim73" subdirectory in "vim", delete it first
++ by running its unstal.exe program.
++
++ D. Install Vim
++ ---------------
++ "cd" to your Vim installation subdirectory "vim\vim73" and run the
++ "install.exe" program. It will ask you a number of questions about
++ how you would like to have your Vim setup. Among these are:
++ - You can tell it to write a "_vimrc" file with your preferences in the
++ parent directory.
++ - It can also install an "Edit with Vim" entry in the Windows Explorer
++ popup menu.
++ - You can have it create batch files, so that you can run Vim from the
++ console or in a shell. You can select one of the directories in your
++ PATH or add the directory to PATH using the Windows Control Panel.
++ - Create entries for Vim on the desktop and in the Start menu.
++
++ Happy Vimming!
+*** ../vim-7.3.247/src/version.c 2011-07-15 13:33:17.000000000 +0200
+--- src/version.c 2011-07-15 13:51:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 248,
+ /**/
+
+--
+Linux is just like a wigwam: no Windows, no Gates and an Apache inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.249
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.249
+Problem: Wrong indenting for array initializer.
+Solution: Detect '}' in a better way. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.248/src/misc1.c 2011-06-12 21:51:01.000000000 +0200
+--- src/misc1.c 2011-07-15 14:06:44.000000000 +0200
+***************
+*** 7945,7952 ****
+ * If we're at the end of a block, skip to the start of
+ * that block.
+ */
+! curwin->w_cursor.col = 0;
+! if (*cin_skipcomment(l) == '}'
+ && (trypos = find_start_brace(ind_maxcomment))
+ != NULL) /* XXX */
+ {
+--- 7945,7951 ----
+ * If we're at the end of a block, skip to the start of
+ * that block.
+ */
+! if (find_last_paren(l, '{', '}')
+ && (trypos = find_start_brace(ind_maxcomment))
+ != NULL) /* XXX */
+ {
+*** ../vim-7.3.248/src/testdir/test3.in 2011-06-12 21:51:01.000000000 +0200
+--- src/testdir/test3.in 2011-07-15 14:03:41.000000000 +0200
+***************
+*** 1452,1457 ****
+--- 1452,1487 ----
+
+ STARTTEST
+ :set cino&
++ :set cino+=l1
++ 2kdd=][
++ ENDTEST
++
++ void func(void)
++ {
++ int tab[] =
++ {
++ 1, 2, 3,
++ 4, 5, 6};
++
++ printf("Indent this line correctly!\n");
++
++ switch (foo)
++ {
++ case bar:
++ printf("bar");
++ break;
++ case baz: {
++ printf("baz");
++ break;
++ }
++ case quux:
++ printf("But don't break the indentation of this instruction\n");
++ break;
++ }
++ }
++
++ STARTTEST
++ :set cino&
+ 2kdd=][
+ ENDTEST
+
+*** ../vim-7.3.248/src/testdir/test3.ok 2011-06-12 21:51:01.000000000 +0200
+--- src/testdir/test3.ok 2011-07-15 14:03:41.000000000 +0200
+***************
+*** 1310,1315 ****
+--- 1310,1340 ----
+
+ void func(void)
+ {
++ int tab[] =
++ {
++ 1, 2, 3,
++ 4, 5, 6};
++
++ printf("Indent this line correctly!\n");
++
++ switch (foo)
++ {
++ case bar:
++ printf("bar");
++ break;
++ case baz: {
++ printf("baz");
++ break;
++ }
++ case quux:
++ printf("But don't break the indentation of this instruction\n");
++ break;
++ }
++ }
++
++
++ void func(void)
++ {
+ cout << "a"
+ << "b"
+ << ") :"
+*** ../vim-7.3.248/src/version.c 2011-07-15 13:51:57.000000000 +0200
+--- src/version.c 2011-07-15 14:12:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 249,
+ /**/
+
+--
+ GALAHAD hurries to the door and pushes through it. As he leaves the room
+ we CUT TO the reverse to show that he is now in a room full of bathing
+ and romping GIRLIES, all innocent, wide-eyed and beautiful. They smile
+ enchantingly at him as he tries to keep walking without being diverted by
+ the lovely sights assaulting his eyeballs.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.250
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.250
+Problem: Python: Errors in Unicode characters not handled nicely.
+Solution: Add the surrogateescape error handler. (lilydjwg)
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.249/src/if_python3.c 2011-06-26 19:13:33.000000000 +0200
+--- src/if_python3.c 2011-07-15 15:50:01.000000000 +0200
+***************
+*** 68,76 ****
+
+ static void init_structs(void);
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+--- 68,83 ----
+
+ static void init_structs(void);
+
++ /* The "surrogateescape" error handler is new in Python 3.1 */
++ #if PY_VERSION_HEX >= 0x030100f0
++ # define CODEC_ERROR_HANDLER "surrogateescape"
++ #else
++ # define CODEC_ERROR_HANDLER NULL
++ #endif
++
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+***************
+*** 661,668 ****
+
+ /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+ * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)ENC_OPT, NULL);
+! cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
+ Py_XDECREF(cmdstr);
+ PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+ Py_XDECREF(cmdbytes);
+--- 668,676 ----
+
+ /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+ * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd),
+! (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+! cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
+ Py_XDECREF(cmdstr);
+ PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+ Py_XDECREF(cmdbytes);
+***************
+*** 1463,1469 ****
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, NULL);
+
+ vim_free(tmp);
+ return result;
+--- 1471,1477 ----
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+
+ vim_free(tmp);
+ return result;
+*** ../vim-7.3.249/src/version.c 2011-07-15 14:12:25.000000000 +0200
+--- src/version.c 2011-07-15 15:46:19.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 250,
+ /**/
+
+--
+DINGO: You must spank her well and after you have spanked her you
+ may deal with her as you like and then ... spank me.
+AMAZING: And spank me!
+STUNNER: And me.
+LOVELY: And me.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.251
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.251
+Problem: "gH<Del>" deletes the current line, except when it's the last
+ line.
+Solution: Set the "include" flag to indicate the last line is to be deleted.
+Files: src/normal.c, src/ops.c
+
+
+*** ../vim-7.3.250/src/normal.c 2011-07-07 15:08:53.000000000 +0200
+--- src/normal.c 2011-07-15 16:53:12.000000000 +0200
+***************
+*** 1795,1811 ****
+ {
+ oap->inclusive = FALSE;
+ /* Try to include the newline, unless it's an operator
+! * that works on lines only */
+! if (*p_sel != 'o'
+! && !op_on_lines(oap->op_type)
+! && oap->end.lnum < curbuf->b_ml.ml_line_count)
+ {
+! ++oap->end.lnum;
+! oap->end.col = 0;
+ # ifdef FEAT_VIRTUALEDIT
+! oap->end.coladd = 0;
+ # endif
+! ++oap->line_count;
+ }
+ }
+ }
+--- 1795,1819 ----
+ {
+ oap->inclusive = FALSE;
+ /* Try to include the newline, unless it's an operator
+! * that works on lines only. */
+! if (*p_sel != 'o' && !op_on_lines(oap->op_type))
+ {
+! if (oap->end.lnum < curbuf->b_ml.ml_line_count)
+! {
+! ++oap->end.lnum;
+! oap->end.col = 0;
+ # ifdef FEAT_VIRTUALEDIT
+! oap->end.coladd = 0;
+ # endif
+! ++oap->line_count;
+! }
+! else
+! {
+! /* Cannot move below the last line, make the op
+! * inclusive to tell the operation to include the
+! * line break. */
+! oap->inclusive = TRUE;
+! }
+ }
+ }
+ }
+*** ../vim-7.3.250/src/ops.c 2011-06-19 01:14:22.000000000 +0200
+--- src/ops.c 2011-07-15 17:28:28.000000000 +0200
+***************
+*** 1650,1656 ****
+ && oap->line_count > 1
+ && oap->op_type == OP_DELETE)
+ {
+! ptr = ml_get(oap->end.lnum) + oap->end.col + oap->inclusive;
+ ptr = skipwhite(ptr);
+ if (*ptr == NUL && inindent(0))
+ oap->motion_type = MLINE;
+--- 1650,1658 ----
+ && oap->line_count > 1
+ && oap->op_type == OP_DELETE)
+ {
+! ptr = ml_get(oap->end.lnum) + oap->end.col;
+! if (*ptr != NUL)
+! ptr += oap->inclusive;
+ ptr = skipwhite(ptr);
+ if (*ptr == NUL && inindent(0))
+ oap->motion_type = MLINE;
+***************
+*** 1920,1930 ****
+ curwin->w_cursor.coladd = 0;
+ }
+ #endif
+! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ #endif
+ );
+ }
+ else /* delete characters between lines */
+ {
+--- 1922,1941 ----
+ curwin->w_cursor.coladd = 0;
+ }
+ #endif
+! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
+! && n > (int)STRLEN(ml_get(oap->end.lnum)))
+! {
+! /* Special case: gH<Del> deletes the last line. */
+! del_lines(1L, FALSE);
+! }
+! else
+! {
+! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ #endif
+ );
++ }
+ }
+ else /* delete characters between lines */
+ {
+***************
+*** 1941,1957 ****
+ ++curwin->w_cursor.lnum;
+ del_lines((long)(oap->line_count - 2), FALSE);
+
+! /* delete from start of line until op_end */
+! curwin->w_cursor.col = 0;
+! (void)del_bytes((long)(oap->end.col + 1 - !oap->inclusive),
+! !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ #endif
+ );
+! curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+!
+! (void)do_join(2, FALSE, FALSE);
+ }
+ }
+
+--- 1952,1980 ----
+ ++curwin->w_cursor.lnum;
+ del_lines((long)(oap->line_count - 2), FALSE);
+
+! n = (oap->end.col + 1 - !oap->inclusive);
+! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
+! && n > (int)STRLEN(ml_get(oap->end.lnum)))
+! {
+! /* Special case: gH<Del> deletes the last line. */
+! del_lines(1L, FALSE);
+! curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+! if (curwin->w_cursor.lnum > 1)
+! --curwin->w_cursor.lnum;
+! }
+! else
+! {
+! /* delete from start of line until op_end */
+! curwin->w_cursor.col = 0;
+! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ #endif
+ );
+! curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+! }
+! if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! (void)do_join(2, FALSE, FALSE);
+ }
+ }
+
+*** ../vim-7.3.250/src/version.c 2011-07-15 15:54:39.000000000 +0200
+--- src/version.c 2011-07-15 17:35:18.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 251,
+ /**/
+
+--
+ ### Hiroshima 45, Chernobyl 86, Windows 95 ###
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.252
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.252 (after 7.3.247)
+Problem: Tests fail. (David Northfield)
+Solution: Add missing update for .ok file.
+Files: src/testdir/test81.ok
+
+
+*** ../vim-7.3.251/src/testdir/test81.ok 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/test81.ok 2011-07-15 13:14:27.000000000 +0200
+***************
+*** 1,4 ****
+--- 1,6 ----
+ aaa two
++ z
++ y
+ bbb y
+ ccc
+ ddd yee y
+*** ../vim-7.3.251/src/version.c 2011-07-15 17:51:30.000000000 +0200
+--- src/version.c 2011-07-15 17:55:25.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 252,
+ /**/
+
+--
+You cannot propel yourself forward by patting yourself on the back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.253
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.253
+Problem: "echo 'abc' > ''" returns 0 or 1, depending on 'ignorecase'.
+ Checks in mb_strnicmp() for illegal and truncated bytes are
+ wrong. Should not assume that byte length is equal before case
+ folding.
+Solution: Add utf_safe_read_char_adv() and utf_strnicmp(). Add a test for
+ this. (Ivan Krasilnikov)
+Files: src/mbyte.c src/testdir/test82.in, src/testdir/test82.ok,
+ src/testdir/Makefile, src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+ src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../vim-7.3.252/src/mbyte.c 2011-07-07 15:08:53.000000000 +0200
+--- src/mbyte.c 2011-07-15 20:13:52.000000000 +0200
+***************
+*** 132,137 ****
+--- 132,138 ----
+ static int dbcs_char2cells __ARGS((int c));
+ static int dbcs_ptr2cells_len __ARGS((char_u *p, int size));
+ static int dbcs_ptr2char __ARGS((char_u *p));
++ static int utf_safe_read_char_adv __ARGS((char_u **s, size_t *n));
+
+ /*
+ * Lookup table to quickly get the length in bytes of a UTF-8 character from
+***************
+*** 1701,1706 ****
+--- 1702,1767 ----
+ }
+
+ /*
++ * Convert a UTF-8 byte sequence to a wide character.
++ * String is assumed to be terminated by NUL or after "n" bytes, whichever
++ * comes first.
++ * The function is safe in the sense that it never accesses memory beyond the
++ * first "n" bytes of "s".
++ *
++ * On success, returns decoded codepoint, advances "s" to the beginning of
++ * next character and decreases "n" accordingly.
++ *
++ * If end of string was reached, returns 0 and, if "n" > 0, advances "s" past
++ * NUL byte.
++ *
++ * If byte sequence is illegal or incomplete, returns -1 and does not advance
++ * "s".
++ */
++ static int
++ utf_safe_read_char_adv(s, n)
++ char_u **s;
++ size_t *n;
++ {
++ int c, k;
++
++ if (*n == 0) /* end of buffer */
++ return 0;
++
++ k = utf8len_tab_zero[**s];
++
++ if (k == 1)
++ {
++ /* ASCII character or NUL */
++ (*n)--;
++ return *(*s)++;
++ }
++
++ if ((size_t)k <= *n)
++ {
++ /* We have a multibyte sequence and it isn't truncated by buffer
++ * limits so utf_ptr2char() is safe to use. Or the first byte is
++ * illegal (k=0), and it's also safe to use utf_ptr2char(). */
++ c = utf_ptr2char(*s);
++
++ /* On failure, utf_ptr2char() returns the first byte, so here we
++ * check equality with the first byte. The only non-ASCII character
++ * which equals the first byte of its own UTF-8 representation is
++ * U+00C3 (UTF-8: 0xC3 0x83), so need to check that special case too.
++ * It's safe even if n=1, else we would have k=2 > n. */
++ if (c != (int)(**s) || (c == 0xC3 && (*s)[1] == 0x83))
++ {
++ /* byte sequence was successfully decoded */
++ *s += k;
++ *n -= k;
++ return c;
++ }
++ }
++
++ /* byte sequence is incomplete or illegal */
++ return -1;
++ }
++
++ /*
+ * Get character at **pp and advance *pp to the next character.
+ * Note: composing characters are skipped!
+ */
+***************
+*** 2667,2673 ****
+ {0x10400,0x10427,1,40}
+ };
+
+! static int utf_convert(int a, convertStruct table[], int tableSize);
+
+ /*
+ * Generic conversion function for case operations.
+--- 2728,2735 ----
+ {0x10400,0x10427,1,40}
+ };
+
+! static int utf_convert __ARGS((int a, convertStruct table[], int tableSize));
+! static int utf_strnicmp __ARGS((char_u *s1, char_u *s2, size_t n1, size_t n2));
+
+ /*
+ * Generic conversion function for case operations.
+***************
+*** 3079,3084 ****
+--- 3141,3220 ----
+ return (utf_tolower(a) != a);
+ }
+
++ static int
++ utf_strnicmp(s1, s2, n1, n2)
++ char_u *s1, *s2;
++ size_t n1, n2;
++ {
++ int c1, c2, cdiff;
++ char_u buffer[6];
++
++ for (;;)
++ {
++ c1 = utf_safe_read_char_adv(&s1, &n1);
++ c2 = utf_safe_read_char_adv(&s2, &n2);
++
++ if (c1 <= 0 || c2 <= 0)
++ break;
++
++ if (c1 == c2)
++ continue;
++
++ cdiff = utf_fold(c1) - utf_fold(c2);
++ if (cdiff != 0)
++ return cdiff;
++ }
++
++ /* some string ended or has an incomplete/illegal character sequence */
++
++ if (c1 == 0 || c2 == 0)
++ {
++ /* some string ended. shorter string is smaller */
++ if (c1 == 0 && c2 == 0)
++ return 0;
++ return c1 == 0 ? -1 : 1;
++ }
++
++ /* Continue with bytewise comparison to produce some result that
++ * would make comparison operations involving this function transitive.
++ *
++ * If only one string had an error, comparison should be made with
++ * folded version of the other string. In this case it is enough
++ * to fold just one character to determine the result of comparison. */
++
++ if (c1 != -1 && c2 == -1)
++ {
++ n1 = utf_char2bytes(utf_fold(c1), buffer);
++ s1 = buffer;
++ }
++ else if (c2 != -1 && c1 == -1)
++ {
++ n2 = utf_char2bytes(utf_fold(c2), buffer);
++ s2 = buffer;
++ }
++
++ while (n1 > 0 && n2 > 0 && *s1 != NUL && *s2 != NUL)
++ {
++ cdiff = (int)(*s1) - (int)(*s2);
++ if (cdiff != 0)
++ return cdiff;
++
++ s1++;
++ s2++;
++ n1--;
++ n2--;
++ }
++
++ if (n1 > 0 && *s1 == NUL)
++ n1 = 0;
++ if (n2 > 0 && *s2 == NUL)
++ n2 = 0;
++
++ if (n1 == 0 && n2 == 0)
++ return 0;
++ return n1 == 0 ? -1 : 1;
++ }
++
+ /*
+ * Version of strnicmp() that handles multi-byte characters.
+ * Needed for Big5, Sjift-JIS and UTF-8 encoding. Other DBCS encodings can
+***************
+*** 3092,3140 ****
+ char_u *s1, *s2;
+ size_t nn;
+ {
+! int i, j, l;
+ int cdiff;
+- int incomplete = FALSE;
+ int n = (int)nn;
+
+! for (i = 0; i < n; i += l)
+ {
+! if (s1[i] == NUL && s2[i] == NUL) /* both strings end */
+! return 0;
+! if (enc_utf8)
+! {
+! l = utf_byte2len(s1[i]);
+! if (l > n - i)
+! {
+! l = n - i; /* incomplete character */
+! incomplete = TRUE;
+! }
+! /* Check directly first, it's faster. */
+! for (j = 0; j < l; ++j)
+! {
+! if (s1[i + j] != s2[i + j])
+! break;
+! if (s1[i + j] == 0)
+! /* Both stings have the same bytes but are incomplete or
+! * have illegal bytes, accept them as equal. */
+! l = j;
+! }
+! if (j < l)
+! {
+! /* If one of the two characters is incomplete return -1. */
+! if (incomplete || i + utf_byte2len(s2[i]) > n)
+! return -1;
+! /* Don't case-fold illegal bytes or truncated characters. */
+! if (utf_ptr2len(s1 + i) < l || utf_ptr2len(s2 + i) < l)
+! return -1;
+! cdiff = utf_fold(utf_ptr2char(s1 + i))
+! - utf_fold(utf_ptr2char(s2 + i));
+! if (cdiff != 0)
+! return cdiff;
+! }
+! }
+! else
+ {
+ l = (*mb_ptr2len)(s1 + i);
+ if (l <= 1)
+ {
+--- 3228,3248 ----
+ char_u *s1, *s2;
+ size_t nn;
+ {
+! int i, l;
+ int cdiff;
+ int n = (int)nn;
+
+! if (enc_utf8)
+ {
+! return utf_strnicmp(s1, s2, nn, nn);
+! }
+! else
+! {
+! for (i = 0; i < n; i += l)
+ {
++ if (s1[i] == NUL && s2[i] == NUL) /* both strings end */
++ return 0;
++
+ l = (*mb_ptr2len)(s1 + i);
+ if (l <= 1)
+ {
+*** ../vim-7.3.252/src/testdir/test82.in 2011-07-15 21:16:03.000000000 +0200
+--- src/testdir/test82.in 2011-07-15 18:22:46.000000000 +0200
+***************
+*** 0 ****
+--- 1,93 ----
++ Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
++
++ STARTTEST
++ :so small.vim
++ :if !has("multi_byte")
++ : e! test.ok
++ : w! test.out
++ : qa!
++ :endif
++ :set enc=utf8
++ ggdG
++ :
++ :function! Ch(a, op, b, expected)
++ : if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
++ : call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
++ : else
++ : let b:passed += 1
++ : endif
++ :endfunction
++ :
++ :function! Chk(a, b, result)
++ : if a:result == 0
++ : call Ch(a:a, '==?', a:b, 1)
++ : call Ch(a:a, '!=?', a:b, 0)
++ : call Ch(a:a, '<=?', a:b, 1)
++ : call Ch(a:a, '>=?', a:b, 1)
++ : call Ch(a:a, '<?', a:b, 0)
++ : call Ch(a:a, '>?', a:b, 0)
++ : elseif a:result > 0
++ : call Ch(a:a, '==?', a:b, 0)
++ : call Ch(a:a, '!=?', a:b, 1)
++ : call Ch(a:a, '<=?', a:b, 0)
++ : call Ch(a:a, '>=?', a:b, 1)
++ : call Ch(a:a, '<?', a:b, 0)
++ : call Ch(a:a, '>?', a:b, 1)
++ : else
++ : call Ch(a:a, '==?', a:b, 0)
++ : call Ch(a:a, '!=?', a:b, 1)
++ : call Ch(a:a, '<=?', a:b, 1)
++ : call Ch(a:a, '>=?', a:b, 0)
++ : call Ch(a:a, '<?', a:b, 1)
++ : call Ch(a:a, '>?', a:b, 0)
++ : endif
++ :endfunction
++ :
++ :function! Check(a, b, result)
++ : call Chk(a:a, a:b, a:result)
++ : call Chk(a:b, a:a, -a:result)
++ :endfunction
++ :
++ :function! LT(a, b)
++ : call Check(a:a, a:b, -1)
++ :endfunction
++ :
++ :function! GT(a, b)
++ : call Check(a:a, a:b, 1)
++ :endfunction
++ :
++ :function! EQ(a, b)
++ : call Check(a:a, a:b, 0)
++ :endfunction
++ :
++ :let b:passed=0
++ :call EQ('', '')
++ :call LT('', 'a')
++ :call EQ('abc', 'abc')
++ :call EQ('Abc', 'abC')
++ :call LT('ab', 'abc')
++ :call LT('AB', 'abc')
++ :call LT('ab', 'aBc')
++ :call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
++ :call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
++ :call EQ('\xe2\x84\xaa', 'k')
++ :call LT('\xe2\x84\xaa', 'kkkkkk')
++ :call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
++ :call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
++ :call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
++ :call EQ('Abc\x80', 'AbC\x80')
++ :call LT('Abc\x80', 'AbC\x81')
++ :call LT('Abc', 'AbC\x80')
++ :call LT('abc\x80DEF', 'abc\x80def') " case folding stops at the first bad character
++ :call LT('\xc3XYZ', '\xc3xyz')
++ :call EQ('\xef\xbc\xba', '\xef\xbd\x9a') " FF3A (upper), FF5A (lower)
++ :call GT('\xef\xbc\xba', '\xef\xbc\xff') " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
++ :call LT('\xc3', '\xc3\x83')
++ :call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
++ :for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
++ :for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
++ :for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
++ :call append(0, printf('%d checks passed', b:passed))
++ :wq! test.out
++ ENDTEST
++
+*** ../vim-7.3.252/src/testdir/test82.ok 2011-07-15 21:16:03.000000000 +0200
+--- src/testdir/test82.ok 2011-07-15 18:37:33.000000000 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ 3732 checks passed
++
+*** ../vim-7.3.252/src/testdir/Makefile 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Makefile 2011-07-15 18:30:08.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,32 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.252/src/testdir/Make_amiga.mak 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_amiga.mak 2011-07-15 18:29:50.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 130,132 ****
+--- 130,133 ----
+ test79.out: test79.in
+ test80.out: test80.in
+ test81.out: test81.in
++ test82.out: test82.in
+*** ../vim-7.3.252/src/testdir/Make_dos.mak 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_dos.mak 2011-07-15 18:30:02.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,35 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.252/src/testdir/Make_ming.mak 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_ming.mak 2011-07-15 18:30:15.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,55 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.252/src/testdir/Make_os2.mak 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_os2.mak 2011-07-15 18:30:25.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.252/src/testdir/Make_vms.mms 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-07-15 18:30:33.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jun 26
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jul 15
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 75,81 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out test79.out test80.out test81.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 75,82 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out test79.out test80.out test81.out \
+! test82.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.252/src/version.c 2011-07-15 17:56:11.000000000 +0200
+--- src/version.c 2011-07-15 21:12:26.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 253,
+ /**/
+
+--
+"Intelligence has much less practical application than you'd think."
+ -- Scott Adams, Dilbert.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.254
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.254
+Problem: The coladd field is not reset when setting the line number for a
+ ":call" command.
+Solution: Reset it.
+Files: src/eval.c
+
+
+*** ../vim-7.3.253/src/eval.c 2011-07-07 17:36:52.000000000 +0200
+--- src/eval.c 2011-07-07 17:51:42.000000000 +0200
+***************
+*** 3430,3435 ****
+--- 3430,3438 ----
+ {
+ curwin->w_cursor.lnum = lnum;
+ curwin->w_cursor.col = 0;
++ #ifdef FEAT_VIRTUALEDIT
++ curwin->w_cursor.coladd = 0;
++ #endif
+ }
+ arg = startarg;
+ if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
+*** ../vim-7.3.253/src/version.c 2011-07-15 21:16:54.000000000 +0200
+--- src/version.c 2011-07-15 21:23:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 254,
+ /**/
+
+--
+Eight Megabytes And Continually Swapping.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.255
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.255
+Problem: When editing a file such as "File[2010-08-15].vim" an E16 error is
+ given. (Manuel Stol)
+Solution: Don't give an error for failing to compile the regexp.
+Files: src/ex_docmd.c, src/misc1.c, src/vim.h
+
+
+*** ../vim-7.3.254/src/ex_docmd.c 2011-06-13 01:19:48.000000000 +0200
+--- src/ex_docmd.c 2011-07-20 14:48:01.000000000 +0200
+***************
+*** 7069,7075 ****
+ old_arg_count = GARGCOUNT;
+ if (expand_wildcards(old_arg_count, old_arg_files,
+ &new_arg_file_count, &new_arg_files,
+! EW_FILE|EW_NOTFOUND|EW_ADDSLASH) == OK
+ && new_arg_file_count > 0)
+ {
+ alist_set(&global_alist, new_arg_file_count, new_arg_files,
+--- 7069,7075 ----
+ old_arg_count = GARGCOUNT;
+ if (expand_wildcards(old_arg_count, old_arg_files,
+ &new_arg_file_count, &new_arg_files,
+! EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
+ && new_arg_file_count > 0)
+ {
+ alist_set(&global_alist, new_arg_file_count, new_arg_files,
+*** ../vim-7.3.254/src/misc1.c 2011-07-15 14:12:25.000000000 +0200
+--- src/misc1.c 2011-07-20 14:55:09.000000000 +0200
+***************
+*** 9043,9050 ****
+--- 9043,9054 ----
+ }
+
+ /* compile the regexp into a program */
++ if (flags & EW_NOERROR)
++ ++emsg_silent;
+ regmatch.rm_ic = TRUE; /* Always ignore case */
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
++ if (flags & EW_NOERROR)
++ --emsg_silent;
+ vim_free(pat);
+
+ if (regmatch.regprog == NULL)
+*** ../vim-7.3.254/src/vim.h 2011-06-13 02:03:55.000000000 +0200
+--- src/vim.h 2011-07-20 14:50:13.000000000 +0200
+***************
+*** 815,820 ****
+--- 815,821 ----
+ #define EW_EXEC 0x40 /* executable files */
+ #define EW_PATH 0x80 /* search in 'path' too */
+ #define EW_ICASE 0x100 /* ignore case */
++ #define EW_NOERROR 0x200 /* no error for bad regexp */
+ /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
+ * is used when executing commands and EW_SILENT for interactive expanding. */
+
+*** ../vim-7.3.254/src/version.c 2011-07-15 21:24:06.000000000 +0200
+--- src/version.c 2011-07-20 15:03:52.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 255,
+ /**/
+
+--
+Not too long ago, a program was something you watched on TV...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.256
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.256
+Problem: Javascript indenting not sufficiently tested.
+Solution: Add more tests. (Luc Deschenaux) Mark the lines that are indented
+ wrong.
+Files: src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.255/src/testdir/test3.in 2011-07-15 14:12:25.000000000 +0200
+--- src/testdir/test3.in 2011-07-15 21:05:49.000000000 +0200
+***************
+*** 1592,1598 ****
+
+
+ STARTTEST
+! :set cino=J1
+ /^JSSTART
+ =/^JSEND
+ ENDTEST
+--- 1592,1598 ----
+
+
+ STARTTEST
+! :set cino=j1,J1
+ /^JSSTART
+ =/^JSEND
+ ENDTEST
+***************
+*** 1613,1618 ****
+--- 1613,1757 ----
+ JSEND
+
+ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ var foo = [
++ 1, // indent 8 more
++ 2,
++ 3
++ ]; // indent 8 less
++ JSEND
++
++ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ function bar() {
++ var foo = [
++ 1,
++ 2,
++ 3
++ ]; // indent 16 less
++ }
++ JSEND
++
++ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ (function($){
++
++ var class_name='myclass';
++
++ function private_method() {
++ }
++
++ var public_method={
++ method: function(options,args){
++ private_method();
++ }
++ }
++
++ function init(options) {
++
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2, // indent 8 more
++ foobar: [ // indent 8 more
++ 1, // indent 8 more
++ 2, // indent 16 more
++ 3 // indent 16 more
++ ],
++ callback: function(){ // indent 8 more
++ return true; // indent 8 more
++ } // indent 8 more
++ }, options||{}));
++ }
++
++ $.fn[class_name]=function() {
++
++ var _arguments=arguments;
++ return this.each(function(){
++
++ var options=$(this).data(class_name+'_public');
++ if (!options) {
++ init.apply(this,_arguments);
++
++ } else {
++ var method=public_method[_arguments[0]];
++
++ if (typeof(method)!='function') {
++ console.log(class_name+' has no method "'+_arguments[0]+'"');
++ return false;
++ }
++ _arguments[0]=options;
++ method.apply(this,_arguments);
++ }
++ });
++ }
++
++ })(jQuery);
++ JSEND
++
++ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ function init(options) {
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2,
++ foobar: [
++ 1, // indent 8 more
++ 2, // indent 8 more
++ 3 // indent 8 more
++ ],
++ callback: function(){
++ return true;
++ }
++ }, options||{}));
++ }
++ JSEND
++
++ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ (function($){
++ function init(options) {
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2, // indent 8 more
++ foobar: [ // indent 8 more
++ 1, // indent 8 more
++ 2, // indent 16 more
++ 3 // indent 16 more
++ ],
++ callback: function(){ // indent 8 more
++ return true; // indent 8 more
++ } // indent 8 more
++ }, options||{}));
++ }
++ })(jQuery);
++ JSEND
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.255/src/testdir/test3.ok 2011-07-15 14:12:25.000000000 +0200
+--- src/testdir/test3.ok 2011-07-15 21:06:38.000000000 +0200
+***************
+*** 1443,1445 ****
+--- 1443,1559 ----
+ }
+ JSEND
+
++
++ JSSTART
++ var foo = [
++ 1, // indent 8 more
++ 2,
++ 3
++ ]; // indent 8 less
++ JSEND
++
++
++ JSSTART
++ function bar() {
++ var foo = [
++ 1,
++ 2,
++ 3
++ ]; // indent 16 less
++ }
++ JSEND
++
++
++ JSSTART
++ (function($){
++
++ var class_name='myclass';
++
++ function private_method() {
++ }
++
++ var public_method={
++ method: function(options,args){
++ private_method();
++ }
++ }
++
++ function init(options) {
++
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2, // indent 8 more
++ foobar: [ // indent 8 more
++ 1, // indent 8 more
++ 2, // indent 16 more
++ 3 // indent 16 more
++ ],
++ callback: function(){ // indent 8 more
++ return true; // indent 8 more
++ } // indent 8 more
++ }, options||{}));
++ }
++
++ $.fn[class_name]=function() {
++
++ var _arguments=arguments;
++ return this.each(function(){
++
++ var options=$(this).data(class_name+'_public');
++ if (!options) {
++ init.apply(this,_arguments);
++
++ } else {
++ var method=public_method[_arguments[0]];
++
++ if (typeof(method)!='function') {
++ console.log(class_name+' has no method "'+_arguments[0]+'"');
++ return false;
++ }
++ _arguments[0]=options;
++ method.apply(this,_arguments);
++ }
++ });
++ }
++
++ })(jQuery);
++ JSEND
++
++
++ JSSTART
++ function init(options) {
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2,
++ foobar: [
++ 1, // indent 8 more
++ 2, // indent 8 more
++ 3 // indent 8 more
++ ],
++ callback: function(){
++ return true;
++ }
++ }, options||{}));
++ }
++ JSEND
++
++
++ JSSTART
++ (function($){
++ function init(options) {
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2, // indent 8 more
++ foobar: [ // indent 8 more
++ 1, // indent 8 more
++ 2, // indent 16 more
++ 3 // indent 16 more
++ ],
++ callback: function(){ // indent 8 more
++ return true; // indent 8 more
++ } // indent 8 more
++ }, options||{}));
++ }
++ })(jQuery);
++ JSEND
++
+*** ../vim-7.3.255/src/version.c 2011-07-20 15:04:52.000000000 +0200
+--- src/version.c 2011-07-20 15:08:13.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 256,
+ /**/
+
+--
+Not too long ago, a keyboard was something to make music with...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.257
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.257
+Problem: Not all completions are available to user commands.
+Solution: Add "color", "compiler", "file_in_path" and "locale". (Dominique
+ Pelle)
+Files: src/ex_docmd.c, runtime/doc/map.txt
+
+
+*** ../vim-7.3.256/src/ex_docmd.c 2011-07-20 15:04:52.000000000 +0200
+--- src/ex_docmd.c 2011-07-20 16:10:28.000000000 +0200
+***************
+*** 5297,5303 ****
+--- 5297,5305 ----
+ {
+ {EXPAND_AUGROUP, "augroup"},
+ {EXPAND_BUFFERS, "buffer"},
++ {EXPAND_COLORS, "color"},
+ {EXPAND_COMMANDS, "command"},
++ {EXPAND_COMPILER, "compiler"},
+ #if defined(FEAT_CSCOPE)
+ {EXPAND_CSCOPE, "cscope"},
+ #endif
+***************
+*** 5310,5319 ****
+--- 5312,5326 ----
+ {EXPAND_EVENTS, "event"},
+ {EXPAND_EXPRESSION, "expression"},
+ {EXPAND_FILES, "file"},
++ {EXPAND_FILES_IN_PATH, "file_in_path"},
+ {EXPAND_FILETYPE, "filetype"},
+ {EXPAND_FUNCTIONS, "function"},
+ {EXPAND_HELP, "help"},
+ {EXPAND_HIGHLIGHT, "highlight"},
++ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
++ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
++ {EXPAND_LOCALES, "locale"},
++ #endif
+ {EXPAND_MAPPINGS, "mapping"},
+ {EXPAND_MENUS, "menu"},
+ {EXPAND_OWNSYNTAX, "syntax"},
+*** ../vim-7.3.256/runtime/doc/map.txt 2011-05-19 17:25:36.000000000 +0200
+--- runtime/doc/map.txt 2011-07-20 16:10:28.000000000 +0200
+***************
+*** 1202,1221 ****
+--- 1211,1236 ----
+
+ -complete=augroup autocmd groups
+ -complete=buffer buffer names
++ -complete=color color schemes
+ -complete=command Ex command (and arguments)
++ -complete=compiler compilers
++ -complete=cscope |:cscope| suboptions
+ -complete=dir directory names
+ -complete=environment environment variable names
+ -complete=event autocommand events
+ -complete=expression Vim expression
+ -complete=file file and directory names
++ -complete=file_in_path file and directory names in |'path'|
+ -complete=filetype filetype names |'filetype'|
+ -complete=function function name
+ -complete=help help subjects
+ -complete=highlight highlight groups
++ -complete=locale locale names (as output of locale -a)
+ -complete=mapping mapping name
+ -complete=menu menus
+ -complete=option options
+ -complete=shellcmd Shell command
++ -complete=sign |:sign| suboptions
+ -complete=syntax syntax file names |'syntax'|
+ -complete=tag tags
+ -complete=tag_listfiles tags, file names are shown when CTRL-D is hit
+*** ../vim-7.3.256/src/version.c 2011-07-20 15:09:38.000000000 +0200
+--- src/version.c 2011-07-20 16:30:31.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 257,
+ /**/
+
+--
+I have to exercise early in the morning before my brain
+figures out what I'm doing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.258
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.258
+Problem: MS-Windows: The edit with existing vim context menu entries can be
+ unwanted.
+Solution: Let a registry entry disable them. (Jerome Vuarand)
+Files: src/GvimExt/gvimext.cpp
+
+
+*** ../vim-7.3.257/src/GvimExt/gvimext.cpp 2010-08-15 21:57:29.000000000 +0200
+--- src/GvimExt/gvimext.cpp 2011-07-20 16:48:09.000000000 +0200
+***************
+*** 586,593 ****
+
+ // Initialize m_cntOfHWnd to 0
+ m_cntOfHWnd = 0;
+! // Retrieve all the vim instances
+! EnumWindows(EnumWindowsProc, (LPARAM)this);
+
+ if (cbFiles > 1)
+ {
+--- 586,608 ----
+
+ // Initialize m_cntOfHWnd to 0
+ m_cntOfHWnd = 0;
+!
+! HKEY keyhandle;
+! bool showExisting = true;
+!
+! // Check whether "Edit with existing Vim" entries are disabled.
+! if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
+! KEY_READ, &keyhandle) == ERROR_SUCCESS)
+! {
+! if (RegQueryValueEx(keyhandle, "DisableEditWithExisting", 0, NULL,
+! NULL, NULL) == ERROR_SUCCESS)
+! showExisting = false;
+! RegCloseKey(keyhandle);
+! }
+!
+! // Retrieve all the vim instances, unless disabled.
+! if (showExisting)
+! EnumWindows(EnumWindowsProc, (LPARAM)this);
+
+ if (cbFiles > 1)
+ {
+*** ../vim-7.3.257/src/version.c 2011-07-20 16:36:35.000000000 +0200
+--- src/version.c 2011-07-20 16:54:34.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 258,
+ /**/
+
+--
+What the word 'politics' means: 'Poli' in Latin meaning 'many' and 'tics'
+meaning 'bloodsucking creatures'.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.259
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.259
+Problem: Equivalence classes only work for latin characters.
+Solution: Add the Unicode equivalence characters. (Dominique Pelle)
+Files: runtime/doc/pattern.txt, src/regexp.c, src/testdir/test44.in,
+ src/testdir/test44.ok
+
+
+*** ../vim-7.3.258/runtime/doc/pattern.txt 2010-08-15 21:57:14.000000000 +0200
+--- runtime/doc/pattern.txt 2011-07-20 17:44:03.000000000 +0200
+***************
+*** 1027,1037 ****
+ These items only work for 8-bit characters.
+ */[[=* *[==]*
+ - An equivalence class. This means that characters are matched that
+! have almost the same meaning, e.g., when ignoring accents. The form
+! is:
+ [=a=]
+- Currently this is only implemented for latin1. Also works for the
+- latin1 characters in utf-8 and latin9.
+ */[[.* *[..]*
+ - A collation element. This currently simply accepts a single
+ character in the form:
+--- 1036,1044 ----
+ These items only work for 8-bit characters.
+ */[[=* *[==]*
+ - An equivalence class. This means that characters are matched that
+! have almost the same meaning, e.g., when ignoring accents. This
+! only works for Unicode, latin1 and latin9. The form is:
+ [=a=]
+ */[[.* *[..]*
+ - A collation element. This currently simply accepts a single
+ character in the form:
+*** ../vim-7.3.258/src/regexp.c 2011-06-19 04:31:54.000000000 +0200
+--- src/regexp.c 2011-07-20 17:56:52.000000000 +0200
+***************
+*** 666,673 ****
+--- 666,677 ----
+ static void regc __ARGS((int b));
+ #ifdef FEAT_MBYTE
+ static void regmbc __ARGS((int c));
++ # define REGMBC(x) regmbc(x);
++ # define CASEMBC(x) case x:
+ #else
+ # define regmbc(c) regc(c)
++ # define REGMBC(x)
++ # define CASEMBC(x)
+ #endif
+ static void reginsert __ARGS((int, char_u *));
+ static void reginsert_limits __ARGS((int, long, long, char_u *));
+***************
+*** 787,854 ****
+ switch (c)
+ {
+ case 'A': case '\300': case '\301': case '\302':
+ case '\303': case '\304': case '\305':
+ regmbc('A'); regmbc('\300'); regmbc('\301');
+ regmbc('\302'); regmbc('\303'); regmbc('\304');
+ regmbc('\305');
+ return;
+ case 'C': case '\307':
+ regmbc('C'); regmbc('\307');
+ return;
+ case 'E': case '\310': case '\311': case '\312': case '\313':
+ regmbc('E'); regmbc('\310'); regmbc('\311');
+ regmbc('\312'); regmbc('\313');
+ return;
+ case 'I': case '\314': case '\315': case '\316': case '\317':
+ regmbc('I'); regmbc('\314'); regmbc('\315');
+ regmbc('\316'); regmbc('\317');
+ return;
+ case 'N': case '\321':
+ regmbc('N'); regmbc('\321');
+ return;
+ case 'O': case '\322': case '\323': case '\324': case '\325':
+! case '\326':
+ regmbc('O'); regmbc('\322'); regmbc('\323');
+ regmbc('\324'); regmbc('\325'); regmbc('\326');
+ return;
+ case 'U': case '\331': case '\332': case '\333': case '\334':
+ regmbc('U'); regmbc('\331'); regmbc('\332');
+ regmbc('\333'); regmbc('\334');
+ return;
+ case 'Y': case '\335':
+ regmbc('Y'); regmbc('\335');
+ return;
+ case 'a': case '\340': case '\341': case '\342':
+ case '\343': case '\344': case '\345':
+ regmbc('a'); regmbc('\340'); regmbc('\341');
+ regmbc('\342'); regmbc('\343'); regmbc('\344');
+ regmbc('\345');
+ return;
+ case 'c': case '\347':
+ regmbc('c'); regmbc('\347');
+ return;
+ case 'e': case '\350': case '\351': case '\352': case '\353':
+ regmbc('e'); regmbc('\350'); regmbc('\351');
+ regmbc('\352'); regmbc('\353');
+ return;
+ case 'i': case '\354': case '\355': case '\356': case '\357':
+ regmbc('i'); regmbc('\354'); regmbc('\355');
+ regmbc('\356'); regmbc('\357');
+ return;
+ case 'n': case '\361':
+ regmbc('n'); regmbc('\361');
+ return;
+ case 'o': case '\362': case '\363': case '\364': case '\365':
+! case '\366':
+ regmbc('o'); regmbc('\362'); regmbc('\363');
+ regmbc('\364'); regmbc('\365'); regmbc('\366');
+ return;
+ case 'u': case '\371': case '\372': case '\373': case '\374':
+ regmbc('u'); regmbc('\371'); regmbc('\372');
+ regmbc('\373'); regmbc('\374');
+ return;
+ case 'y': case '\375': case '\377':
+ regmbc('y'); regmbc('\375'); regmbc('\377');
+ return;
+ }
+ #endif
+--- 791,1085 ----
+ switch (c)
+ {
+ case 'A': case '\300': case '\301': case '\302':
++ CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104) CASEMBC(0x1cd)
++ CASEMBC(0x1de) CASEMBC(0x1e0) CASEMBC(0x1ea2)
+ case '\303': case '\304': case '\305':
+ regmbc('A'); regmbc('\300'); regmbc('\301');
+ regmbc('\302'); regmbc('\303'); regmbc('\304');
+ regmbc('\305');
++ REGMBC(0x100) REGMBC(0x102) REGMBC(0x104)
++ REGMBC(0x1cd) REGMBC(0x1de) REGMBC(0x1e0)
++ REGMBC(0x1ea2)
++ return;
++ case 'B': CASEMBC(0x1e02) CASEMBC(0x1e06)
++ regmbc('B'); REGMBC(0x1e02) REGMBC(0x1e06)
+ return;
+ case 'C': case '\307':
++ CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a) CASEMBC(0x10c)
+ regmbc('C'); regmbc('\307');
++ REGMBC(0x106) REGMBC(0x108) REGMBC(0x10a)
++ REGMBC(0x10c)
++ return;
++ case 'D': CASEMBC(0x10e) CASEMBC(0x110) CASEMBC(0x1e0a)
++ CASEMBC(0x1e0e) CASEMBC(0x1e10)
++ regmbc('D'); REGMBC(0x10e) REGMBC(0x110)
++ REGMBC(0x1e0a) REGMBC(0x1e0e) REGMBC(0x1e10)
+ return;
+ case 'E': case '\310': case '\311': case '\312': case '\313':
++ CASEMBC(0x112) CASEMBC(0x114) CASEMBC(0x116) CASEMBC(0x118)
++ CASEMBC(0x11a) CASEMBC(0x1eba) CASEMBC(0x1ebc)
+ regmbc('E'); regmbc('\310'); regmbc('\311');
+ regmbc('\312'); regmbc('\313');
++ REGMBC(0x112) REGMBC(0x114) REGMBC(0x116)
++ REGMBC(0x118) REGMBC(0x11a) REGMBC(0x1eba)
++ REGMBC(0x1ebc)
++ return;
++ case 'F': CASEMBC(0x1e1e)
++ regmbc('F'); REGMBC(0x1e1e)
++ return;
++ case 'G': CASEMBC(0x11c) CASEMBC(0x11e) CASEMBC(0x120)
++ CASEMBC(0x122) CASEMBC(0x1e4) CASEMBC(0x1e6) CASEMBC(0x1f4)
++ CASEMBC(0x1e20)
++ regmbc('G'); REGMBC(0x11c) REGMBC(0x11e)
++ REGMBC(0x120) REGMBC(0x122) REGMBC(0x1e4)
++ REGMBC(0x1e6) REGMBC(0x1f4) REGMBC(0x1e20)
++ return;
++ case 'H': CASEMBC(0x124) CASEMBC(0x126) CASEMBC(0x1e22)
++ CASEMBC(0x1e26) CASEMBC(0x1e28)
++ regmbc('H'); REGMBC(0x124) REGMBC(0x126)
++ REGMBC(0x1e22) REGMBC(0x1e26) REGMBC(0x1e28)
+ return;
+ case 'I': case '\314': case '\315': case '\316': case '\317':
++ CASEMBC(0x128) CASEMBC(0x12a) CASEMBC(0x12c) CASEMBC(0x12e)
++ CASEMBC(0x130) CASEMBC(0x1cf) CASEMBC(0x1ec8)
+ regmbc('I'); regmbc('\314'); regmbc('\315');
+ regmbc('\316'); regmbc('\317');
++ REGMBC(0x128) REGMBC(0x12a) REGMBC(0x12c)
++ REGMBC(0x12e) REGMBC(0x130) REGMBC(0x1cf)
++ REGMBC(0x1ec8)
++ return;
++ case 'J': CASEMBC(0x134)
++ regmbc('J'); REGMBC(0x134)
++ return;
++ case 'K': CASEMBC(0x136) CASEMBC(0x1e8) CASEMBC(0x1e30)
++ CASEMBC(0x1e34)
++ regmbc('K'); REGMBC(0x136) REGMBC(0x1e8)
++ REGMBC(0x1e30) REGMBC(0x1e34)
++ return;
++ case 'L': CASEMBC(0x139) CASEMBC(0x13b) CASEMBC(0x13d)
++ CASEMBC(0x13f) CASEMBC(0x141) CASEMBC(0x1e3a)
++ regmbc('L'); REGMBC(0x139) REGMBC(0x13b)
++ REGMBC(0x13d) REGMBC(0x13f) REGMBC(0x141)
++ REGMBC(0x1e3a)
++ return;
++ case 'M': CASEMBC(0x1e3e) CASEMBC(0x1e40)
++ regmbc('M'); REGMBC(0x1e3e) REGMBC(0x1e40)
+ return;
+ case 'N': case '\321':
++ CASEMBC(0x143) CASEMBC(0x145) CASEMBC(0x147) CASEMBC(0x1e44)
++ CASEMBC(0x1e48)
+ regmbc('N'); regmbc('\321');
++ REGMBC(0x143) REGMBC(0x145) REGMBC(0x147)
++ REGMBC(0x1e44) REGMBC(0x1e48)
+ return;
+ case 'O': case '\322': case '\323': case '\324': case '\325':
+! case '\326': case '\330':
+! CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150) CASEMBC(0x1a0)
+! CASEMBC(0x1d1) CASEMBC(0x1ea) CASEMBC(0x1ec) CASEMBC(0x1ece)
+ regmbc('O'); regmbc('\322'); regmbc('\323');
+ regmbc('\324'); regmbc('\325'); regmbc('\326');
++ regmbc('\330');
++ REGMBC(0x14c) REGMBC(0x14e) REGMBC(0x150)
++ REGMBC(0x1a0) REGMBC(0x1d1) REGMBC(0x1ea)
++ REGMBC(0x1ec) REGMBC(0x1ece)
++ return;
++ case 'P': case 0x1e54: case 0x1e56:
++ regmbc('P'); REGMBC(0x1e54) REGMBC(0x1e56)
++ return;
++ case 'R': CASEMBC(0x154) CASEMBC(0x156) CASEMBC(0x158)
++ CASEMBC(0x1e58) CASEMBC(0x1e5e)
++ regmbc('R'); REGMBC(0x154) REGMBC(0x156) REGMBC(0x158)
++ REGMBC(0x1e58) REGMBC(0x1e5e)
++ return;
++ case 'S': CASEMBC(0x15a) CASEMBC(0x15c) CASEMBC(0x15e)
++ CASEMBC(0x160) CASEMBC(0x1e60)
++ regmbc('S'); REGMBC(0x15a) REGMBC(0x15c)
++ REGMBC(0x15e) REGMBC(0x160) REGMBC(0x1e60)
++ return;
++ case 'T': CASEMBC(0x162) CASEMBC(0x164) CASEMBC(0x166)
++ CASEMBC(0x1e6a) CASEMBC(0x1e6e)
++ regmbc('T'); REGMBC(0x162) REGMBC(0x164)
++ REGMBC(0x166) REGMBC(0x1e6a) REGMBC(0x1e6e)
+ return;
+ case 'U': case '\331': case '\332': case '\333': case '\334':
++ CASEMBC(0x168) CASEMBC(0x16a) CASEMBC(0x16c) CASEMBC(0x16e)
++ CASEMBC(0x170) CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
++ CASEMBC(0x1ee6)
+ regmbc('U'); regmbc('\331'); regmbc('\332');
+ regmbc('\333'); regmbc('\334');
++ REGMBC(0x168) REGMBC(0x16a) REGMBC(0x16c)
++ REGMBC(0x16e) REGMBC(0x170) REGMBC(0x172)
++ REGMBC(0x1af) REGMBC(0x1d3) REGMBC(0x1ee6)
++ return;
++ case 'V': CASEMBC(0x1e7c)
++ regmbc('V'); REGMBC(0x1e7c)
++ return;
++ case 'W': CASEMBC(0x174) CASEMBC(0x1e80) CASEMBC(0x1e82)
++ CASEMBC(0x1e84) CASEMBC(0x1e86)
++ regmbc('W'); REGMBC(0x174) REGMBC(0x1e80)
++ REGMBC(0x1e82) REGMBC(0x1e84) REGMBC(0x1e86)
++ return;
++ case 'X': CASEMBC(0x1e8a) CASEMBC(0x1e8c)
++ regmbc('X'); REGMBC(0x1e8a) REGMBC(0x1e8c)
+ return;
+ case 'Y': case '\335':
++ CASEMBC(0x176) CASEMBC(0x178) CASEMBC(0x1e8e) CASEMBC(0x1ef2)
++ CASEMBC(0x1ef6) CASEMBC(0x1ef8)
+ regmbc('Y'); regmbc('\335');
++ REGMBC(0x176) REGMBC(0x178) REGMBC(0x1e8e)
++ REGMBC(0x1ef2) REGMBC(0x1ef6) REGMBC(0x1ef8)
++ return;
++ case 'Z': CASEMBC(0x179) CASEMBC(0x17b) CASEMBC(0x17d)
++ CASEMBC(0x1b5) CASEMBC(0x1e90) CASEMBC(0x1e94)
++ regmbc('Z'); REGMBC(0x179) REGMBC(0x17b)
++ REGMBC(0x17d) REGMBC(0x1b5) REGMBC(0x1e90)
++ REGMBC(0x1e94)
+ return;
+ case 'a': case '\340': case '\341': case '\342':
+ case '\343': case '\344': case '\345':
++ CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105) CASEMBC(0x1ce)
++ CASEMBC(0x1df) CASEMBC(0x1e1) CASEMBC(0x1ea3)
+ regmbc('a'); regmbc('\340'); regmbc('\341');
+ regmbc('\342'); regmbc('\343'); regmbc('\344');
+ regmbc('\345');
++ REGMBC(0x101) REGMBC(0x103) REGMBC(0x105)
++ REGMBC(0x1ce) REGMBC(0x1df) REGMBC(0x1e1)
++ REGMBC(0x1ea3)
++ return;
++ case 'b': CASEMBC(0x1e03) CASEMBC(0x1e07)
++ regmbc('b'); REGMBC(0x1e03) REGMBC(0x1e07)
+ return;
+ case 'c': case '\347':
++ CASEMBC(0x107) CASEMBC(0x109) CASEMBC(0x10b) CASEMBC(0x10d)
+ regmbc('c'); regmbc('\347');
++ REGMBC(0x107) REGMBC(0x109) REGMBC(0x10b)
++ REGMBC(0x10d)
++ return;
++ case 'd': CASEMBC(0x10f) CASEMBC(0x111) CASEMBC(0x1d0b)
++ CASEMBC(0x1e11)
++ regmbc('d'); REGMBC(0x10f) REGMBC(0x111)
++ REGMBC(0x1e0b) REGMBC(0x01e0f) REGMBC(0x1e11)
+ return;
+ case 'e': case '\350': case '\351': case '\352': case '\353':
++ CASEMBC(0x113) CASEMBC(0x115) CASEMBC(0x117) CASEMBC(0x119)
++ CASEMBC(0x11b) CASEMBC(0x1ebb) CASEMBC(0x1ebd)
+ regmbc('e'); regmbc('\350'); regmbc('\351');
+ regmbc('\352'); regmbc('\353');
++ REGMBC(0x113) REGMBC(0x115) REGMBC(0x117)
++ REGMBC(0x119) REGMBC(0x11b) REGMBC(0x1ebb)
++ REGMBC(0x1ebd)
++ return;
++ case 'f': CASEMBC(0x1e1f)
++ regmbc('f'); REGMBC(0x1e1f)
++ return;
++ case 'g': CASEMBC(0x11d) CASEMBC(0x11f) CASEMBC(0x121)
++ CASEMBC(0x123) CASEMBC(0x1e5) CASEMBC(0x1e7) CASEMBC(0x1f5)
++ CASEMBC(0x1e21)
++ regmbc('g'); REGMBC(0x11d) REGMBC(0x11f)
++ REGMBC(0x121) REGMBC(0x123) REGMBC(0x1e5)
++ REGMBC(0x1e7) REGMBC(0x1f5) REGMBC(0x1e21)
++ return;
++ case 'h': CASEMBC(0x125) CASEMBC(0x127) CASEMBC(0x1e23)
++ CASEMBC(0x1e27) CASEMBC(0x1e29) CASEMBC(0x1e96)
++ regmbc('h'); REGMBC(0x125) REGMBC(0x127)
++ REGMBC(0x1e23) REGMBC(0x1e27) REGMBC(0x1e29)
++ REGMBC(0x1e96)
+ return;
+ case 'i': case '\354': case '\355': case '\356': case '\357':
++ CASEMBC(0x129) CASEMBC(0x12b) CASEMBC(0x12d) CASEMBC(0x12f)
++ CASEMBC(0x1d0) CASEMBC(0x1ec9)
+ regmbc('i'); regmbc('\354'); regmbc('\355');
+ regmbc('\356'); regmbc('\357');
++ REGMBC(0x129) REGMBC(0x12b) REGMBC(0x12d)
++ REGMBC(0x12f) REGMBC(0x1d0) REGMBC(0x1ec9)
++ return;
++ case 'j': CASEMBC(0x135) CASEMBC(0x1f0)
++ regmbc('j'); REGMBC(0x135) REGMBC(0x1f0)
++ return;
++ case 'k': CASEMBC(0x137) CASEMBC(0x1e9) CASEMBC(0x1e31)
++ CASEMBC(0x1e35)
++ regmbc('k'); REGMBC(0x137) REGMBC(0x1e9)
++ REGMBC(0x1e31) REGMBC(0x1e35)
++ return;
++ case 'l': CASEMBC(0x13a) CASEMBC(0x13c) CASEMBC(0x13e)
++ CASEMBC(0x140) CASEMBC(0x142) CASEMBC(0x1e3b)
++ regmbc('l'); REGMBC(0x13a) REGMBC(0x13c)
++ REGMBC(0x13e) REGMBC(0x140) REGMBC(0x142)
++ REGMBC(0x1e3b)
++ return;
++ case 'm': CASEMBC(0x1e3f) CASEMBC(0x1e41)
++ regmbc('m'); REGMBC(0x1e3f) REGMBC(0x1e41)
+ return;
+ case 'n': case '\361':
++ CASEMBC(0x144) CASEMBC(0x146) CASEMBC(0x148) CASEMBC(0x149)
++ CASEMBC(0x1e45) CASEMBC(0x1e49)
+ regmbc('n'); regmbc('\361');
++ REGMBC(0x144) REGMBC(0x146) REGMBC(0x148)
++ REGMBC(0x149) REGMBC(0x1e45) REGMBC(0x1e49)
+ return;
+ case 'o': case '\362': case '\363': case '\364': case '\365':
+! case '\366': case '\370':
+! CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151) CASEMBC(0x1a1)
+! CASEMBC(0x1d2) CASEMBC(0x1eb) CASEMBC(0x1ed) CASEMBC(0x1ecf)
+ regmbc('o'); regmbc('\362'); regmbc('\363');
+ regmbc('\364'); regmbc('\365'); regmbc('\366');
++ regmbc('\370');
++ REGMBC(0x14d) REGMBC(0x14f) REGMBC(0x151)
++ REGMBC(0x1a1) REGMBC(0x1d2) REGMBC(0x1eb)
++ REGMBC(0x1ed) REGMBC(0x1ecf)
++ return;
++ case 'p': CASEMBC(0x1e55) CASEMBC(0x1e57)
++ regmbc('p'); REGMBC(0x1e55) REGMBC(0x1e57)
++ return;
++ case 'r': CASEMBC(0x155) CASEMBC(0x157) CASEMBC(0x159)
++ CASEMBC(0x1e59) CASEMBC(0x1e5f)
++ regmbc('r'); REGMBC(0x155) REGMBC(0x157) REGMBC(0x159)
++ REGMBC(0x1e59) REGMBC(0x1e5f)
++ return;
++ case 's': CASEMBC(0x15b) CASEMBC(0x15d) CASEMBC(0x15f)
++ CASEMBC(0x161) CASEMBC(0x1e61)
++ regmbc('s'); REGMBC(0x15b) REGMBC(0x15d)
++ REGMBC(0x15f) REGMBC(0x161) REGMBC(0x1e61)
++ return;
++ case 't': CASEMBC(0x163) CASEMBC(0x165) CASEMBC(0x167)
++ CASEMBC(0x1e6b) CASEMBC(0x1e6f) CASEMBC(0x1e97)
++ regmbc('t'); REGMBC(0x163) REGMBC(0x165) REGMBC(0x167)
++ REGMBC(0x1e6b) REGMBC(0x1e6f) REGMBC(0x1e97)
+ return;
+ case 'u': case '\371': case '\372': case '\373': case '\374':
++ CASEMBC(0x169) CASEMBC(0x16b) CASEMBC(0x16d) CASEMBC(0x16f)
++ CASEMBC(0x171) CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
++ CASEMBC(0x1ee7)
+ regmbc('u'); regmbc('\371'); regmbc('\372');
+ regmbc('\373'); regmbc('\374');
++ REGMBC(0x169) REGMBC(0x16b) REGMBC(0x16d)
++ REGMBC(0x16f) REGMBC(0x171) REGMBC(0x173)
++ REGMBC(0x1b0) REGMBC(0x1d4) REGMBC(0x1ee7)
++ return;
++ case 'v': CASEMBC(0x1e7d)
++ regmbc('v'); REGMBC(0x1e7d)
++ return;
++ case 'w': CASEMBC(0x175) CASEMBC(0x1e81) CASEMBC(0x1e83)
++ CASEMBC(0x1e85) CASEMBC(0x1e87) CASEMBC(0x1e98)
++ regmbc('w'); REGMBC(0x175) REGMBC(0x1e81)
++ REGMBC(0x1e83) REGMBC(0x1e85) REGMBC(0x1e87)
++ REGMBC(0x1e98)
++ return;
++ case 'x': CASEMBC(0x1e8b) CASEMBC(0x1e8d)
++ regmbc('x'); REGMBC(0x1e8b) REGMBC(0x1e8d)
+ return;
+ case 'y': case '\375': case '\377':
++ CASEMBC(0x177) CASEMBC(0x1e8f) CASEMBC(0x1e99)
++ CASEMBC(0x1ef3) CASEMBC(0x1ef7) CASEMBC(0x1ef9)
+ regmbc('y'); regmbc('\375'); regmbc('\377');
++ REGMBC(0x177) REGMBC(0x1e8f) REGMBC(0x1e99)
++ REGMBC(0x1ef3) REGMBC(0x1ef7) REGMBC(0x1ef9)
++ return;
++ case 'z': CASEMBC(0x17a) CASEMBC(0x17c) CASEMBC(0x17e)
++ CASEMBC(0x1b6) CASEMBC(0x1e91) CASEMBC(0x1e95)
++ regmbc('z'); REGMBC(0x17a) REGMBC(0x17c)
++ REGMBC(0x17e) REGMBC(0x1b6) REGMBC(0x1e91)
++ REGMBC(0x1e95)
+ return;
+ }
+ #endif
+***************
+*** 2468,2473 ****
+--- 2699,2706 ----
+ regmbc(c)
+ int c;
+ {
++ if (!has_mbyte && c > 0xff)
++ return;
+ if (regcode == JUST_CALC_SIZE)
+ regsize += (*mb_char2len)(c);
+ else
+***************
+*** 2588,2594 ****
+ else
+ offset = (int)(val - scan);
+ /* When the offset uses more than 16 bits it can no longer fit in the two
+! * bytes avaliable. Use a global flag to avoid having to check return
+ * values in too many places. */
+ if (offset > 0xffff)
+ reg_toolong = TRUE;
+--- 2821,2827 ----
+ else
+ offset = (int)(val - scan);
+ /* When the offset uses more than 16 bits it can no longer fit in the two
+! * bytes available. Use a global flag to avoid having to check return
+ * values in too many places. */
+ if (offset > 0xffff)
+ reg_toolong = TRUE;
+*** ../vim-7.3.258/src/testdir/test44.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test44.in 2011-07-20 17:36:49.000000000 +0200
+***************
+*** 27,32 ****
+--- 27,34 ----
+ x/\%U12345678
+ x/[\U1234abcd\u1234\uabcd]
+ x/\%d21879b
++ x/ [[=A=]]* [[=B=]]* [[=C=]]* [[=D=]]* [[=E=]]* [[=F=]]* [[=G=]]* [[=H=]]* [[=I=]]* [[=J=]]* [[=K=]]* [[=L=]]* [[=M=]]* [[=N=]]* [[=O=]]* [[=P=]]* [[=Q=]]* [[=R=]]* [[=S=]]* [[=T=]]* [[=U=]]* [[=V=]]* [[=W=]]* [[=X=]]* [[=Y=]]* [[=Z=]]*/e
++ x/ [[=a=]]* [[=b=]]* [[=c=]]* [[=d=]]* [[=e=]]* [[=f=]]* [[=g=]]* [[=h=]]* [[=i=]]* [[=j=]]* [[=k=]]* [[=l=]]* [[=m=]]* [[=n=]]* [[=o=]]* [[=p=]]* [[=q=]]* [[=r=]]* [[=s=]]* [[=t=]]* [[=u=]]* [[=v=]]* [[=w=]]* [[=x=]]* [[=y=]]* [[=z=]]*/e
+ x:?^1?,$w! test.out
+ :e! test.out
+ G:put =matchstr(\"×בגד\", \".\", 0, 2) " ב
+***************
+*** 53,55 ****
+--- 55,59 ----
+ e ü’…™¸y
+ f ü’Š¯z
+ g aå•·bb
++ h AÀÃÂÃÄÅĀĂĄÇÇžÇ áº¢ BḂḆ CÇĆĈĊČ DÄŽÄḊḎḠEÈÉÊËĒĔĖĘĚẺẼ FḞ GÄœÄžÄ Ä¢Ç¤Ç¦Ç´á¸ HĤĦḢḦḨ IÃŒÃÃŽÃĨĪĬĮİÇỈ JÄ´ KĶǨḰḴ LĹĻĽĿÅḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎÅÆ Ç‘ÇªÇ¬á»Ž PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠTŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ Vá¹¼ WŴẀẂẄẆ XẊẌ YÃŶŸẎỲỶỸ ZŹŻŽƵáºáº”
++ i aà áâãäåÄăąǎǟǡả bḃḇ cÃ§Ä‡Ä‰Ä‹Ä dÄđḋá¸á¸‘ eèéêëēĕėęěẻẽ fḟ gÄğġģǥǧǵḡ hĥħḣḧḩẖ iìÃîïĩīÄįÇỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṠnñńņňʼnṅṉ oòóôõöøÅÅÅ‘Æ¡Ç’Ç«Çá» pṕṗ q rŕŗřṙṟ sÅ›Åşšṡ tţťŧṫṯẗ uùúûüũūÅůűųưǔủ vá¹½ wŵáºáºƒáº…ẇẘ xẋẠyýÿŷáºáº™á»³á»·á»¹ zźżžƶẑẕ
+*** ../vim-7.3.258/src/testdir/test44.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test44.ok 2011-07-20 17:36:49.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,21 ----
+ e y
+ f z
+ g abb
++ h AÀÃÂÃÄÅĀĂĄÇÇžÇ áº¢ BḂḆ CÇĆĈĊČ DÄŽÄḊḎḠEÈÉÊËĒĔĖĘĚẺẼ FḞ GÄœÄžÄ Ä¢Ç¤Ç¦Ç´á¸ HĤĦḢḦḨ IÃŒÃÃŽÃĨĪĬĮİÇỈ JÄ´ KĶǨḰḴ LĹĻĽĿÅḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎÅÆ Ç‘ÇªÇ¬á»Ž PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠTŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ Vá¹¼ WŴẀẂẄẆ XẊẌ YÃŶŸẎỲỶỸ ZŹŻŽƵáº
++ i aà áâãäåÄăąǎǟǡả bḃḇ cÃ§Ä‡Ä‰Ä‹Ä dÄđḋá¸á¸‘ eèéêëēĕėęěẻẽ fḟ gÄğġģǥǧǵḡ hĥħḣḧḩẖ iìÃîïĩīÄįÇỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṠnñńņňʼnṅṉ oòóôõöøÅÅÅ‘Æ¡Ç’Ç«Çá» pṕṗ q rŕŗřṙṟ sÅ›Åşšṡ tţťŧṫṯẗ uùúûüũūÅůűųưǔủ vá¹½ wŵáºáºƒáº…ẇẘ xẋẠyýÿŷáºáº™á»³á»·á»¹ zźżžƶẑ
+ ב
+ בג
+ ×
+*** ../vim-7.3.258/src/version.c 2011-07-20 17:27:17.000000000 +0200
+--- src/version.c 2011-07-20 17:38:32.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 259,
+ /**/
+
+--
+Not too long ago, compress was something you did to garbage...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.260
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.260
+Problem: CursorHold triggers on an incomplete mapping. (Will Gray)
+Solution: Don't trigger CursorHold when there is typeahead.
+Files: src/fileio.c
+
+
+*** ../vim-7.3.259/src/fileio.c 2011-05-19 17:25:36.000000000 +0200
+--- src/fileio.c 2011-07-20 18:22:16.000000000 +0200
+***************
+*** 9044,9050 ****
+ {
+ int state;
+
+! if (!did_cursorhold && has_cursorhold() && !Recording
+ #ifdef FEAT_INS_EXPAND
+ && !ins_compl_active()
+ #endif
+--- 9044,9053 ----
+ {
+ int state;
+
+! if (!did_cursorhold
+! && has_cursorhold()
+! && !Recording
+! && typebuf.tb_len == 0
+ #ifdef FEAT_INS_EXPAND
+ && !ins_compl_active()
+ #endif
+***************
+*** 9935,9940 ****
+--- 9938,9945 ----
+ if ((c == ';' || c == '>') && match == FALSE)
+ {
+ *pattern = NUL; /* Terminate the string */
++ /* TODO: match with 'filetype' of buffer that "fname" comes
++ * from. */
+ match = mch_check_filetype(fname, type_start);
+ *pattern = c; /* Restore the terminator */
+ type_start = pattern + 1;
+*** ../vim-7.3.259/src/version.c 2011-07-20 17:58:14.000000000 +0200
+--- src/version.c 2011-07-20 18:25:15.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 260,
+ /**/
+
+--
+LAUNCELOT: At last! A call! A cry of distress ...
+ (he draws his sword, and turns to CONCORDE)
+ Concorde! Brave, Concorde ... you shall not have died in vain!
+CONCORDE: I'm not quite dead, sir ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.261
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.261
+Problem: G++ error message errornously recognized as error.
+Solution: Ignore "In file included from" line also when it ends in a colon.
+ (Fernando Castillo)
+Files: src/option.h
+
+
+*** ../vim-7.3.260/src/option.h 2011-06-26 05:36:07.000000000 +0200
+--- src/option.h 2011-07-27 13:44:08.000000000 +0200
+***************
+*** 33,39 ****
+ # ifdef EBCDIC
+ #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # else
+! #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # endif
+ # endif
+ # endif
+--- 33,39 ----
+ # ifdef EBCDIC
+ #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # else
+! #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # endif
+ # endif
+ # endif
+*** ../vim-7.3.260/src/version.c 2011-07-20 18:29:33.000000000 +0200
+--- src/version.c 2011-07-27 13:46:23.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 261,
+ /**/
+
+--
+Have you heard about the new Barbie doll? It's called Divorce
+Barbie. It comes with all of Ken's stuff.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.262
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.262
+Problem: Photon code style doesn't match Vim style.
+Solution: Clean up some of it. (Elias Diem)
+Files: src/gui_photon.c
+
+
+*** ../vim-7.3.261/src/gui_photon.c 2011-01-17 20:08:03.000000000 +0100
+--- src/gui_photon.c 2011-07-27 14:07:02.000000000 +0200
+***************
+*** 32,40 ****
+ #endif
+
+ #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
+! #define RGB(r,g,b) PgRGB(r,g,b)
+
+! #define EVENT_BUFFER_SIZE sizeof( PhEvent_t ) + 1000
+
+ /* Some defines for gui_mch_mousehide() */
+ #define MOUSE_HIDE TRUE
+--- 32,40 ----
+ #endif
+
+ #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
+! #define RGB(r, g, b) PgRGB(r, g, b)
+
+! #define EVENT_BUFFER_SIZE sizeof(PhEvent_t) + 1000
+
+ /* Some defines for gui_mch_mousehide() */
+ #define MOUSE_HIDE TRUE
+***************
+*** 206,258 ****
+ static PtCallbackF_t gui_ph_handle_menu_unrealized;
+
+ #ifdef USE_PANEL_GROUP
+! static void gui_ph_get_panelgroup_margins( short*, short*, short*, short* );
+ #endif
+
+ #ifdef FEAT_TOOLBAR
+! static PhImage_t *gui_ph_toolbar_find_icon( vimmenu_T *menu );
+ #endif
+
+! static void gui_ph_draw_start( void );
+! static void gui_ph_draw_end( void );
+
+ /* Set the text for the balloon */
+! static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
+ PtWidget_t *widget,
+ int position,
+ char *text,
+ char *font,
+ PgColor_t fill_color,
+! PgColor_t text_color );
+
+ /****************************************************************************/
+
+! static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
+ PtWidget_t *widget,
+ int position,
+ char *text,
+ char *font,
+ PgColor_t fill_color,
+! PgColor_t text_color )
+ {
+ PtArg_t arg;
+ vimmenu_T *menu;
+ char_u *tooltip;
+
+! PtSetArg( &arg, Pt_ARG_POINTER, &menu, 0 );
+! PtGetResources( widget, 1, &arg );
+
+ /* Override the text and position */
+
+ tooltip = text;
+! if( menu != NULL )
+ {
+ int index = MENU_INDEX_TIP;
+! if( menu->strings[ index ] != NULL )
+ tooltip = menu->strings[ index ];
+ }
+
+! return( PtInflateBalloon(
+ window,
+ widget,
+ /* Don't put the balloon at the bottom,
+--- 206,258 ----
+ static PtCallbackF_t gui_ph_handle_menu_unrealized;
+
+ #ifdef USE_PANEL_GROUP
+! static void gui_ph_get_panelgroup_margins(short*, short*, short*, short*);
+ #endif
+
+ #ifdef FEAT_TOOLBAR
+! static PhImage_t *gui_ph_toolbar_find_icon(vimmenu_T *menu);
+ #endif
+
+! static void gui_ph_draw_start(void);
+! static void gui_ph_draw_end(void);
+
+ /* Set the text for the balloon */
+! static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
+ PtWidget_t *widget,
+ int position,
+ char *text,
+ char *font,
+ PgColor_t fill_color,
+! PgColor_t text_color);
+
+ /****************************************************************************/
+
+! static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
+ PtWidget_t *widget,
+ int position,
+ char *text,
+ char *font,
+ PgColor_t fill_color,
+! PgColor_t text_color)
+ {
+ PtArg_t arg;
+ vimmenu_T *menu;
+ char_u *tooltip;
+
+! PtSetArg(&arg, Pt_ARG_POINTER, &menu, 0);
+! PtGetResources(widget, 1, &arg);
+
+ /* Override the text and position */
+
+ tooltip = text;
+! if (menu != NULL)
+ {
+ int index = MENU_INDEX_TIP;
+! if (menu->strings[ index ] != NULL)
+ tooltip = menu->strings[ index ];
+ }
+
+! return PtInflateBalloon(
+ window,
+ widget,
+ /* Don't put the balloon at the bottom,
+***************
+*** 261,285 ****
+ tooltip,
+ font,
+ fill_color,
+! text_color ) );
+ }
+
+ static void
+! gui_ph_resize_container( void )
+ {
+ PhArea_t area;
+
+! PtWidgetArea( gui.vimWindow, &area );
+! PtWidgetPos ( gui.vimContainer, &area.pos );
+
+! PtSetResource( gui.vimContainer, Pt_ARG_AREA, &area, 0 );
+ }
+
+ static int
+ gui_ph_handle_menu_resize(
+ PtWidget_t *widget,
+ void *other,
+! PtCallbackInfo_t *info )
+ {
+ PtContainerCallback_t *sizes = info->cbdata;
+ PtWidget_t *container;
+--- 261,285 ----
+ tooltip,
+ font,
+ fill_color,
+! text_color);
+ }
+
+ static void
+! gui_ph_resize_container(void)
+ {
+ PhArea_t area;
+
+! PtWidgetArea(gui.vimWindow, &area);
+! PtWidgetPos (gui.vimContainer, &area.pos);
+
+! PtSetResource(gui.vimContainer, Pt_ARG_AREA, &area, 0);
+ }
+
+ static int
+ gui_ph_handle_menu_resize(
+ PtWidget_t *widget,
+ void *other,
+! PtCallbackInfo_t *info)
+ {
+ PtContainerCallback_t *sizes = info->cbdata;
+ PtWidget_t *container;
+***************
+*** 291,297 ****
+ /* Because vim treats the toolbar and menubar separately,
+ * and here they're lumped together into a PtToolbarGroup,
+ * we only need either menu_height or toolbar_height set at once */
+! if( gui.menu_is_active )
+ {
+ gui.menu_height = height;
+ gui.toolbar_height = 0;
+--- 291,297 ----
+ /* Because vim treats the toolbar and menubar separately,
+ * and here they're lumped together into a PtToolbarGroup,
+ * we only need either menu_height or toolbar_height set at once */
+! if (gui.menu_is_active)
+ {
+ gui.menu_height = height;
+ gui.toolbar_height = 0;
+***************
+*** 310,325 ****
+ container = gui.vimContainer;
+ #endif
+
+! PtSetResource( container, Pt_ARG_POS, &below_menu, 0 );
+
+ gui_ph_resize_container();
+
+ #ifdef USE_PANEL_GROUP
+ gui_ph_get_panelgroup_margins(
+ &pg_margin_top, &pg_margin_bottom,
+! &pg_margin_left, &pg_margin_right );
+ #endif
+! return( Pt_CONTINUE );
+ }
+
+ /*
+--- 310,325 ----
+ container = gui.vimContainer;
+ #endif
+
+! PtSetResource(container, Pt_ARG_POS, &below_menu, 0);
+
+ gui_ph_resize_container();
+
+ #ifdef USE_PANEL_GROUP
+ gui_ph_get_panelgroup_margins(
+ &pg_margin_top, &pg_margin_bottom,
+! &pg_margin_left, &pg_margin_right);
+ #endif
+! return Pt_CONTINUE;
+ }
+
+ /*
+***************
+*** 330,352 ****
+ gui_ph_handle_timer_cursor(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+! if( blink_state == BLINK_ON )
+ {
+ gui_undraw_cursor();
+ blink_state = BLINK_OFF;
+! PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_offtime, 0 );
+ }
+ else
+ {
+ gui_update_cursor(TRUE, FALSE);
+ blink_state = BLINK_ON;
+! PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_ontime, 0 );
+ }
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 330,352 ----
+ gui_ph_handle_timer_cursor(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+! if (blink_state == BLINK_ON)
+ {
+ gui_undraw_cursor();
+ blink_state = BLINK_OFF;
+! PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_offtime, 0);
+ }
+ else
+ {
+ gui_update_cursor(TRUE, FALSE);
+ blink_state = BLINK_ON;
+! PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_ontime, 0);
+ }
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 354,360 ****
+ {
+ is_timeout = TRUE;
+
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 354,360 ----
+ {
+ is_timeout = TRUE;
+
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 402,408 ****
+ break;
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 402,408 ----
+ break;
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 426,438 ****
+
+ case Pt_SCROLL_SET:
+ /* FIXME: return straight away here? */
+! return( Pt_CONTINUE );
+ break;
+ }
+
+ gui_drag_scrollbar(sb, value, dragging);
+ }
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 426,438 ----
+
+ case Pt_SCROLL_SET:
+ /* FIXME: return straight away here? */
+! return Pt_CONTINUE;
+ break;
+ }
+
+ gui_drag_scrollbar(sb, value, dragging);
+ }
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 453,459 ****
+ /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+ if( key->key_flags & Pk_KF_Compose )
+ {
+! return( Pt_CONTINUE );
+ }
+
+ if( (key->key_flags & Pk_KF_Cap_Valid) &&
+--- 453,459 ----
+ /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+ if( key->key_flags & Pk_KF_Compose )
+ {
+! return Pt_CONTINUE;
+ }
+
+ if( (key->key_flags & Pk_KF_Cap_Valid) &&
+***************
+*** 473,479 ****
+ gui_is_menu_shortcut( key->key_cap ) ) ) )
+ {
+ /* Fallthrough and let photon look for the hotkey */
+! return( Pt_CONTINUE );
+ }
+ #endif
+
+--- 473,479 ----
+ gui_is_menu_shortcut( key->key_cap ) ) ) )
+ {
+ /* Fallthrough and let photon look for the hotkey */
+! return Pt_CONTINUE;
+ }
+ #endif
+
+***************
+*** 544,550 ****
+ add_to_input_buf( string, len );
+ }
+
+! return( Pt_CONSUME );
+ }
+ len = 0;
+ #endif
+--- 544,550 ----
+ add_to_input_buf( string, len );
+ }
+
+! return Pt_CONSUME;
+ }
+ len = 0;
+ #endif
+***************
+*** 579,585 ****
+ }
+ else
+ {
+! return( Pt_CONTINUE );
+ }
+ }
+ else
+--- 579,585 ----
+ }
+ else
+ {
+! return Pt_CONTINUE;
+ }
+ }
+ else
+***************
+*** 622,632 ****
+ if( len > 0 )
+ {
+ add_to_input_buf( string, len );
+! return( Pt_CONSUME );
+ }
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 622,632 ----
+ if( len > 0 )
+ {
+ add_to_input_buf( string, len );
+! return Pt_CONSUME;
+ }
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 652,658 ****
+ if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
+ {
+ gui_mouse_moved( mouse_x, mouse_y );
+! return( Pt_CONTINUE );
+ }
+
+ if( pointer->key_mods & Pk_KM_Shift )
+--- 652,658 ----
+ if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
+ {
+ gui_mouse_moved( mouse_x, mouse_y );
+! return Pt_CONTINUE;
+ }
+
+ if( pointer->key_mods & Pk_KM_Shift )
+***************
+*** 702,708 ****
+ gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ /* Handle a focus change of the PtRaw widget */
+--- 702,708 ----
+ gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ /* Handle a focus change of the PtRaw widget */
+***************
+*** 721,727 ****
+ PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+ gui_ph_handle_mouse, NULL );
+ }
+! return( Pt_CONTINUE );
+ }
+
+ static void
+--- 721,727 ----
+ PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+ gui_ph_handle_mouse, NULL );
+ }
+! return Pt_CONTINUE;
+ }
+
+ static void
+***************
+*** 793,799 ****
+ PtRealizeWidget( menu->submenu_id );
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+--- 793,799 ----
+ PtRealizeWidget( menu->submenu_id );
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+***************
+*** 805,811 ****
+ vimmenu_T *menu = (vimmenu_T *) data;
+ gui_menu_cb( menu );
+ }
+! return( Pt_CONTINUE );
+ }
+
+ /* Stop focus from disappearing into the menubar... */
+--- 805,811 ----
+ vimmenu_T *menu = (vimmenu_T *) data;
+ gui_menu_cb( menu );
+ }
+! return Pt_CONTINUE;
+ }
+
+ /* Stop focus from disappearing into the menubar... */
+***************
+*** 816,822 ****
+ PtCallbackInfo_t *info )
+ {
+ PtGiveFocus( gui.vimTextArea, NULL );
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 816,822 ----
+ PtCallbackInfo_t *info )
+ {
+ PtGiveFocus( gui.vimTextArea, NULL );
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 826,832 ****
+ PtCallbackInfo_t *info )
+ {
+ gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
+! return( Pt_CONTINUE );
+ }
+
+ /****************************************************************************/
+--- 826,832 ----
+ PtCallbackInfo_t *info )
+ {
+ gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
+! return Pt_CONTINUE;
+ }
+
+ /****************************************************************************/
+***************
+*** 878,884 ****
+ ( STRCMP( items->dname, name ) != 0 ) )
+ items = items->next;
+ }
+! return( items );
+ }
+
+ static void
+--- 878,884 ----
+ ( STRCMP( items->dname, name ) != 0 ) )
+ items = items->next;
+ }
+! return items;
+ }
+
+ static void
+***************
+*** 927,933 ****
+ gui_menu_cb( menu );
+ }
+ }
+! return( Pt_CONTINUE );
+ }
+
+ static void
+--- 927,933 ----
+ gui_menu_cb( menu );
+ }
+ }
+! return Pt_CONTINUE;
+ }
+
+ static void
+***************
+*** 974,983 ****
+ mark++;
+
+ if( *mark == ')' )
+! return( TRUE);
+ }
+ }
+! return( FALSE );
+ }
+
+ static void
+--- 974,983 ----
+ mark++;
+
+ if( *mark == ')' )
+! return TRUE;
+ }
+ }
+! return FALSE;
+ }
+
+ static void
+***************
+*** 1057,1063 ****
+ gui_ph_pg_remove_buffer( menu->dname );
+ }
+
+! return( Pt_CONTINUE );
+ }
+ #endif
+
+--- 1057,1063 ----
+ gui_ph_pg_remove_buffer( menu->dname );
+ }
+
+! return Pt_CONTINUE;
+ }
+ #endif
+
+***************
+*** 1071,1077 ****
+ PtContainerHold( gui.vimContainer );
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ /****************************************************************************/
+--- 1071,1077 ----
+ PtContainerHold( gui.vimContainer );
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ /****************************************************************************/
+***************
+*** 1126,1132 ****
+
+ gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
+ if( gui.event_buffer == NULL )
+! return( FAIL );
+
+ /* Get a translation so we can convert from ISO Latin-1 to UTF */
+ charset_translate = PxTranslateSet( NULL, "latin1" );
+--- 1126,1132 ----
+
+ gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
+ if( gui.event_buffer == NULL )
+! return FAIL;
+
+ /* Get a translation so we can convert from ISO Latin-1 to UTF */
+ charset_translate = PxTranslateSet( NULL, "latin1" );
+***************
+*** 1141,1147 ****
+ PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+ gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
+ if( gui.vimWindow == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
+ PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
+--- 1141,1147 ----
+ PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+ gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
+ if( gui.vimWindow == NULL )
+! return FAIL;
+
+ PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
+ PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
+***************
+*** 1158,1164 ****
+
+ gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
+ if( gui.vimPanelGroup == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+ gui_ph_handle_pg_change, NULL );
+--- 1158,1164 ----
+
+ gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
+ if( gui.vimPanelGroup == NULL )
+! return FAIL;
+
+ PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+ gui_ph_handle_pg_change, NULL );
+***************
+*** 1172,1178 ****
+
+ gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
+ if( gui.vimContainer == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
+ #endif
+--- 1172,1178 ----
+
+ gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
+ if( gui.vimContainer == NULL )
+! return FAIL;
+
+ PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
+ #endif
+***************
+*** 1195,1201 ****
+
+ gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
+ if( gui.vimTextArea == NULL)
+! return( FAIL );
+
+ /* TODO: use PtAddEventHandlers instead? */
+ /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+--- 1195,1201 ----
+
+ gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
+ if( gui.vimTextArea == NULL)
+! return FAIL;
+
+ /* TODO: use PtAddEventHandlers instead? */
+ /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+***************
+*** 1220,1230 ****
+ */
+ gui_ph_timer_cursor = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+ if( gui_ph_timer_cursor == NULL )
+! return( FAIL );
+
+ gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+ if( gui_ph_timer_timeout == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui_ph_timer_cursor, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_cursor, NULL);
+--- 1220,1230 ----
+ */
+ gui_ph_timer_cursor = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+ if( gui_ph_timer_cursor == NULL )
+! return FAIL;
+
+ gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+ if( gui_ph_timer_timeout == NULL )
+! return FAIL;
+
+ PtAddCallback( gui_ph_timer_cursor, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_cursor, NULL);
+***************
+*** 1239,1245 ****
+ gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
+ n, args );
+ if( gui.vimToolBarGroup == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
+ gui_ph_handle_menu_resize, NULL );
+--- 1239,1245 ----
+ gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
+ n, args );
+ if( gui.vimToolBarGroup == NULL )
+! return FAIL;
+
+ PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
+ gui_ph_handle_menu_resize, NULL );
+***************
+*** 1254,1260 ****
+ }
+ gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
+ if( gui.vimMenuBar == NULL )
+! return( FAIL );
+
+ # ifdef FEAT_TOOLBAR
+ n = 0;
+--- 1254,1260 ----
+ }
+ gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
+ if( gui.vimMenuBar == NULL )
+! return FAIL;
+
+ # ifdef FEAT_TOOLBAR
+ n = 0;
+***************
+*** 1273,1279 ****
+
+ gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
+ if( gui.vimToolBar == NULL )
+! return( FAIL );
+
+ /*
+ * Size for the toolbar is fetched in gui_mch_show_toolbar, after
+--- 1273,1279 ----
+
+ gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
+ if( gui.vimToolBar == NULL )
+! return FAIL;
+
+ /*
+ * Size for the toolbar is fetched in gui_mch_show_toolbar, after
+***************
+*** 1284,1296 ****
+
+ #endif
+
+! return( OK );
+ }
+
+ int
+ gui_mch_init_check(void)
+ {
+! return( (is_photon_available == TRUE) ? OK : FAIL );
+ }
+
+ int
+--- 1284,1296 ----
+
+ #endif
+
+! return OK;
+ }
+
+ int
+ gui_mch_init_check(void)
+ {
+! return (is_photon_available == TRUE) ? OK : FAIL;
+ }
+
+ int
+***************
+*** 1310,1316 ****
+ if (gui_win_x != -1 && gui_win_y != -1)
+ gui_mch_set_winpos(gui_win_x, gui_win_y);
+
+! return( (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL );
+ }
+
+ void
+--- 1310,1316 ----
+ if (gui_win_x != -1 && gui_win_y != -1)
+ gui_mch_set_winpos(gui_win_x, gui_win_y);
+
+! return (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL;
+ }
+
+ void
+***************
+*** 1336,1342 ****
+ exit_gui_mch_update( void *data )
+ {
+ *(int *)data = FALSE;
+! return( Pt_END );
+ }
+
+ void
+--- 1336,1342 ----
+ exit_gui_mch_update( void *data )
+ {
+ *(int *)data = FALSE;
+! return Pt_END;
+ }
+
+ void
+***************
+*** 1365,1374 ****
+ if( input_available() )
+ {
+ PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
+! return( OK );
+ }
+ else if( is_timeout == TRUE )
+! return( FAIL );
+ }
+ }
+
+--- 1365,1374 ----
+ if( input_available() )
+ {
+ PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
+! return OK;
+ }
+ else if( is_timeout == TRUE )
+! return FAIL;
+ }
+ }
+
+***************
+*** 1446,1454 ****
+ vim_free( default_path );
+
+ if( file.ret == Pt_FSDIALOG_BTN1 )
+! return( vim_strsave( file.path ) );
+ }
+! return( NULL );
+ }
+ #endif
+
+--- 1446,1454 ----
+ vim_free( default_path );
+
+ if( file.ret == Pt_FSDIALOG_BTN1 )
+! return vim_strsave(file.path);
+ }
+! return NULL;
+ }
+ #endif
+
+***************
+*** 1470,1476 ****
+
+ PtModalUnblock( modal_ctrl, (void *) button );
+
+! return( Pt_TRUE );
+ }
+
+ static int
+--- 1470,1476 ----
+
+ PtModalUnblock( modal_ctrl, (void *) button );
+
+! return Pt_TRUE;
+ }
+
+ static int
+***************
+*** 1478,1484 ****
+ {
+ if( info->reason_subtype == Pt_EDIT_ACTIVATE )
+ gui_ph_dialog_close( 1, data );
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 1478,1484 ----
+ {
+ if( info->reason_subtype == Pt_EDIT_ACTIVATE )
+ gui_ph_dialog_close( 1, data );
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 1490,1498 ****
+ if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
+ {
+ gui_ph_dialog_close( 0, data );
+! return( Pt_CONSUME );
+ }
+! return( Pt_PROCESS );
+ }
+
+ int
+--- 1490,1498 ----
+ if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
+ {
+ gui_ph_dialog_close( 0, data );
+! return Pt_CONSUME;
+ }
+! return Pt_PROCESS;
+ }
+
+ int
+***************
+*** 1519,1525 ****
+ button_count = len = i = 0;
+
+ if( buttons == NULL || *buttons == NUL )
+! return( -1 );
+
+ /* There is one less separator than buttons, so bump up the button count */
+ button_count = 1;
+--- 1519,1525 ----
+ button_count = len = i = 0;
+
+ if( buttons == NULL || *buttons == NUL )
+! return -1;
+
+ /* There is one less separator than buttons, so bump up the button count */
+ button_count = 1;
+***************
+*** 1637,1643 ****
+ vim_free( button_array );
+ vim_free( buttons_copy );
+
+! return( dialog_result );
+ }
+ #endif
+ /****************************************************************************/
+--- 1637,1643 ----
+ vim_free( button_array );
+ vim_free( buttons_copy );
+
+! return dialog_result;
+ }
+ #endif
+ /****************************************************************************/
+***************
+*** 1653,1659 ****
+ *x = pos->x;
+ *y = pos->y;
+
+! return( OK );
+ }
+
+ void
+--- 1653,1659 ----
+ *x = pos->x;
+ *y = pos->y;
+
+! return OK;
+ }
+
+ void
+***************
+*** 1975,1985 ****
+ hex_digit(int c)
+ {
+ if (VIM_ISDIGIT(c))
+! return( c - '0' );
+ c = TOLOWER_ASC(c);
+ if (c >= 'a' && c <= 'f')
+! return( c - 'a' + 10 );
+! return( -1000 );
+ }
+
+
+--- 1975,1985 ----
+ hex_digit(int c)
+ {
+ if (VIM_ISDIGIT(c))
+! return c - '0';
+ c = TOLOWER_ASC(c);
+ if (c >= 'a' && c <= 'f')
+! return c - 'a' + 10;
+! return -1000;
+ }
+
+
+***************
+*** 2065,2077 ****
+ b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
+ if( r < 0 || g < 0 || b < 0 )
+ return INVALCOLOR;
+! return( RGB( r, g, b ) );
+ }
+
+ for( i = 0; i < ARRAY_LENGTH( table ); i++ )
+ {
+ if( STRICMP( name, table[i].name ) == 0 )
+! return( table[i].colour );
+ }
+
+ /*
+--- 2065,2077 ----
+ b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
+ if( r < 0 || g < 0 || b < 0 )
+ return INVALCOLOR;
+! return RGB(r, g, b);
+ }
+
+ for( i = 0; i < ARRAY_LENGTH( table ); i++ )
+ {
+ if( STRICMP( name, table[i].name ) == 0 )
+! return table[i].colour;
+ }
+
+ /*
+***************
+*** 2115,2121 ****
+ if (STRICMP(color, name) == 0)
+ {
+ fclose(fd);
+! return( (guicolor_T) RGB(r,g,b) );
+ }
+ }
+
+--- 2115,2121 ----
+ if (STRICMP(color, name) == 0)
+ {
+ fclose(fd);
+! return (guicolor_T)RGB(r, g, b);
+ }
+ }
+
+***************
+*** 2451,2458 ****
+ for (i = 0; special_keys[i].key_sym != 0; i++)
+ if (name[0] == special_keys[i].vim_code0 &&
+ name[1] == special_keys[i].vim_code1)
+! return( OK );
+! return( FAIL );
+ }
+
+ /****************************************************************************/
+--- 2451,2458 ----
+ for (i = 0; special_keys[i].key_sym != 0; i++)
+ if (name[0] == special_keys[i].vim_code0 &&
+ name[1] == special_keys[i].vim_code1)
+! return OK;
+! return FAIL;
+ }
+
+ /****************************************************************************/
+***************
+*** 2512,2518 ****
+
+ temp_phi = &external_icon;
+ }
+! return( temp_phi );
+ }
+
+ /*
+--- 2512,2518 ----
+
+ temp_phi = &external_icon;
+ }
+! return temp_phi;
+ }
+
+ /*
+***************
+*** 2541,2556 ****
+ icon = gui_ph_toolbar_load_icon( full_pathname );
+
+ if( icon != NULL )
+! return( icon );
+ }
+
+ if( menu->iconidx >= 0 &&
+ ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
+ {
+! return( gui_ph_toolbar_images[ menu->iconidx ] );
+ }
+
+! return( NULL );
+ }
+ #endif
+
+--- 2541,2556 ----
+ icon = gui_ph_toolbar_load_icon( full_pathname );
+
+ if( icon != NULL )
+! return icon;
+ }
+
+ if( menu->iconidx >= 0 &&
+ ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
+ {
+! return gui_ph_toolbar_images[menu->iconidx];
+ }
+
+! return NULL;
+ }
+ #endif
+
+***************
+*** 2895,2905 ****
+ * at least has the bits we're checking for */
+ if( font_size == info.size &&
+ style == (info.style & style) )
+! return( (GuiFont) font_tag );
+ }
+ vim_free( font_tag );
+ }
+! return( NULL );
+ }
+
+ /*
+--- 2895,2905 ----
+ * at least has the bits we're checking for */
+ if( font_size == info.size &&
+ style == (info.style & style) )
+! return (GuiFont)font_tag;
+ }
+ vim_free( font_tag );
+ }
+! return NULL;
+ }
+
+ /*
+***************
+*** 2957,2965 ****
+ }
+ }
+ }
+! return( TRUE );
+ }
+! return( FALSE );
+ }
+
+ int
+--- 2957,2965 ----
+ }
+ }
+ }
+! return TRUE;
+ }
+! return FALSE;
+ }
+
+ int
+***************
+*** 2985,2991 ****
+ "pcterm12", -1, PHFONT_FIXED, NULL );
+
+ if( font_tag == NULL )
+! return( FAIL );
+
+ gui_mch_free_font( gui.norm_font );
+ gui.norm_font = font_tag;
+--- 2985,2991 ----
+ "pcterm12", -1, PHFONT_FIXED, NULL );
+
+ if( font_tag == NULL )
+! return FAIL;
+
+ gui_mch_free_font( gui.norm_font );
+ gui.norm_font = font_tag;
+***************
+*** 2997,3009 ****
+ {
+ if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+ &font_size ) == FALSE )
+! return( FAIL );
+
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+ if( font_tag == NULL )
+ {
+ vim_free( font_name );
+! return( FAIL );
+ }
+
+ gui_mch_free_font( gui.norm_font );
+--- 2997,3009 ----
+ {
+ if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+ &font_size ) == FALSE )
+! return FAIL;
+
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+ if( font_tag == NULL )
+ {
+ vim_free( font_name );
+! return FAIL;
+ }
+
+ gui_mch_free_font( gui.norm_font );
+***************
+*** 3026,3032 ****
+ gui.char_ascent = - extent.ul.y;
+
+ vim_free( font_name );
+! return( OK );
+ }
+
+ /*
+--- 3026,3032 ----
+ gui.char_ascent = - extent.ul.y;
+
+ vim_free( font_name );
+! return OK;
+ }
+
+ /*
+***************
+*** 3042,3048 ****
+ gui.char_height = - info.ascender + info.descender + p_linespace;
+ gui.char_ascent = - info.ascender + p_linespace / 2;
+
+! return( OK );
+ }
+
+ GuiFont
+--- 3042,3048 ----
+ gui.char_height = - info.ascender + info.descender + p_linespace;
+ gui.char_ascent = - info.ascender + p_linespace / 2;
+
+! return OK;
+ }
+
+ GuiFont
+***************
+*** 3060,3072 ****
+ vim_free( font_name );
+
+ if( font_tag != NULL )
+! return( (GuiFont) font_tag );
+ }
+
+ if( report_error )
+ EMSG2(e_font, vim_font_name );
+
+! return( FAIL );
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 3060,3072 ----
+ vim_free( font_name );
+
+ if( font_tag != NULL )
+! return (GuiFont)font_tag;
+ }
+
+ if( report_error )
+ EMSG2(e_font, vim_font_name );
+
+! return FAIL;
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+*** ../vim-7.3.261/src/version.c 2011-07-27 13:59:12.000000000 +0200
+--- src/version.c 2011-07-27 14:08:08.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 262,
+ /**/
+
+--
+You know you use Vim too much when you have this alias in your
+~/.bashrc file: alias :e=/bin/vim (Eljay Love-Jensen)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.263
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.263
+Problem: Perl and Tcl have a few code style problems.
+Solution: Clean it up. (Elias Diem)
+Files: src/if_perl.xs, src/if_tcl.c
+
+
+*** ../vim-7.3.262/src/if_perl.xs 2010-10-23 14:02:48.000000000 +0200
+--- src/if_perl.xs 2011-07-27 14:11:03.000000000 +0200
+***************
+*** 755,761 ****
+ #ifdef HAVE_SANDBOX
+ if (sandbox)
+ {
+! safe = perl_get_sv( "VIM::safe", FALSE );
+ # ifndef MAKE_TEST /* avoid a warning for unreachable code */
+ if (safe == NULL || !SvTRUE(safe))
+ EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
+--- 755,761 ----
+ #ifdef HAVE_SANDBOX
+ if (sandbox)
+ {
+! safe = perl_get_sv("VIM::safe", FALSE);
+ # ifndef MAKE_TEST /* avoid a warning for unreachable code */
+ if (safe == NULL || !SvTRUE(safe))
+ EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
+***************
+*** 1108,1114 ****
+ VIWIN win
+
+ PPCODE:
+! if(items == 1)
+ {
+ EXTEND(sp, 2);
+ if (!win_valid(win))
+--- 1108,1114 ----
+ VIWIN win
+
+ PPCODE:
+! if (items == 1)
+ {
+ EXTEND(sp, 2);
+ if (!win_valid(win))
+***************
+*** 1116,1122 ****
+ PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
+ PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
+ }
+! else if(items == 3)
+ {
+ int lnum, col;
+
+--- 1116,1122 ----
+ PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
+ PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
+ }
+! else if (items == 3)
+ {
+ int lnum, col;
+
+***************
+*** 1249,1257 ****
+ {
+ lnum = SvIV(ST(1));
+ count = 1 + SvIV(ST(2)) - lnum;
+! if(count == 0)
+ count = 1;
+! if(count < 0)
+ {
+ lnum -= count;
+ count = -count;
+--- 1249,1257 ----
+ {
+ lnum = SvIV(ST(1));
+ count = 1 + SvIV(ST(2)) - lnum;
+! if (count == 0)
+ count = 1;
+! if (count < 0)
+ {
+ lnum -= count;
+ count = -count;
+*** ../vim-7.3.262/src/if_tcl.c 2010-12-17 20:23:56.000000000 +0100
+--- src/if_tcl.c 2011-07-27 14:11:03.000000000 +0200
+***************
+*** 1884,1897 ****
+ {
+ int newerr = OK;
+
+! if (error == TCL_EXIT )
+ {
+ int retval;
+ char buf[50];
+ Tcl_Obj *robj;
+
+ robj = Tcl_GetObjResult(tclinfo.interp);
+! if( Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK )
+ {
+ EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
+ newerr = FAIL;
+--- 1884,1897 ----
+ {
+ int newerr = OK;
+
+! if (error == TCL_EXIT)
+ {
+ int retval;
+ char buf[50];
+ Tcl_Obj *robj;
+
+ robj = Tcl_GetObjResult(tclinfo.interp);
+! if (Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK)
+ {
+ EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
+ newerr = FAIL;
+***************
+*** 1900,1906 ****
+ {
+ sprintf(buf, _("E572: exit code %d"), retval);
+ tclerrmsg(buf);
+! if (retval == 0 )
+ {
+ did_emsg = 0;
+ newerr = OK;
+--- 1900,1906 ----
+ {
+ sprintf(buf, _("E572: exit code %d"), retval);
+ tclerrmsg(buf);
+! if (retval == 0)
+ {
+ did_emsg = 0;
+ newerr = OK;
+*** ../vim-7.3.262/src/version.c 2011-07-27 14:09:05.000000000 +0200
+--- src/version.c 2011-07-27 14:12:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 263,
+ /**/
+
+--
+DEAD PERSON: I don't want to go in the cart!
+CUSTOMER: Oh, don't be such a baby.
+MORTICIAN: I can't take him...
+DEAD PERSON: I feel fine!
+CUSTOMER: Oh, do us a favor...
+MORTICIAN: I can't.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.264
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.264
+Problem: When the current directory name contains wildcard characters, such
+ as "foo[with]bar", the tags file can't be found. (Jeremy
+ Erickson)
+Solution: When searching for matching files also match without expanding
+ wildcards. This is a bit of a hack.
+Files: src/vim.h, src/misc1.c, src/misc2.c
+
+
+*** ../vim-7.3.263/src/vim.h 2011-07-20 15:04:52.000000000 +0200
+--- src/vim.h 2011-07-27 16:21:38.000000000 +0200
+***************
+*** 816,821 ****
+--- 816,822 ----
+ #define EW_PATH 0x80 /* search in 'path' too */
+ #define EW_ICASE 0x100 /* ignore case */
+ #define EW_NOERROR 0x200 /* no error for bad regexp */
++ #define EW_NOTWILD 0x400 /* add match with literal name if exists */
+ /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
+ * is used when executing commands and EW_SILENT for interactive expanding. */
+
+*** ../vim-7.3.263/src/misc1.c 2011-07-20 15:04:52.000000000 +0200
+--- src/misc1.c 2011-07-27 17:24:39.000000000 +0200
+***************
+*** 9119,9125 ****
+ * all entries found with "matchname". */
+ if ((p[0] != '.' || starts_with_dot)
+ && (matchname == NULL
+! || vim_regexec(®match, p, (colnr_T)0)))
+ {
+ #ifdef WIN3264
+ STRCPY(s, p);
+--- 9119,9127 ----
+ * all entries found with "matchname". */
+ if ((p[0] != '.' || starts_with_dot)
+ && (matchname == NULL
+! || vim_regexec(®match, p, (colnr_T)0)
+! || ((flags & EW_NOTWILD)
+! && fnamencmp(path + (s - buf), p, e - s) == 0)))
+ {
+ #ifdef WIN3264
+ STRCPY(s, p);
+***************
+*** 9323,9329 ****
+ e = p;
+ *e = NUL;
+
+! /* now we have one wildcard component between "s" and "e" */
+ /* Remove backslashes between "wildoff" and the start of the wildcard
+ * component. */
+ for (p = buf + wildoff; p < s; ++p)
+--- 9325,9331 ----
+ e = p;
+ *e = NUL;
+
+! /* Now we have one wildcard component between "s" and "e". */
+ /* Remove backslashes between "wildoff" and the start of the wildcard
+ * component. */
+ for (p = buf + wildoff; p < s; ++p)
+***************
+*** 9390,9396 ****
+ if (dp == NULL)
+ break;
+ if ((dp->d_name[0] != '.' || starts_with_dot)
+! && vim_regexec(®match, (char_u *)dp->d_name, (colnr_T)0))
+ {
+ STRCPY(s, dp->d_name);
+ len = STRLEN(buf);
+--- 9392,9400 ----
+ if (dp == NULL)
+ break;
+ if ((dp->d_name[0] != '.' || starts_with_dot)
+! && (vim_regexec(®match, (char_u *)dp->d_name, (colnr_T)0)
+! || ((flags & EW_NOTWILD)
+! && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
+ {
+ STRCPY(s, dp->d_name);
+ len = STRLEN(buf);
+*** ../vim-7.3.263/src/misc2.c 2011-07-07 17:15:29.000000000 +0200
+--- src/misc2.c 2011-07-27 17:21:10.000000000 +0200
+***************
+*** 4653,4661 ****
+ {
+ if (r_ptr[0] == '\\' && r_ptr[1] == ';')
+ {
+! /* overwrite the escape char,
+! * use STRLEN(r_ptr) to move the trailing '\0'
+! */
+ STRMOVE(r_ptr, r_ptr + 1);
+ r_ptr++;
+ }
+--- 4653,4660 ----
+ {
+ if (r_ptr[0] == '\\' && r_ptr[1] == ';')
+ {
+! /* Overwrite the escape char,
+! * use STRLEN(r_ptr) to move the trailing '\0'. */
+ STRMOVE(r_ptr, r_ptr + 1);
+ r_ptr++;
+ }
+***************
+*** 4914,4923 ****
+ stackp->ffs_filearray_size = 0;
+ }
+ else
+ expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
+ &stackp->ffs_filearray_size,
+ &stackp->ffs_filearray,
+! EW_DIR|EW_ADDSLASH|EW_SILENT);
+
+ stackp->ffs_filearray_cur = 0;
+ stackp->ffs_stage = 0;
+--- 4913,4925 ----
+ stackp->ffs_filearray_size = 0;
+ }
+ else
++ /* Add EW_NOTWILD because the expanded path may contain
++ * wildcard characters that are to be taken literally.
++ * This is a bit of a hack. */
+ expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
+ &stackp->ffs_filearray_size,
+ &stackp->ffs_filearray,
+! EW_DIR|EW_ADDSLASH|EW_SILENT|EW_NOTWILD);
+
+ stackp->ffs_filearray_cur = 0;
+ stackp->ffs_stage = 0;
+*** ../vim-7.3.263/src/version.c 2011-07-27 14:15:41.000000000 +0200
+--- src/version.c 2011-07-27 17:25:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 264,
+ /**/
+
+--
+CUSTOMER: You're not fooling anyone y'know. Look, isn't there something
+ you can do?
+DEAD PERSON: I feel happy... I feel happy.
+ [whop]
+CUSTOMER: Ah, thanks very much.
+MORTICIAN: Not at all. See you on Thursday.
+CUSTOMER: Right.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.265
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.265
+Problem: When storing a pattern in search history there is no proper check
+ for the separator character.
+Solution: Pass the separator character to in_history(). (Muraoka Taro)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.264/src/ex_getln.c 2011-07-07 16:44:33.000000000 +0200
+--- src/ex_getln.c 2011-07-27 17:50:35.000000000 +0200
+***************
+*** 67,73 ****
+
+ static int hist_char2type __ARGS((int c));
+
+! static int in_history __ARGS((int, char_u *, int));
+ # ifdef FEAT_EVAL
+ static int calc_hist_idx __ARGS((int histype, int num));
+ # endif
+--- 67,73 ----
+
+ static int hist_char2type __ARGS((int c));
+
+! static int in_history __ARGS((int, char_u *, int, int));
+ # ifdef FEAT_EVAL
+ static int calc_hist_idx __ARGS((int histype, int num));
+ # endif
+***************
+*** 5289,5301 ****
+ * If 'move_to_front' is TRUE, matching entry is moved to end of history.
+ */
+ static int
+! in_history(type, str, move_to_front)
+ int type;
+ char_u *str;
+ int move_to_front; /* Move the entry to the front if it exists */
+ {
+ int i;
+ int last_i = -1;
+
+ if (hisidx[type] < 0)
+ return FALSE;
+--- 5289,5303 ----
+ * If 'move_to_front' is TRUE, matching entry is moved to end of history.
+ */
+ static int
+! in_history(type, str, move_to_front, sep)
+ int type;
+ char_u *str;
+ int move_to_front; /* Move the entry to the front if it exists */
++ int sep;
+ {
+ int i;
+ int last_i = -1;
++ char_u *p;
+
+ if (hisidx[type] < 0)
+ return FALSE;
+***************
+*** 5304,5310 ****
+ {
+ if (history[type][i].hisstr == NULL)
+ return FALSE;
+! if (STRCMP(str, history[type][i].hisstr) == 0)
+ {
+ if (!move_to_front)
+ return TRUE;
+--- 5306,5317 ----
+ {
+ if (history[type][i].hisstr == NULL)
+ return FALSE;
+!
+! /* For search history, check that the separator character matches as
+! * well. */
+! p = history[type][i].hisstr;
+! if (STRCMP(str, p) == 0
+! && (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
+ {
+ if (!move_to_front)
+ return TRUE;
+***************
+*** 5398,5404 ****
+ }
+ last_maptick = -1;
+ }
+! if (!in_history(histype, new_entry, TRUE))
+ {
+ if (++hisidx[histype] == hislen)
+ hisidx[histype] = 0;
+--- 5405,5411 ----
+ }
+ last_maptick = -1;
+ }
+! if (!in_history(histype, new_entry, TRUE, sep))
+ {
+ if (++hisidx[histype] == hislen)
+ hisidx[histype] = 0;
+***************
+*** 5977,5983 ****
+ if (val != NULL && *val != NUL)
+ {
+ if (!in_history(type, val + (type == HIST_SEARCH),
+! viminfo_add_at_front))
+ {
+ /* Need to re-allocate to append the separator byte. */
+ len = STRLEN(val);
+--- 5984,5990 ----
+ if (val != NULL && *val != NUL)
+ {
+ if (!in_history(type, val + (type == HIST_SEARCH),
+! viminfo_add_at_front, *val))
+ {
+ /* Need to re-allocate to append the separator byte. */
+ len = STRLEN(val);
+*** ../vim-7.3.264/src/version.c 2011-07-27 17:31:42.000000000 +0200
+--- src/version.c 2011-07-27 17:58:22.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 265,
+ /**/
+
+--
+ [clop clop]
+MORTICIAN: Who's that then?
+CUSTOMER: I don't know.
+MORTICIAN: Must be a king.
+CUSTOMER: Why?
+MORTICIAN: He hasn't got shit all over him.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.266
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.266
+Problem: In Gvim with iBus typing space in Insert mode doesn't work.
+Solution: Clear xim_expected_char after checking it.
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.265/src/mbyte.c 2011-07-15 21:16:54.000000000 +0200
+--- src/mbyte.c 2011-07-27 18:21:13.000000000 +0200
+***************
+*** 5170,5175 ****
+--- 5170,5179 ----
+ /* We had a keypad key, and XIM tried to thieve it */
+ return FALSE;
+
++ /* This is supposed to fix a problem with iBus, that space
++ * characters don't work in input mode. */
++ xim_expected_char = NUL;
++
+ /* Normal processing */
+ return imresult;
+ }
+*** ../vim-7.3.265/src/version.c 2011-07-27 17:58:42.000000000 +0200
+--- src/version.c 2011-07-27 18:23:00.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 266,
+ /**/
+
+--
+ [clop clop]
+ARTHUR: Old woman!
+DENNIS: Man!
+ARTHUR: Man, sorry. What knight lives in that castle over there?
+DENNIS: I'm thirty seven.
+ARTHUR: What?
+DENNIS: I'm thirty seven -- I'm not old!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.267
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.267
+Problem: Ruby on Mac OS X 10.7 may crash.
+Solution: Avoid alloc(0). (Bjorn Winckler)
+Files: src/if_ruby.c
+
+
+*** ../vim-7.3.266/src/if_ruby.c 2011-01-17 19:53:20.000000000 +0100
+--- src/if_ruby.c 2011-08-04 18:57:43.000000000 +0200
+***************
+*** 761,771 ****
+ char *buff, *p;
+
+ str = rb_obj_as_string(str);
+! buff = ALLOCA_N(char, RSTRING_LEN(str));
+! strcpy(buff, RSTRING_PTR(str));
+! p = strchr(buff, '\n');
+! if (p) *p = '\0';
+! MSG(buff);
+ return Qnil;
+ }
+
+--- 761,779 ----
+ char *buff, *p;
+
+ str = rb_obj_as_string(str);
+! if (RSTRING_LEN(str) > 0)
+! {
+! /* Only do this when the string isn't empty, alloc(0) causes trouble. */
+! buff = ALLOCA_N(char, RSTRING_LEN(str));
+! strcpy(buff, RSTRING_PTR(str));
+! p = strchr(buff, '\n');
+! if (p) *p = '\0';
+! MSG(buff);
+! }
+! else
+! {
+! MSG("");
+! }
+ return Qnil;
+ }
+
+*** ../vim-7.3.266/src/version.c 2011-07-27 18:25:40.000000000 +0200
+--- src/version.c 2011-08-04 19:07:45.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 267,
+ /**/
+
+--
+There are 10 kinds of people: Those who understand binary and those who don't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.268
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.268
+Problem: Vim freezes when executing an external command with zsh.
+Solution: Use O_NOCTTY both in the master and slave. (Bjorn Winckler)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.267/src/os_unix.c 2011-07-07 16:20:45.000000000 +0200
+--- src/os_unix.c 2011-08-04 19:06:14.000000000 +0200
+***************
+*** 3889,3899 ****
+ if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
+ {
+ pty_master_fd = OpenPTY(&tty_name); /* open pty */
+! if (pty_master_fd >= 0 && ((pty_slave_fd =
+! open(tty_name, O_RDWR | O_EXTRA, 0)) < 0))
+ {
+! close(pty_master_fd);
+! pty_master_fd = -1;
+ }
+ }
+ /*
+--- 3889,3909 ----
+ if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
+ {
+ pty_master_fd = OpenPTY(&tty_name); /* open pty */
+! if (pty_master_fd >= 0)
+ {
+! /* Leaving out O_NOCTTY may lead to waitpid() always returning
+! * 0 on Mac OS X 10.7 thereby causing freezes. Let's assume
+! * adding O_NOCTTY always works when defined. */
+! #ifdef O_NOCTTY
+! pty_slave_fd = open(tty_name, O_RDWR | O_NOCTTY | O_EXTRA, 0);
+! #else
+! pty_slave_fd = open(tty_name, O_RDWR | O_EXTRA, 0);
+! #endif
+! if (pty_slave_fd < 0)
+! {
+! close(pty_master_fd);
+! pty_master_fd = -1;
+! }
+ }
+ }
+ /*
+*** ../vim-7.3.267/src/version.c 2011-08-04 19:34:55.000000000 +0200
+--- src/version.c 2011-08-04 19:36:00.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 268,
+ /**/
+
+--
+Mental Floss prevents moral decay!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.269
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.269
+Problem: 'shellcmdflag' only works with one flag.
+Solution: Split into multiple arguments. (Gary Johnson)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.268/src/os_unix.c 2011-08-04 19:36:47.000000000 +0200
+--- src/os_unix.c 2011-08-04 20:27:13.000000000 +0200
+***************
+*** 3795,3802 ****
+--- 3795,3804 ----
+ int retval = -1;
+ char **argv = NULL;
+ int argc;
++ char_u *p_shcf_copy = NULL;
+ int i;
+ char_u *p;
++ char_u *s;
+ int inquote;
+ int pty_master_fd = -1; /* for pty's */
+ # ifdef FEAT_GUI
+***************
+*** 3855,3860 ****
+--- 3857,3875 ----
+ }
+ if (argv == NULL)
+ {
++ /*
++ * Account for possible multiple args in p_shcf.
++ */
++ p = p_shcf;
++ for (;;)
++ {
++ p = skiptowhite(p);
++ if (*p == NUL)
++ break;
++ ++argc;
++ p = skipwhite(p);
++ }
++
+ argv = (char **)alloc((unsigned)((argc + 4) * sizeof(char *)));
+ if (argv == NULL) /* out of memory */
+ goto error;
+***************
+*** 3864,3870 ****
+ {
+ if (extra_shell_arg != NULL)
+ argv[argc++] = (char *)extra_shell_arg;
+! argv[argc++] = (char *)p_shcf;
+ argv[argc++] = (char *)cmd;
+ }
+ argv[argc] = NULL;
+--- 3879,3901 ----
+ {
+ if (extra_shell_arg != NULL)
+ argv[argc++] = (char *)extra_shell_arg;
+!
+! /* Break 'shellcmdflag' into white separated parts. This doesn't
+! * handle quoted strings, they are very unlikely to appear. */
+! p_shcf_copy = alloc((unsigned)STRLEN(p_shcf) + 1);
+! if (p_shcf_copy == NULL) /* out of memory */
+! goto error;
+! s = p_shcf_copy;
+! p = p_shcf;
+! while (*p != NUL)
+! {
+! argv[argc++] = (char *)s;
+! while (*p && *p != ' ' && *p != TAB)
+! *s++ = *p++;
+! *s++ = NUL;
+! p = skipwhite(p);
+! }
+!
+ argv[argc++] = (char *)cmd;
+ }
+ argv[argc] = NULL;
+***************
+*** 4677,4682 ****
+--- 4708,4714 ----
+ }
+ }
+ vim_free(argv);
++ vim_free(p_shcf_copy);
+
+ error:
+ if (!did_settmode)
+*** ../vim-7.3.268/src/version.c 2011-08-04 19:36:47.000000000 +0200
+--- src/version.c 2011-08-04 20:30:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 269,
+ /**/
+
+--
+Be nice to your kids... they'll be the ones choosing your nursing home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.270
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.270
+Problem: Illegal memory access.
+Solution: Swap conditions. (Dominique Pelle)
+Files: src/ops.c
+
+
+*** ../vim-7.3.269/src/ops.c 2011-07-15 17:51:30.000000000 +0200
+--- src/ops.c 2011-08-10 12:07:22.000000000 +0200
+***************
+*** 6311,6317 ****
+ *wc += words;
+
+ /* Add eol_size if the end of line was reached before hitting limit. */
+! if (line[i] == NUL && i < limit)
+ {
+ i += eol_size;
+ chars += eol_size;
+--- 6311,6317 ----
+ *wc += words;
+
+ /* Add eol_size if the end of line was reached before hitting limit. */
+! if (i < limit && line[i] == NUL)
+ {
+ i += eol_size;
+ chars += eol_size;
+*** ../vim-7.3.269/src/version.c 2011-08-04 20:31:50.000000000 +0200
+--- src/version.c 2011-08-10 12:09:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 270,
+ /**/
+
+--
+An indication you must be a manager:
+You give constructive feedback to your dog.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.271
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.271
+Problem: Code not following Vim coding style.
+Solution: Fix the style. (Elias Diem)
+Files: src/gui_photon.c
+
+
+*** ../vim-7.3.270/src/gui_photon.c 2011-07-27 14:09:05.000000000 +0200
+--- src/gui_photon.c 2011-08-10 12:18:35.000000000 +0200
+***************
+*** 358,378 ****
+ }
+
+ static int
+! gui_ph_handle_window_cb( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PhWindowEvent_t *we = info->cbdata;
+ ushort_t *width, *height;
+
+! switch( we->event_f ) {
+ case Ph_WM_CLOSE:
+ gui_shell_closed();
+ break;
+
+ case Ph_WM_FOCUS:
+ /* Just in case it's hidden and needs to be shown */
+! gui_mch_mousehide( MOUSE_SHOW );
+
+! if( we->event_state == Ph_WM_EVSTATE_FOCUS )
+ {
+ gui_focus_change(TRUE);
+ gui_mch_start_blink();
+--- 358,378 ----
+ }
+
+ static int
+! gui_ph_handle_window_cb(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PhWindowEvent_t *we = info->cbdata;
+ ushort_t *width, *height;
+
+! switch (we->event_f) {
+ case Ph_WM_CLOSE:
+ gui_shell_closed();
+ break;
+
+ case Ph_WM_FOCUS:
+ /* Just in case it's hidden and needs to be shown */
+! gui_mch_mousehide(MOUSE_SHOW);
+
+! if (we->event_state == Ph_WM_EVSTATE_FOCUS)
+ {
+ gui_focus_change(TRUE);
+ gui_mch_start_blink();
+***************
+*** 385,401 ****
+ break;
+
+ case Ph_WM_RESIZE:
+! PtGetResource( gui.vimWindow, Pt_ARG_WIDTH, &width, 0 );
+! PtGetResource( gui.vimWindow, Pt_ARG_HEIGHT, &height, 0 );
+ #ifdef USE_PANEL_GROUP
+ width -= (pg_margin_left + pg_margin_right);
+ height -= (pg_margin_top + pg_margin_bottom);
+ #endif
+! gui_resize_shell( *width, *height );
+! gui_set_shellsize( FALSE, FALSE, RESIZE_BOTH );
+ is_ignore_draw = FALSE;
+! PtEndFlux( gui.vimContainer );
+! PtContainerRelease( gui.vimContainer );
+ break;
+
+ default:
+--- 385,401 ----
+ break;
+
+ case Ph_WM_RESIZE:
+! PtGetResource(gui.vimWindow, Pt_ARG_WIDTH, &width, 0);
+! PtGetResource(gui.vimWindow, Pt_ARG_HEIGHT, &height, 0);
+ #ifdef USE_PANEL_GROUP
+ width -= (pg_margin_left + pg_margin_right);
+ height -= (pg_margin_top + pg_margin_bottom);
+ #endif
+! gui_resize_shell(*width, *height);
+! gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
+ is_ignore_draw = FALSE;
+! PtEndFlux(gui.vimContainer);
+! PtContainerRelease(gui.vimContainer);
+ break;
+
+ default:
+***************
+*** 406,412 ****
+ }
+
+ static int
+! gui_ph_handle_scrollbar( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PtScrollbarCallback_t *scroll;
+ scrollbar_T *sb;
+--- 406,412 ----
+ }
+
+ static int
+! gui_ph_handle_scrollbar(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PtScrollbarCallback_t *scroll;
+ scrollbar_T *sb;
+***************
+*** 415,424 ****
+ scroll = info->cbdata;
+
+ sb = (scrollbar_T *) data;
+! if( sb != NULL )
+ {
+ value = scroll->position;
+! switch( scroll->action )
+ {
+ case Pt_SCROLL_DRAGGED:
+ dragging = TRUE;
+--- 415,424 ----
+ scroll = info->cbdata;
+
+ sb = (scrollbar_T *) data;
+! if (sb != NULL)
+ {
+ value = scroll->position;
+! switch (scroll->action)
+ {
+ case Pt_SCROLL_DRAGGED:
+ dragging = TRUE;
+***************
+*** 436,532 ****
+ }
+
+ static int
+! gui_ph_handle_keyboard( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PhKeyEvent_t *key;
+ unsigned char string[6];
+ int len, i;
+ int ch, modifiers;
+
+! key = PhGetData( info->event );
+
+ ch = modifiers = len = 0;
+
+! if( p_mh )
+! gui_mch_mousehide( MOUSE_HIDE );
+
+ /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+! if( key->key_flags & Pk_KF_Compose )
+ {
+ return Pt_CONTINUE;
+ }
+
+! if( (key->key_flags & Pk_KF_Cap_Valid) &&
+! PkIsKeyDown( key->key_flags ) )
+ {
+ #ifdef FEAT_MENU
+ /*
+ * Only show the menu if the Alt key is down, and the Shift & Ctrl
+ * keys aren't down, as well as the other conditions
+ */
+! if( ( ( key->key_mods & Pk_KM_Alt ) &&
+! !( key->key_mods & Pk_KM_Shift ) &&
+! !( key->key_mods & Pk_KM_Ctrl ) ) &&
+ gui.menu_is_active &&
+! ( *p_wak == 'y' ||
+! ( *p_wak == 'm' &&
+! gui_is_menu_shortcut( key->key_cap ) ) ) )
+ {
+ /* Fallthrough and let photon look for the hotkey */
+ return Pt_CONTINUE;
+ }
+ #endif
+
+! for( i = 0; special_keys[i].key_sym != 0; i++ )
+ {
+! if( special_keys[i].key_sym == key->key_cap )
+ {
+ len = 0;
+! if( special_keys[i].vim_code1 == NUL )
+ ch = special_keys[i].vim_code0;
+ else
+ {
+ /* Detect if a keypad number key has been pressed
+ * and change the key if Num Lock is on */
+! if( key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
+! && ( key->key_mods & Pk_KM_Num_Lock ) )
+ {
+ /* FIXME: For now, just map the key to a ascii value
+ * (see <photon/PkKeyDef.h>) */
+ ch = key->key_cap - 0xf080;
+ }
+ else
+! ch = TO_SPECIAL( special_keys[i].vim_code0,
+! special_keys[i].vim_code1 );
+ }
+ break;
+ }
+ }
+
+! if( key->key_mods & Pk_KM_Ctrl )
+ modifiers |= MOD_MASK_CTRL;
+! if( key->key_mods & Pk_KM_Alt )
+ modifiers |= MOD_MASK_ALT;
+! if( key->key_mods & Pk_KM_Shift )
+ modifiers |= MOD_MASK_SHIFT;
+
+ /* Is this not a special key? */
+! if( special_keys[i].key_sym == 0 )
+ {
+! ch = PhTo8859_1( key );
+! if( ch == -1
+ #ifdef FEAT_MBYTE
+! || ( enc_utf8 && ch > 127 )
+ #endif
+ )
+ {
+ #ifdef FEAT_MBYTE
+! len = PhKeyToMb( string, key );
+! if( len > 0 )
+ {
+ static char buf[6];
+ int src_taken, dst_made;
+! if( enc_utf8 != TRUE )
+ {
+ PxTranslateFromUTF(
+ charset_translate,
+--- 436,532 ----
+ }
+
+ static int
+! gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PhKeyEvent_t *key;
+ unsigned char string[6];
+ int len, i;
+ int ch, modifiers;
+
+! key = PhGetData(info->event);
+
+ ch = modifiers = len = 0;
+
+! if (p_mh)
+! gui_mch_mousehide(MOUSE_HIDE);
+
+ /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+! if (key->key_flags & Pk_KF_Compose)
+ {
+ return Pt_CONTINUE;
+ }
+
+! if ((key->key_flags & Pk_KF_Cap_Valid) &&
+! PkIsKeyDown(key->key_flags))
+ {
+ #ifdef FEAT_MENU
+ /*
+ * Only show the menu if the Alt key is down, and the Shift & Ctrl
+ * keys aren't down, as well as the other conditions
+ */
+! if (((key->key_mods & Pk_KM_Alt) &&
+! !(key->key_mods & Pk_KM_Shift) &&
+! !(key->key_mods & Pk_KM_Ctrl)) &&
+ gui.menu_is_active &&
+! (*p_wak == 'y' ||
+! (*p_wak == 'm' &&
+! gui_is_menu_shortcut(key->key_cap))))
+ {
+ /* Fallthrough and let photon look for the hotkey */
+ return Pt_CONTINUE;
+ }
+ #endif
+
+! for(i = 0; special_keys[i].key_sym != 0; i++)
+ {
+! if (special_keys[i].key_sym == key->key_cap)
+ {
+ len = 0;
+! if (special_keys[i].vim_code1 == NUL)
+ ch = special_keys[i].vim_code0;
+ else
+ {
+ /* Detect if a keypad number key has been pressed
+ * and change the key if Num Lock is on */
+! if (key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
+! && (key->key_mods & Pk_KM_Num_Lock))
+ {
+ /* FIXME: For now, just map the key to a ascii value
+ * (see <photon/PkKeyDef.h>) */
+ ch = key->key_cap - 0xf080;
+ }
+ else
+! ch = TO_SPECIAL(special_keys[i].vim_code0,
+! special_keys[i].vim_code1);
+ }
+ break;
+ }
+ }
+
+! if (key->key_mods & Pk_KM_Ctrl)
+ modifiers |= MOD_MASK_CTRL;
+! if (key->key_mods & Pk_KM_Alt)
+ modifiers |= MOD_MASK_ALT;
+! if (key->key_mods & Pk_KM_Shift)
+ modifiers |= MOD_MASK_SHIFT;
+
+ /* Is this not a special key? */
+! if (special_keys[i].key_sym == 0)
+ {
+! ch = PhTo8859_1(key);
+! if (ch == -1
+ #ifdef FEAT_MBYTE
+! || (enc_utf8 && ch > 127)
+ #endif
+ )
+ {
+ #ifdef FEAT_MBYTE
+! len = PhKeyToMb(string, key);
+! if (len > 0)
+ {
+ static char buf[6];
+ int src_taken, dst_made;
+! if (enc_utf8 != TRUE)
+ {
+ PxTranslateFromUTF(
+ charset_translate,
+***************
+*** 2931,2943 ****
+ name_len = (int_u) ( mark - vim_font );
+
+ *font_name = vim_strnsave( vim_font, name_len );
+! if( *font_name != NULL )
+ {
+! if( mark != NULL )
+ {
+! while( *mark != NUL && *mark++ == ':')
+ {
+! switch( tolower( *mark++ ) )
+ {
+ case 'a': *font_flags |= PF_STYLE_ANTIALIAS; break;
+ case 'b': *font_flags |= PF_STYLE_BOLD; break;
+--- 2931,2943 ----
+ name_len = (int_u) ( mark - vim_font );
+
+ *font_name = vim_strnsave( vim_font, name_len );
+! if (*font_name != NULL)
+ {
+! if (mark != NULL)
+ {
+! while (*mark != NUL && *mark++ == ':')
+ {
+! switch (tolower(*mark++))
+ {
+ case 'a': *font_flags |= PF_STYLE_ANTIALIAS; break;
+ case 'b': *font_flags |= PF_STYLE_BOLD; break;
+***************
+*** 2946,2952 ****
+ case 's':
+ size = getdigits( &mark );
+ /* Restrict the size to some vague limits */
+! if( size < 1 || size > 100 )
+ size = 8;
+
+ *font_size = size;
+--- 2946,2952 ----
+ case 's':
+ size = getdigits( &mark );
+ /* Restrict the size to some vague limits */
+! if (size < 1 || size > 100)
+ size = 8;
+
+ *font_size = size;
+***************
+*** 2973,2990 ****
+ FontQueryInfo info;
+ PhRect_t extent;
+
+! if( vim_font_name == NULL )
+ {
+ /* Default font */
+ vim_font_name = "PC Terminal";
+ }
+
+! if( STRCMP( vim_font_name, "*" ) == 0 )
+ {
+ font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
+ "pcterm12", -1, PHFONT_FIXED, NULL );
+
+! if( font_tag == NULL )
+ return FAIL;
+
+ gui_mch_free_font( gui.norm_font );
+--- 2973,2990 ----
+ FontQueryInfo info;
+ PhRect_t extent;
+
+! if (vim_font_name == NULL)
+ {
+ /* Default font */
+ vim_font_name = "PC Terminal";
+ }
+
+! if (STRCMP( vim_font_name, "*" ) == 0)
+ {
+ font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
+ "pcterm12", -1, PHFONT_FIXED, NULL );
+
+! if (font_tag == NULL)
+ return FAIL;
+
+ gui_mch_free_font( gui.norm_font );
+***************
+*** 2995,3006 ****
+ }
+ else
+ {
+! if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) == FALSE )
+ return FAIL;
+
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+! if( font_tag == NULL )
+ {
+ vim_free( font_name );
+ return FAIL;
+--- 2995,3006 ----
+ }
+ else
+ {
+! if (gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) == FALSE)
+ return FAIL;
+
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+! if (font_tag == NULL)
+ {
+ vim_free( font_name );
+ return FAIL;
+***************
+*** 3053,3069 ****
+ int_u font_size = 12;
+ int_u font_flags = 0;
+
+! if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) != FALSE )
+ {
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
+ vim_free( font_name );
+
+! if( font_tag != NULL )
+ return (GuiFont)font_tag;
+ }
+
+! if( report_error )
+ EMSG2(e_font, vim_font_name );
+
+ return FAIL;
+--- 3053,3069 ----
+ int_u font_size = 12;
+ int_u font_flags = 0;
+
+! if (gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) != FALSE)
+ {
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
+ vim_free( font_name );
+
+! if (font_tag != NULL)
+ return (GuiFont)font_tag;
+ }
+
+! if (report_error)
+ EMSG2(e_font, vim_font_name );
+
+ return FAIL;
+*** ../vim-7.3.270/src/version.c 2011-08-10 12:10:55.000000000 +0200
+--- src/version.c 2011-08-10 12:17:06.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 271,
+ /**/
+
+--
+An indication you must be a manager:
+You believe you never have any problems in your life, just
+"issues" and "improvement opportunities".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.272
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.272
+Problem: ":put =list" does not add an empty line for a trailing empty
+ item.
+Solution: Add a trailing NL when turning a list into a string.
+Files: src/eval.c
+
+
+*** ../vim-7.3.271/src/eval.c 2011-07-15 21:24:06.000000000 +0200
+--- src/eval.c 2011-08-10 12:31:51.000000000 +0200
+***************
+*** 1357,1363 ****
+--- 1357,1367 ----
+ {
+ ga_init2(&ga, (int)sizeof(char), 80);
+ if (tv.vval.v_list != NULL)
++ {
+ list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0);
++ if (tv.vval.v_list->lv_len > 0)
++ ga_append(&ga, NL);
++ }
+ ga_append(&ga, NUL);
+ retval = (char_u *)ga.ga_data;
+ }
+*** ../vim-7.3.271/src/version.c 2011-08-10 12:19:00.000000000 +0200
+--- src/version.c 2011-08-10 12:36:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 272,
+ /**/
+
+--
+Lose weight, NEVER Diet again with
+ The "Invisible Weight Loss Patch"
+ (spam e-mail)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.273
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.273
+Problem: A BOM in an error file is seen as text. (Aleksey Baibarin)
+Solution: Remove the BOM from the text before evaluating. (idea by Christian
+ Brabandt)
+Files: src/quickfix.c, src/mbyte.c, src/proto/mbyte.pro,
+ src/testdir/test10.in
+
+
+*** ../vim-7.3.272/src/quickfix.c 2011-05-19 17:42:54.000000000 +0200
+--- src/quickfix.c 2011-08-10 12:56:15.000000000 +0200
+***************
+*** 561,566 ****
+--- 561,570 ----
+ break;
+
+ IObuff[CMDBUFFSIZE - 2] = NUL; /* for very long lines */
++ #ifdef FEAT_MBYTE
++ remove_bom(IObuff);
++ #endif
++
+ if ((efmp = vim_strrchr(IObuff, '\n')) != NULL)
+ *efmp = NUL;
+ #ifdef USE_CRNL
+*** ../vim-7.3.272/src/mbyte.c 2011-07-27 18:25:40.000000000 +0200
+--- src/mbyte.c 2011-08-10 13:11:56.000000000 +0200
+***************
+*** 838,843 ****
+--- 838,864 ----
+ }
+
+ /*
++ * Remove all BOM from "s" by moving remaining text.
++ */
++ void
++ remove_bom(s)
++ char_u *s;
++ {
++ if (enc_utf8)
++ {
++ char_u *p = s;
++
++ while ((p = vim_strbyte(p, 0xef)) != NULL)
++ {
++ if (p[1] == 0xbb && p[2] == 0xbf)
++ STRMOVE(p, p + 3);
++ else
++ ++p;
++ }
++ }
++ }
++
++ /*
+ * Get class of pointer:
+ * 0 for blank or NUL
+ * 1 for punctuation
+*** ../vim-7.3.272/src/proto/mbyte.pro 2011-07-07 15:08:53.000000000 +0200
+--- src/proto/mbyte.pro 2011-08-10 12:50:44.000000000 +0200
+***************
+*** 2,7 ****
+--- 2,8 ----
+ int enc_canon_props __ARGS((char_u *name));
+ char_u *mb_init __ARGS((void));
+ int bomb_size __ARGS((void));
++ void remove_bom __ARGS((char_u *s));
+ int mb_get_class __ARGS((char_u *p));
+ int dbcs_class __ARGS((unsigned lead, unsigned trail));
+ int latin_char2len __ARGS((int c));
+*** ../vim-7.3.272/src/testdir/test10.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test10.in 2011-08-10 13:01:46.000000000 +0200
+***************
+*** 2,7 ****
+--- 2,10 ----
+
+ STARTTEST
+ :so small.vim
++ :" Also test a BOM is ignored.
++ :so mbyte.vim
++ :set encoding=utf-8
+ :/start of errorfile/,/end of errorfile/w! Xerrorfile
+ :/start of testfile/,/end of testfile/w! Xtestfile
+ :cf Xerrorfile
+***************
+*** 20,26 ****
+
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+! "Xtestfile", line 7 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
+ Xtestfile:13: parse error before `asd'
+ make: *** [vim] Error 1
+--- 23,29 ----
+
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+! "Xtestfile", line 7 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
+ Xtestfile:13: parse error before `asd'
+ make: *** [vim] Error 1
+*** ../vim-7.3.272/src/version.c 2011-08-10 12:38:02.000000000 +0200
+--- src/version.c 2011-08-10 13:14:35.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 273,
+ /**/
+
+--
+Compilation process failed successfully.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.274
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.274
+Problem: With concealed characters tabs do not have the right size.
+Solution: Use VCOL_HLC instead of vcol. (Eiichi Sato)
+Files: src/screen.c
+
+
+*** ../vim-7.3.273/src/screen.c 2011-03-22 13:29:20.000000000 +0100
+--- src/screen.c 2011-08-10 14:22:47.000000000 +0200
+***************
+*** 4252,4258 ****
+ {
+ /* tab amount depends on current column */
+ n_extra = (int)wp->w_buffer->b_p_ts
+! - vcol % (int)wp->w_buffer->b_p_ts - 1;
+ #ifdef FEAT_MBYTE
+ mb_utf8 = FALSE; /* don't draw as UTF-8 */
+ #endif
+--- 4252,4258 ----
+ {
+ /* tab amount depends on current column */
+ n_extra = (int)wp->w_buffer->b_p_ts
+! - VCOL_HLC % (int)wp->w_buffer->b_p_ts - 1;
+ #ifdef FEAT_MBYTE
+ mb_utf8 = FALSE; /* don't draw as UTF-8 */
+ #endif
+*** ../vim-7.3.273/src/version.c 2011-08-10 13:21:30.000000000 +0200
+--- src/version.c 2011-08-10 14:23:38.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 274,
+ /**/
+
+--
+ Arthur pulls Pin out. The MONK blesses the grenade as ...
+ARTHUR: (quietly) One, two, five ...
+GALAHAD: Three, sir!
+ARTHUR: Three.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.275
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.275
+Problem: MS-Windows: When using a black background some screen updates
+ cause the window to flicker.
+Solution: Add WS_CLIPCHILDREN to CreateWindow(). (René Aguirre)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.274/src/gui_w32.c 2011-07-07 17:43:37.000000000 +0200
+--- src/gui_w32.c 2011-08-10 14:40:58.000000000 +0200
+***************
+*** 1379,1385 ****
+ s_hwnd = CreateWindowEx(
+ WS_EX_MDICHILD,
+ szVimWndClass, "Vim MSWindows GUI",
+! WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS | 0xC000,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+--- 1379,1386 ----
+ s_hwnd = CreateWindowEx(
+ WS_EX_MDICHILD,
+ szVimWndClass, "Vim MSWindows GUI",
+! WS_OVERLAPPEDWINDOW | WS_CHILD
+! | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0xC000,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+***************
+*** 1410,1416 ****
+ * titlebar, it will be reparented below. */
+ s_hwnd = CreateWindow(
+ szVimWndClass, "Vim MSWindows GUI",
+! win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+--- 1411,1418 ----
+ * titlebar, it will be reparented below. */
+ s_hwnd = CreateWindow(
+ szVimWndClass, "Vim MSWindows GUI",
+! (win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP)
+! | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+*** ../vim-7.3.274/src/version.c 2011-08-10 14:32:33.000000000 +0200
+--- src/version.c 2011-08-10 14:39:14.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 275,
+ /**/
+
+--
+ARTHUR: What does it say?
+BROTHER MAYNARD: It reads ... "Here may be found the last words of Joseph of
+ Aramathea." "He who is valorous and pure of heart may find
+ the Holy Grail in the aaaaarrrrrrggghhh..."
+ARTHUR: What?
+BROTHER MAYNARD: "The Aaaaarrrrrrggghhh..."
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.276
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.276
+Problem: GvimExt sets $LANG in the wrong way.
+Solution: Save the environment and use it for gvim. (Yasuhiro Matsumoto)
+Files: src/GvimExt/gvimext.cpp
+
+
+*** ../vim-7.3.275/src/GvimExt/gvimext.cpp 2011-07-20 17:27:17.000000000 +0200
+--- src/GvimExt/gvimext.cpp 2011-08-10 16:25:32.000000000 +0200
+***************
+*** 142,147 ****
+--- 142,148 ----
+ static int dyn_libintl_init(char *dir);
+ static void dyn_libintl_end(void);
+
++ static wchar_t *oldenv = NULL;
+ static HINSTANCE hLibintlDLL = 0;
+ static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
+ static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
+***************
+*** 339,346 ****
+ inc_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+! if (g_cRefThisDll == 0)
+ dyn_gettext_load();
+ #endif
+ InterlockedIncrement((LPLONG)&g_cRefThisDll);
+ }
+--- 340,349 ----
+ inc_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+! if (g_cRefThisDll == 0) {
+ dyn_gettext_load();
++ oldenv = GetEnvironmentStringsW();
++ }
+ #endif
+ InterlockedIncrement((LPLONG)&g_cRefThisDll);
+ }
+***************
+*** 349,356 ****
+ dec_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+! if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0)
+ dyn_gettext_free();
+ #else
+ InterlockedDecrement((LPLONG)&g_cRefThisDll);
+ #endif
+--- 352,364 ----
+ dec_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+! if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0) {
+ dyn_gettext_free();
++ if (oldenv != NULL) {
++ FreeEnvironmentStringsW(oldenv);
++ oldenv = NULL;
++ }
++ }
+ #else
+ InterlockedDecrement((LPLONG)&g_cRefThisDll);
+ #endif
+***************
+*** 905,912 ****
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+! 0, // No creation flags.
+! NULL, // Use parent's environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+--- 913,920 ----
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+! oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
+! oldenv, // Use unmodified environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+***************
+*** 987,994 ****
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+! 0, // No creation flags.
+! NULL, // Use parent's environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+--- 995,1002 ----
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+! oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
+! oldenv, // Use unmodified environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+*** ../vim-7.3.275/src/version.c 2011-08-10 15:56:24.000000000 +0200
+--- src/version.c 2011-08-10 16:28:42.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 276,
+ /**/
+
+--
+User: I'm having problems with my text editor.
+Help desk: Which editor are you using?
+User: I don't know, but it's version VI (pronounced: 6).
+Help desk: Oh, then you should upgrade to version VIM (pronounced: 994).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.277
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.277
+Problem: MS-Windows: some characters do not show in dialogs.
+Solution: Use the wide methods when available. (Yanwei Jia)
+Files: src/gui_w32.c, src/gui_w48.c, src/os_mswin.c, src/os_win32.c,
+ src/os_win32.h
+
+
+*** ../vim-7.3.276/src/gui_w32.c 2011-08-10 15:56:24.000000000 +0200
+--- src/gui_w32.c 2011-08-10 16:52:55.000000000 +0200
+***************
+*** 1270,1275 ****
+--- 1270,1294 ----
+ pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib,
+ "GetMonitorInfoA");
+ }
++
++ #ifdef FEAT_MBYTE
++ /* If the OS is Windows NT, use wide functions;
++ * this enables common dialogs input unicode from IME. */
++ if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
++ {
++ pDispatchMessage = DispatchMessageW;
++ pGetMessage = GetMessageW;
++ pIsDialogMessage = IsDialogMessageW;
++ pPeekMessage = PeekMessageW;
++ }
++ else
++ {
++ pDispatchMessage = DispatchMessageA;
++ pGetMessage = GetMessageA;
++ pIsDialogMessage = IsDialogMessageA;
++ pPeekMessage = PeekMessageA;
++ }
++ #endif
+ }
+
+ /*
+*** ../vim-7.3.276/src/gui_w48.c 2010-10-20 21:22:17.000000000 +0200
+--- src/gui_w48.c 2011-08-10 16:49:39.000000000 +0200
+***************
+*** 390,396 ****
+ KillTimer(NULL, idEvent);
+
+ /* Eat spurious WM_TIMER messages */
+! while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+
+ if (blink_state == BLINK_ON)
+--- 390,396 ----
+ KillTimer(NULL, idEvent);
+
+ /* Eat spurious WM_TIMER messages */
+! while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+
+ if (blink_state == BLINK_ON)
+***************
+*** 418,424 ****
+ {
+ KillTimer(NULL, blink_timer);
+ /* Eat spurious WM_TIMER messages */
+! while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ blink_timer = 0;
+ }
+--- 418,424 ----
+ {
+ KillTimer(NULL, blink_timer);
+ /* Eat spurious WM_TIMER messages */
+! while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ blink_timer = 0;
+ }
+***************
+*** 476,482 ****
+ s_timed_out = TRUE;
+
+ /* Eat spurious WM_TIMER messages */
+! while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ if (idEvent == s_wait_timer)
+ s_wait_timer = 0;
+--- 476,482 ----
+ s_timed_out = TRUE;
+
+ /* Eat spurious WM_TIMER messages */
+! while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ if (idEvent == s_wait_timer)
+ s_wait_timer = 0;
+***************
+*** 1707,1713 ****
+ static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
+ #endif
+
+! GetMessage(&msg, NULL, 0, 0);
+
+ #ifdef FEAT_OLE
+ /* Look after OLE Automation commands */
+--- 1707,1713 ----
+ static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
+ #endif
+
+! pGetMessage(&msg, NULL, 0, 0);
+
+ #ifdef FEAT_OLE
+ /* Look after OLE Automation commands */
+***************
+*** 1718,1724 ****
+ {
+ /* Message can't be ours, forward it. Fixes problem with Ultramon
+ * 3.0.4 */
+! DispatchMessage(&msg);
+ }
+ else
+ {
+--- 1718,1724 ----
+ {
+ /* Message can't be ours, forward it. Fixes problem with Ultramon
+ * 3.0.4 */
+! pDispatchMessage(&msg);
+ }
+ else
+ {
+***************
+*** 1749,1762 ****
+ if (msg.message == WM_USER)
+ {
+ MyTranslateMessage(&msg);
+! DispatchMessage(&msg);
+ return;
+ }
+ #endif
+
+ #ifdef MSWIN_FIND_REPLACE
+ /* Don't process messages used by the dialog */
+! if (s_findrep_hwnd != NULL && IsDialogMessage(s_findrep_hwnd, &msg))
+ {
+ HandleMouseHide(msg.message, msg.lParam);
+ return;
+--- 1749,1762 ----
+ if (msg.message == WM_USER)
+ {
+ MyTranslateMessage(&msg);
+! pDispatchMessage(&msg);
+ return;
+ }
+ #endif
+
+ #ifdef MSWIN_FIND_REPLACE
+ /* Don't process messages used by the dialog */
+! if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg))
+ {
+ HandleMouseHide(msg.message, msg.lParam);
+ return;
+***************
+*** 1928,1934 ****
+ if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
+ NULL, NULL) == NULL)
+ #endif
+! DispatchMessage(&msg);
+ }
+
+ /*
+--- 1928,1934 ----
+ if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
+ NULL, NULL) == NULL)
+ #endif
+! pDispatchMessage(&msg);
+ }
+
+ /*
+***************
+*** 1943,1949 ****
+ MSG msg;
+
+ if (!s_busy_processing)
+! while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
+ && !vim_is_input_buf_full())
+ process_message();
+ }
+--- 1943,1949 ----
+ MSG msg;
+
+ if (!s_busy_processing)
+! while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
+ && !vim_is_input_buf_full())
+ process_message();
+ }
+***************
+*** 2019,2025 ****
+ KillTimer(NULL, s_wait_timer);
+
+ /* Eat spurious WM_TIMER messages */
+! while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ s_wait_timer = 0;
+ }
+--- 2019,2025 ----
+ KillTimer(NULL, s_wait_timer);
+
+ /* Eat spurious WM_TIMER messages */
+! while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ s_wait_timer = 0;
+ }
+*** ../vim-7.3.276/src/os_mswin.c 2011-06-19 01:30:01.000000000 +0200
+--- src/os_mswin.c 2011-08-10 16:45:24.000000000 +0200
+***************
+*** 1856,1867 ****
+ {
+ MSG msg;
+
+! while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+! if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
+ {
+ TranslateMessage(&msg);
+! DispatchMessage(&msg);
+ }
+ }
+ return !*bUserAbort;
+--- 1856,1867 ----
+ {
+ MSG msg;
+
+! while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+! if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg))
+ {
+ TranslateMessage(&msg);
+! pDispatchMessage(&msg);
+ }
+ }
+ return !*bUserAbort;
+***************
+*** 3132,3141 ****
+ {
+ MSG msg;
+
+! while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+! DispatchMessage(&msg);
+ }
+ }
+
+--- 3132,3141 ----
+ {
+ MSG msg;
+
+! while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+! pDispatchMessage(&msg);
+ }
+ }
+
+*** ../vim-7.3.276/src/os_win32.c 2011-07-07 16:20:45.000000000 +0200
+--- src/os_win32.c 2011-08-10 16:54:50.000000000 +0200
+***************
+*** 152,157 ****
+--- 152,165 ----
+ # define wcsicmp(a, b) wcscmpi((a), (b))
+ #endif
+
++ /* Enable common dialogs input unicode from IME if posible. */
++ #ifdef FEAT_MBYTE
++ LRESULT (WINAPI *pDispatchMessage)(LPMSG) = DispatchMessage;
++ BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage;
++ BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage;
++ BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage;
++ #endif
++
+ #ifndef FEAT_GUI_W32
+ /* Win32 Console handles for input and output */
+ static HANDLE g_hConIn = INVALID_HANDLE_VALUE;
+***************
+*** 3284,3293 ****
+ {
+ MSG msg;
+
+! if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+! DispatchMessage(&msg);
+ }
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ break;
+--- 3292,3301 ----
+ {
+ MSG msg;
+
+! if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+! pDispatchMessage(&msg);
+ }
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ break;
+*** ../vim-7.3.276/src/os_win32.h 2011-05-05 18:31:54.000000000 +0200
+--- src/os_win32.h 2011-08-10 16:51:58.000000000 +0200
+***************
+*** 193,195 ****
+--- 193,209 ----
+ #else
+ # define vim_mkdir(x, y) mch_mkdir(x)
+ #endif
++
++ /* Enable common dialogs input unicode from IME if posible. */
++ #ifdef FEAT_MBYTE
++ /* The variables are defined in os_win32.c. */
++ extern LRESULT (WINAPI *pDispatchMessage)(LPMSG);
++ extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT);
++ extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG);
++ extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT);
++ #else
++ # define pDispatchMessage DispatchMessage
++ # define pGetMessage GetMessage
++ # define pIsDialogMessage IsDialogMessage
++ # define pPeekMessage PeekMessage
++ #endif
+*** ../vim-7.3.276/src/version.c 2011-08-10 16:31:18.000000000 +0200
+--- src/version.c 2011-08-10 17:06:55.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 277,
+ /**/
+
+--
+Veni, Vidi, VW -- I came, I saw, I drove around in a little car.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.278
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.278
+Problem: Passing the file name to open in VisVim doesn't work.
+Solution: Adjust the index and check for end of buffer. (Jiri Sedlak)
+Files: src/VisVim/Commands.cpp
+
+
+*** ../vim-7.3.277/src/VisVim/Commands.cpp 2010-08-15 21:57:27.000000000 +0200
+--- src/VisVim/Commands.cpp 2011-08-10 17:21:27.000000000 +0200
+***************
+*** 549,555 ****
+ if (g_bNewTabs)
+ {
+ sprintf(VimCmd, ":tab drop ");
+! s = VimCmd + 11;
+ }
+ else
+ {
+--- 549,555 ----
+ if (g_bNewTabs)
+ {
+ sprintf(VimCmd, ":tab drop ");
+! s = VimCmd + 10;
+ }
+ else
+ {
+***************
+*** 557,564 ****
+ s = VimCmd + 6;
+ }
+ sprintf(FileNameTmp, "%S", (char *)FileName);
+! for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
+! ++p)
+ if (*p == '\\')
+ *s++ = '/';
+ else
+--- 557,563 ----
+ s = VimCmd + 6;
+ }
+ sprintf(FileNameTmp, "%S", (char *)FileName);
+! for (p = FileNameTmp; *p != '\0' && s < VimCmd + MAX_OLE_STR - 4; ++p)
+ if (*p == '\\')
+ *s++ = '/';
+ else
+*** ../vim-7.3.277/src/version.c 2011-08-10 17:07:56.000000000 +0200
+--- src/version.c 2011-08-10 17:25:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 278,
+ /**/
+
+--
+ARTHUR: But if he was dying, he wouldn't bother to carve
+ "Aaaaarrrrrrggghhh". He'd just say it.
+BROTHER MAYNARD: It's down there carved in stone.
+GALAHAD: Perhaps he was dictating.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.279
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.279
+Problem: With GTK, when gvim is full-screen and a tab is opened and using a
+ specific monitor configuration the window is too big.
+Solution: Adjust the window size like on MS-Windows. (Yukihiro Nakadaira)
+Files: src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro
+
+
+*** ../vim-7.3.278/src/gui.c 2011-06-26 04:48:56.000000000 +0200
+--- src/gui.c 2011-08-10 17:40:31.000000000 +0200
+***************
+*** 1407,1413 ****
+ if (!gui.shell_created)
+ return;
+
+! #ifdef MSWIN
+ /* If not setting to a user specified size and maximized, calculate the
+ * number of characters that fit in the maximized window. */
+ if (!mustset && gui_mch_maximized())
+--- 1407,1413 ----
+ if (!gui.shell_created)
+ return;
+
+! #if defined(MSWIN) || defined(FEAT_GUI_GTK)
+ /* If not setting to a user specified size and maximized, calculate the
+ * number of characters that fit in the maximized window. */
+ if (!mustset && gui_mch_maximized())
+*** ../vim-7.3.278/src/gui_gtk_x11.c 2011-06-26 04:48:56.000000000 +0200
+--- src/gui_gtk_x11.c 2011-08-10 17:42:19.000000000 +0200
+***************
+*** 3900,3905 ****
+--- 3900,3920 ----
+ }
+
+ /*
++ * Called when the font changed while the window is maximized. Compute the
++ * new Rows and Columns. This is like resizing the window.
++ */
++ void
++ gui_mch_newfont()
++ {
++ int w, h;
++
++ gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
++ w -= get_menu_tool_width();
++ h -= get_menu_tool_height();
++ gui_resize_shell(w, h);
++ }
++
++ /*
+ * Set the windows size.
+ */
+ void
+***************
+*** 4409,4422 ****
+
+ if (gui_mch_maximized())
+ {
+- int w, h;
+-
+ /* Update lines and columns in accordance with the new font, keep the
+ * window maximized. */
+! gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
+! w -= get_menu_tool_width();
+! h -= get_menu_tool_height();
+! gui_resize_shell(w, h);
+ }
+ else
+ {
+--- 4424,4432 ----
+
+ if (gui_mch_maximized())
+ {
+ /* Update lines and columns in accordance with the new font, keep the
+ * window maximized. */
+! gui_mch_newfont();
+ }
+ else
+ {
+*** ../vim-7.3.278/src/proto/gui_gtk_x11.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_gtk_x11.pro 2011-08-10 17:42:29.000000000 +0200
+***************
+*** 20,25 ****
+--- 20,26 ----
+ void gui_mch_set_winpos __ARGS((int x, int y));
+ int gui_mch_maximized __ARGS((void));
+ void gui_mch_unmaximize __ARGS((void));
++ void gui_mch_newfont __ARGS((void));
+ void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
+ void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+ void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
+*** ../vim-7.3.278/src/version.c 2011-08-10 17:25:48.000000000 +0200
+--- src/version.c 2011-08-10 17:43:22.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 279,
+ /**/
+
+--
+LAUNCELOT: Isn't there a St. Aaaaarrrrrrggghhh's in Cornwall?
+ARTHUR: No, that's Saint Ives.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.280
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.280
+Problem: ":lmake" does not update the quickfix window title.
+Solution: Update the title. (Lech Lorens)
+Files: src/quickfix.c, src/testdir/test10.in, src/testdir/test10.ok
+
+
+*** ../vim-7.3.279/src/quickfix.c 2011-08-10 13:21:30.000000000 +0200
+--- src/quickfix.c 2011-08-10 18:09:19.000000000 +0200
+***************
+*** 126,131 ****
+--- 126,132 ----
+ static win_T *qf_find_win __ARGS((qf_info_T *qi));
+ static buf_T *qf_find_buf __ARGS((qf_info_T *qi));
+ static void qf_update_buffer __ARGS((qf_info_T *qi));
++ static void qf_set_title __ARGS((qf_info_T *qi));
+ static void qf_fill_buffer __ARGS((qf_info_T *qi));
+ #endif
+ static char_u *get_mef_name __ARGS((void));
+***************
+*** 2388,2395 ****
+ qf_fill_buffer(qi);
+
+ if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
+! set_internal_string_var((char_u *)"w:quickfix_title",
+! qi->qf_lists[qi->qf_curlist].qf_title);
+
+ curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+ curwin->w_cursor.col = 0;
+--- 2389,2395 ----
+ qf_fill_buffer(qi);
+
+ if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
+! qf_set_title(qi);
+
+ curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+ curwin->w_cursor.col = 0;
+***************
+*** 2526,2531 ****
+--- 2526,2533 ----
+ qf_info_T *qi;
+ {
+ buf_T *buf;
++ win_T *win;
++ win_T *curwin_save;
+ aco_save_T aco;
+
+ /* Check if a buffer for the quickfix list exists. Update it. */
+***************
+*** 2537,2542 ****
+--- 2539,2554 ----
+
+ qf_fill_buffer(qi);
+
++ if (qi->qf_lists[qi->qf_curlist].qf_title != NULL
++ && (win = qf_find_win(qi)) != NULL)
++ {
++ curwin_save = curwin;
++ curwin = win;
++ qf_set_title(qi);
++ curwin = curwin_save;
++
++ }
++
+ /* restore curwin/curbuf and a few other things */
+ aucmd_restbuf(&aco);
+
+***************
+*** 2544,2549 ****
+--- 2556,2569 ----
+ }
+ }
+
++ static void
++ qf_set_title(qi)
++ qf_info_T *qi;
++ {
++ set_internal_string_var((char_u *)"w:quickfix_title",
++ qi->qf_lists[qi->qf_curlist].qf_title);
++ }
++
+ /*
+ * Fill current buffer with quickfix errors, replacing any previous contents.
+ * curbuf must be the quickfix buffer!
+*** ../vim-7.3.279/src/testdir/test10.in 2011-08-10 13:21:30.000000000 +0200
+--- src/testdir/test10.in 2011-08-10 18:28:31.000000000 +0200
+***************
+*** 5,13 ****
+ :" Also test a BOM is ignored.
+ :so mbyte.vim
+ :set encoding=utf-8
+! :/start of errorfile/,/end of errorfile/w! Xerrorfile
+ :/start of testfile/,/end of testfile/w! Xtestfile
+! :cf Xerrorfile
+ rA
+ :cn
+ rB
+--- 5,20 ----
+ :" Also test a BOM is ignored.
+ :so mbyte.vim
+ :set encoding=utf-8
+! :7/start of errorfile/,/end of errorfile/w! Xerrorfile1
+! :7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
+ :/start of testfile/,/end of testfile/w! Xtestfile
+! :cf Xerrorfile2
+! :clast
+! :copen
+! :let a=w:quickfix_title
+! :wincmd p
+! gR\12=a\r\e
+! :cf Xerrorfile1
+ rA
+ :cn
+ rB
+***************
+*** 17,22 ****
+--- 24,34 ----
+ rD
+ :cn
+ rE
++ :cn
++ :wincmd w
++ :let a=w:quickfix_title
++ :wincmd p
++ gR\12=a\r\e
+ :w! test.out " Write contents of this file
+ :qa!
+ ENDTEST
+***************
+*** 33,38 ****
+--- 45,52 ----
+ "Xtestfile", linenr 19: yet another problem
+
+ Does anyone know what is the problem and how to correction it?
++ "Xtestfile", line 21 col 9: What is the title of the quickfix window?
++ "Xtestfile", line 22 col 9: What is the title of the quickfix window?
+ end of errorfile
+
+ start of testfile
+*** ../vim-7.3.279/src/testdir/test10.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test10.ok 2011-08-10 18:03:53.000000000 +0200
+***************
+*** 18,23 ****
+ line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ end of testfile
+--- 18,23 ----
+ line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 21 :cf Xerrorfile1xxxxxxxxxxxxxxx
+! line 22 :cf Xerrorfile2xxxxxxxxxxxxxxx
+ end of testfile
+*** ../vim-7.3.279/src/version.c 2011-08-10 17:44:41.000000000 +0200
+--- src/version.c 2011-08-10 18:35:52.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 280,
+ /**/
+
+--
+"When I die, I want a tombstone that says "GAME OVER" - Ton Richters
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.281
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.281
+Problem: After using "expand('%:8')" the buffer name is changed.
+Solution: Make a copy of the file name before shortening it.
+Files: src/eval.c
+
+
+*** ../vim-7.3.280/src/eval.c 2011-08-10 12:38:02.000000000 +0200
+--- src/eval.c 2011-08-17 15:12:39.000000000 +0200
+***************
+*** 23205,23210 ****
+--- 23205,23211 ----
+ int c;
+ int has_fullname = 0;
+ #ifdef WIN3264
++ char_u *fname_start = *fnamep;
+ int has_shortname = 0;
+ #endif
+
+***************
+*** 23379,23402 ****
+ }
+
+ #ifdef WIN3264
+! /* Check shortname after we have done 'heads' and before we do 'tails'
+ */
+ if (has_shortname)
+ {
+! pbuf = NULL;
+! /* Copy the string if it is shortened by :h */
+! if (*fnamelen < (int)STRLEN(*fnamep))
+ {
+ p = vim_strnsave(*fnamep, *fnamelen);
+! if (p == 0)
+ return -1;
+ vim_free(*bufp);
+ *bufp = *fnamep = p;
+ }
+
+ /* Split into two implementations - makes it easier. First is where
+! * there isn't a full name already, second is where there is.
+! */
+ if (!has_fullname && !vim_isAbsName(*fnamep))
+ {
+ if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
+--- 23380,23404 ----
+ }
+
+ #ifdef WIN3264
+! /*
+! * Handle ":8" after we have done 'heads' and before we do 'tails'.
+ */
+ if (has_shortname)
+ {
+! /* Copy the string if it is shortened by :h and when it wasn't copied
+! * yet, because we are going to change it in place. Avoids changing
+! * the buffer name for "%:8". */
+! if (*fnamelen < (int)STRLEN(*fnamep) || *fnamep == fname_start)
+ {
+ p = vim_strnsave(*fnamep, *fnamelen);
+! if (p == NULL)
+ return -1;
+ vim_free(*bufp);
+ *bufp = *fnamep = p;
+ }
+
+ /* Split into two implementations - makes it easier. First is where
+! * there isn't a full name already, second is where there is. */
+ if (!has_fullname && !vim_isAbsName(*fnamep))
+ {
+ if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
+***************
+*** 23404,23421 ****
+ }
+ else
+ {
+! int l;
+
+! /* Simple case, already have the full-name
+ * Nearly always shorter, so try first time. */
+- l = *fnamelen;
+ if (get_short_pathname(fnamep, bufp, &l) == FAIL)
+ return -1;
+
+ if (l == 0)
+ {
+! /* Couldn't find the filename.. search the paths.
+! */
+ l = *fnamelen;
+ if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
+ return -1;
+--- 23406,23421 ----
+ }
+ else
+ {
+! int l = *fnamelen;
+
+! /* Simple case, already have the full-name.
+ * Nearly always shorter, so try first time. */
+ if (get_short_pathname(fnamep, bufp, &l) == FAIL)
+ return -1;
+
+ if (l == 0)
+ {
+! /* Couldn't find the filename, search the paths. */
+ l = *fnamelen;
+ if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
+ return -1;
+*** ../vim-7.3.280/src/version.c 2011-08-10 18:36:49.000000000 +0200
+--- src/version.c 2011-08-17 15:21:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 281,
+ /**/
+
+--
+Kisses may last for as much as, but no more than, five minutes.
+ [real standing law in Iowa, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.282
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.282
+Problem: When using input() and :echo in a loop the displayed text is
+ incorrect. (Benjamin Fritz)
+Solution: Only restore the cursor position when there is a command line.
+ (Ben Schmidt)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.281/src/ex_getln.c 2011-07-27 17:58:42.000000000 +0200
+--- src/ex_getln.c 2011-08-17 15:57:39.000000000 +0200
+***************
+*** 1969,1976 ****
+ # endif
+ s = getcmdline(firstc, 1L, 0);
+ restore_cmdline(&save_ccline);
+! /* Restore msg_col, the prompt from input() may have changed it. */
+! msg_col = msg_col_save;
+
+ return s;
+ }
+--- 1969,1980 ----
+ # endif
+ s = getcmdline(firstc, 1L, 0);
+ restore_cmdline(&save_ccline);
+! /* Restore msg_col, the prompt from input() may have changed it.
+! * But only if called recursively and the commandline is therefore being
+! * restored to an old one; if not, the input() prompt stays on the screen,
+! * so we need its modified msg_col left intact. */
+! if (ccline.cmdbuff != NULL)
+! msg_col = msg_col_save;
+
+ return s;
+ }
+*** ../vim-7.3.281/src/version.c 2011-08-17 15:23:16.000000000 +0200
+--- src/version.c 2011-08-17 16:24:04.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 282,
+ /**/
+
+--
+Why don't cannibals eat clowns?
+Because they taste funny.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.283
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.283
+Problem: An expression mapping with a multi-byte character containing a
+ 0x80 byte gets messed up. (ZyX)
+Solution: Unescape the expression before evaluating it (Yukihiro Nakadaira)
+Files: src/getchar.c
+
+
+*** ../vim-7.3.282/src/getchar.c 2011-04-28 17:30:05.000000000 +0200
+--- src/getchar.c 2011-08-17 17:04:38.000000000 +0200
+***************
+*** 3262,3270 ****
+ validate_maphash();
+
+ /*
+! * find end of keys and skip CTRL-Vs (and backslashes) in it
+ * Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
+! * with :unmap white space is included in the keys, no argument possible
+ */
+ p = keys;
+ do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
+--- 3262,3270 ----
+ validate_maphash();
+
+ /*
+! * Find end of keys and skip CTRL-Vs (and backslashes) in it.
+ * Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
+! * with :unmap white space is included in the keys, no argument possible.
+ */
+ p = keys;
+ do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
+***************
+*** 4506,4517 ****
+--- 4506,4528 ----
+ {
+ char_u *res;
+ char_u *p;
++ char_u *expr;
+ char_u *save_cmd;
+ pos_T save_cursor;
+
++ /* Remove escaping of CSI, because "str" is in a format to be used as
++ * typeahead. */
++ expr = vim_strsave(str);
++ if (expr == NULL)
++ return NULL;
++ vim_unescape_csi(expr);
++
+ save_cmd = save_cmdline_alloc();
+ if (save_cmd == NULL)
++ {
++ vim_free(expr);
+ return NULL;
++ }
+
+ /* Forbid changing text or using ":normal" to avoid most of the bad side
+ * effects. Also restore the cursor position. */
+***************
+*** 4521,4527 ****
+ #endif
+ set_vim_var_char(c); /* set v:char to the typed character */
+ save_cursor = curwin->w_cursor;
+! p = eval_to_string(str, NULL, FALSE);
+ --textlock;
+ #ifdef FEAT_EX_EXTRA
+ --ex_normal_lock;
+--- 4532,4538 ----
+ #endif
+ set_vim_var_char(c); /* set v:char to the typed character */
+ save_cursor = curwin->w_cursor;
+! p = eval_to_string(expr, NULL, FALSE);
+ --textlock;
+ #ifdef FEAT_EX_EXTRA
+ --ex_normal_lock;
+***************
+*** 4529,4536 ****
+--- 4540,4550 ----
+ curwin->w_cursor = save_cursor;
+
+ restore_cmdline_alloc(save_cmd);
++ vim_free(expr);
++
+ if (p == NULL)
+ return NULL;
++ /* Escape CSI in the result to be able to use the string as typeahead. */
+ res = vim_strsave_escape_csi(p);
+ vim_free(p);
+
+*** ../vim-7.3.282/src/version.c 2011-08-17 16:25:43.000000000 +0200
+--- src/version.c 2011-08-17 17:17:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 283,
+ /**/
+
+--
+bashian roulette:
+$ ((RANDOM%6)) || rm -rf ~
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.284
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.284
+Problem: The str2special() function doesn't handle multi-byte characters
+ properly.
+Solution: Recognize multi-byte characters. (partly by Vladimir Vichniakov)
+Files: src/getchar.c, src/message.c, src/misc2.c
+
+
+*** ../vim-7.3.283/src/getchar.c 2011-08-17 17:18:14.000000000 +0200
+--- src/getchar.c 2011-08-17 20:11:58.000000000 +0200
+***************
+*** 3964,3970 ****
+ if (*mp->m_str == NUL)
+ msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
+ else
+! msg_outtrans_special(mp->m_str, FALSE);
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+ last_set_msg(mp->m_script_ID);
+--- 3964,3980 ----
+ if (*mp->m_str == NUL)
+ msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
+ else
+! {
+! /* Remove escaping of CSI, because "m_str" is in a format to be used
+! * as typeahead. */
+! char_u *s = vim_strsave(mp->m_str);
+! if (s != NULL)
+! {
+! vim_unescape_csi(s);
+! msg_outtrans_special(s, FALSE);
+! vim_free(s);
+! }
+! }
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+ last_set_msg(mp->m_script_ID);
+*** ../vim-7.3.283/src/message.c 2011-03-22 13:07:19.000000000 +0100
+--- src/message.c 2011-08-17 18:40:10.000000000 +0200
+***************
+*** 1547,1562 ****
+ if (IS_SPECIAL(c) || modifiers) /* special key */
+ special = TRUE;
+ }
+- *sp = str + 1;
+
+ #ifdef FEAT_MBYTE
+! /* For multi-byte characters check for an illegal byte. */
+! if (has_mbyte && MB_BYTE2LEN(*str) > (*mb_ptr2len)(str))
+ {
+! transchar_nonprint(buf, c);
+! return buf;
+ }
+ #endif
+
+ /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
+ * Use <Space> only for lhs of a mapping. */
+--- 1547,1573 ----
+ if (IS_SPECIAL(c) || modifiers) /* special key */
+ special = TRUE;
+ }
+
+ #ifdef FEAT_MBYTE
+! if (has_mbyte && !IS_SPECIAL(c))
+ {
+! int len = (*mb_ptr2len)(str);
+!
+! /* For multi-byte characters check for an illegal byte. */
+! if (has_mbyte && MB_BYTE2LEN(*str) > len)
+! {
+! transchar_nonprint(buf, c);
+! *sp = str + 1;
+! return buf;
+! }
+! /* Since 'special' is TRUE the multi-byte character 'c' will be
+! * processed by get_special_key_name() */
+! c = (*mb_ptr2char)(str);
+! *sp = str + len;
+ }
++ else
+ #endif
++ *sp = str + 1;
+
+ /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
+ * Use <Space> only for lhs of a mapping. */
+*** ../vim-7.3.283/src/misc2.c 2011-07-27 17:31:42.000000000 +0200
+--- src/misc2.c 2011-08-17 20:27:30.000000000 +0200
+***************
+*** 2754,2759 ****
+--- 2754,2760 ----
+ int bit;
+ int key;
+ unsigned long n;
++ int l;
+
+ src = *srcp;
+ if (src[0] != '<')
+***************
+*** 2766,2773 ****
+ if (*bp == '-')
+ {
+ last_dash = bp;
+! if (bp[1] != NUL && bp[2] == '>')
+! ++bp; /* anything accepted, like <C-?> */
+ }
+ if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
+ bp += 3; /* skip t_xx, xx may be '-' or '>' */
+--- 2767,2783 ----
+ if (*bp == '-')
+ {
+ last_dash = bp;
+! if (bp[1] != NUL)
+! {
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! l = mb_ptr2len(bp + 1);
+! else
+! #endif
+! l = 1;
+! if (bp[l + 1] == '>')
+! bp += l; /* anything accepted, like <C-?> */
+! }
+ }
+ if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
+ bp += 3; /* skip t_xx, xx may be '-' or '>' */
+***************
+*** 2777,2791 ****
+ {
+ end_of_name = bp + 1;
+
+- if (STRNICMP(src + 1, "char-", 5) == 0 && VIM_ISDIGIT(src[6]))
+- {
+- /* <Char-123> or <Char-033> or <Char-0x33> */
+- vim_str2nr(src + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+- *modp = 0;
+- *srcp = end_of_name;
+- return (int)n;
+- }
+-
+ /* Which modifiers are given? */
+ modifiers = 0x0;
+ for (bp = src + 1; bp < last_dash; bp++)
+--- 2787,2792 ----
+***************
+*** 2804,2814 ****
+ */
+ if (bp >= last_dash)
+ {
+ /*
+ * Modifier with single letter, or special key name.
+ */
+! if (modifiers != 0 && last_dash[2] == '>')
+! key = last_dash[1];
+ else
+ {
+ key = get_special_key_code(last_dash + 1);
+--- 2805,2831 ----
+ */
+ if (bp >= last_dash)
+ {
++ if (STRNICMP(last_dash + 1, "char-", 5) == 0
++ && VIM_ISDIGIT(last_dash[6]))
++ {
++ /* <Char-123> or <Char-033> or <Char-0x33> */
++ vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
++ *modp = modifiers;
++ *srcp = end_of_name;
++ return (int)n;
++ }
++
+ /*
+ * Modifier with single letter, or special key name.
+ */
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! l = mb_ptr2len(last_dash + 1);
+! else
+! #endif
+! l = 1;
+! if (modifiers != 0 && last_dash[l + 1] == '>')
+! key = PTR2CHAR(last_dash + 1);
+ else
+ {
+ key = get_special_key_code(last_dash + 1);
+*** ../vim-7.3.283/src/version.c 2011-08-17 17:18:14.000000000 +0200
+--- src/version.c 2011-08-17 20:27:47.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 284,
+ /**/
+
+--
+Snoring is prohibited unless all bedroom windows are closed and securely
+locked.
+ [real standing law in Massachusetts, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.285
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.285 (after 7.3.284)
+Problem: Mapping <Char-123> no longer works.
+Solution: Properly check for "char-". Add a test for it.
+Files: src/misc2.c, src/testdir/test75.in, src/testdir/test75.ok
+
+
+*** ../vim-7.3.284/src/misc2.c 2011-08-17 20:33:18.000000000 +0200
+--- src/misc2.c 2011-08-19 22:08:37.000000000 +0200
+***************
+*** 2781,2786 ****
+--- 2781,2792 ----
+ }
+ if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
+ bp += 3; /* skip t_xx, xx may be '-' or '>' */
++ else if (STRNICMP(bp, "char-", 5) == 0)
++ {
++ vim_str2nr(bp + 5, NULL, &l, TRUE, TRUE, NULL, NULL);
++ bp += l + 5;
++ break;
++ }
+ }
+
+ if (*bp == '>') /* found matching '>' */
+***************
+*** 2810,2836 ****
+ {
+ /* <Char-123> or <Char-033> or <Char-0x33> */
+ vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+! *modp = modifiers;
+! *srcp = end_of_name;
+! return (int)n;
+ }
+-
+- /*
+- * Modifier with single letter, or special key name.
+- */
+- #ifdef FEAT_MBYTE
+- if (has_mbyte)
+- l = mb_ptr2len(last_dash + 1);
+- else
+- #endif
+- l = 1;
+- if (modifiers != 0 && last_dash[l + 1] == '>')
+- key = PTR2CHAR(last_dash + 1);
+ else
+ {
+! key = get_special_key_code(last_dash + 1);
+! if (!keep_x_key)
+! key = handle_x_keys(key);
+ }
+
+ /*
+--- 2816,2842 ----
+ {
+ /* <Char-123> or <Char-033> or <Char-0x33> */
+ vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+! key = (int)n;
+ }
+ else
+ {
+! /*
+! * Modifier with single letter, or special key name.
+! */
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! l = mb_ptr2len(last_dash + 1);
+! else
+! #endif
+! l = 1;
+! if (modifiers != 0 && last_dash[l + 1] == '>')
+! key = PTR2CHAR(last_dash + 1);
+! else
+! {
+! key = get_special_key_code(last_dash + 1);
+! if (!keep_x_key)
+! key = handle_x_keys(key);
+! }
+ }
+
+ /*
+*** ../vim-7.3.284/src/testdir/test75.in 2010-10-20 21:22:17.000000000 +0200
+--- src/testdir/test75.in 2011-08-19 22:05:13.000000000 +0200
+***************
+*** 2,7 ****
+--- 2,8 ----
+
+ STARTTEST
+ :so small.vim
++ :set cpo-=<
+ :" Test maparg() with a string result
+ :map foo<C-V> is<F4>foo
+ :vnoremap <script> <buffer> <expr> <silent> bar isbar
+***************
+*** 9,14 ****
+--- 10,20 ----
+ :call append('$', string(maparg('foo<C-V>', '', 0, 1)))
+ :call append('$', string(maparg('bar', '', 0, 1)))
+ :"
++ :map abc x<char-114>x
++ :call append('$', maparg('abc'))
++ :map abc y<S-char-114>y
++ :call append('$', maparg('abc'))
++ :"
+ :/^eof/+1,$w! test.out
+ :qa!
+ ENDTEST
+*** ../vim-7.3.284/src/testdir/test75.ok 2010-10-20 21:22:17.000000000 +0200
+--- src/testdir/test75.ok 2011-08-19 21:53:26.000000000 +0200
+***************
+*** 1,3 ****
+--- 1,5 ----
+ is<F4>foo
+ {'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
+ {'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
++ xrx
++ yRy
+*** ../vim-7.3.284/src/version.c 2011-08-17 20:33:18.000000000 +0200
+--- src/version.c 2011-08-19 22:15:22.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 285,
+ /**/
+
+
+--
+No man may purchase alcohol without written consent from his wife.
+ [real standing law in Pennsylvania, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.286
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.286
+Problem: Crash when using "zd" on a large number of folds. (Sam King)
+Solution: Recompute pointer after reallocating array. Move fewer entries
+ when making room.
+Files: src/fold.c
+
+
+*** ../vim-7.3.285/src/fold.c 2010-08-15 21:57:27.000000000 +0200
+--- src/fold.c 2011-08-26 16:03:56.000000000 +0200
+***************
+*** 1469,1479 ****
+ }
+ else
+ {
+! /* move nested folds one level up, to overwrite the fold that is
+ * deleted. */
+ moved = fp->fd_nested.ga_len;
+ if (ga_grow(gap, (int)(moved - 1)) == OK)
+ {
+ /* adjust fd_top and fd_flags for the moved folds */
+ nfp = (fold_T *)fp->fd_nested.ga_data;
+ for (i = 0; i < moved; ++i)
+--- 1469,1482 ----
+ }
+ else
+ {
+! /* Move nested folds one level up, to overwrite the fold that is
+ * deleted. */
+ moved = fp->fd_nested.ga_len;
+ if (ga_grow(gap, (int)(moved - 1)) == OK)
+ {
++ /* Get "fp" again, the array may have been reallocated. */
++ fp = (fold_T *)gap->ga_data + idx;
++
+ /* adjust fd_top and fd_flags for the moved folds */
+ nfp = (fold_T *)fp->fd_nested.ga_data;
+ for (i = 0; i < moved; ++i)
+***************
+*** 1486,1494 ****
+ }
+
+ /* move the existing folds down to make room */
+! if (idx < gap->ga_len)
+ mch_memmove(fp + moved, fp + 1,
+! sizeof(fold_T) * (gap->ga_len - idx));
+ /* move the contained folds one level up */
+ mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
+ vim_free(nfp);
+--- 1489,1497 ----
+ }
+
+ /* move the existing folds down to make room */
+! if (idx + 1 < gap->ga_len)
+ mch_memmove(fp + moved, fp + 1,
+! sizeof(fold_T) * (gap->ga_len - (idx + 1)));
+ /* move the contained folds one level up */
+ mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
+ vim_free(nfp);
+*** ../vim-7.3.285/src/version.c 2011-08-19 22:28:58.000000000 +0200
+--- src/version.c 2011-08-26 16:07:59.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 286,
+ /**/
+
+--
+To keep milk from turning sour: Keep it in the cow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.287
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.287
+Problem: Can't compile with MSVC and tiny options.
+Solution: Move variables and #ifdefs. (Sergey Khorev)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.286/src/os_win32.c 2011-08-10 17:07:56.000000000 +0200
+--- src/os_win32.c 2011-08-27 15:07:28.000000000 +0200
+***************
+*** 3419,3426 ****
+ {
+ DWORD availableBytes = 0;
+ DWORD i;
+- int c;
+- char_u *p;
+ int ret;
+ DWORD len;
+ DWORD toRead;
+--- 3419,3424 ----
+***************
+*** 3479,3484 ****
+--- 3477,3484 ----
+ else if (has_mbyte)
+ {
+ int l;
++ int c;
++ char_u *p;
+
+ len += *buffer_off;
+ buffer[len] = NUL;
+***************
+*** 3558,3566 ****
+ int noread_cnt = 0;
+ garray_T ga;
+ int delay = 1;
+- # ifdef FEAT_MBYTE
+ DWORD buffer_off = 0; /* valid bytes in buffer[] */
+- # endif
+
+ SECURITY_ATTRIBUTES saAttr;
+
+--- 3558,3564 ----
+***************
+*** 3777,3790 ****
+
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ {
+! dump_pipe(options, g_hChildStd_OUT_Rd,
+! &ga, buffer, &buffer_off);
+ break;
+ }
+
+ ++noread_cnt;
+! dump_pipe(options, g_hChildStd_OUT_Rd,
+! &ga, buffer, &buffer_off);
+
+ /* We start waiting for a very short time and then increase it, so
+ * that we respond quickly when the process is quick, and don't
+--- 3775,3786 ----
+
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ {
+! dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
+ break;
+ }
+
+ ++noread_cnt;
+! dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
+
+ /* We start waiting for a very short time and then increase it, so
+ * that we respond quickly when the process is quick, and don't
+*** ../vim-7.3.286/src/version.c 2011-08-26 16:12:55.000000000 +0200
+--- src/version.c 2011-08-27 15:08:27.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 287,
+ /**/
+
+--
+SUPERIMPOSE "England AD 787". After a few more seconds we hear hoofbeats in
+the distance. They come slowly closer. Then out of the mist comes KING
+ARTHUR followed by a SERVANT who is banging two half coconuts together.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.288
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.288
+Problem: has('python') may give an error message for not being able to load
+ the library after using python3.
+Solution: Only give the error when the verbose argument is true.
+Files: src/if_python.c, src/if_python3.c
+
+
+*** ../vim-7.3.287/src/if_python.c 2011-06-19 00:27:46.000000000 +0200
+--- src/if_python.c 2011-08-21 17:03:52.000000000 +0200
+***************
+*** 368,374 ****
+ * standard C extension libraries of one or both python versions. */
+ if (python3_loaded())
+ {
+! EMSG(_("E836: This Vim cannot execute :python after using :py3"));
+ return FAIL;
+ }
+ #endif
+--- 368,375 ----
+ * standard C extension libraries of one or both python versions. */
+ if (python3_loaded())
+ {
+! if (verbose)
+! EMSG(_("E836: This Vim cannot execute :python after using :py3"));
+ return FAIL;
+ }
+ #endif
+*** ../vim-7.3.287/src/if_python3.c 2011-07-15 15:54:39.000000000 +0200
+--- src/if_python3.c 2011-08-21 17:05:19.000000000 +0200
+***************
+*** 367,373 ****
+ * standard C extension libraries of one or both python versions. */
+ if (python_loaded())
+ {
+! EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
+ return FAIL;
+ }
+ # endif
+--- 367,374 ----
+ * standard C extension libraries of one or both python versions. */
+ if (python_loaded())
+ {
+! if (verbose)
+! EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
+ return FAIL;
+ }
+ # endif
+*** ../vim-7.3.287/src/version.c 2011-08-27 15:10:00.000000000 +0200
+--- src/version.c 2011-08-28 15:59:11.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 288,
+ /**/
+
+--
+FIRST SOLDIER: So they wouldn't be able to bring a coconut back anyway.
+SECOND SOLDIER: Wait a minute! Suppose two swallows carried it together?
+FIRST SOLDIER: No, they'd have to have it on a line.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.289
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.289
+Problem: Complete function isn't called when the leader changed.
+Solution: Call ins_compl_restart() when the leader changed. (Taro Muraoka)
+Files: src/edit.c
+
+
+*** ../vim-7.3.288/src/edit.c 2011-05-19 17:25:36.000000000 +0200
+--- src/edit.c 2011-08-28 15:53:47.000000000 +0200
+***************
+*** 3367,3372 ****
+--- 3367,3381 ----
+ ins_bytes(compl_leader + ins_compl_len());
+ compl_used_match = FALSE;
+
++ #ifdef FEAT_COMPL_FUNC
++ /*
++ * To call eval 'completefunc' when leader is changed, restart completion
++ * every time.
++ */
++ if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
++ ins_compl_restart();
++ #endif
++
+ if (compl_started)
+ ins_compl_set_original_text(compl_leader);
+ else
+*** ../vim-7.3.288/src/version.c 2011-08-28 16:00:14.000000000 +0200
+--- src/version.c 2011-08-28 16:01:22.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 289,
+ /**/
+
+--
+THEOREM: VI is perfect.
+PROOF: VI in roman numerals is 6. The natural numbers < 6 which divide 6 are
+1, 2, and 3. 1+2+3 = 6. So 6 is a perfect number. Therefore, VI is perfect.
+QED
+ -- Arthur Tateishi
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.290
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.290
+Problem: When a BufWriteCmd autocommand resets 'modified' this doesn't
+ change older buffer states to be marked as 'modified' like
+ ":write" does. (Yukihiro Nakadaira)
+Solution: When the BufWriteCmd resets 'modified' then adjust the undo
+ information like ":write" does.
+Files: src/fileio.c
+
+
+*** ../vim-7.3.289/src/fileio.c 2011-07-20 18:29:33.000000000 +0200
+--- src/fileio.c 2011-08-29 21:49:27.000000000 +0200
+***************
+*** 3342,3349 ****
+ }
+ else if (reset_changed && whole)
+ {
+! if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
+! sfname, sfname, FALSE, curbuf, eap)))
+ {
+ #ifdef FEAT_QUICKFIX
+ if (overwriting && bt_nofile(curbuf))
+--- 3342,3363 ----
+ }
+ else if (reset_changed && whole)
+ {
+! int was_changed = curbufIsChanged();
+!
+! did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
+! sfname, sfname, FALSE, curbuf, eap);
+! if (did_cmd)
+! {
+! if (was_changed && !curbufIsChanged())
+! {
+! /* Written everything correctly and BufWriteCmd has reset
+! * 'modified': Correct the undo information so that an
+! * undo now sets 'modified'. */
+! u_unchanged(curbuf);
+! u_update_save_nr(curbuf);
+! }
+! }
+! else
+ {
+ #ifdef FEAT_QUICKFIX
+ if (overwriting && bt_nofile(curbuf))
+*** ../vim-7.3.289/src/version.c 2011-08-28 16:02:23.000000000 +0200
+--- src/version.c 2011-09-02 11:37:25.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 290,
+ /**/
+
+--
+OLD WOMAN: Well, how did you become king, then?
+ARTHUR: The Lady of the Lake, her arm clad in the purest shimmering samite,
+ held Excalibur aloft from the bosom of the water to signify by Divine
+ Providence ... that I, Arthur, was to carry Excalibur ... That is
+ why I am your king!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.291
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.291
+Problem: Configure doesn't work properly with Python3.
+Solution: Put -ldl before $LDFLAGS. Add PY3_NO_RTLD_GLOBAL. (Roland
+ Puntaier)
+Files: src/config.h.in, src/auto/configure, src/configure.in
+
+
+*** ../vim-7.3.290/src/config.h.in 2010-10-27 16:49:41.000000000 +0200
+--- src/config.h.in 2011-09-02 11:22:21.000000000 +0200
+***************
+*** 346,351 ****
+--- 346,354 ----
+ /* Define if dynamic python does not require RTLD_GLOBAL */
+ #undef PY_NO_RTLD_GLOBAL
+
++ /* Define if dynamic python3 does not require RTLD_GLOBAL */
++ #undef PY3_NO_RTLD_GLOBAL
++
+ /* Define if you want to include the Ruby interpreter. */
+ #undef FEAT_RUBY
+
+*** ../vim-7.3.290/src/auto/configure 2011-07-15 13:09:46.000000000 +0200
+--- src/auto/configure 2011-09-02 11:23:15.000000000 +0200
+***************
+*** 5733,5739 ****
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="$LDFLAGS -ldl"
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+--- 5733,5739 ----
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="-ldl $LDFLAGS"
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+***************
+*** 5798,5804 ****
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="$LDFLAGS -ldl"
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+--- 5798,5804 ----
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="-ldl $LDFLAGS"
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+*** ../vim-7.3.290/src/configure.in 2011-07-15 13:09:46.000000000 +0200
+--- src/configure.in 2011-09-02 11:19:51.000000000 +0200
+***************
+*** 1161,1167 ****
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="$LDFLAGS -ldl"
+ AC_RUN_IFELSE([
+ #include <dlfcn.h>
+ /* If this program fails, then RTLD_GLOBAL is needed.
+--- 1161,1168 ----
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+ ldflags_save=$LDFLAGS
+! dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+! LDFLAGS="-ldl $LDFLAGS"
+ AC_RUN_IFELSE([
+ #include <dlfcn.h>
+ /* If this program fails, then RTLD_GLOBAL is needed.
+***************
+*** 1205,1211 ****
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="$LDFLAGS -ldl"
+ AC_RUN_IFELSE([
+ #include <dlfcn.h>
+ #include <wchar.h>
+--- 1206,1213 ----
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ ldflags_save=$LDFLAGS
+! dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+! LDFLAGS="-ldl $LDFLAGS"
+ AC_RUN_IFELSE([
+ #include <dlfcn.h>
+ #include <wchar.h>
+*** ../vim-7.3.290/src/version.c 2011-09-02 11:56:15.000000000 +0200
+--- src/version.c 2011-09-02 12:25:13.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 291,
+ /**/
+
+--
+DENNIS: Look, strange women lying on their backs in ponds handing out
+ swords ... that's no basis for a system of government. Supreme
+ executive power derives from a mandate from the masses, not from some
+ farcical aquatic ceremony.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.292
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.292
+Problem: Crash when using fold markers and selecting a visual block that
+ includes a folded line and goes to end of line. (Sam Lidder)
+Solution: Check for the column to be MAXCOL. (James Vega)
+Files: src/screen.c
+
+
+*** ../vim-7.3.291/src/screen.c 2011-08-10 14:32:33.000000000 +0200
+--- src/screen.c 2011-09-02 13:58:18.000000000 +0200
+***************
+*** 2531,2537 ****
+ /* Visual block mode: highlight the chars part of the block */
+ if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
+ {
+! if (wp->w_old_cursor_lcol + txtcol < (colnr_T)W_WIDTH(wp))
+ len = wp->w_old_cursor_lcol;
+ else
+ len = W_WIDTH(wp) - txtcol;
+--- 2531,2539 ----
+ /* Visual block mode: highlight the chars part of the block */
+ if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
+ {
+! if (wp->w_old_cursor_lcol != MAXCOL
+! && wp->w_old_cursor_lcol + txtcol
+! < (colnr_T)W_WIDTH(wp))
+ len = wp->w_old_cursor_lcol;
+ else
+ len = W_WIDTH(wp) - txtcol;
+*** ../vim-7.3.291/src/version.c 2011-09-02 12:27:20.000000000 +0200
+--- src/version.c 2011-09-02 14:00:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 292,
+ /**/
+
+--
+Hacker: Someone skilled in computer programming (good guy).
+Cracker: A hacker that uses his skills to crack software (bad guy).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.293
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.293
+Problem: MSVC compiler has a problem with non-ASCII characters.
+Solution: Avoid non-ASCII characters. (Hong Xu)
+Files: src/ascii.h, src/spell.c
+
+
+*** ../vim-7.3.292/src/ascii.h 2011-05-10 16:41:13.000000000 +0200
+--- src/ascii.h 2011-09-02 14:12:48.000000000 +0200
+***************
+*** 123,129 ****
+ #define DCS 0x90 /* Device Control String */
+ #define STERM 0x9c /* String Terminator */
+
+! #define POUND '£'
+
+ #define CTRL_F_STR "\056"
+ #define CTRL_H_STR "\026"
+--- 123,129 ----
+ #define DCS 0x90 /* Device Control String */
+ #define STERM 0x9c /* String Terminator */
+
+! #define POUND '\xA3'
+
+ #define CTRL_F_STR "\056"
+ #define CTRL_H_STR "\026"
+*** ../vim-7.3.292/src/spell.c 2011-04-11 21:35:03.000000000 +0200
+--- src/spell.c 2011-09-02 14:13:30.000000000 +0200
+***************
+*** 11197,11203 ****
+ c = *s++;
+
+ #ifdef FEAT_MBYTE
+! /* We only change ß to SS when we are certain latin1 is used. It
+ * would cause weird errors in other 8-bit encodings. */
+ if (enc_latin1like && c == 0xdf)
+ {
+--- 11197,11203 ----
+ c = *s++;
+
+ #ifdef FEAT_MBYTE
+! /* We only change 0xdf to SS when we are certain latin1 is used. It
+ * would cause weird errors in other 8-bit encodings. */
+ if (enc_latin1like && c == 0xdf)
+ {
+*** ../vim-7.3.292/src/version.c 2011-09-02 14:07:31.000000000 +0200
+--- src/version.c 2011-09-02 14:13:57.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 293,
+ /**/
+
+--
+ A village. Sound of chanting of Latin canon, punctuated by short, sharp
+ cracks. It comes nearer. We see it is a line of MONKS ala SEVENTH SEAL
+ flagellation scene, chanting and banging themselves on the foreheads with
+ wooden boards.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.294
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.294 (after 7.3.289)
+Problem: Patch 289 causes more problems than it solves.
+Solution: Rever the patch untill a better solution is found.
+Files: src/edit.c
+
+
+*** ../vim-7.3.293/src/edit.c 2011-08-28 16:02:23.000000000 +0200
+--- src/edit.c 2011-09-05 20:07:49.000000000 +0200
+***************
+*** 3367,3381 ****
+ ins_bytes(compl_leader + ins_compl_len());
+ compl_used_match = FALSE;
+
+- #ifdef FEAT_COMPL_FUNC
+- /*
+- * To call eval 'completefunc' when leader is changed, restart completion
+- * every time.
+- */
+- if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
+- ins_compl_restart();
+- #endif
+-
+ if (compl_started)
+ ins_compl_set_original_text(compl_leader);
+ else
+--- 3367,3372 ----
+*** ../vim-7.3.293/src/version.c 2011-09-02 14:18:14.000000000 +0200
+--- src/version.c 2011-09-05 20:08:27.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 294,
+ /**/
+
+--
+Scientists decoded the first message from an alien civilization:
+ SIMPLY SEND 6 TIMES 10 TO THE 50 ATOMS OF HYDROGEN TO THE STAR
+SYSTEM AT THE TOP OF THE LIST, CROSS OFF THAT STAR SYSTEM, THEN PUT
+YOUR STAR SYSTEM AT THE BOTTOM OF THE LIST AND SEND IT TO 100 OTHER
+STAR SYSTEMS. WITHIN ONE TENTH GALACTIC ROTATION YOU WILL RECEIVE
+ENOUGH HYDROGREN TO POWER YOUR CIVILIZATION UNTIL ENTROPY REACHES ITS
+MAXIMUM! IT REALLY WORKS!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.295
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.295
+Problem: When filtering text with an external command Vim may not read all
+ the output.
+Solution: When select() is interrupted loop and try again. (James Vega)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.294/src/os_unix.c 2011-08-04 20:31:50.000000000 +0200
+--- src/os_unix.c 2011-09-07 13:34:09.000000000 +0200
+***************
+*** 4819,4825 ****
+
+ /*
+ * Wait "msec" msec until a character is available from file descriptor "fd".
+! * Time == -1 will block forever.
+ * When a GUI is being used, this will not be used for input -- webb
+ * Returns also, when a request from Sniff is waiting -- toni.
+ * Or when a Linux GPM mouse event is waiting.
+--- 4819,4826 ----
+
+ /*
+ * Wait "msec" msec until a character is available from file descriptor "fd".
+! * "msec" == 0 will check for characters once.
+! * "msec" == -1 will block until a character is available.
+ * When a GUI is being used, this will not be used for input -- webb
+ * Returns also, when a request from Sniff is waiting -- toni.
+ * Or when a Linux GPM mouse event is waiting.
+***************
+*** 5057,5063 ****
+ /*
+ * Select on ready for reading and exceptional condition (end of file).
+ */
+! FD_ZERO(&rfds); /* calls bzero() on a sun */
+ FD_ZERO(&efds);
+ FD_SET(fd, &rfds);
+ # if !defined(__QNX__) && !defined(__CYGWIN32__)
+--- 5058,5065 ----
+ /*
+ * Select on ready for reading and exceptional condition (end of file).
+ */
+! select_eintr:
+! FD_ZERO(&rfds);
+ FD_ZERO(&efds);
+ FD_SET(fd, &rfds);
+ # if !defined(__QNX__) && !defined(__CYGWIN32__)
+***************
+*** 5117,5122 ****
+--- 5119,5132 ----
+ # else
+ ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
+ # endif
++ # ifdef EINTR
++ if (ret == -1 && errno == EINTR)
++ /* Interrupted by a signal, need to try again. We ignore msec
++ * here, because we do want to check even after a timeout if
++ * characters are available. Needed for reading output of an
++ * external command after the process has finished. */
++ goto select_eintr;
++ # endif
+ # ifdef __TANDEM
+ if (ret == -1 && errno == ENOTSUP)
+ {
+***************
+*** 5124,5130 ****
+ FD_ZERO(&efds);
+ ret = 0;
+ }
+! #endif
+ # ifdef FEAT_MZSCHEME
+ if (ret == 0 && mzquantum_used)
+ /* loop if MzThreads must be scheduled and timeout occurred */
+--- 5134,5140 ----
+ FD_ZERO(&efds);
+ ret = 0;
+ }
+! # endif
+ # ifdef FEAT_MZSCHEME
+ if (ret == 0 && mzquantum_used)
+ /* loop if MzThreads must be scheduled and timeout occurred */
+*** ../vim-7.3.294/src/version.c 2011-09-05 20:13:37.000000000 +0200
+--- src/version.c 2011-09-07 14:05:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 295,
+ /**/
+
+--
+"You're fired." (1980)
+"You're laid off." (1985)
+"You're downsized." (1990)
+"You're rightsized." (1992)
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.296
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.296
+Problem: When writing to an external command a zombie process may be left
+ behind.
+Solution: Wait on the process. (James Vega)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.295/src/os_unix.c 2011-09-07 14:06:38.000000000 +0200
+--- src/os_unix.c 2011-09-07 14:54:11.000000000 +0200
+***************
+*** 154,159 ****
+--- 154,166 ----
+
+ static void may_core_dump __ARGS((void));
+
++ #ifdef HAVE_UNION_WAIT
++ typedef union wait waitstatus;
++ #else
++ typedef int waitstatus;
++ #endif
++ static int wait4pid __ARGS((pid_t, waitstatus *));
++
+ static int WaitForChar __ARGS((long));
+ #if defined(__BEOS__)
+ int RealWaitForChar __ARGS((int, long, int *));
+***************
+*** 3660,3665 ****
+--- 3667,3713 ----
+ /* Nothing to do. */
+ }
+
++ /*
++ * Wait for process "child" to end.
++ * Return "child" if it exited properly, <= 0 on error.
++ */
++ static pid_t
++ wait4pid(child, status)
++ pid_t child;
++ waitstatus *status;
++ {
++ pid_t wait_pid = 0;
++
++ while (wait_pid != child)
++ {
++ # ifdef _THREAD_SAFE
++ /* Ugly hack: when compiled with Python threads are probably
++ * used, in which case wait() sometimes hangs for no obvious
++ * reason. Use waitpid() instead and loop (like the GUI). */
++ # ifdef __NeXT__
++ wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
++ # else
++ wait_pid = waitpid(child, status, WNOHANG);
++ # endif
++ if (wait_pid == 0)
++ {
++ /* Wait for 1/100 sec before trying again. */
++ mch_delay(10L, TRUE);
++ continue;
++ }
++ # else
++ wait_pid = wait(status);
++ # endif
++ if (wait_pid <= 0
++ # ifdef ECHILD
++ && errno == ECHILD
++ # endif
++ )
++ break;
++ }
++ return wait_pid;
++ }
++
+ int
+ mch_call_shell(cmd, options)
+ char_u *cmd;
+***************
+*** 4234,4240 ****
+ {
+ MSG_PUTS(_("\nCannot fork\n"));
+ }
+! else if (wpid == 0)
+ {
+ linenr_T lnum = curbuf->b_op_start.lnum;
+ int written = 0;
+--- 4282,4288 ----
+ {
+ MSG_PUTS(_("\nCannot fork\n"));
+ }
+! else if (wpid == 0) /* child */
+ {
+ linenr_T lnum = curbuf->b_op_start.lnum;
+ int written = 0;
+***************
+*** 4242,4248 ****
+ char_u *s;
+ size_t l;
+
+- /* child */
+ close(fromshell_fd);
+ for (;;)
+ {
+--- 4290,4295 ----
+***************
+*** 4287,4293 ****
+ }
+ _exit(0);
+ }
+! else
+ {
+ close(toshell_fd);
+ toshell_fd = -1;
+--- 4334,4340 ----
+ }
+ _exit(0);
+ }
+! else /* parent */
+ {
+ close(toshell_fd);
+ toshell_fd = -1;
+***************
+*** 4584,4590 ****
+ * typed characters (otherwise we would lose typeahead).
+ */
+ # ifdef __NeXT__
+! wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *) 0);
+ # else
+ wait_pid = waitpid(pid, &status, WNOHANG);
+ # endif
+--- 4631,4637 ----
+ * typed characters (otherwise we would lose typeahead).
+ */
+ # ifdef __NeXT__
+! wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
+ # else
+ wait_pid = waitpid(pid, &status, WNOHANG);
+ # endif
+***************
+*** 4633,4665 ****
+ * Don't wait if wait_pid was already set above, indicating the
+ * child already exited.
+ */
+! while (wait_pid != pid)
+! {
+! # ifdef _THREAD_SAFE
+! /* Ugly hack: when compiled with Python threads are probably
+! * used, in which case wait() sometimes hangs for no obvious
+! * reason. Use waitpid() instead and loop (like the GUI). */
+! # ifdef __NeXT__
+! wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
+! # else
+! wait_pid = waitpid(pid, &status, WNOHANG);
+! # endif
+! if (wait_pid == 0)
+! {
+! /* Wait for 1/100 sec before trying again. */
+! mch_delay(10L, TRUE);
+! continue;
+! }
+! # else
+! wait_pid = wait(&status);
+! # endif
+! if (wait_pid <= 0
+! # ifdef ECHILD
+! && errno == ECHILD
+! # endif
+! )
+! break;
+! }
+
+ # ifdef FEAT_GUI
+ /* Close slave side of pty. Only do this after the child has
+--- 4680,4687 ----
+ * Don't wait if wait_pid was already set above, indicating the
+ * child already exited.
+ */
+! if (wait_pid != pid)
+! wait_pid = wait4pid(pid, &status);
+
+ # ifdef FEAT_GUI
+ /* Close slave side of pty. Only do this after the child has
+***************
+*** 4672,4678 ****
+--- 4694,4703 ----
+ /* Make sure the child that writes to the external program is
+ * dead. */
+ if (wpid > 0)
++ {
+ kill(wpid, SIGKILL);
++ wait4pid(wpid, NULL);
++ }
+
+ /*
+ * Set to raw mode right now, otherwise a CTRL-C after
+*** ../vim-7.3.295/src/version.c 2011-09-07 14:06:39.000000000 +0200
+--- src/version.c 2011-09-07 15:03:24.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 296,
+ /**/
+
+--
+If your company is not involved in something called "ISO 9000" you probably
+have no idea what it is. If your company _is_ involved in ISO 9000 then you
+definitely have no idea what it is.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.297
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.297
+Problem: Can't load Perl 5.14 dynamically.
+Solution: Add code in #ifdefs. (Charles Cooper)
+Files: if_perl.xs
+
+
+*** ../vim-7.3.296/src/if_perl.xs 2011-07-27 14:15:41.000000000 +0200
+--- src/if_perl.xs 2011-09-07 18:47:07.000000000 +0200
+***************
+*** 147,153 ****
+--- 147,158 ----
+ # define Perl_save_int dll_Perl_save_int
+ # define Perl_stack_grow dll_Perl_stack_grow
+ # define Perl_set_context dll_Perl_set_context
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ # define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
++ # define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
++ # else
+ # define Perl_sv_2bool dll_Perl_sv_2bool
++ # endif
+ # define Perl_sv_2iv dll_Perl_sv_2iv
+ # define Perl_sv_2mortal dll_Perl_sv_2mortal
+ # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+***************
+*** 252,258 ****
+--- 257,268 ----
+ static void (*Perl_save_int)(pTHX_ int*);
+ static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
+ static SV** (*Perl_set_context)(void*);
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ static bool (*Perl_sv_2bool_flags)(pTHX_ SV*, I32);
++ static void (*Perl_xs_apiversion_bootcheck)(pTHX_ SV *module, const char *api_p, STRLEN api_len);
++ #else
+ static bool (*Perl_sv_2bool)(pTHX_ SV*);
++ #endif
+ static IV (*Perl_sv_2iv)(pTHX_ SV*);
+ static SV* (*Perl_sv_2mortal)(pTHX_ SV*);
+ #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+***************
+*** 360,366 ****
+--- 370,381 ----
+ {"Perl_save_int", (PERL_PROC*)&Perl_save_int},
+ {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
+ {"Perl_set_context", (PERL_PROC*)&Perl_set_context},
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ {"Perl_sv_2bool_flags", (PERL_PROC*)&Perl_sv_2bool_flags},
++ {"Perl_xs_apiversion_bootcheck",(PERL_PROC*)&Perl_xs_apiversion_bootcheck},
++ #else
+ {"Perl_sv_2bool", (PERL_PROC*)&Perl_sv_2bool},
++ #endif
+ {"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv},
+ {"Perl_sv_2mortal", (PERL_PROC*)&Perl_sv_2mortal},
+ #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+***************
+*** 407,412 ****
+--- 422,430 ----
+ {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
+ {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
+ {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
++ {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ # else
+ {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
+ {"Perl_Istack_max_ptr", (PERL_PROC*)&Perl_Istack_max_ptr},
+ {"Perl_Istack_base_ptr", (PERL_PROC*)&Perl_Istack_base_ptr},
+***************
+*** 418,432 ****
+ {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
+ {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
+ {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
+- {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
+ {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
+ {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
+ #endif
+ {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
+ {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
+ {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
+- {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
+ {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
+ {"", NULL},
+ };
+
+--- 436,453 ----
+ {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
+ {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
+ {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
+ {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
+ {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
++ # endif
+ #endif
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ #else
+ {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
+ {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
+ {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
+ {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
++ #endif
++ {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
+ {"", NULL},
+ };
+
+*** ../vim-7.3.296/src/version.c 2011-09-07 15:04:26.000000000 +0200
+--- src/version.c 2011-09-07 18:45:28.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 297,
+ /**/
+
+--
+At some point in the project somebody will start whining about the need to
+determine the project "requirements". This involves interviewing people who
+don't know what they want but, curiously, know exactly when they need it.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.298
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.298
+Problem: Built-in colors are different from rgb.txt.
+Solution: Adjust the color values. (Benjamin Haskell)
+Files: src/gui_photon.c, src/gui_w48.c
+
+
+*** ../vim-7.3.297/src/gui_photon.c 2011-08-10 12:19:00.000000000 +0200
+--- src/gui_photon.c 2011-09-07 18:55:09.000000000 +0200
+***************
+*** 2007,2014 ****
+ static GuiColourTable table[] =
+ {
+ {"Black", RGB(0x00, 0x00, 0x00)},
+! {"DarkGray", RGB(0x80, 0x80, 0x80)},
+! {"DarkGrey", RGB(0x80, 0x80, 0x80)},
+ {"Gray", RGB(0xC0, 0xC0, 0xC0)},
+ {"Grey", RGB(0xC0, 0xC0, 0xC0)},
+ {"LightGray", RGB(0xD3, 0xD3, 0xD3)},
+--- 2007,2014 ----
+ static GuiColourTable table[] =
+ {
+ {"Black", RGB(0x00, 0x00, 0x00)},
+! {"DarkGray", RGB(0xA9, 0xA9, 0xA9)},
+! {"DarkGrey", RGB(0xA9, 0xA9, 0xA9)},
+ {"Gray", RGB(0xC0, 0xC0, 0xC0)},
+ {"Grey", RGB(0xC0, 0xC0, 0xC0)},
+ {"LightGray", RGB(0xD3, 0xD3, 0xD3)},
+***************
+*** 2037,2055 ****
+ {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
+ {"DarkBlue", RGB(0x00, 0x00, 0x80)},
+ {"Blue", RGB(0x00, 0x00, 0xFF)},
+! {"LightBlue", RGB(0xA0, 0xA0, 0xFF)},
+ {"DarkGreen", RGB(0x00, 0x80, 0x00)},
+ {"Green", RGB(0x00, 0xFF, 0x00)},
+! {"LightGreen", RGB(0xA0, 0xFF, 0xA0)},
+ {"DarkCyan", RGB(0x00, 0x80, 0x80)},
+ {"Cyan", RGB(0x00, 0xFF, 0xFF)},
+! {"LightCyan", RGB(0xA0, 0xFF, 0xFF)},
+ {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
+ {"Magenta", RGB(0xFF, 0x00, 0xFF)},
+ {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
+ {"Brown", RGB(0x80, 0x40, 0x40)},
+ {"Yellow", RGB(0xFF, 0xFF, 0x00)},
+! {"LightYellow", RGB(0xFF, 0xFF, 0xA0)},
+ {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
+ {"Orange", RGB(0xFF, 0xA5, 0x00)},
+ {"Purple", RGB(0xA0, 0x20, 0xF0)},
+--- 2037,2055 ----
+ {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
+ {"DarkBlue", RGB(0x00, 0x00, 0x80)},
+ {"Blue", RGB(0x00, 0x00, 0xFF)},
+! {"LightBlue", RGB(0xAD, 0xD8, 0xE6)},
+ {"DarkGreen", RGB(0x00, 0x80, 0x00)},
+ {"Green", RGB(0x00, 0xFF, 0x00)},
+! {"LightGreen", RGB(0x90, 0xEE, 0x90)},
+ {"DarkCyan", RGB(0x00, 0x80, 0x80)},
+ {"Cyan", RGB(0x00, 0xFF, 0xFF)},
+! {"LightCyan", RGB(0xE0, 0xFF, 0xFF)},
+ {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
+ {"Magenta", RGB(0xFF, 0x00, 0xFF)},
+ {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
+ {"Brown", RGB(0x80, 0x40, 0x40)},
+ {"Yellow", RGB(0xFF, 0xFF, 0x00)},
+! {"LightYellow", RGB(0xFF, 0xFF, 0xE0)},
+ {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
+ {"Orange", RGB(0xFF, 0xA5, 0x00)},
+ {"Purple", RGB(0xA0, 0x20, 0xF0)},
+*** ../vim-7.3.297/src/gui_w48.c 2011-08-10 17:07:56.000000000 +0200
+--- src/gui_w48.c 2011-09-07 18:55:09.000000000 +0200
+***************
+*** 1411,1422 ****
+ static guicolor_tTable table[] =
+ {
+ {"Black", RGB(0x00, 0x00, 0x00)},
+! {"DarkGray", RGB(0x80, 0x80, 0x80)},
+! {"DarkGrey", RGB(0x80, 0x80, 0x80)},
+ {"Gray", RGB(0xC0, 0xC0, 0xC0)},
+ {"Grey", RGB(0xC0, 0xC0, 0xC0)},
+! {"LightGray", RGB(0xE0, 0xE0, 0xE0)},
+! {"LightGrey", RGB(0xE0, 0xE0, 0xE0)},
+ {"Gray10", RGB(0x1A, 0x1A, 0x1A)},
+ {"Grey10", RGB(0x1A, 0x1A, 0x1A)},
+ {"Gray20", RGB(0x33, 0x33, 0x33)},
+--- 1411,1422 ----
+ static guicolor_tTable table[] =
+ {
+ {"Black", RGB(0x00, 0x00, 0x00)},
+! {"DarkGray", RGB(0xA9, 0xA9, 0xA9)},
+! {"DarkGrey", RGB(0xA9, 0xA9, 0xA9)},
+ {"Gray", RGB(0xC0, 0xC0, 0xC0)},
+ {"Grey", RGB(0xC0, 0xC0, 0xC0)},
+! {"LightGray", RGB(0xD3, 0xD3, 0xD3)},
+! {"LightGrey", RGB(0xD3, 0xD3, 0xD3)},
+ {"Gray10", RGB(0x1A, 0x1A, 0x1A)},
+ {"Grey10", RGB(0x1A, 0x1A, 0x1A)},
+ {"Gray20", RGB(0x33, 0x33, 0x33)},
+***************
+*** 1441,1459 ****
+ {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
+ {"DarkBlue", RGB(0x00, 0x00, 0x80)},
+ {"Blue", RGB(0x00, 0x00, 0xFF)},
+! {"LightBlue", RGB(0xA0, 0xA0, 0xFF)},
+ {"DarkGreen", RGB(0x00, 0x80, 0x00)},
+ {"Green", RGB(0x00, 0xFF, 0x00)},
+! {"LightGreen", RGB(0xA0, 0xFF, 0xA0)},
+ {"DarkCyan", RGB(0x00, 0x80, 0x80)},
+ {"Cyan", RGB(0x00, 0xFF, 0xFF)},
+! {"LightCyan", RGB(0xA0, 0xFF, 0xFF)},
+ {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
+ {"Magenta", RGB(0xFF, 0x00, 0xFF)},
+ {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
+ {"Brown", RGB(0x80, 0x40, 0x40)},
+ {"Yellow", RGB(0xFF, 0xFF, 0x00)},
+! {"LightYellow", RGB(0xFF, 0xFF, 0xA0)},
+ {"DarkYellow", RGB(0xBB, 0xBB, 0x00)},
+ {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
+ {"Orange", RGB(0xFF, 0xA5, 0x00)},
+--- 1441,1459 ----
+ {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
+ {"DarkBlue", RGB(0x00, 0x00, 0x80)},
+ {"Blue", RGB(0x00, 0x00, 0xFF)},
+! {"LightBlue", RGB(0xAD, 0xD8, 0xE6)},
+ {"DarkGreen", RGB(0x00, 0x80, 0x00)},
+ {"Green", RGB(0x00, 0xFF, 0x00)},
+! {"LightGreen", RGB(0x90, 0xEE, 0x90)},
+ {"DarkCyan", RGB(0x00, 0x80, 0x80)},
+ {"Cyan", RGB(0x00, 0xFF, 0xFF)},
+! {"LightCyan", RGB(0xE0, 0xFF, 0xFF)},
+ {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
+ {"Magenta", RGB(0xFF, 0x00, 0xFF)},
+ {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
+ {"Brown", RGB(0x80, 0x40, 0x40)},
+ {"Yellow", RGB(0xFF, 0xFF, 0x00)},
+! {"LightYellow", RGB(0xFF, 0xFF, 0xE0)},
+ {"DarkYellow", RGB(0xBB, 0xBB, 0x00)},
+ {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
+ {"Orange", RGB(0xFF, 0xA5, 0x00)},
+*** ../vim-7.3.297/src/version.c 2011-09-07 18:47:19.000000000 +0200
+--- src/version.c 2011-09-07 18:55:27.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 298,
+ /**/
+
+--
+You can test a person's importance in the organization by asking how much RAM
+his computer has. Anybody who knows the answer to that question is not a
+decision-maker.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.299
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.299
+Problem: Source code not in Vim style.
+Solution: Adjust the style. (Elias Diem)
+Files: src/gui_photon.c
+
+
+*** ../vim-7.3.298/src/gui_photon.c 2011-09-07 18:58:24.000000000 +0200
+--- src/gui_photon.c 2011-09-07 19:02:59.000000000 +0200
+***************
+*** 535,547 ****
+ &src_taken,
+ buf,
+ 6,
+! &dst_made );
+
+! add_to_input_buf( buf, dst_made );
+ }
+ else
+ {
+! add_to_input_buf( string, len );
+ }
+
+ return Pt_CONSUME;
+--- 535,547 ----
+ &src_taken,
+ buf,
+ 6,
+! &dst_made);
+
+! add_to_input_buf(buf, dst_made);
+ }
+ else
+ {
+! add_to_input_buf(string, len);
+ }
+
+ return Pt_CONSUME;
+***************
+*** 549,579 ****
+ len = 0;
+ #endif
+ ch = key->key_cap;
+! if( ch < 0xff )
+ {
+ /* FIXME: is this the right thing to do? */
+! if( modifiers & MOD_MASK_CTRL )
+ {
+ modifiers &= ~MOD_MASK_CTRL;
+
+! if( ( ch >= 'a' && ch <= 'z' ) ||
+ ch == '[' ||
+ ch == ']' ||
+! ch == '\\' )
+! ch = Ctrl_chr( ch );
+! else if( ch == '2' )
+ ch = NUL;
+! else if( ch == '6' )
+ ch = 0x1e;
+! else if( ch == '-' )
+ ch = 0x1f;
+ else
+ modifiers |= MOD_MASK_CTRL;
+ }
+
+! if( modifiers & MOD_MASK_ALT )
+ {
+! ch = Meta( ch );
+ modifiers &= ~MOD_MASK_ALT;
+ }
+ }
+--- 549,579 ----
+ len = 0;
+ #endif
+ ch = key->key_cap;
+! if (ch < 0xff)
+ {
+ /* FIXME: is this the right thing to do? */
+! if (modifiers & MOD_MASK_CTRL)
+ {
+ modifiers &= ~MOD_MASK_CTRL;
+
+! if ((ch >= 'a' && ch <= 'z') ||
+ ch == '[' ||
+ ch == ']' ||
+! ch == '\\')
+! ch = Ctrl_chr(ch);
+! else if (ch == '2')
+ ch = NUL;
+! else if (ch == '6')
+ ch = 0x1e;
+! else if (ch == '-')
+ ch = 0x1f;
+ else
+ modifiers |= MOD_MASK_CTRL;
+ }
+
+! if (modifiers & MOD_MASK_ALT)
+ {
+! ch = Meta(ch);
+ modifiers &= ~MOD_MASK_ALT;
+ }
+ }
+***************
+*** 586,604 ****
+ modifiers &= ~MOD_MASK_SHIFT;
+ }
+
+! ch = simplify_key( ch, &modifiers );
+! if( modifiers )
+ {
+ string[ len++ ] = CSI;
+ string[ len++ ] = KS_MODIFIER;
+ string[ len++ ] = modifiers;
+ }
+
+! if( IS_SPECIAL( ch ) )
+ {
+ string[ len++ ] = CSI;
+! string[ len++ ] = K_SECOND( ch );
+! string[ len++ ] = K_THIRD( ch );
+ }
+ else
+ {
+--- 586,604 ----
+ modifiers &= ~MOD_MASK_SHIFT;
+ }
+
+! ch = simplify_key(ch, &modifiers);
+! if (modifiers)
+ {
+ string[ len++ ] = CSI;
+ string[ len++ ] = KS_MODIFIER;
+ string[ len++ ] = modifiers;
+ }
+
+! if (IS_SPECIAL(ch))
+ {
+ string[ len++ ] = CSI;
+! string[ len++ ] = K_SECOND(ch);
+! string[ len++ ] = K_THIRD(ch);
+ }
+ else
+ {
+***************
+*** 619,627 ****
+ string[ len++ ] = KE_CSI;
+ }
+
+! if( len > 0 )
+ {
+! add_to_input_buf( string, len );
+ return Pt_CONSUME;
+ }
+ }
+--- 619,627 ----
+ string[ len++ ] = KE_CSI;
+ }
+
+! if (len > 0)
+ {
+! add_to_input_buf(string, len);
+ return Pt_CONSUME;
+ }
+ }
+***************
+*** 630,646 ****
+ }
+
+ static int
+! gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PhPointerEvent_t *pointer;
+ PhRect_t *pos;
+ int button = 0, repeated_click, modifiers = 0x0;
+ short mouse_x, mouse_y;
+
+! pointer = PhGetData( info->event );
+! pos = PhGetRects( info->event );
+
+! gui_mch_mousehide( MOUSE_SHOW );
+
+ /*
+ * Coordinates need to be relative to the base window,
+--- 630,646 ----
+ }
+
+ static int
+! gui_ph_handle_mouse(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PhPointerEvent_t *pointer;
+ PhRect_t *pos;
+ int button = 0, repeated_click, modifiers = 0x0;
+ short mouse_x, mouse_y;
+
+! pointer = PhGetData(info->event);
+! pos = PhGetRects(info->event);
+
+! gui_mch_mousehide(MOUSE_SHOW);
+
+ /*
+ * Coordinates need to be relative to the base window,
+***************
+*** 649,675 ****
+ mouse_x = pos->ul.x + gui.border_width;
+ mouse_y = pos->ul.y + gui.border_width;
+
+! if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
+ {
+! gui_mouse_moved( mouse_x, mouse_y );
+ return Pt_CONTINUE;
+ }
+
+! if( pointer->key_mods & Pk_KM_Shift )
+ modifiers |= MOUSE_SHIFT;
+! if( pointer->key_mods & Pk_KM_Ctrl )
+ modifiers |= MOUSE_CTRL;
+! if( pointer->key_mods & Pk_KM_Alt )
+ modifiers |= MOUSE_ALT;
+
+ /*
+ * FIXME More than one button may be involved, but for
+ * now just deal with one
+ */
+! if( pointer->buttons & Ph_BUTTON_SELECT )
+ button = MOUSE_LEFT;
+
+! if( pointer->buttons & Ph_BUTTON_MENU )
+ {
+ button = MOUSE_RIGHT;
+ /* Need the absolute coordinates for the popup menu */
+--- 649,675 ----
+ mouse_x = pos->ul.x + gui.border_width;
+ mouse_y = pos->ul.y + gui.border_width;
+
+! if (info->event->type == Ph_EV_PTR_MOTION_NOBUTTON)
+ {
+! gui_mouse_moved(mouse_x, mouse_y);
+ return Pt_CONTINUE;
+ }
+
+! if (pointer->key_mods & Pk_KM_Shift)
+ modifiers |= MOUSE_SHIFT;
+! if (pointer->key_mods & Pk_KM_Ctrl)
+ modifiers |= MOUSE_CTRL;
+! if (pointer->key_mods & Pk_KM_Alt)
+ modifiers |= MOUSE_ALT;
+
+ /*
+ * FIXME More than one button may be involved, but for
+ * now just deal with one
+ */
+! if (pointer->buttons & Ph_BUTTON_SELECT)
+ button = MOUSE_LEFT;
+
+! if (pointer->buttons & Ph_BUTTON_MENU)
+ {
+ button = MOUSE_RIGHT;
+ /* Need the absolute coordinates for the popup menu */
+***************
+*** 677,705 ****
+ abs_mouse.y = pointer->pos.y;
+ }
+
+! if( pointer->buttons & Ph_BUTTON_ADJUST )
+ button = MOUSE_MIDDLE;
+
+ /* Catch a real release (not phantom or other releases */
+! if( info->event->type == Ph_EV_BUT_RELEASE )
+ button = MOUSE_RELEASE;
+
+! if( info->event->type & Ph_EV_PTR_MOTION_BUTTON )
+ button = MOUSE_DRAG;
+
+ #if 0
+ /* Vim doesn't use button repeats */
+! if( info->event->type & Ph_EV_BUT_REPEAT )
+ button = MOUSE_DRAG;
+ #endif
+
+ /* Don't do anything if it is one of the phantom mouse release events */
+! if( ( button != MOUSE_RELEASE ) ||
+! ( info->event->subtype == Ph_EV_RELEASE_REAL ) )
+ {
+ repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
+
+! gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
+ }
+
+ return Pt_CONTINUE;
+--- 677,705 ----
+ abs_mouse.y = pointer->pos.y;
+ }
+
+! if (pointer->buttons & Ph_BUTTON_ADJUST)
+ button = MOUSE_MIDDLE;
+
+ /* Catch a real release (not phantom or other releases */
+! if (info->event->type == Ph_EV_BUT_RELEASE)
+ button = MOUSE_RELEASE;
+
+! if (info->event->type & Ph_EV_PTR_MOTION_BUTTON)
+ button = MOUSE_DRAG;
+
+ #if 0
+ /* Vim doesn't use button repeats */
+! if (info->event->type & Ph_EV_BUT_REPEAT)
+ button = MOUSE_DRAG;
+ #endif
+
+ /* Don't do anything if it is one of the phantom mouse release events */
+! if ((button != MOUSE_RELEASE) ||
+! (info->event->subtype == Ph_EV_RELEASE_REAL))
+ {
+ repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
+
+! gui_send_mouse_event(button , mouse_x, mouse_y, repeated_click, modifiers);
+ }
+
+ return Pt_CONTINUE;
+***************
+*** 707,741 ****
+
+ /* Handle a focus change of the PtRaw widget */
+ static int
+! gui_ph_handle_focus( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+! if( info->reason == Pt_CB_LOST_FOCUS )
+ {
+! PtRemoveEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+! gui_ph_handle_mouse, NULL );
+
+! gui_mch_mousehide( MOUSE_SHOW );
+ }
+ else
+ {
+! PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+! gui_ph_handle_mouse, NULL );
+ }
+ return Pt_CONTINUE;
+ }
+
+ static void
+! gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
+ {
+ PhRect_t *r;
+ PhPoint_t offset;
+ PhPoint_t translation;
+
+! if( is_ignore_draw == TRUE )
+ return;
+
+! PtSuperClassDraw( PtBasic, widget, damage );
+! PgGetTranslation( &translation );
+ PgClearTranslation();
+
+ #if 0
+--- 707,741 ----
+
+ /* Handle a focus change of the PtRaw widget */
+ static int
+! gui_ph_handle_focus(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+! if (info->reason == Pt_CB_LOST_FOCUS)
+ {
+! PtRemoveEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+! gui_ph_handle_mouse, NULL);
+
+! gui_mch_mousehide(MOUSE_SHOW);
+ }
+ else
+ {
+! PtAddEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+! gui_ph_handle_mouse, NULL);
+ }
+ return Pt_CONTINUE;
+ }
+
+ static void
+! gui_ph_handle_raw_draw(PtWidget_t *widget, PhTile_t *damage)
+ {
+ PhRect_t *r;
+ PhPoint_t offset;
+ PhPoint_t translation;
+
+! if (is_ignore_draw == TRUE)
+ return;
+
+! PtSuperClassDraw(PtBasic, widget, damage);
+! PgGetTranslation(&translation);
+ PgClearTranslation();
+
+ #if 0
+***************
+*** 750,770 ****
+ out_flush();
+ #endif
+
+! PtWidgetOffset( widget, &offset );
+! PhTranslatePoint( &offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+
+ #if 1
+ /* Redraw individual damage regions */
+! if( damage->next != NULL )
+ damage = damage->next;
+
+! while( damage != NULL )
+ {
+ r = &damage->rect;
+ gui_redraw(
+ r->ul.x - offset.x, r->ul.y - offset.y,
+ r->lr.x - r->ul.x + 1,
+! r->lr.y - r->ul.y + 1 );
+ damage = damage->next;
+ }
+ #else
+--- 750,770 ----
+ out_flush();
+ #endif
+
+! PtWidgetOffset(widget, &offset);
+! PhTranslatePoint(&offset, PtWidgetPos(gui.vimTextArea, NULL));
+
+ #if 1
+ /* Redraw individual damage regions */
+! if (damage->next != NULL)
+ damage = damage->next;
+
+! while(damage != NULL)
+ {
+ r = &damage->rect;
+ gui_redraw(
+ r->ul.x - offset.x, r->ul.y - offset.y,
+ r->lr.x - r->ul.x + 1,
+! r->lr.y - r->ul.y + 1);
+ damage = damage->next;
+ }
+ #else
+***************
+*** 773,796 ****
+ gui_redraw(
+ r->ul.x - offset.x, r->ul.y - offset.y,
+ r->lr.x - r->ul.x + 1,
+! r->lr.y - r->ul.y + 1 );
+ #endif
+
+! PgSetTranslation( &translation, 0 );
+ }
+
+ static int
+ gui_ph_handle_pulldown_menu(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+! if( data != NULL )
+ {
+ vimmenu_T *menu = (vimmenu_T *) data;
+
+! PtPositionMenu( menu->submenu_id, NULL );
+! PtRealizeWidget( menu->submenu_id );
+ }
+
+ return Pt_CONTINUE;
+--- 773,796 ----
+ gui_redraw(
+ r->ul.x - offset.x, r->ul.y - offset.y,
+ r->lr.x - r->ul.x + 1,
+! r->lr.y - r->ul.y + 1);
+ #endif
+
+! PgSetTranslation(&translation, 0);
+ }
+
+ static int
+ gui_ph_handle_pulldown_menu(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+! if (data != NULL)
+ {
+ vimmenu_T *menu = (vimmenu_T *) data;
+
+! PtPositionMenu(menu->submenu_id, NULL);
+! PtRealizeWidget(menu->submenu_id);
+ }
+
+ return Pt_CONTINUE;
+*** ../vim-7.3.298/src/version.c 2011-09-07 18:58:24.000000000 +0200
+--- src/version.c 2011-09-07 19:01:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 299,
+ /**/
+
+--
+The only way the average employee can speak to an executive is by taking a
+second job as a golf caddie.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.300
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.300
+Problem: Python doesn't parse multi-byte argument correctly.
+Solution: Use "t" instead of "s". (lilydjwg)
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.299/src/if_py_both.h 2011-07-07 15:08:53.000000000 +0200
+--- src/if_py_both.h 2011-09-07 19:25:12.000000000 +0200
+***************
+*** 74,80 ****
+ char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "es#", ENC_OPT, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+--- 74,80 ----
+ char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+***************
+*** 114,120 ****
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "es#", ENC_OPT, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+--- 114,120 ----
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+*** ../vim-7.3.299/src/version.c 2011-09-07 19:08:57.000000000 +0200
+--- src/version.c 2011-09-07 19:26:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 300,
+ /**/
+
+--
+A salesperson says: Translation:
+"backward compatible" Old technology
+"Premium" Overpriced
+"Can't keep it on the shelf" Unavailable
+"Stands alone" Piece of shit
+"Proprietary" Incompatible
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.301
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.301
+Problem: When 'smartindent' and 'copyindent' are set a Tab is used even
+ though 'expandtab' is set.
+Solution: Do not insert Tabs. Add a test. (Christian Brabandt)
+Files: src/misc1.c, src/testdir/test19.in, src/testdir/test19.ok
+
+
+*** ../vim-7.3.300/src/misc1.c 2011-07-27 17:31:42.000000000 +0200
+--- src/misc1.c 2011-09-07 19:37:04.000000000 +0200
+***************
+*** 363,369 ****
+
+ /* Fill to next tabstop with a tab, if possible */
+ tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
+! if (todo >= tab_pad)
+ {
+ todo -= tab_pad;
+ ++ind_len;
+--- 363,369 ----
+
+ /* Fill to next tabstop with a tab, if possible */
+ tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
+! if (todo >= tab_pad && !curbuf->b_p_et)
+ {
+ todo -= tab_pad;
+ ++ind_len;
+***************
+*** 372,378 ****
+ }
+
+ /* Add tabs required for indent */
+! while (todo >= (int)curbuf->b_p_ts)
+ {
+ todo -= (int)curbuf->b_p_ts;
+ ++ind_len;
+--- 372,378 ----
+ }
+
+ /* Add tabs required for indent */
+! while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et)
+ {
+ todo -= (int)curbuf->b_p_ts;
+ ++ind_len;
+*** ../vim-7.3.300/src/testdir/test19.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test19.in 2011-09-07 19:46:17.000000000 +0200
+***************
+*** 12,17 ****
+--- 12,20 ----
+ 0wR \b\b\b\e
+ :" Test replacing with Tabs
+ 0wR \e
++ :" Test that copyindent works with expandtab set
++ :set expandtab smartindent copyindent ts=8 sw=8 sts=8
++ :exe "norm! o{\<cr>x"
+ :?^start?,$w! test.out
+ :qa!
+ ENDTEST
+*** ../vim-7.3.300/src/testdir/test19.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test19.ok 2011-09-07 19:37:04.000000000 +0200
+***************
+*** 5,7 ****
+--- 5,9 ----
+ a cde
+ hi
+ test text
++ {
++ x
+*** ../vim-7.3.300/src/version.c 2011-09-07 19:30:17.000000000 +0200
+--- src/version.c 2011-09-07 19:38:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 301,
+ /**/
+
+--
+I recommend ordering large cargo containers of paper towels to make up
+whatever budget underruns you have. Paper products are always useful and they
+have the advantage of being completely flushable if you need to make room in
+the storage area later.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.302
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.302 (after 7.3.301)
+Problem: Test 19 fails without 'smartindent' and +eval.
+Solution: Don't use ":exe". Source small.vim.
+Files: src/testdir/test19.in
+
+
+*** ../vim-7.3.301/src/testdir/test19.in 2011-09-07 19:58:04.000000000 +0200
+--- src/testdir/test19.in 2011-09-08 20:32:33.000000000 +0200
+***************
+*** 1,6 ****
+--- 1,7 ----
+ Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
+
+ STARTTEST
++ :so small.vim
+ :set smarttab expandtab ts=8 sw=4
+ :" make sure that backspace works, no matter what termcap is used
+ :set t_kD=\16x7f t_kb=\16x08
+***************
+*** 14,21 ****
+ 0wR \e
+ :" Test that copyindent works with expandtab set
+ :set expandtab smartindent copyindent ts=8 sw=8 sts=8
+! :exe "norm! o{\<cr>x"
+! :?^start?,$w! test.out
+ :qa!
+ ENDTEST
+
+--- 15,22 ----
+ 0wR \e
+ :" Test that copyindent works with expandtab set
+ :set expandtab smartindent copyindent ts=8 sw=8 sts=8
+! o{
+! x\e:?^start?,$w! test.out
+ :qa!
+ ENDTEST
+
+*** ../vim-7.3.301/src/version.c 2011-09-07 19:58:04.000000000 +0200
+--- src/version.c 2011-09-08 23:22:01.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 302,
+ /**/
+
+--
+Engineers are always delighted to share wisdom, even in areas in which they
+have no experience whatsoever. Their logic provides them with inherent
+insight into any field of expertise. This can be a problem when dealing with
+the illogical people who believe that knowledge can only be derived through
+experience.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.303
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.303 (after 7.3.296)
+Problem: Compilation error.
+Solution: Correct return type from int to pid_t. (Danek Duvall)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.302/src/os_unix.c 2011-09-07 15:04:26.000000000 +0200
+--- src/os_unix.c 2011-09-08 20:47:47.000000000 +0200
+***************
+*** 159,165 ****
+ #else
+ typedef int waitstatus;
+ #endif
+! static int wait4pid __ARGS((pid_t, waitstatus *));
+
+ static int WaitForChar __ARGS((long));
+ #if defined(__BEOS__)
+--- 159,165 ----
+ #else
+ typedef int waitstatus;
+ #endif
+! static pid_t wait4pid __ARGS((pid_t, waitstatus *));
+
+ static int WaitForChar __ARGS((long));
+ #if defined(__BEOS__)
+*** ../vim-7.3.302/src/version.c 2011-09-08 23:22:35.000000000 +0200
+--- src/version.c 2011-09-08 23:23:43.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 303,
+ /**/
+
+--
+For humans, honesty is a matter of degree. Engineers are always honest in
+matters of technology and human relationships. That's why it's a good idea
+to keep engineers away from customers, romantic interests, and other people
+who can't handle the truth.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.304
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.304
+Problem: Strawberry Perl doesn't work on MS-Windows.
+Solution: Use xsubpp if needed. (Yasuhiro Matsumoto)
+Files: src/Make_ming.mak, src/Make_mvc.mak
+
+
+*** ../vim-7.3.303/src/Make_ming.mak 2011-06-19 01:30:01.000000000 +0200
+--- src/Make_ming.mak 2011-09-14 10:44:55.000000000 +0200
+***************
+*** 108,113 ****
+--- 108,120 ----
+ # on NT, it's here:
+ PERLLIB=$(PERL)/lib
+ PERLLIBS=$(PERLLIB)/Core
++ XSUBPP=$(PERLLIB)/ExtUtils/xsubpp
++ XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPP)'")
++ ifeq "$(XSUBPP_EXISTS)" ""
++ XSUBPP=perl $(XSUBPP)
++ else
++ XSUBPP=xsubpp
++ endif
+ endif
+
+ # uncomment 'LUA' if you want a Lua-enabled version
+***************
+*** 696,702 ****
+ endif
+
+ if_perl.c: if_perl.xs typemap
+! perl $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
+ $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
+
+ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+--- 703,709 ----
+ endif
+
+ if_perl.c: if_perl.xs typemap
+! $(XSUBPP) -prototypes -typemap \
+ $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
+
+ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+*** ../vim-7.3.303/src/Make_mvc.mak 2011-06-12 20:31:25.000000000 +0200
+--- src/Make_mvc.mak 2011-09-14 10:46:08.000000000 +0200
+***************
+*** 785,790 ****
+--- 785,795 ----
+ PERL_INC = /I $(PERL_INCDIR)
+ PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
+ XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
++ !if exist($(XSUBPP)
++ XSUBPP = $(PERL_EXE) $(XSUBPP)
++ !else
++ XSUBPP = xsubpp
++ !endif
+ XSUBPP_TYPEMAP = $(PERL)\lib\ExtUtils\typemap
+
+ !endif
+***************
+*** 1041,1047 ****
+ $(CC) $(CFLAGS) $(LUA_INC) if_lua.c
+
+ if_perl.c : if_perl.xs typemap
+! $(PERL_EXE) $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+ -typemap typemap if_perl.xs > if_perl.c
+
+ $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c $(INCL)
+--- 1046,1052 ----
+ $(CC) $(CFLAGS) $(LUA_INC) if_lua.c
+
+ if_perl.c : if_perl.xs typemap
+! $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+ -typemap typemap if_perl.xs > if_perl.c
+
+ $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c $(INCL)
+*** ../vim-7.3.303/src/version.c 2011-09-08 23:24:09.000000000 +0200
+--- src/version.c 2011-09-14 10:47:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 304,
+ /**/
+
+--
+It's totally unfair to suggest - as many have - that engineers are socially
+inept. Engineers simply have different objectives when it comes to social
+interaction.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.305
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.305
+Problem: Auto-loading a function while editing the command line causes
+ scrolling up the display.
+Solution: Don't set msg_scroll when defining a function and the user is not
+ typing. (Yasuhiro Matsumoto)
+Files: src/eval.c
+
+
+*** ../vim-7.3.304/src/eval.c 2011-08-17 15:23:16.000000000 +0200
+--- src/eval.c 2011-09-14 14:28:21.000000000 +0200
+***************
+*** 20786,20792 ****
+ nesting = 0;
+ for (;;)
+ {
+! msg_scroll = TRUE;
+ need_wait_return = FALSE;
+ sourcing_lnum_off = sourcing_lnum;
+
+--- 20786,20793 ----
+ nesting = 0;
+ for (;;)
+ {
+! if (KeyTyped)
+! msg_scroll = TRUE;
+ need_wait_return = FALSE;
+ sourcing_lnum_off = sourcing_lnum;
+
+*** ../vim-7.3.304/src/version.c 2011-09-14 10:49:44.000000000 +0200
+--- src/version.c 2011-09-14 14:30:49.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 305,
+ /**/
+
+--
+If someone questions your market projections, simply point out that your
+target market is "People who are nuts" and "People who will buy any damn
+thing". Nobody is going to tell you there aren't enough of those people
+to go around.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.306
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.306
+Problem: When closing a window there is a chance that deleting a scrollbar
+ triggers a GUI resize, which uses the window while it is not in a
+ valid state.
+Solution: Set the buffer pointer to NULL to be able to detect the invalid
+ situation. Fix a few places that used the buffer pointer
+ incorrectly.
+Files: src/buffer.c, src/ex_cmds.c, src/term.c, src/window.c
+
+
+*** ../vim-7.3.305/src/buffer.c 2011-05-19 13:40:47.000000000 +0200
+--- src/buffer.c 2011-09-10 13:46:59.000000000 +0200
+***************
+*** 416,421 ****
+--- 416,423 ----
+ #endif
+
+ buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
++ if (win_valid(win) && win->w_buffer == buf)
++ win->w_buffer = NULL; /* make sure we don't use the buffer now */
+
+ #ifdef FEAT_AUTOCMD
+ /* Autocommands may have deleted the buffer. */
+***************
+*** 560,565 ****
+--- 562,571 ----
+ #ifdef FEAT_DIFF
+ diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
+ #endif
++ #ifdef FEAT_SYN_HL
++ if (curwin->w_buffer == buf)
++ reset_synblock(curwin); /* remove any ownsyntax */
++ #endif
+
+ #ifdef FEAT_FOLDING
+ /* No folds in an empty buffer. */
+***************
+*** 1346,1351 ****
+--- 1352,1361 ----
+ # endif
+ #endif
+ {
++ #ifdef FEAT_SYN_HL
++ if (prevbuf == curwin->w_buffer)
++ reset_synblock(curwin);
++ #endif
+ #ifdef FEAT_WINDOWS
+ if (unload)
+ close_windows(prevbuf, FALSE);
+***************
+*** 1395,1404 ****
+ foldUpdateAll(curwin); /* update folds (later). */
+ #endif
+
+- #ifdef FEAT_SYN_HL
+- reset_synblock(curwin);
+- curwin->w_s = &(buf->b_s);
+- #endif
+ /* Get the buffer in the current window. */
+ curwin->w_buffer = buf;
+ curbuf = buf;
+--- 1405,1410 ----
+***************
+*** 1409,1414 ****
+--- 1415,1424 ----
+ diff_buf_add(curbuf);
+ #endif
+
++ #ifdef FEAT_SYN_HL
++ curwin->w_s = &(buf->b_s);
++ #endif
++
+ /* Cursor on first line by default. */
+ curwin->w_cursor.lnum = 1;
+ curwin->w_cursor.col = 0;
+*** ../vim-7.3.305/src/ex_cmds.c 2011-07-07 16:20:45.000000000 +0200
+--- src/ex_cmds.c 2011-09-10 13:39:13.000000000 +0200
+***************
+*** 3619,3628 ****
+ */
+ check_arg_idx(curwin);
+
+- #ifdef FEAT_SYN_HL
+- reset_synblock(curwin); /* remove any ownsyntax */
+- #endif
+-
+ #ifdef FEAT_AUTOCMD
+ if (!auto_buf)
+ #endif
+--- 3619,3624 ----
+*** ../vim-7.3.305/src/term.c 2011-05-10 16:41:13.000000000 +0200
+--- src/term.c 2011-09-14 14:39:39.000000000 +0200
+***************
+*** 3017,3028 ****
+ if (width < 0 || height < 0) /* just checking... */
+ return;
+
+! if (State == HITRETURN || State == SETWSIZE) /* postpone the resizing */
+ {
+ State = SETWSIZE;
+ return;
+ }
+
+ ++busy;
+
+ #ifdef AMIGA
+--- 3017,3036 ----
+ if (width < 0 || height < 0) /* just checking... */
+ return;
+
+! if (State == HITRETURN || State == SETWSIZE)
+ {
++ /* postpone the resizing */
+ State = SETWSIZE;
+ return;
+ }
+
++ /* curwin->w_buffer can be NULL when we are closing a window and the
++ * buffer has already been closed and removing a scrollbar causes a resize
++ * event. Don't resize then, it will happen after entering another buffer.
++ */
++ if (curwin->w_buffer == NULL)
++ return;
++
+ ++busy;
+
+ #ifdef AMIGA
+*** ../vim-7.3.305/src/window.c 2011-01-08 14:45:57.000000000 +0100
+--- src/window.c 2011-09-10 14:04:56.000000000 +0200
+***************
+*** 1226,1240 ****
+ }
+ newp->w_tagstackidx = oldp->w_tagstackidx;
+ newp->w_tagstacklen = oldp->w_tagstacklen;
+! # ifdef FEAT_FOLDING
+ copyFoldingState(oldp, newp);
+! # endif
+
+ win_init_some(newp, oldp);
+
+! # ifdef FEAT_SYN_HL
+ check_colorcolumn(newp);
+! # endif
+ }
+
+ /*
+--- 1226,1240 ----
+ }
+ newp->w_tagstackidx = oldp->w_tagstackidx;
+ newp->w_tagstacklen = oldp->w_tagstacklen;
+! #ifdef FEAT_FOLDING
+ copyFoldingState(oldp, newp);
+! #endif
+
+ win_init_some(newp, oldp);
+
+! #ifdef FEAT_SYN_HL
+ check_colorcolumn(newp);
+! #endif
+ }
+
+ /*
+***************
+*** 2212,2217 ****
+--- 2212,2222 ----
+ out_flush();
+ #endif
+
++ #ifdef FEAT_SYN_HL
++ /* Free independent synblock before the buffer is freed. */
++ reset_synblock(win);
++ #endif
++
+ /*
+ * Close the link to the buffer.
+ */
+***************
+*** 2222,2228 ****
+ if (!win_valid(win) || last_window() || curtab != prev_curtab)
+ return;
+
+! /* Free the memory used for the window. */
+ wp = win_free_mem(win, &dir, NULL);
+
+ /* Make sure curwin isn't invalid. It can cause severe trouble when
+--- 2227,2234 ----
+ if (!win_valid(win) || last_window() || curtab != prev_curtab)
+ return;
+
+! /* Free the memory used for the window and get the window that received
+! * the screen space. */
+ wp = win_free_mem(win, &dir, NULL);
+
+ /* Make sure curwin isn't invalid. It can cause severe trouble when
+***************
+*** 3247,3252 ****
+--- 3253,3261 ----
+ else
+ wp->w_farsi = W_CONV;
+ #endif
++ #ifdef FEAT_SYN_HL
++ wp->w_s = &wp->w_buffer->b_s;
++ #endif
+ }
+
+ /*
+***************
+*** 4437,4443 ****
+ #endif /* FEAT_GUI */
+
+ #ifdef FEAT_SYN_HL
+- reset_synblock(wp); /* free independent synblock */
+ vim_free(wp->w_p_cc_cols);
+ #endif
+
+--- 4446,4451 ----
+*** ../vim-7.3.305/src/version.c 2011-09-14 14:33:47.000000000 +0200
+--- src/version.c 2011-09-14 14:35:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 306,
+ /**/
+
+--
+A consultant is a person who takes your money and annoys your employees while
+tirelessly searching for the best way to extend the consulting contract.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.307
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.307
+Problem: Python 3 doesn't support slice assignment.
+Solution: Implement slices. (Brett Overesch, Roland Puntaier)
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.306/src/if_python3.c 2011-08-28 16:00:14.000000000 +0200
+--- src/if_python3.c 2011-09-14 15:01:26.000000000 +0200
+***************
+*** 855,862 ****
+
+ static Py_ssize_t BufferLength(PyObject *);
+ static PyObject *BufferItem(PyObject *, Py_ssize_t);
+! static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
+! static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val);
+
+
+ /* Line range type - Implementation functions
+--- 855,862 ----
+
+ static Py_ssize_t BufferLength(PyObject *);
+ static PyObject *BufferItem(PyObject *, Py_ssize_t);
+! static PyObject* BufferSubscript(PyObject *self, PyObject *idx);
+! static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
+
+
+ /* Line range type - Implementation functions
+***************
+*** 865,872 ****
+
+ #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
+
+! static PyObject* RangeSubscript(PyObject *self, PyObject* idx);
+ static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *);
+
+ /* Current objects type - Implementation functions
+ * -----------------------------------------------
+--- 865,873 ----
+
+ #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
+
+! static PyObject* RangeSubscript(PyObject *self, PyObject *idx);
+ static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *);
++ static Py_ssize_t RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
+
+ /* Current objects type - Implementation functions
+ * -----------------------------------------------
+***************
+*** 1035,1041 ****
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return BufferSlice(self,start,stop);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+--- 1036,1042 ----
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return BufferSlice(self, start, stop);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+***************
+*** 1084,1090 ****
+ PyMappingMethods RangeAsMapping = {
+ /* mp_length */ (lenfunc)RangeLength,
+ /* mp_subscript */ (binaryfunc)RangeSubscript,
+! /* mp_ass_subscript */ (objobjargproc)0,
+ };
+
+ /* Line range object - Implementation
+--- 1085,1091 ----
+ PyMappingMethods RangeAsMapping = {
+ /* mp_length */ (lenfunc)RangeLength,
+ /* mp_subscript */ (binaryfunc)RangeSubscript,
+! /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript,
+ };
+
+ /* Line range object - Implementation
+***************
+*** 1123,1128 ****
+--- 1124,1138 ----
+ &((RangeObject *)(self))->end);
+ }
+
++ static Py_ssize_t
++ RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val)
++ {
++ return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
++ ((RangeObject *)(self))->start,
++ ((RangeObject *)(self))->end,
++ &((RangeObject *)(self))->end);
++ }
++
+ static PyObject *
+ RangeSubscript(PyObject *self, PyObject* idx)
+ {
+***************
+*** 1138,1150 ****
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return RangeSlice(self,start,stop+1);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+ }
+
+ /* Buffer list object - Definitions
+ */
+
+--- 1148,1183 ----
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return RangeSlice(self, start, stop);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+ }
+
++ static Py_ssize_t
++ RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
++ {
++ if (PyLong_Check(idx)) {
++ long n = PyLong_AsLong(idx);
++ return RangeAsItem(self, n, val);
++ } else if (PySlice_Check(idx)) {
++ Py_ssize_t start, stop, step, slicelen;
++
++ if (PySlice_GetIndicesEx((PySliceObject *)idx,
++ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
++ &start, &stop,
++ &step, &slicelen) < 0) {
++ return -1;
++ }
++ return RangeAsSlice(self, start, stop, val);
++ } else {
++ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
++ return -1;
++ }
++ }
++
++
+ /* Buffer list object - Definitions
+ */
+
+*** ../vim-7.3.306/src/version.c 2011-09-14 14:43:21.000000000 +0200
+--- src/version.c 2011-09-14 14:58:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 307,
+ /**/
+
+--
+The process for understanding customers primarily involves sitting around with
+other marketing people and talking about what you would to if you were dumb
+enough to be a customer.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.308
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.308
+Problem: Writing to 'verbosefile' has problems, e.g. for :highlight.
+Solution: Do not use a separate verbose_write() function but write with the
+ same code that does redirecting. (Yasuhiro Matsumoto)
+Files: src/message.c
+
+
+*** ../vim-7.3.307/src/message.c 2011-08-17 20:33:18.000000000 +0200
+--- src/message.c 2011-09-14 15:32:57.000000000 +0200
+***************
+*** 39,45 ****
+ static void msg_screen_putchar __ARGS((int c, int attr));
+ static int msg_check_screen __ARGS((void));
+ static void redir_write __ARGS((char_u *s, int maxlen));
+- static void verbose_write __ARGS((char_u *s, int maxlen));
+ #ifdef FEAT_CON_DIALOG
+ static char_u *msg_show_console_dialog __ARGS((char_u *message, char_u *buttons, int dfltbutton));
+ static int confirm_msg_used = FALSE; /* displaying confirm_msg */
+--- 39,44 ----
+***************
+*** 58,63 ****
+--- 57,65 ----
+ static struct msg_hist *last_msg_hist = NULL;
+ static int msg_hist_len = 0;
+
++ static FILE *verbose_fd = NULL;
++ static int verbose_did_open = FALSE;
++
+ /*
+ * When writing messages to the screen, there are many different situations.
+ * A number of variables is used to remember the current state:
+***************
+*** 1551,1557 ****
+ #ifdef FEAT_MBYTE
+ if (has_mbyte && !IS_SPECIAL(c))
+ {
+! int len = (*mb_ptr2len)(str);
+
+ /* For multi-byte characters check for an illegal byte. */
+ if (has_mbyte && MB_BYTE2LEN(*str) > len)
+--- 1553,1559 ----
+ #ifdef FEAT_MBYTE
+ if (has_mbyte && !IS_SPECIAL(c))
+ {
+! int len = (*mb_ptr2len)(str);
+
+ /* For multi-byte characters check for an illegal byte. */
+ if (has_mbyte && MB_BYTE2LEN(*str) > len)
+***************
+*** 1560,1569 ****
+ *sp = str + 1;
+ return buf;
+ }
+! /* Since 'special' is TRUE the multi-byte character 'c' will be
+! * processed by get_special_key_name() */
+! c = (*mb_ptr2char)(str);
+! *sp = str + len;
+ }
+ else
+ #endif
+--- 1562,1571 ----
+ *sp = str + 1;
+ return buf;
+ }
+! /* Since 'special' is TRUE the multi-byte character 'c' will be
+! * processed by get_special_key_name() */
+! c = (*mb_ptr2char)(str);
+! *sp = str + len;
+ }
+ else
+ #endif
+***************
+*** 3065,3076 ****
+ if (redir_off)
+ return;
+
+! /*
+! * If 'verbosefile' is set write message in that file.
+! * Must come before the rest because of updating "msg_col".
+! */
+! if (*p_vfile != NUL)
+! verbose_write(s, maxlen);
+
+ if (redirecting())
+ {
+--- 3067,3075 ----
+ if (redir_off)
+ return;
+
+! /* If 'verbosefile' is set prepare for writing in that file. */
+! if (*p_vfile != NUL && verbose_fd == NULL)
+! verbose_open();
+
+ if (redirecting())
+ {
+***************
+*** 3084,3092 ****
+ write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
+ else if (redir_vname)
+ var_redir_str((char_u *)" ", -1);
+! else if (redir_fd)
+ #endif
+ fputs(" ", redir_fd);
+ ++cur_col;
+ }
+ }
+--- 3083,3094 ----
+ write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
+ else if (redir_vname)
+ var_redir_str((char_u *)" ", -1);
+! else
+ #endif
++ if (redir_fd != NULL)
+ fputs(" ", redir_fd);
++ if (verbose_fd != NULL)
++ fputs(" ", verbose_fd);
+ ++cur_col;
+ }
+ }
+***************
+*** 3098,3110 ****
+ var_redir_str(s, maxlen);
+ #endif
+
+! /* Adjust the current column */
+ while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+ {
+ #ifdef FEAT_EVAL
+! if (!redir_reg && !redir_vname && redir_fd != NULL)
+ #endif
+! putc(*s, redir_fd);
+ if (*s == '\r' || *s == '\n')
+ cur_col = 0;
+ else if (*s == '\t')
+--- 3100,3115 ----
+ var_redir_str(s, maxlen);
+ #endif
+
+! /* Write and adjust the current column. */
+ while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+ {
+ #ifdef FEAT_EVAL
+! if (!redir_reg && !redir_vname)
+ #endif
+! if (redir_fd != NULL)
+! putc(*s, redir_fd);
+! if (verbose_fd != NULL)
+! putc(*s, verbose_fd);
+ if (*s == '\r' || *s == '\n')
+ cur_col = 0;
+ else if (*s == '\t')
+***************
+*** 3122,3128 ****
+ int
+ redirecting()
+ {
+! return redir_fd != NULL
+ #ifdef FEAT_EVAL
+ || redir_reg || redir_vname
+ #endif
+--- 3127,3133 ----
+ int
+ redirecting()
+ {
+! return redir_fd != NULL || *p_vfile != NUL
+ #ifdef FEAT_EVAL
+ || redir_reg || redir_vname
+ #endif
+***************
+*** 3180,3188 ****
+ cmdline_row = msg_row;
+ }
+
+- static FILE *verbose_fd = NULL;
+- static int verbose_did_open = FALSE;
+-
+ /*
+ * Called when 'verbosefile' is set: stop writing to the file.
+ */
+--- 3185,3190 ----
+***************
+*** 3220,3268 ****
+ }
+
+ /*
+- * Write a string to 'verbosefile'.
+- * When "maxlen" is -1 write the whole string, otherwise up to "maxlen" bytes.
+- */
+- static void
+- verbose_write(str, maxlen)
+- char_u *str;
+- int maxlen;
+- {
+- char_u *s = str;
+- static int cur_col = 0;
+-
+- /* Open the file when called the first time. */
+- if (verbose_fd == NULL)
+- verbose_open();
+-
+- if (verbose_fd != NULL)
+- {
+- /* If the string doesn't start with CR or NL, go to msg_col */
+- if (*s != '\n' && *s != '\r')
+- {
+- while (cur_col < msg_col)
+- {
+- fputs(" ", verbose_fd);
+- ++cur_col;
+- }
+- }
+-
+- /* Adjust the current column */
+- while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+- {
+- putc(*s, verbose_fd);
+- if (*s == '\r' || *s == '\n')
+- cur_col = 0;
+- else if (*s == '\t')
+- cur_col += (8 - cur_col % 8);
+- else
+- ++cur_col;
+- ++s;
+- }
+- }
+- }
+-
+- /*
+ * Give a warning message (for searching).
+ * Use 'w' highlighting and may repeat the message after redrawing
+ */
+--- 3222,3227 ----
+*** ../vim-7.3.307/src/version.c 2011-09-14 15:01:54.000000000 +0200
+--- src/version.c 2011-09-14 15:38:31.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 308,
+ /**/
+
+--
+The average life of an organization chart is six months. You can safely
+ignore any order from your boss that would take six months to complete.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.309
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.309 (after 7.3.307)
+Problem: Warnings for pointer types.
+Solution: Change PySliceObject to PyObject.
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.308/src/if_python3.c 2011-09-14 15:01:54.000000000 +0200
+--- src/if_python3.c 2011-09-14 15:30:45.000000000 +0200
+***************
+*** 1030,1036 ****
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PySliceObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+--- 1030,1036 ----
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PyObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+***************
+*** 1054,1060 ****
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PySliceObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+--- 1054,1060 ----
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PyObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+***************
+*** 1142,1148 ****
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PySliceObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+--- 1142,1148 ----
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PyObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+***************
+*** 1164,1170 ****
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PySliceObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+--- 1164,1170 ----
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PyObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+*** ../vim-7.3.308/src/version.c 2011-09-14 15:39:26.000000000 +0200
+--- src/version.c 2011-09-14 15:40:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 309,
+ /**/
+
+--
+Never enter the boss's office unless it's absolutely necessary. Every boss
+saves one corner of the desk for useless assignments that are doled out like
+Halloween candy to each visitor.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.310
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.310
+Problem: Code not following Vim style.
+Solution: Fix the style. (Elias Diem)
+Files: src/gui_photon.c
+
+
+*** ../vim-7.3.309/src/gui_photon.c 2011-09-07 19:08:57.000000000 +0200
+--- src/gui_photon.c 2011-09-14 16:01:55.000000000 +0200
+***************
+*** 477,483 ****
+ }
+ #endif
+
+! for(i = 0; special_keys[i].key_sym != 0; i++)
+ {
+ if (special_keys[i].key_sym == key->key_cap)
+ {
+--- 477,483 ----
+ }
+ #endif
+
+! for (i = 0; special_keys[i].key_sym != 0; i++)
+ {
+ if (special_keys[i].key_sym == key->key_cap)
+ {
+***************
+*** 758,764 ****
+ if (damage->next != NULL)
+ damage = damage->next;
+
+! while(damage != NULL)
+ {
+ r = &damage->rect;
+ gui_redraw(
+--- 758,764 ----
+ if (damage->next != NULL)
+ damage = damage->next;
+
+! while (damage != NULL)
+ {
+ r = &damage->rect;
+ gui_redraw(
+***************
+*** 798,809 ****
+
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+ static int
+! gui_ph_handle_menu( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+! if( data != NULL )
+ {
+ vimmenu_T *menu = (vimmenu_T *) data;
+! gui_menu_cb( menu );
+ }
+ return Pt_CONTINUE;
+ }
+--- 798,809 ----
+
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+ static int
+! gui_ph_handle_menu(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+! if (data != NULL)
+ {
+ vimmenu_T *menu = (vimmenu_T *) data;
+! gui_menu_cb(menu);
+ }
+ return Pt_CONTINUE;
+ }
+***************
+*** 813,821 ****
+ gui_ph_handle_menu_unrealized(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+! PtGiveFocus( gui.vimTextArea, NULL );
+ return Pt_CONTINUE;
+ }
+
+--- 813,821 ----
+ gui_ph_handle_menu_unrealized(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+! PtGiveFocus(gui.vimTextArea, NULL);
+ return Pt_CONTINUE;
+ }
+
+***************
+*** 823,831 ****
+ gui_ph_handle_window_open(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+! gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
+ return Pt_CONTINUE;
+ }
+
+--- 823,831 ----
+ gui_ph_handle_window_open(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+! gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
+ return Pt_CONTINUE;
+ }
+
+***************
+*** 836,909 ****
+
+ /* TODO: Set a clipping rect? */
+ static void
+! gui_ph_draw_start( void )
+ {
+ PhGC_t *gc;
+
+ gc = PgGetGC();
+! PgSetRegion( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) );
+! PgClearClippingsCx( gc );
+! PgClearTranslationCx( gc );
+
+! PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+! PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+
+! PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
+ }
+
+ static void
+! gui_ph_draw_end( void )
+ {
+ gui_ph_raw_offset.x = -gui_ph_raw_offset.x;
+ gui_ph_raw_offset.y = -gui_ph_raw_offset.y;
+! PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
+ }
+
+ #ifdef USE_PANEL_GROUP
+ static vimmenu_T *
+! gui_ph_find_buffer_item( char_u *name )
+ {
+ vimmenu_T *top_level = root_menu;
+ vimmenu_T *items = NULL;
+
+! while( top_level != NULL &&
+! ( STRCMP( top_level->dname, "Buffers" ) != 0 ) )
+ top_level = top_level->next;
+
+! if( top_level != NULL )
+ {
+ items = top_level->children;
+
+! while( items != NULL &&
+! ( STRCMP( items->dname, name ) != 0 ) )
+ items = items->next;
+ }
+ return items;
+ }
+
+ static void
+! gui_ph_pg_set_buffer_num( int_u buf_num )
+ {
+ int i;
+ char search[16];
+ char *mark;
+
+! if( gui.vimTextArea == NULL || buf_num == 0 )
+ return;
+
+ search[0] = '(';
+! ultoa( buf_num, &search[1], 10 );
+! STRCAT( search, ")" );
+
+! for( i = 0; i < num_panels; i++ )
+ {
+ /* find the last "(" in the panel title and see if the buffer
+ * number in the title matches the one we're looking for */
+! mark = STRRCHR( panel_titles[ i ], '(' );
+! if( mark != NULL && STRCMP( mark, search ) == 0 )
+ {
+! PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
+! i, 0 );
+ }
+ }
+ }
+--- 836,909 ----
+
+ /* TODO: Set a clipping rect? */
+ static void
+! gui_ph_draw_start(void)
+ {
+ PhGC_t *gc;
+
+ gc = PgGetGC();
+! PgSetRegion(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)));
+! PgClearClippingsCx(gc);
+! PgClearTranslationCx(gc);
+
+! PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+! PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+
+! PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
+ }
+
+ static void
+! gui_ph_draw_end(void)
+ {
+ gui_ph_raw_offset.x = -gui_ph_raw_offset.x;
+ gui_ph_raw_offset.y = -gui_ph_raw_offset.y;
+! PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
+ }
+
+ #ifdef USE_PANEL_GROUP
+ static vimmenu_T *
+! gui_ph_find_buffer_item(char_u *name)
+ {
+ vimmenu_T *top_level = root_menu;
+ vimmenu_T *items = NULL;
+
+! while (top_level != NULL &&
+! (STRCMP(top_level->dname, "Buffers") != 0))
+ top_level = top_level->next;
+
+! if (top_level != NULL)
+ {
+ items = top_level->children;
+
+! while (items != NULL &&
+! (STRCMP(items->dname, name) != 0))
+ items = items->next;
+ }
+ return items;
+ }
+
+ static void
+! gui_ph_pg_set_buffer_num(int_u buf_num)
+ {
+ int i;
+ char search[16];
+ char *mark;
+
+! if (gui.vimTextArea == NULL || buf_num == 0)
+ return;
+
+ search[0] = '(';
+! ultoa(buf_num, &search[1], 10);
+! STRCAT(search, ")");
+
+! for (i = 0; i < num_panels; i++)
+ {
+ /* find the last "(" in the panel title and see if the buffer
+ * number in the title matches the one we're looking for */
+! mark = STRRCHR(panel_titles[ i ], '(');
+! if (mark != NULL && STRCMP(mark, search) == 0)
+ {
+! PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
+! i, 0);
+ }
+ }
+ }
+***************
+*** 912,930 ****
+ gui_ph_handle_pg_change(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+ vimmenu_T *menu;
+ PtPanelGroupCallback_t *panel;
+
+! if( info->event != NULL )
+ {
+ panel = info->cbdata;
+! if( panel->new_panel != NULL )
+ {
+! menu = gui_ph_find_buffer_item( panel->new_panel );
+! if( menu )
+! gui_menu_cb( menu );
+ }
+ }
+ return Pt_CONTINUE;
+--- 912,930 ----
+ gui_ph_handle_pg_change(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+ vimmenu_T *menu;
+ PtPanelGroupCallback_t *panel;
+
+! if (info->event != NULL)
+ {
+ panel = info->cbdata;
+! if (panel->new_panel != NULL)
+ {
+! menu = gui_ph_find_buffer_item(panel->new_panel);
+! if (menu)
+! gui_menu_cb(menu);
+ }
+ }
+ return Pt_CONTINUE;
+***************
+*** 935,951 ****
+ short *top,
+ short *bottom,
+ short *left,
+! short *right )
+ {
+ unsigned short abs_raw_x, abs_raw_y, abs_panel_x, abs_panel_y;
+ const unsigned short *margin_top, *margin_bottom;
+ const unsigned short *margin_left, *margin_right;
+
+! PtGetAbsPosition( gui.vimTextArea, &abs_raw_x, &abs_raw_y );
+! PtGetAbsPosition( gui.vimPanelGroup, &abs_panel_x, &abs_panel_y );
+
+! PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0 );
+! PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0 );
+
+ abs_raw_x -= abs_panel_x;
+ abs_raw_y -= abs_panel_y;
+--- 935,951 ----
+ short *top,
+ short *bottom,
+ short *left,
+! short *right)
+ {
+ unsigned short abs_raw_x, abs_raw_y, abs_panel_x, abs_panel_y;
+ const unsigned short *margin_top, *margin_bottom;
+ const unsigned short *margin_left, *margin_right;
+
+! PtGetAbsPosition(gui.vimTextArea, &abs_raw_x, &abs_raw_y);
+! PtGetAbsPosition(gui.vimPanelGroup, &abs_panel_x, &abs_panel_y);
+
+! PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0);
+! PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0);
+
+ abs_raw_x -= abs_panel_x;
+ abs_raw_y -= abs_panel_y;
+***************
+*** 959,979 ****
+
+ /* Used for the tabs for PtPanelGroup */
+ static int
+! gui_ph_is_buffer_item( vimmenu_T *menu, vimmenu_T *parent )
+ {
+ char *mark;
+
+! if( STRCMP( parent->dname, "Buffers" ) == 0 )
+ {
+ /* Look for '(' digits ')' */
+! mark = vim_strchr( menu->dname, '(' );
+! if( mark != NULL )
+ {
+ mark++;
+! while( isdigit( *mark ) )
+ mark++;
+
+! if( *mark == ')' )
+ return TRUE;
+ }
+ }
+--- 959,979 ----
+
+ /* Used for the tabs for PtPanelGroup */
+ static int
+! gui_ph_is_buffer_item(vimmenu_T *menu, vimmenu_T *parent)
+ {
+ char *mark;
+
+! if (STRCMP(parent->dname, "Buffers") == 0)
+ {
+ /* Look for '(' digits ')' */
+! mark = vim_strchr(menu->dname, '(');
+! if (mark != NULL)
+ {
+ mark++;
+! while (isdigit(*mark))
+ mark++;
+
+! if (*mark == ')')
+ return TRUE;
+ }
+ }
+***************
+*** 981,1043 ****
+ }
+
+ static void
+! gui_ph_pg_add_buffer(char *name )
+ {
+ char **new_titles = NULL;
+
+! new_titles = (char **) alloc( ( num_panels + 1 ) * sizeof( char ** ) );
+! if( new_titles != NULL )
+ {
+! if( num_panels > 0 )
+! memcpy( new_titles, panel_titles, num_panels * sizeof( char ** ) );
+
+ new_titles[ num_panels++ ] = name;
+
+! PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+! num_panels );
+
+! vim_free( panel_titles );
+ panel_titles = new_titles;
+ }
+ }
+
+ static void
+! gui_ph_pg_remove_buffer( char *name )
+ {
+ int i;
+ char **new_titles = NULL;
+
+ /* If there is only 1 panel, we just use the temporary place holder */
+! if( num_panels > 1 )
+ {
+! new_titles = (char **) alloc( ( num_panels - 1 ) * sizeof( char ** ) );
+! if( new_titles != NULL )
+ {
+ char **s = new_titles;
+ /* Copy all the titles except the one we're removing */
+! for( i = 0; i < num_panels; i++ )
+ {
+! if( STRCMP( panel_titles[ i ], name ) != 0 )
+ {
+ *s++ = panel_titles[ i ];
+ }
+ }
+ num_panels--;
+
+! PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+! num_panels );
+
+! vim_free( panel_titles );
+ panel_titles = new_titles;
+ }
+ }
+ else
+ {
+ num_panels--;
+! PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
+! 1 );
+
+! vim_free( panel_titles );
+ panel_titles = NULL;
+ }
+ }
+--- 981,1043 ----
+ }
+
+ static void
+! gui_ph_pg_add_buffer(char *name)
+ {
+ char **new_titles = NULL;
+
+! new_titles = (char **) alloc((num_panels + 1) * sizeof(char **));
+! if (new_titles != NULL)
+ {
+! if (num_panels > 0)
+! memcpy(new_titles, panel_titles, num_panels * sizeof(char **));
+
+ new_titles[ num_panels++ ] = name;
+
+! PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+! num_panels);
+
+! vim_free(panel_titles);
+ panel_titles = new_titles;
+ }
+ }
+
+ static void
+! gui_ph_pg_remove_buffer(char *name)
+ {
+ int i;
+ char **new_titles = NULL;
+
+ /* If there is only 1 panel, we just use the temporary place holder */
+! if (num_panels > 1)
+ {
+! new_titles = (char **) alloc((num_panels - 1) * sizeof(char **));
+! if (new_titles != NULL)
+ {
+ char **s = new_titles;
+ /* Copy all the titles except the one we're removing */
+! for (i = 0; i < num_panels; i++)
+ {
+! if (STRCMP(panel_titles[ i ], name) != 0)
+ {
+ *s++ = panel_titles[ i ];
+ }
+ }
+ num_panels--;
+
+! PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+! num_panels);
+
+! vim_free(panel_titles);
+ panel_titles = new_titles;
+ }
+ }
+ else
+ {
+ num_panels--;
+! PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
+! 1);
+
+! vim_free(panel_titles);
+ panel_titles = NULL;
+ }
+ }
+***************
+*** 1047,1060 ****
+ gui_ph_handle_buffer_remove(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+ vimmenu_T *menu;
+
+! if( data != NULL )
+ {
+ menu = (vimmenu_T *) data;
+! gui_ph_pg_remove_buffer( menu->dname );
+ }
+
+ return Pt_CONTINUE;
+--- 1047,1060 ----
+ gui_ph_handle_buffer_remove(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+ vimmenu_T *menu;
+
+! if (data != NULL)
+ {
+ menu = (vimmenu_T *) data;
+! gui_ph_pg_remove_buffer(menu->dname);
+ }
+
+ return Pt_CONTINUE;
+***************
+*** 1062,1074 ****
+ #endif
+
+ static int
+! gui_ph_pane_resize( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+! if( PtWidgetIsRealized( widget ) )
+ {
+ is_ignore_draw = TRUE;
+! PtStartFlux( gui.vimContainer );
+! PtContainerHold( gui.vimContainer );
+ }
+
+ return Pt_CONTINUE;
+--- 1062,1074 ----
+ #endif
+
+ static int
+! gui_ph_pane_resize(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+! if (PtWidgetIsRealized(widget))
+ {
+ is_ignore_draw = TRUE;
+! PtStartFlux(gui.vimContainer);
+! PtContainerHold(gui.vimContainer);
+ }
+
+ return Pt_CONTINUE;
+***************
+*** 1078,1084 ****
+
+ #ifdef FEAT_MBYTE
+ void
+! gui_ph_encoding_changed( int new_encoding )
+ {
+ /* Default encoding is latin1 */
+ char *charset = "latin1";
+--- 1078,1084 ----
+
+ #ifdef FEAT_MBYTE
+ void
+! gui_ph_encoding_changed(int new_encoding)
+ {
+ /* Default encoding is latin1 */
+ char *charset = "latin1";
+***************
+*** 1094,1106 ****
+ { DBCS_CHS, "gb" }
+ };
+
+! for( i = 0; i < ARRAY_LENGTH( charsets ); i++ )
+ {
+! if( new_encoding == charsets[ i ].encoding )
+ charset = charsets[ i ].name;
+ }
+
+! charset_translate = PxTranslateSet( charset_translate, charset );
+ }
+ #endif
+
+--- 1094,1106 ----
+ { DBCS_CHS, "gb" }
+ };
+
+! for (i = 0; i < ARRAY_LENGTH(charsets); i++)
+ {
+! if (new_encoding == charsets[ i ].encoding)
+ charset = charsets[ i ].name;
+ }
+
+! charset_translate = PxTranslateSet(charset_translate, charset);
+ }
+ #endif
+
+***************
+*** 1112,1118 ****
+ int *argc;
+ char **argv;
+ {
+! PtInit( NULL );
+ }
+
+ int
+--- 1112,1118 ----
+ int *argc;
+ char **argv;
+ {
+! PtInit(NULL);
+ }
+
+ int
+***************
+*** 1124,1213 ****
+ PhDim_t window_size = {100, 100}; /* Arbitrary values */
+ PhPoint_t pos = {0, 0};
+
+! gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
+! if( gui.event_buffer == NULL )
+ return FAIL;
+
+ /* Get a translation so we can convert from ISO Latin-1 to UTF */
+! charset_translate = PxTranslateSet( NULL, "latin1" );
+
+ /* The +2 is for the 1 pixel dark line on each side */
+ gui.border_offset = gui.border_width = GUI_PH_MARGIN + 2;
+
+ /* Handle close events ourselves */
+! PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE );
+! PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
+! Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS );
+! PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+! gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
+! if( gui.vimWindow == NULL )
+ return FAIL;
+
+! PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
+! PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
+! gui_ph_handle_window_open, NULL );
+
+ n = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED );
+! PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_POS, &pos, 0 );
+
+ #ifdef USE_PANEL_GROUP
+ /* Put in a temprary place holder title */
+! PtSetArg( &args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1 );
+
+! gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
+! if( gui.vimPanelGroup == NULL )
+ return FAIL;
+
+! PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+! gui_ph_handle_pg_change, NULL );
+ #else
+ /* Turn off all edge decorations */
+! PtSetArg( &args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL );
+! PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT );
+
+! gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
+! if( gui.vimContainer == NULL )
+ return FAIL;
+
+! PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
+ #endif
+
+ /* Size for the text area is set in gui_mch_set_text_area_pos */
+ n = 0;
+
+! PtSetArg( &args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1 );
+! PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0 );
+ /*
+ * Using focus render also causes the whole widget to be redrawn
+ * whenever it changes focus, which is very annoying :p
+ */
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
+! Pt_GETS_FOCUS | Pt_HIGHLIGHTED );
+ #ifndef FEAT_MOUSESHAPE
+! PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0 );
+ #endif
+
+! gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
+! if( gui.vimTextArea == NULL)
+ return FAIL;
+
+ /* TODO: use PtAddEventHandlers instead? */
+ /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+! PtAddEventHandler( gui.vimTextArea,
+ Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_PTR_MOTION_BUTTON,
+! gui_ph_handle_mouse, NULL );
+! PtAddEventHandler( gui.vimTextArea, Ph_EV_KEY,
+! gui_ph_handle_keyboard, NULL );
+! PtAddCallback( gui.vimTextArea, Pt_CB_GOT_FOCUS,
+! gui_ph_handle_focus, NULL );
+! PtAddCallback( gui.vimTextArea, Pt_CB_LOST_FOCUS,
+! gui_ph_handle_focus, NULL );
+
+ /*
+ * Now that the text area widget has been created, set up the colours,
+--- 1124,1213 ----
+ PhDim_t window_size = {100, 100}; /* Arbitrary values */
+ PhPoint_t pos = {0, 0};
+
+! gui.event_buffer = (PhEvent_t *) alloc(EVENT_BUFFER_SIZE);
+! if (gui.event_buffer == NULL)
+ return FAIL;
+
+ /* Get a translation so we can convert from ISO Latin-1 to UTF */
+! charset_translate = PxTranslateSet(NULL, "latin1");
+
+ /* The +2 is for the 1 pixel dark line on each side */
+ gui.border_offset = gui.border_width = GUI_PH_MARGIN + 2;
+
+ /* Handle close events ourselves */
+! PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE);
+! PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
+! Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS);
+! PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
+! gui.vimWindow = PtCreateWidget(PtWindow, NULL, n, args);
+! if (gui.vimWindow == NULL)
+ return FAIL;
+
+! PtAddCallback(gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL);
+! PtAddCallback(gui.vimWindow, Pt_CB_WINDOW_OPENING,
+! gui_ph_handle_window_open, NULL);
+
+ n = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED);
+! PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_POS, &pos, 0);
+
+ #ifdef USE_PANEL_GROUP
+ /* Put in a temprary place holder title */
+! PtSetArg(&args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1);
+
+! gui.vimPanelGroup = PtCreateWidget(PtPanelGroup, gui.vimWindow, n, args);
+! if (gui.vimPanelGroup == NULL)
+ return FAIL;
+
+! PtAddCallback(gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+! gui_ph_handle_pg_change, NULL);
+ #else
+ /* Turn off all edge decorations */
+! PtSetArg(&args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL);
+! PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT);
+
+! gui.vimContainer = PtCreateWidget(PtPane, gui.vimWindow, n, args);
+! if (gui.vimContainer == NULL)
+ return FAIL;
+
+! PtAddCallback(gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL);
+ #endif
+
+ /* Size for the text area is set in gui_mch_set_text_area_pos */
+ n = 0;
+
+! PtSetArg(&args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1);
+! PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0);
+ /*
+ * Using focus render also causes the whole widget to be redrawn
+ * whenever it changes focus, which is very annoying :p
+ */
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
+! Pt_GETS_FOCUS | Pt_HIGHLIGHTED);
+ #ifndef FEAT_MOUSESHAPE
+! PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0);
+ #endif
+
+! gui.vimTextArea = PtCreateWidget(PtRaw, Pt_DFLT_PARENT, n, args);
+! if (gui.vimTextArea == NULL)
+ return FAIL;
+
+ /* TODO: use PtAddEventHandlers instead? */
+ /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+! PtAddEventHandler(gui.vimTextArea,
+ Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_PTR_MOTION_BUTTON,
+! gui_ph_handle_mouse, NULL);
+! PtAddEventHandler(gui.vimTextArea, Ph_EV_KEY,
+! gui_ph_handle_keyboard, NULL);
+! PtAddCallback(gui.vimTextArea, Pt_CB_GOT_FOCUS,
+! gui_ph_handle_focus, NULL);
+! PtAddCallback(gui.vimTextArea, Pt_CB_LOST_FOCUS,
+! gui_ph_handle_focus, NULL);
+
+ /*
+ * Now that the text area widget has been created, set up the colours,
+***************
+*** 1218,1278 ****
+ * Create the two timers, not as accurate as using the kernel timer
+ * functions, but good enough
+ */
+! gui_ph_timer_cursor = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+! if( gui_ph_timer_cursor == NULL )
+ return FAIL;
+
+! gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+! if( gui_ph_timer_timeout == NULL )
+ return FAIL;
+
+! PtAddCallback( gui_ph_timer_cursor, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_cursor, NULL);
+! PtAddCallback( gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_timeout, NULL);
+
+ #ifdef FEAT_MENU
+ n = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
+! Pt_IS_ANCHORED );
+! gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
+! n, args );
+! if( gui.vimToolBarGroup == NULL )
+ return FAIL;
+
+! PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
+! gui_ph_handle_menu_resize, NULL );
+
+ n = 0;
+ flags = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+! if( ! vim_strchr( p_go, GO_MENUS ) )
+ {
+ flags |= Pt_DELAY_REALIZE;
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags );
+ }
+! gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
+! if( gui.vimMenuBar == NULL )
+ return FAIL;
+
+ # ifdef FEAT_TOOLBAR
+ n = 0;
+
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+! Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED );
+! PtSetArg( &args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
+! Pt_RESIZE_Y_AS_REQUIRED );
+! PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+
+ flags = Pt_GETS_FOCUS;
+! if( ! vim_strchr( p_go, GO_TOOLBAR ) )
+ flags |= Pt_DELAY_REALIZE;
+
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags );
+
+! gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
+! if( gui.vimToolBar == NULL )
+ return FAIL;
+
+ /*
+--- 1218,1278 ----
+ * Create the two timers, not as accurate as using the kernel timer
+ * functions, but good enough
+ */
+! gui_ph_timer_cursor = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
+! if (gui_ph_timer_cursor == NULL)
+ return FAIL;
+
+! gui_ph_timer_timeout = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
+! if (gui_ph_timer_timeout == NULL)
+ return FAIL;
+
+! PtAddCallback(gui_ph_timer_cursor, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_cursor, NULL);
+! PtAddCallback(gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_timeout, NULL);
+
+ #ifdef FEAT_MENU
+ n = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
+! Pt_IS_ANCHORED);
+! gui.vimToolBarGroup = PtCreateWidget(PtToolbarGroup, gui.vimWindow,
+! n, args);
+! if (gui.vimToolBarGroup == NULL)
+ return FAIL;
+
+! PtAddCallback(gui.vimToolBarGroup, Pt_CB_RESIZE,
+! gui_ph_handle_menu_resize, NULL);
+
+ n = 0;
+ flags = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+! if (! vim_strchr(p_go, GO_MENUS))
+ {
+ flags |= Pt_DELAY_REALIZE;
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags);
+ }
+! gui.vimMenuBar = PtCreateWidget(PtMenuBar, gui.vimToolBarGroup, n, args);
+! if (gui.vimMenuBar == NULL)
+ return FAIL;
+
+ # ifdef FEAT_TOOLBAR
+ n = 0;
+
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+! Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED);
+! PtSetArg(&args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
+! Pt_RESIZE_Y_AS_REQUIRED);
+! PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+
+ flags = Pt_GETS_FOCUS;
+! if (! vim_strchr(p_go, GO_TOOLBAR))
+ flags |= Pt_DELAY_REALIZE;
+
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags);
+
+! gui.vimToolBar = PtCreateWidget(PtToolbar, gui.vimToolBarGroup, n, args);
+! if (gui.vimToolBar == NULL)
+ return FAIL;
+
+ /*
+***************
+*** 1310,1329 ****
+ if (gui_win_x != -1 && gui_win_y != -1)
+ gui_mch_set_winpos(gui_win_x, gui_win_y);
+
+! return (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL;
+ }
+
+ void
+ gui_mch_exit(int rc)
+ {
+! PtDestroyWidget( gui.vimWindow );
+
+! PxTranslateSet( charset_translate, NULL );
+
+! vim_free( gui.event_buffer );
+
+ #ifdef USE_PANEL_GROUPS
+! vim_free( panel_titles );
+ #endif
+ }
+
+--- 1310,1329 ----
+ if (gui_win_x != -1 && gui_win_y != -1)
+ gui_mch_set_winpos(gui_win_x, gui_win_y);
+
+! return (PtRealizeWidget(gui.vimWindow) == 0) ? OK : FAIL;
+ }
+
+ void
+ gui_mch_exit(int rc)
+ {
+! PtDestroyWidget(gui.vimWindow);
+
+! PxTranslateSet(charset_translate, NULL);
+
+! vim_free(gui.event_buffer);
+
+ #ifdef USE_PANEL_GROUPS
+! vim_free(panel_titles);
+ #endif
+ }
+
+***************
+*** 1333,1339 ****
+ /* When no events are available, photon will call this function, working is
+ * set to FALSE, and the gui_mch_update loop will exit. */
+ static int
+! exit_gui_mch_update( void *data )
+ {
+ *(int *)data = FALSE;
+ return Pt_END;
+--- 1333,1339 ----
+ /* When no events are available, photon will call this function, working is
+ * set to FALSE, and the gui_mch_update loop will exit. */
+ static int
+! exit_gui_mch_update(void *data)
+ {
+ *(int *)data = FALSE;
+ return Pt_END;
+***************
+*** 1344,1351 ****
+ {
+ int working = TRUE;
+
+! PtAppAddWorkProc( NULL, exit_gui_mch_update, &working );
+! while( ( working == TRUE ) && !vim_is_input_buf_full())
+ {
+ PtProcessEvent();
+ }
+--- 1344,1351 ----
+ {
+ int working = TRUE;
+
+! PtAppAddWorkProc(NULL, exit_gui_mch_update, &working);
+! while ((working == TRUE) && !vim_is_input_buf_full())
+ {
+ PtProcessEvent();
+ }
+***************
+*** 1356,1378 ****
+ {
+ is_timeout = FALSE;
+
+! if( wtime > 0 )
+! PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0 );
+
+! while( 1 )
+ {
+ PtProcessEvent();
+! if( input_available() )
+ {
+! PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
+ return OK;
+ }
+! else if( is_timeout == TRUE )
+ return FAIL;
+ }
+ }
+
+! #if defined( FEAT_BROWSE ) || defined( PROTO )
+ /*
+ * Put up a file requester.
+ * Returns the selected name in allocated memory, or NULL for Cancel.
+--- 1356,1378 ----
+ {
+ is_timeout = FALSE;
+
+! if (wtime > 0)
+! PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0);
+
+! while (1)
+ {
+ PtProcessEvent();
+! if (input_available())
+ {
+! PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0);
+ return OK;
+ }
+! else if (is_timeout == TRUE)
+ return FAIL;
+ }
+ }
+
+! #if defined(FEAT_BROWSE) || defined(PROTO)
+ /*
+ * Put up a file requester.
+ * Returns the selected name in allocated memory, or NULL for Cancel.
+***************
+*** 1398,1409 ****
+ char_u *open_text = NULL;
+
+ flags = 0;
+! memset( &file, 0, sizeof( file ) );
+
+! default_path = alloc( MAXPATHL + 1 + NAME_MAX + 1 );
+! if( default_path != NULL )
+ {
+! if( saving == TRUE )
+ {
+ /* Don't need Pt_FSR_CONFIRM_EXISTING, vim will ask anyway */
+ flags |= Pt_FSR_NO_FCHECK;
+--- 1398,1409 ----
+ char_u *open_text = NULL;
+
+ flags = 0;
+! memset(&file, 0, sizeof(file));
+
+! default_path = alloc(MAXPATHL + 1 + NAME_MAX + 1);
+! if (default_path != NULL)
+ {
+! if (saving == TRUE)
+ {
+ /* Don't need Pt_FSR_CONFIRM_EXISTING, vim will ask anyway */
+ flags |= Pt_FSR_NO_FCHECK;
+***************
+*** 1411,1433 ****
+ }
+
+ /* combine the directory and filename into a single path */
+! if( initdir == NULL || *initdir == NUL )
+ {
+! mch_dirname( default_path, MAXPATHL );
+ initdir = default_path;
+ }
+ else
+ {
+! STRCPY( default_path, initdir );
+ initdir = default_path;
+ }
+
+! if( default_name != NULL )
+ {
+! if( default_path[ STRLEN( default_path ) - 1 ] != '/' )
+! STRCAT( default_path, "/" );
+
+! STRCAT( default_path, default_name );
+ }
+
+ /* TODO: add a filter? */
+--- 1411,1433 ----
+ }
+
+ /* combine the directory and filename into a single path */
+! if (initdir == NULL || *initdir == NUL)
+ {
+! mch_dirname(default_path, MAXPATHL);
+ initdir = default_path;
+ }
+ else
+ {
+! STRCPY(default_path, initdir);
+ initdir = default_path;
+ }
+
+! if (default_name != NULL)
+ {
+! if (default_path[ STRLEN(default_path) - 1 ] != '/')
+! STRCAT(default_path, "/");
+
+! STRCAT(default_path, default_name);
+ }
+
+ /* TODO: add a filter? */
+***************
+*** 1441,1495 ****
+ NULL,
+ NULL,
+ &file,
+! flags );
+
+! vim_free( default_path );
+
+! if( file.ret == Pt_FSDIALOG_BTN1 )
+ return vim_strsave(file.path);
+ }
+ return NULL;
+ }
+ #endif
+
+! #if defined( FEAT_GUI_DIALOG ) || defined( PROTO )
+ static PtWidget_t *gui_ph_dialog_text = NULL;
+
+ static int
+! gui_ph_dialog_close( int button, void *data )
+ {
+ PtModalCtrl_t *modal_ctrl = data;
+ char_u *dialog_text, *vim_text;
+
+! if( gui_ph_dialog_text != NULL )
+ {
+! PtGetResource( gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0 );
+! PtGetResource( gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0 );
+! STRNCPY( vim_text, dialog_text, IOSIZE - 1 );
+ }
+
+! PtModalUnblock( modal_ctrl, (void *) button );
+
+ return Pt_TRUE;
+ }
+
+ static int
+! gui_ph_dialog_text_enter( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+! if( info->reason_subtype == Pt_EDIT_ACTIVATE )
+! gui_ph_dialog_close( 1, data );
+ return Pt_CONTINUE;
+ }
+
+ static int
+! gui_ph_dialog_esc( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PhKeyEvent_t *key;
+
+! key = PhGetData( info->event );
+! if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
+ {
+! gui_ph_dialog_close( 0, data );
+ return Pt_CONSUME;
+ }
+ return Pt_PROCESS;
+--- 1441,1495 ----
+ NULL,
+ NULL,
+ &file,
+! flags);
+
+! vim_free(default_path);
+
+! if (file.ret == Pt_FSDIALOG_BTN1)
+ return vim_strsave(file.path);
+ }
+ return NULL;
+ }
+ #endif
+
+! #if defined(FEAT_GUI_DIALOG) || defined(PROTO)
+ static PtWidget_t *gui_ph_dialog_text = NULL;
+
+ static int
+! gui_ph_dialog_close(int button, void *data)
+ {
+ PtModalCtrl_t *modal_ctrl = data;
+ char_u *dialog_text, *vim_text;
+
+! if (gui_ph_dialog_text != NULL)
+ {
+! PtGetResource(gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0);
+! PtGetResource(gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0);
+! STRNCPY(vim_text, dialog_text, IOSIZE - 1);
+ }
+
+! PtModalUnblock(modal_ctrl, (void *) button);
+
+ return Pt_TRUE;
+ }
+
+ static int
+! gui_ph_dialog_text_enter(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+! if (info->reason_subtype == Pt_EDIT_ACTIVATE)
+! gui_ph_dialog_close(1, data);
+ return Pt_CONTINUE;
+ }
+
+ static int
+! gui_ph_dialog_esc(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PhKeyEvent_t *key;
+
+! key = PhGetData(info->event);
+! if ((key->key_flags & Pk_KF_Cap_Valid) && (key->key_cap == Pk_Escape))
+ {
+! gui_ph_dialog_close(0, data);
+ return Pt_CONSUME;
+ }
+ return Pt_PROCESS;
+***************
+*** 1518,1557 ****
+
+ button_count = len = i = 0;
+
+! if( buttons == NULL || *buttons == NUL )
+ return -1;
+
+ /* There is one less separator than buttons, so bump up the button count */
+ button_count = 1;
+
+ /* Count string length and number of seperators */
+! for( str = buttons; *str; str++ )
+ {
+ len++;
+! if( *str == DLG_BUTTON_SEP )
+ button_count++;
+ }
+
+! if ( title == NULL )
+ title = "Vim";
+
+! buttons_copy = alloc( len + 1 );
+! button_array = (char_u **) alloc( button_count * sizeof( char_u * ) );
+! if( buttons_copy != NULL && button_array != NULL )
+ {
+! STRCPY( buttons_copy, buttons );
+
+ /*
+ * Convert DLG_BUTTON_SEP into NUL's and fill in
+ * button_array with the pointer to each NUL terminated string
+ */
+ str = buttons_copy;
+! for( i = 0; i < button_count; i++ )
+ {
+ button_array[ i ] = str;
+! for( ; *str; str++ )
+ {
+! if( *str == DLG_BUTTON_SEP )
+ {
+ *str++ = NUL;
+ break;
+--- 1518,1557 ----
+
+ button_count = len = i = 0;
+
+! if (buttons == NULL || *buttons == NUL)
+ return -1;
+
+ /* There is one less separator than buttons, so bump up the button count */
+ button_count = 1;
+
+ /* Count string length and number of seperators */
+! for (str = buttons; *str; str++)
+ {
+ len++;
+! if (*str == DLG_BUTTON_SEP)
+ button_count++;
+ }
+
+! if (title == NULL)
+ title = "Vim";
+
+! buttons_copy = alloc(len + 1);
+! button_array = (char_u **) alloc(button_count * sizeof(char_u *));
+! if (buttons_copy != NULL && button_array != NULL)
+ {
+! STRCPY(buttons_copy, buttons);
+
+ /*
+ * Convert DLG_BUTTON_SEP into NUL's and fill in
+ * button_array with the pointer to each NUL terminated string
+ */
+ str = buttons_copy;
+! for (i = 0; i < button_count; i++)
+ {
+ button_array[ i ] = str;
+! for (; *str; str++)
+ {
+! if (*str == DLG_BUTTON_SEP)
+ {
+ *str++ = NUL;
+ break;
+***************
+*** 1565,1571 ****
+ NULL,
+ message, NULL,
+ button_count, (const char **) button_array, NULL,
+! default_button, 0, Pt_MODAL );
+ #else
+ /* Writing the dialog ourselves lets us add extra features, like
+ * trapping the escape key and returning 0 to vim */
+--- 1565,1571 ----
+ NULL,
+ message, NULL,
+ button_count, (const char **) button_array, NULL,
+! default_button, 0, Pt_MODAL);
+ #else
+ /* Writing the dialog ourselves lets us add extra features, like
+ * trapping the escape key and returning 0 to vim */
+***************
+*** 1576,1607 ****
+ PtModalCtrl_t modal_ctrl;
+ PtDialogInfo_t di;
+
+! memset( &di, 0, sizeof( di ) );
+! memset( &modal_ctrl, 0, sizeof( modal_ctrl ) );
+
+ n = 0;
+! PtSetArg( &args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0 );
+! PtSetArg( &args[n++], Pt_ARG_WIDTH, 350, 0 );
+! PtSetArg( &args[n++], Pt_ARG_GROUP_ORIENTATION,
+! Pt_GROUP_VERTICAL, 0 );
+! PtSetArg( &args[n++], Pt_ARG_GROUP_FLAGS,
+! Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL );
+! PtSetArg( &args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE );
+! pane = PtCreateWidget( PtGroup, NULL, n, args );
+
+ n = 0;
+! PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, message, 0 );
+! PtCreateWidget( PtLabel, pane, n, args );
+
+! if( textfield != NULL )
+ {
+ n = 0;
+! PtSetArg( &args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0 );
+! PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, textfield, 0 );
+! PtSetArg( &args[n++], Pt_ARG_POINTER, textfield, 0 );
+! gui_ph_dialog_text = PtCreateWidget( PtText, pane, n, args );
+! PtAddCallback( gui_ph_dialog_text, Pt_CB_ACTIVATE,
+! gui_ph_dialog_text_enter, &modal_ctrl );
+ }
+
+ di.parent = gui.vimWindow;
+--- 1576,1607 ----
+ PtModalCtrl_t modal_ctrl;
+ PtDialogInfo_t di;
+
+! memset(&di, 0, sizeof(di));
+! memset(&modal_ctrl, 0, sizeof(modal_ctrl));
+
+ n = 0;
+! PtSetArg(&args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0);
+! PtSetArg(&args[n++], Pt_ARG_WIDTH, 350, 0);
+! PtSetArg(&args[n++], Pt_ARG_GROUP_ORIENTATION,
+! Pt_GROUP_VERTICAL, 0);
+! PtSetArg(&args[n++], Pt_ARG_GROUP_FLAGS,
+! Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL);
+! PtSetArg(&args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE);
+! pane = PtCreateWidget(PtGroup, NULL, n, args);
+
+ n = 0;
+! PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, message, 0);
+! PtCreateWidget(PtLabel, pane, n, args);
+
+! if (textfield != NULL)
+ {
+ n = 0;
+! PtSetArg(&args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0);
+! PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, textfield, 0);
+! PtSetArg(&args[n++], Pt_ARG_POINTER, textfield, 0);
+! gui_ph_dialog_text = PtCreateWidget(PtText, pane, n, args);
+! PtAddCallback(gui_ph_dialog_text, Pt_CB_ACTIVATE,
+! gui_ph_dialog_text_enter, &modal_ctrl);
+ }
+
+ di.parent = gui.vimWindow;
+***************
+*** 1616,1641 ****
+ di.callback = gui_ph_dialog_close;
+ di.data = &modal_ctrl;
+
+! dialog = PtCreateDialog( &di );
+! PtAddFilterCallback( dialog, Ph_EV_KEY,
+! gui_ph_dialog_esc, &modal_ctrl );
+
+! if( gui_ph_dialog_text != NULL )
+! PtGiveFocus( gui_ph_dialog_text, NULL );
+
+ /* Open dialog, block the vim window and wait for the dialog to close */
+! PtRealizeWidget( dialog );
+! PtMakeModal( dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR );
+! dialog_result = (int) PtModalBlock( &modal_ctrl, 0 );
+
+! PtDestroyWidget( dialog );
+ gui_ph_dialog_text = NULL;
+ }
+ #endif
+ }
+
+! vim_free( button_array );
+! vim_free( buttons_copy );
+
+ return dialog_result;
+ }
+--- 1616,1641 ----
+ di.callback = gui_ph_dialog_close;
+ di.data = &modal_ctrl;
+
+! dialog = PtCreateDialog(&di);
+! PtAddFilterCallback(dialog, Ph_EV_KEY,
+! gui_ph_dialog_esc, &modal_ctrl);
+
+! if (gui_ph_dialog_text != NULL)
+! PtGiveFocus(gui_ph_dialog_text, NULL);
+
+ /* Open dialog, block the vim window and wait for the dialog to close */
+! PtRealizeWidget(dialog);
+! PtMakeModal(dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR);
+! dialog_result = (int) PtModalBlock(&modal_ctrl, 0);
+
+! PtDestroyWidget(dialog);
+ gui_ph_dialog_text = NULL;
+ }
+ #endif
+ }
+
+! vim_free(button_array);
+! vim_free(buttons_copy);
+
+ return dialog_result;
+ }
+***************
+*** 1648,1654 ****
+ {
+ PhPoint_t *pos;
+
+! pos = PtWidgetPos( gui.vimWindow, NULL );
+
+ *x = pos->x;
+ *y = pos->y;
+--- 1648,1654 ----
+ {
+ PhPoint_t *pos;
+
+! pos = PtWidgetPos(gui.vimWindow, NULL);
+
+ *x = pos->x;
+ *y = pos->y;
+***************
+*** 1661,1667 ****
+ {
+ PhPoint_t pos = { x, y };
+
+! PtSetResource( gui.vimWindow, Pt_ARG_POS, &pos, 0 );
+ }
+
+ void
+--- 1661,1667 ----
+ {
+ PhPoint_t pos = { x, y };
+
+! PtSetResource(gui.vimWindow, Pt_ARG_POS, &pos, 0);
+ }
+
+ void
+***************
+*** 1677,1686 ****
+ window_size.h += pg_margin_top + pg_margin_bottom;
+ #endif
+
+! PtSetResource( gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0 );
+! PtSetResource( gui.vimWindow, Pt_ARG_DIM, &window_size, 0 );
+
+! if( ! PtWidgetIsRealized( gui.vimWindow ) )
+ gui_ph_resize_container();
+ }
+
+--- 1677,1686 ----
+ window_size.h += pg_margin_top + pg_margin_bottom;
+ #endif
+
+! PtSetResource(gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0);
+! PtSetResource(gui.vimWindow, Pt_ARG_DIM, &window_size, 0);
+
+! if (! PtWidgetIsRealized(gui.vimWindow))
+ gui_ph_resize_container();
+ }
+
+***************
+*** 1693,1700 ****
+ {
+ PhRect_t console;
+
+! PhWindowQueryVisible( Ph_QUERY_WORKSPACE, 0,
+! PhInputGroup( NULL ), &console );
+
+ *screen_w = console.lr.x - console.ul.x + 1;
+ *screen_h = console.lr.y - console.ul.y + 1;
+--- 1693,1700 ----
+ {
+ PhRect_t console;
+
+! PhWindowQueryVisible(Ph_QUERY_WORKSPACE, 0,
+! PhInputGroup(NULL), &console);
+
+ *screen_w = console.lr.x - console.ul.x + 1;
+ *screen_h = console.lr.y - console.ul.y + 1;
+***************
+*** 1705,1715 ****
+ {
+ PhWindowEvent_t event;
+
+! memset( &event, 0, sizeof (event) );
+ event.event_f = Ph_WM_HIDE;
+ event.event_state = Ph_WM_EVSTATE_HIDE;
+! event.rid = PtWidgetRid( gui.vimWindow );
+! PtForwardWindowEvent( &event );
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 1705,1715 ----
+ {
+ PhWindowEvent_t event;
+
+! memset(&event, 0, sizeof (event));
+ event.event_f = Ph_WM_HIDE;
+ event.event_state = Ph_WM_EVSTATE_HIDE;
+! event.rid = PtWidgetRid(gui.vimWindow);
+! PtForwardWindowEvent(&event);
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+***************
+*** 1721,1731 ****
+ {
+ PhWindowEvent_t event;
+
+! memset( &event, 0, sizeof (event) );
+ event.event_f = Ph_WM_TOFRONT;
+ event.event_state = Ph_WM_EVSTATE_FFRONT;
+! event.rid = PtWidgetRid( gui.vimWindow );
+! PtForwardWindowEvent( &event );
+ }
+ #endif
+
+--- 1721,1731 ----
+ {
+ PhWindowEvent_t event;
+
+! memset(&event, 0, sizeof (event));
+ event.event_f = Ph_WM_TOFRONT;
+ event.event_state = Ph_WM_EVSTATE_FFRONT;
+! event.rid = PtWidgetRid(gui.vimWindow);
+! PtForwardWindowEvent(&event);
+ }
+ #endif
+
+***************
+*** 1733,1741 ****
+ gui_mch_settitle(char_u *title, char_u *icon)
+ {
+ #ifdef USE_PANEL_GROUP
+! gui_ph_pg_set_buffer_num( curwin->w_buffer->b_fnum );
+ #endif
+! PtSetResource( gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0 );
+ /* Not sure what to do with the icon text, set balloon text somehow? */
+ }
+
+--- 1733,1741 ----
+ gui_mch_settitle(char_u *title, char_u *icon)
+ {
+ #ifdef USE_PANEL_GROUP
+! gui_ph_pg_set_buffer_num(curwin->w_buffer->b_fnum);
+ #endif
+! PtSetResource(gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0);
+ /* Not sure what to do with the icon text, set balloon text somehow? */
+ }
+
+***************
+*** 1748,1757 ****
+ int n = 0;
+ PtArg_t args[3];
+
+! PtSetArg( &args[ n++ ], Pt_ARG_MAXIMUM, max, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0 );
+! PtSetResources( sb->id, n, args );
+ }
+
+ void
+--- 1748,1757 ----
+ int n = 0;
+ PtArg_t args[3];
+
+! PtSetArg(&args[ n++ ], Pt_ARG_MAXIMUM, max, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0);
+! PtSetResources(sb->id, n, args);
+ }
+
+ void
+***************
+*** 1759,1765 ****
+ {
+ PhArea_t area = {{ x, y }, { w, h }};
+
+! PtSetResource( sb->id, Pt_ARG_AREA, &area, 0 );
+ }
+
+ void
+--- 1759,1765 ----
+ {
+ PhArea_t area = {{ x, y }, { w, h }};
+
+! PtSetResource(sb->id, Pt_ARG_AREA, &area, 0);
+ }
+
+ void
+***************
+*** 1775,1786 ****
+ *
+ * Also, don't let the scrollbar get focus
+ */
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
+! Pt_DELAY_REALIZE | Pt_GETS_FOCUS );
+! PtSetArg( &args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
+ #if 0
+ /* Don't need this anchoring for the scrollbars */
+! if( orient == SBAR_HORIZ )
+ {
+ anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM |
+ Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT;
+--- 1775,1786 ----
+ *
+ * Also, don't let the scrollbar get focus
+ */
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
+! Pt_DELAY_REALIZE | Pt_GETS_FOCUS);
+! PtSetArg(&args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
+ #if 0
+ /* Don't need this anchoring for the scrollbars */
+! if (orient == SBAR_HORIZ)
+ {
+ anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM |
+ Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT;
+***************
+*** 1788,1827 ****
+ else
+ {
+ anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM | Pt_TOP_ANCHORED_TOP;
+! if( sb->wp != NULL )
+ {
+! if( sb == &sb->wp->w_scrollbars[ SBAR_LEFT ] )
+ anchor_flags |= Pt_LEFT_ANCHORED_LEFT;
+ else
+ anchor_flags |= Pt_RIGHT_ANCHORED_RIGHT;
+ }
+ }
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED );
+ #endif
+! PtSetArg( &args[ n++ ], Pt_ARG_ORIENTATION,
+! (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0 );
+ #ifdef USE_PANEL_GROUP
+! sb->id = PtCreateWidget( PtScrollbar, gui.vimPanelGroup, n, args );
+ #else
+! sb->id = PtCreateWidget( PtScrollbar, gui.vimContainer, n, args );
+ #endif
+
+! PtAddCallback( sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb );
+ }
+
+ void
+ gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
+ {
+! if( flag != 0 )
+! PtRealizeWidget( sb->id );
+ else
+! PtUnrealizeWidget( sb->id );
+ }
+
+ void
+ gui_mch_destroy_scrollbar(scrollbar_T *sb)
+ {
+! PtDestroyWidget( sb->id );
+ sb->id = NULL;
+ }
+
+--- 1788,1827 ----
+ else
+ {
+ anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM | Pt_TOP_ANCHORED_TOP;
+! if (sb->wp != NULL)
+ {
+! if (sb == &sb->wp->w_scrollbars[ SBAR_LEFT ])
+ anchor_flags |= Pt_LEFT_ANCHORED_LEFT;
+ else
+ anchor_flags |= Pt_RIGHT_ANCHORED_RIGHT;
+ }
+ }
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED);
+ #endif
+! PtSetArg(&args[ n++ ], Pt_ARG_ORIENTATION,
+! (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0);
+ #ifdef USE_PANEL_GROUP
+! sb->id = PtCreateWidget(PtScrollbar, gui.vimPanelGroup, n, args);
+ #else
+! sb->id = PtCreateWidget(PtScrollbar, gui.vimContainer, n, args);
+ #endif
+
+! PtAddCallback(sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb);
+ }
+
+ void
+ gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
+ {
+! if (flag != 0)
+! PtRealizeWidget(sb->id);
+ else
+! PtUnrealizeWidget(sb->id);
+ }
+
+ void
+ gui_mch_destroy_scrollbar(scrollbar_T *sb)
+ {
+! PtDestroyWidget(sb->id);
+ sb->id = NULL;
+ }
+
+***************
+*** 1866,1873 ****
+ return;
+
+ if (shape == MSHAPE_HIDE || gui.pointer_hidden)
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
+! 0 );
+ else
+ {
+ if (shape >= MSHAPE_NUMBERED)
+--- 1866,1873 ----
+ return;
+
+ if (shape == MSHAPE_HIDE || gui.pointer_hidden)
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
+! 0);
+ else
+ {
+ if (shape >= MSHAPE_NUMBERED)
+***************
+*** 1875,1881 ****
+ else
+ id = mshape_ids[shape];
+
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id, 0 );
+ }
+ if (shape != MSHAPE_HIDE)
+ last_shape = shape;
+--- 1875,1881 ----
+ else
+ id = mshape_ids[shape];
+
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id, 0);
+ }
+ if (shape != MSHAPE_HIDE)
+ last_shape = shape;
+***************
+*** 1885,1903 ****
+ void
+ gui_mch_mousehide(int hide)
+ {
+! if( gui.pointer_hidden != hide )
+ {
+ gui.pointer_hidden = hide;
+ #ifdef FEAT_MOUSESHAPE
+! if( hide )
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+! Ph_CURSOR_NONE, 0 );
+ else
+! mch_set_mouse_shape( last_shape );
+ #else
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+! ( hide == MOUSE_SHOW ) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
+! 0 );
+ #endif
+ }
+ }
+--- 1885,1903 ----
+ void
+ gui_mch_mousehide(int hide)
+ {
+! if (gui.pointer_hidden != hide)
+ {
+ gui.pointer_hidden = hide;
+ #ifdef FEAT_MOUSESHAPE
+! if (hide)
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+! Ph_CURSOR_NONE, 0);
+ else
+! mch_set_mouse_shape(last_shape);
+ #else
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+! (hide == MOUSE_SHOW) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
+! 0);
+ #endif
+ }
+ }
+***************
+*** 1910,1917 ****
+
+ /* FIXME: does this return the correct position,
+ * with respect to the border? */
+! PhQueryCursor( PhInputGroup( NULL ), &info );
+! PtGetAbsPosition( gui.vimTextArea , &ix, &iy );
+
+ *x = info.pos.x - ix;
+ *y = info.pos.y - iy;
+--- 1910,1917 ----
+
+ /* FIXME: does this return the correct position,
+ * with respect to the border? */
+! PhQueryCursor(PhInputGroup(NULL), &info);
+! PtGetAbsPosition(gui.vimTextArea , &ix, &iy);
+
+ *x = info.pos.x - ix;
+ *y = info.pos.y - iy;
+***************
+*** 1922,1930 ****
+ {
+ short abs_x, abs_y;
+
+! PtGetAbsPosition( gui.vimTextArea, &abs_x, &abs_y );
+ /* Add the border offset? */
+! PhMoveCursorAbs( PhInputGroup( NULL ), abs_x + x, abs_y + y );
+ }
+
+ /****************************************************************************/
+--- 1922,1930 ----
+ {
+ short abs_x, abs_y;
+
+! PtGetAbsPosition(gui.vimTextArea, &abs_x, &abs_y);
+ /* Add the border offset? */
+! PhMoveCursorAbs(PhInputGroup(NULL), abs_x + x, abs_y + y);
+ }
+
+ /****************************************************************************/
+***************
+*** 1952,1974 ****
+ color_diff = gui_get_lightness(gui_ph_mouse_color)
+ - gui_get_lightness(gui.back_pixel);
+
+! if( abs( color_diff ) < 64 )
+ {
+ short r, g, b;
+ /* not a great algorithm... */
+! r = PgRedValue( gui_ph_mouse_color ) ^ 255;
+! g = PgGreenValue( gui_ph_mouse_color ) ^ 255;
+! b = PgBlueValue( gui_ph_mouse_color ) ^ 255;
+
+ #ifndef FEAT_MOUSESHAPE
+! gui_ph_mouse_color = PgRGB( r, g, b );
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
+! gui_ph_mouse_color, 0 );
+ #endif
+ }
+ #endif
+
+! PtSetResource( gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0 );
+ }
+
+ static int
+--- 1952,1974 ----
+ color_diff = gui_get_lightness(gui_ph_mouse_color)
+ - gui_get_lightness(gui.back_pixel);
+
+! if (abs(color_diff) < 64)
+ {
+ short r, g, b;
+ /* not a great algorithm... */
+! r = PgRedValue(gui_ph_mouse_color) ^ 255;
+! g = PgGreenValue(gui_ph_mouse_color) ^ 255;
+! b = PgBlueValue(gui_ph_mouse_color) ^ 255;
+
+ #ifndef FEAT_MOUSESHAPE
+! gui_ph_mouse_color = PgRGB(r, g, b);
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
+! gui_ph_mouse_color, 0);
+ #endif
+ }
+ #endif
+
+! PtSetResource(gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0);
+ }
+
+ static int
+***************
+*** 2058,2076 ****
+ };
+
+ /* is name #rrggbb format? */
+! if( name[0] == '#' && STRLEN( name ) == 7 )
+ {
+! r = hex_digit( name[1] ) * 16 + hex_digit( name[2] );
+! g = hex_digit( name[3] ) * 16 + hex_digit( name[4] );
+! b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
+! if( r < 0 || g < 0 || b < 0 )
+ return INVALCOLOR;
+ return RGB(r, g, b);
+ }
+
+! for( i = 0; i < ARRAY_LENGTH( table ); i++ )
+ {
+! if( STRICMP( name, table[i].name ) == 0 )
+ return table[i].colour;
+ }
+
+--- 2058,2076 ----
+ };
+
+ /* is name #rrggbb format? */
+! if (name[0] == '#' && STRLEN(name) == 7)
+ {
+! r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
+! g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
+! b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
+! if (r < 0 || g < 0 || b < 0)
+ return INVALCOLOR;
+ return RGB(r, g, b);
+ }
+
+! for (i = 0; i < ARRAY_LENGTH(table); i++)
+ {
+! if (STRICMP(name, table[i].name) == 0)
+ return table[i].colour;
+ }
+
+***************
+*** 2129,2141 ****
+ void
+ gui_mch_set_fg_color(guicolor_T color)
+ {
+! PgSetTextColor( color );
+ }
+
+ void
+ gui_mch_set_bg_color(guicolor_T color)
+ {
+! PgSetFillColor( color );
+ }
+
+ void
+--- 2129,2141 ----
+ void
+ gui_mch_set_fg_color(guicolor_T color)
+ {
+! PgSetTextColor(color);
+ }
+
+ void
+ gui_mch_set_bg_color(guicolor_T color)
+ {
+! PgSetFillColor(color);
+ }
+
+ void
+***************
+*** 2148,2168 ****
+ {
+ PhRect_t rect;
+
+! rect.ul.x = FILL_X( col );
+! rect.ul.y = FILL_Y( row );
+
+ /* FIXME: This has an off by one pixel problem */
+ rect.lr.x = rect.ul.x + nc * gui.char_width;
+ rect.lr.y = rect.ul.y + nr * gui.char_height;
+! if( nc > 0 )
+ rect.lr.x -= 1;
+! if( nr > 0 )
+ rect.lr.y -= 1;
+
+ DRAW_START;
+! PgSetDrawMode( Pg_DrawModeDSTINVERT );
+! PgDrawRect( &rect, Pg_DRAW_FILL );
+! PgSetDrawMode( Pg_DrawModeSRCCOPY );
+ DRAW_END;
+ }
+
+--- 2148,2168 ----
+ {
+ PhRect_t rect;
+
+! rect.ul.x = FILL_X(col);
+! rect.ul.y = FILL_Y(row);
+
+ /* FIXME: This has an off by one pixel problem */
+ rect.lr.x = rect.ul.x + nc * gui.char_width;
+ rect.lr.y = rect.ul.y + nr * gui.char_height;
+! if (nc > 0)
+ rect.lr.x -= 1;
+! if (nr > 0)
+ rect.lr.y -= 1;
+
+ DRAW_START;
+! PgSetDrawMode(Pg_DrawModeDSTINVERT);
+! PgDrawRect(&rect, Pg_DRAW_FILL);
+! PgSetDrawMode(Pg_DrawModeSRCCOPY);
+ DRAW_END;
+ }
+
+***************
+*** 2170,2182 ****
+ gui_mch_clear_block(int row1, int col1, int row2, int col2)
+ {
+ PhRect_t block = {
+! { FILL_X( col1 ), FILL_Y( row1 ) },
+! { FILL_X( col2 + 1 ) - 1, FILL_Y( row2 + 1 ) - 1}
+ };
+
+ DRAW_START;
+! gui_mch_set_bg_color( gui.back_pixel );
+! PgDrawRect( &block, Pg_DRAW_FILL );
+ DRAW_END;
+ }
+
+--- 2170,2182 ----
+ gui_mch_clear_block(int row1, int col1, int row2, int col2)
+ {
+ PhRect_t block = {
+! { FILL_X(col1), FILL_Y(row1) },
+! { FILL_X(col2 + 1) - 1, FILL_Y(row2 + 1) - 1}
+ };
+
+ DRAW_START;
+! gui_mch_set_bg_color(gui.back_pixel);
+! PgDrawRect(&block, Pg_DRAW_FILL);
+ DRAW_END;
+ }
+
+***************
+*** 2189,2200 ****
+ Rows * gui.char_height + gui.border_width - 1 }
+ };
+
+! if( is_ignore_draw == TRUE )
+ return;
+
+ DRAW_START;
+! gui_mch_set_bg_color( gui.back_pixel );
+! PgDrawRect( &text_rect, Pg_DRAW_FILL );
+ DRAW_END;
+ }
+
+--- 2189,2200 ----
+ Rows * gui.char_height + gui.border_width - 1 }
+ };
+
+! if (is_ignore_draw == TRUE)
+ return;
+
+ DRAW_START;
+! gui_mch_set_bg_color(gui.back_pixel);
+! PgDrawRect(&text_rect, Pg_DRAW_FILL);
+ DRAW_END;
+ }
+
+***************
+*** 2204,2231 ****
+ PhRect_t rect;
+ PhPoint_t delta;
+
+! rect.ul.x = FILL_X( gui.scroll_region_left );
+! rect.ul.y = FILL_Y( row + num_lines );
+
+! rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
+! rect.lr.y = FILL_Y( gui.scroll_region_bot + 1) - 1;
+
+! PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+! PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+! PhTranslateRect( &rect, &gui_ph_raw_offset );
+
+ delta.x = 0;
+ delta.y = -num_lines * gui.char_height;
+
+ PgFlush();
+
+! PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ), &rect, &delta );
+
+ gui_clear_block(
+ gui.scroll_region_bot - num_lines + 1,
+ gui.scroll_region_left,
+ gui.scroll_region_bot,
+! gui.scroll_region_right );
+ }
+
+ void
+--- 2204,2231 ----
+ PhRect_t rect;
+ PhPoint_t delta;
+
+! rect.ul.x = FILL_X(gui.scroll_region_left);
+! rect.ul.y = FILL_Y(row + num_lines);
+
+! rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
+! rect.lr.y = FILL_Y(gui.scroll_region_bot + 1) - 1;
+
+! PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+! PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+! PhTranslateRect(&rect, &gui_ph_raw_offset);
+
+ delta.x = 0;
+ delta.y = -num_lines * gui.char_height;
+
+ PgFlush();
+
+! PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)), &rect, &delta);
+
+ gui_clear_block(
+ gui.scroll_region_bot - num_lines + 1,
+ gui.scroll_region_left,
+ gui.scroll_region_bot,
+! gui.scroll_region_right);
+ }
+
+ void
+***************
+*** 2234,2258 ****
+ PhRect_t rect;
+ PhPoint_t delta;
+
+! rect.ul.x = FILL_X( gui.scroll_region_left );
+! rect.ul.y = FILL_Y( row );
+
+! rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
+! rect.lr.y = FILL_Y( gui.scroll_region_bot - num_lines + 1 ) - 1;
+
+! PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+! PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+! PhTranslateRect( &rect, &gui_ph_raw_offset );
+
+ delta.x = 0;
+ delta.y = num_lines * gui.char_height;
+
+ PgFlush();
+
+! PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) , &rect, &delta );
+
+! gui_clear_block( row, gui.scroll_region_left,
+! row + num_lines - 1, gui.scroll_region_right );
+ }
+
+ void
+--- 2234,2258 ----
+ PhRect_t rect;
+ PhPoint_t delta;
+
+! rect.ul.x = FILL_X(gui.scroll_region_left);
+! rect.ul.y = FILL_Y(row);
+
+! rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
+! rect.lr.y = FILL_Y(gui.scroll_region_bot - num_lines + 1) - 1;
+
+! PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+! PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+! PhTranslateRect(&rect, &gui_ph_raw_offset);
+
+ delta.x = 0;
+ delta.y = num_lines * gui.char_height;
+
+ PgFlush();
+
+! PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)) , &rect, &delta);
+
+! gui_clear_block(row, gui.scroll_region_left,
+! row + num_lines - 1, gui.scroll_region_right);
+ }
+
+ void
+***************
+*** 2261,2297 ****
+ static char *utf8_buffer = NULL;
+ static int utf8_len = 0;
+
+! PhPoint_t pos = { TEXT_X( col ), TEXT_Y( row ) };
+ PhRect_t rect;
+
+! if( is_ignore_draw == TRUE )
+ return;
+
+ DRAW_START;
+
+! if( !( flags & DRAW_TRANSP ) )
+ {
+ PgDrawIRect(
+! FILL_X( col ), FILL_Y( row ),
+! FILL_X( col + len ) - 1, FILL_Y( row + 1 ) - 1,
+! Pg_DRAW_FILL );
+ }
+
+! if( flags & DRAW_UNDERL )
+! PgSetUnderline( gui.norm_pixel, Pg_TRANSPARENT, 0 );
+
+! if( charset_translate != NULL
+ #ifdef FEAT_MBYTE
+ && enc_utf8 == 0
+ #endif
+! )
+ {
+ int src_taken, dst_made;
+
+ /* Use a static buffer to avoid large amounts of de/allocations */
+! if( utf8_len < len )
+ {
+! utf8_buffer = realloc( utf8_buffer, len * MB_LEN_MAX );
+ utf8_len = len;
+ }
+
+--- 2261,2297 ----
+ static char *utf8_buffer = NULL;
+ static int utf8_len = 0;
+
+! PhPoint_t pos = { TEXT_X(col), TEXT_Y(row) };
+ PhRect_t rect;
+
+! if (is_ignore_draw == TRUE)
+ return;
+
+ DRAW_START;
+
+! if (!(flags & DRAW_TRANSP))
+ {
+ PgDrawIRect(
+! FILL_X(col), FILL_Y(row),
+! FILL_X(col + len) - 1, FILL_Y(row + 1) - 1,
+! Pg_DRAW_FILL);
+ }
+
+! if (flags & DRAW_UNDERL)
+! PgSetUnderline(gui.norm_pixel, Pg_TRANSPARENT, 0);
+
+! if (charset_translate != NULL
+ #ifdef FEAT_MBYTE
+ && enc_utf8 == 0
+ #endif
+! )
+ {
+ int src_taken, dst_made;
+
+ /* Use a static buffer to avoid large amounts of de/allocations */
+! if (utf8_len < len)
+ {
+! utf8_buffer = realloc(utf8_buffer, len * MB_LEN_MAX);
+ utf8_len = len;
+ }
+
+***************
+*** 2302,2337 ****
+ &src_taken,
+ utf8_buffer,
+ utf8_len,
+! &dst_made );
+ s = utf8_buffer;
+ len = dst_made;
+ }
+
+! PgDrawText( s, len, &pos, 0 );
+
+! if( flags & DRAW_BOLD )
+ {
+ /* FIXME: try and only calculate these values once... */
+! rect.ul.x = FILL_X( col ) + 1;
+! rect.ul.y = FILL_Y( row );
+! rect.lr.x = FILL_X( col + len ) - 1;
+! rect.lr.y = FILL_Y( row + 1) - 1;
+! /* PgSetUserClip( NULL ) causes the scrollbar to not redraw... */
+ #if 0
+ pos.x++;
+
+! PgSetUserClip( &rect );
+! PgDrawText( s, len, &pos, 0 );
+! PgSetUserClip( NULL );
+ #else
+! rect.lr.y -= ( p_linespace + 1 ) / 2;
+ /* XXX: DrawTextArea doesn't work with phditto */
+! PgDrawTextArea( s, len, &rect, Pg_TEXT_BOTTOM );
+ #endif
+ }
+
+! if( flags & DRAW_UNDERL )
+! PgSetUnderline( Pg_TRANSPARENT, Pg_TRANSPARENT, 0 );
+
+ DRAW_END;
+ }
+--- 2302,2337 ----
+ &src_taken,
+ utf8_buffer,
+ utf8_len,
+! &dst_made);
+ s = utf8_buffer;
+ len = dst_made;
+ }
+
+! PgDrawText(s, len, &pos, 0);
+
+! if (flags & DRAW_BOLD)
+ {
+ /* FIXME: try and only calculate these values once... */
+! rect.ul.x = FILL_X(col) + 1;
+! rect.ul.y = FILL_Y(row);
+! rect.lr.x = FILL_X(col + len) - 1;
+! rect.lr.y = FILL_Y(row + 1) - 1;
+! /* PgSetUserClip(NULL) causes the scrollbar to not redraw... */
+ #if 0
+ pos.x++;
+
+! PgSetUserClip(&rect);
+! PgDrawText(s, len, &pos, 0);
+! PgSetUserClip(NULL);
+ #else
+! rect.lr.y -= (p_linespace + 1) / 2;
+ /* XXX: DrawTextArea doesn't work with phditto */
+! PgDrawTextArea(s, len, &rect, Pg_TEXT_BOTTOM);
+ #endif
+ }
+
+! if (flags & DRAW_UNDERL)
+! PgSetUnderline(Pg_TRANSPARENT, Pg_TRANSPARENT, 0);
+
+ DRAW_END;
+ }
+***************
+*** 2346,2359 ****
+
+ /* FIXME: Double width characters */
+
+! r.ul.x = FILL_X( gui.col );
+! r.ul.y = FILL_Y( gui.row );
+ r.lr.x = r.ul.x + gui.char_width - 1;
+ r.lr.y = r.ul.y + gui.char_height - 1;
+
+ DRAW_START;
+! PgSetStrokeColor( color );
+! PgDrawRect( &r, Pg_DRAW_STROKE );
+ DRAW_END;
+ }
+
+--- 2346,2359 ----
+
+ /* FIXME: Double width characters */
+
+! r.ul.x = FILL_X(gui.col);
+! r.ul.y = FILL_Y(gui.row);
+ r.lr.x = r.ul.x + gui.char_width - 1;
+ r.lr.y = r.ul.y + gui.char_height - 1;
+
+ DRAW_START;
+! PgSetStrokeColor(color);
+! PgDrawRect(&r, Pg_DRAW_STROKE);
+ DRAW_END;
+ }
+
+***************
+*** 2362,2375 ****
+ {
+ PhRect_t r;
+
+! r.ul.x = FILL_X( gui.col );
+! r.ul.y = FILL_Y( gui.row ) + gui.char_height - h;
+ r.lr.x = r.ul.x + w - 1;
+ r.lr.y = r.ul.y + h - 1;
+
+ DRAW_START;
+! gui_mch_set_bg_color( color );
+! PgDrawRect( &r, Pg_DRAW_FILL );
+ DRAW_END;
+ }
+
+--- 2362,2375 ----
+ {
+ PhRect_t r;
+
+! r.ul.x = FILL_X(gui.col);
+! r.ul.y = FILL_Y(gui.row) + gui.char_height - h;
+ r.lr.x = r.ul.x + w - 1;
+ r.lr.y = r.ul.y + h - 1;
+
+ DRAW_START;
+! gui_mch_set_bg_color(color);
+! PgDrawRect(&r, Pg_DRAW_FILL);
+ DRAW_END;
+ }
+
+***************
+*** 2385,2394 ****
+ gui_mch_start_blink(void)
+ {
+ /* Only turn on the timer on if none of the times are zero */
+! if( blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
+ {
+! PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_waittime, 0 );
+ blink_state = BLINK_ON;
+ gui_update_cursor(TRUE, FALSE);
+ }
+--- 2385,2394 ----
+ gui_mch_start_blink(void)
+ {
+ /* Only turn on the timer on if none of the times are zero */
+! if (blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
+ {
+! PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_waittime, 0);
+ blink_state = BLINK_ON;
+ gui_update_cursor(TRUE, FALSE);
+ }
+***************
+*** 2397,2405 ****
+ void
+ gui_mch_stop_blink(void)
+ {
+! PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0 );
+
+! if( blink_state == BLINK_OFF )
+ gui_update_cursor(TRUE, FALSE);
+
+ blink_state = BLINK_NONE;
+--- 2397,2405 ----
+ void
+ gui_mch_stop_blink(void)
+ {
+! PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0);
+
+! if (blink_state == BLINK_OFF)
+ gui_update_cursor(TRUE, FALSE);
+
+ blink_state = BLINK_NONE;
+***************
+*** 2417,2431 ****
+ void
+ gui_mch_flash(int msec)
+ {
+! PgSetFillXORColor( Pg_BLACK, Pg_WHITE );
+! PgSetDrawMode( Pg_DRAWMODE_XOR );
+ gui_mch_clear_all();
+ gui_mch_flush();
+
+! ui_delay( (long) msec, TRUE );
+
+ gui_mch_clear_all();
+! PgSetDrawMode( Pg_DRAWMODE_OPAQUE );
+ gui_mch_flush();
+ }
+
+--- 2417,2431 ----
+ void
+ gui_mch_flash(int msec)
+ {
+! PgSetFillXORColor(Pg_BLACK, Pg_WHITE);
+! PgSetDrawMode(Pg_DRAWMODE_XOR);
+ gui_mch_clear_all();
+ gui_mch_flush();
+
+! ui_delay((long) msec, TRUE);
+
+ gui_mch_clear_all();
+! PgSetDrawMode(Pg_DRAWMODE_OPAQUE);
+ gui_mch_flush();
+ }
+
+***************
+*** 2440,2446 ****
+ {
+ PhArea_t area = {{x, y}, {w, h}};
+
+! PtSetResource( gui.vimTextArea, Pt_ARG_AREA, &area, 0 );
+ }
+
+ int
+--- 2440,2446 ----
+ {
+ PhArea_t area = {{x, y}, {w, h}};
+
+! PtSetResource(gui.vimTextArea, Pt_ARG_AREA, &area, 0);
+ }
+
+ int
+***************
+*** 2496,2514 ****
+ };
+
+ static PhImage_t *
+! gui_ph_toolbar_load_icon( char_u *iconfile )
+ {
+ static PhImage_t external_icon;
+ PhImage_t *temp_phi = NULL;
+
+! temp_phi = PxLoadImage( iconfile, NULL );
+! if( temp_phi != NULL )
+ {
+ /* The label widget will free the image/palette/etc. for us when
+ * it's destroyed */
+ temp_phi->flags |= Ph_RELEASE_IMAGE_ALL;
+! memcpy( &external_icon, temp_phi, sizeof( external_icon ) );
+! free( temp_phi );
+
+ temp_phi = &external_icon;
+ }
+--- 2496,2514 ----
+ };
+
+ static PhImage_t *
+! gui_ph_toolbar_load_icon(char_u *iconfile)
+ {
+ static PhImage_t external_icon;
+ PhImage_t *temp_phi = NULL;
+
+! temp_phi = PxLoadImage(iconfile, NULL);
+! if (temp_phi != NULL)
+ {
+ /* The label widget will free the image/palette/etc. for us when
+ * it's destroyed */
+ temp_phi->flags |= Ph_RELEASE_IMAGE_ALL;
+! memcpy(&external_icon, temp_phi, sizeof(external_icon));
+! free(temp_phi);
+
+ temp_phi = &external_icon;
+ }
+***************
+*** 2523,2551 ****
+ * PhImage_t are copied, and the original PhImage_t aren't needed anymore).
+ */
+ static PhImage_t *
+! gui_ph_toolbar_find_icon( vimmenu_T *menu )
+ {
+ char_u full_pathname[ MAXPATHL + 1 ];
+ PhImage_t *icon = NULL;
+
+! if( menu->icon_builtin == FALSE )
+ {
+! if( menu->iconfile != NULL )
+ /* TODO: use gui_find_iconfile() */
+! icon = gui_ph_toolbar_load_icon( menu->iconfile );
+
+ /* TODO: Restrict loading to just .png? Search for any format? */
+! if( ( icon == NULL ) &&
+! ( ( gui_find_bitmap( menu->name, full_pathname, "gif" ) == OK ) ||
+! ( gui_find_bitmap( menu->name, full_pathname, "png" ) == OK ) ) )
+! icon = gui_ph_toolbar_load_icon( full_pathname );
+
+! if( icon != NULL )
+ return icon;
+ }
+
+! if( menu->iconidx >= 0 &&
+! ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
+ {
+ return gui_ph_toolbar_images[menu->iconidx];
+ }
+--- 2523,2551 ----
+ * PhImage_t are copied, and the original PhImage_t aren't needed anymore).
+ */
+ static PhImage_t *
+! gui_ph_toolbar_find_icon(vimmenu_T *menu)
+ {
+ char_u full_pathname[ MAXPATHL + 1 ];
+ PhImage_t *icon = NULL;
+
+! if (menu->icon_builtin == FALSE)
+ {
+! if (menu->iconfile != NULL)
+ /* TODO: use gui_find_iconfile() */
+! icon = gui_ph_toolbar_load_icon(menu->iconfile);
+
+ /* TODO: Restrict loading to just .png? Search for any format? */
+! if ((icon == NULL) &&
+! ((gui_find_bitmap(menu->name, full_pathname, "gif") == OK) ||
+! (gui_find_bitmap(menu->name, full_pathname, "png") == OK)))
+! icon = gui_ph_toolbar_load_icon(full_pathname);
+
+! if (icon != NULL)
+ return icon;
+ }
+
+! if (menu->iconidx >= 0 &&
+! (menu->iconidx < ARRAY_LENGTH(gui_ph_toolbar_images)))
+ {
+ return gui_ph_toolbar_images[menu->iconidx];
+ }
+***************
+*** 2554,2567 ****
+ }
+ #endif
+
+! #if defined( FEAT_MENU ) || defined( PROTO )
+ void
+ gui_mch_enable_menu(int flag)
+ {
+! if( flag != 0 )
+! PtRealizeWidget( gui.vimMenuBar );
+ else
+! PtUnrealizeWidget( gui.vimMenuBar );
+ }
+
+ void
+--- 2554,2567 ----
+ }
+ #endif
+
+! #if defined(FEAT_MENU) || defined(PROTO)
+ void
+ gui_mch_enable_menu(int flag)
+ {
+! if (flag != 0)
+! PtRealizeWidget(gui.vimMenuBar);
+ else
+! PtUnrealizeWidget(gui.vimMenuBar);
+ }
+
+ void
+***************
+*** 2572,2601 ****
+
+ /* Change the position of a menu button in the parent */
+ static void
+! gui_ph_position_menu( PtWidget_t *widget, int priority )
+ {
+ PtWidget_t *traverse;
+ vimmenu_T *menu;
+
+! traverse = PtWidgetChildBack( PtWidgetParent( widget ) );
+
+ /* Iterate through the list of widgets in traverse, until
+ * we find the position we want to insert our widget into */
+ /* TODO: traverse from front to back, possible speedup? */
+! while( traverse != NULL )
+ {
+! PtGetResource( traverse, Pt_ARG_POINTER, &menu, 0 );
+
+! if( menu != NULL &&
+ priority < menu->priority &&
+! widget != traverse )
+ {
+ /* Insert the widget before the current traverse widget */
+! PtWidgetInsert( widget, traverse, 1 );
+ return;
+ }
+
+! traverse = PtWidgetBrotherInFront( traverse );
+ }
+ }
+
+--- 2572,2601 ----
+
+ /* Change the position of a menu button in the parent */
+ static void
+! gui_ph_position_menu(PtWidget_t *widget, int priority)
+ {
+ PtWidget_t *traverse;
+ vimmenu_T *menu;
+
+! traverse = PtWidgetChildBack(PtWidgetParent(widget));
+
+ /* Iterate through the list of widgets in traverse, until
+ * we find the position we want to insert our widget into */
+ /* TODO: traverse from front to back, possible speedup? */
+! while (traverse != NULL)
+ {
+! PtGetResource(traverse, Pt_ARG_POINTER, &menu, 0);
+
+! if (menu != NULL &&
+ priority < menu->priority &&
+! widget != traverse)
+ {
+ /* Insert the widget before the current traverse widget */
+! PtWidgetInsert(widget, traverse, 1);
+ return;
+ }
+
+! traverse = PtWidgetBrotherInFront(traverse);
+ }
+ }
+
+***************
+*** 2611,2621 ****
+
+ menu->submenu_id = menu->id = NULL;
+
+! if( menu_is_menubar( menu->name ) )
+ {
+
+! accel_key = vim_strchr( menu->name, '&' );
+! if( accel_key != NULL )
+ {
+ mnemonic_str[0] = accel_key[1];
+ mnemonic_str[1] = NUL;
+--- 2611,2621 ----
+
+ menu->submenu_id = menu->id = NULL;
+
+! if (menu_is_menubar(menu->name))
+ {
+
+! accel_key = vim_strchr(menu->name, '&');
+! if (accel_key != NULL)
+ {
+ mnemonic_str[0] = accel_key[1];
+ mnemonic_str[1] = NUL;
+***************
+*** 2623,2673 ****
+
+ /* Create the menu button */
+ n = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
+! if( accel_key != NULL )
+! PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
+
+! if( parent != NULL )
+! PtSetArg( &args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0 );
+
+! menu->id = PtCreateWidget( PtMenuButton,
+ (parent == NULL) ? gui.vimMenuBar : parent->submenu_id,
+! n, args );
+
+! PtAddCallback( menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu );
+
+ /* Create the actual menu */
+ n = 0;
+! if( parent != NULL )
+! PtSetArg( &args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD );
+
+! menu->submenu_id = PtCreateWidget( PtMenu, menu->id, n, args );
+
+! if( parent == NULL )
+ {
+! PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
+! gui_ph_handle_menu_unrealized, menu );
+
+! if( menu->mnemonic != 0 )
+ {
+! PtAddHotkeyHandler( gui.vimWindow, tolower( menu->mnemonic ),
+! Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu );
+ }
+ }
+
+! gui_ph_position_menu( menu->id, menu->priority );
+
+ /* Redraw menubar here instead of gui_mch_draw_menubar */
+! if( gui.menu_is_active )
+! PtRealizeWidget( menu->id );
+ }
+! else if( menu_is_popup( menu->name ) )
+ {
+! menu->submenu_id = PtCreateWidget( PtMenu, gui.vimWindow, 0, NULL );
+! PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
+! gui_ph_handle_menu_unrealized, menu );
+ }
+ }
+
+--- 2623,2673 ----
+
+ /* Create the menu button */
+ n = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
+! if (accel_key != NULL)
+! PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
+
+! if (parent != NULL)
+! PtSetArg(&args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0);
+
+! menu->id = PtCreateWidget(PtMenuButton,
+ (parent == NULL) ? gui.vimMenuBar : parent->submenu_id,
+! n, args);
+
+! PtAddCallback(menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu);
+
+ /* Create the actual menu */
+ n = 0;
+! if (parent != NULL)
+! PtSetArg(&args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD);
+
+! menu->submenu_id = PtCreateWidget(PtMenu, menu->id, n, args);
+
+! if (parent == NULL)
+ {
+! PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
+! gui_ph_handle_menu_unrealized, menu);
+
+! if (menu->mnemonic != 0)
+ {
+! PtAddHotkeyHandler(gui.vimWindow, tolower(menu->mnemonic),
+! Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu);
+ }
+ }
+
+! gui_ph_position_menu(menu->id, menu->priority);
+
+ /* Redraw menubar here instead of gui_mch_draw_menubar */
+! if (gui.menu_is_active)
+! PtRealizeWidget(menu->id);
+ }
+! else if (menu_is_popup(menu->name))
+ {
+! menu->submenu_id = PtCreateWidget(PtMenu, gui.vimWindow, 0, NULL);
+! PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
+! gui_ph_handle_menu_unrealized, menu);
+ }
+ }
+
+***************
+*** 2681,2784 ****
+ PtArg_t args[13];
+
+ n = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
+
+ #ifdef FEAT_TOOLBAR
+! if( menu_is_toolbar( parent->name ) )
+ {
+! if( menu_is_separator( menu->name ) )
+ {
+! PtSetArg( &args[ n++ ], Pt_ARG_SEP_FLAGS,
+! Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION );
+! PtSetArg( &args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+! Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM );
+! PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, 2, 0 );
+! menu->id = PtCreateWidget( PtSeparator, gui.vimToolBar, n, args );
+ }
+ else
+ {
+! if( strstr( (const char *) p_toolbar, "text" ) != NULL )
+ {
+! PtSetArg( &args[ n++ ], Pt_ARG_BALLOON_POSITION,
+! Pt_BALLOON_BOTTOM, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0 );
+ }
+! if( ( strstr( (const char *) p_toolbar, "icons" ) != NULL ) &&
+! ( gui_ph_toolbar_images != NULL ) )
+ {
+! PtSetArg( &args[ n++ ], Pt_ARG_LABEL_IMAGE,
+! gui_ph_toolbar_find_icon( menu ), 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0 );
+ }
+! if( strstr( (const char *) p_toolbar, "tooltips" ) != NULL )
+ {
+! PtSetArg( &args[ n++ ], Pt_ARG_LABEL_BALLOON,
+! gui_ph_show_tooltip, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_LABEL_FLAGS,
+! Pt_TRUE, Pt_SHOW_BALLOON );
+ }
+! PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
+! Pt_HIGHLIGHTED | Pt_GETS_FOCUS );
+! PtSetArg( &args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 );
+! menu->id = PtCreateWidget( PtButton, gui.vimToolBar, n, args );
+
+! PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
+ }
+ /* Update toolbar if it's open */
+! if( PtWidgetIsRealized( gui.vimToolBar ) )
+! PtRealizeWidget( menu->id );
+ }
+ else
+ #endif
+! if( menu_is_separator( menu->name ) )
+ {
+! menu->id = PtCreateWidget( PtSeparator, parent->submenu_id, n, args );
+ }
+ else
+ {
+! accel_key = vim_strchr( menu->name, '&' );
+! if( accel_key != NULL )
+ {
+ mnemonic_str[0] = accel_key[1];
+ mnemonic_str[1] = NUL;
+ }
+
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+! if( accel_key != NULL )
+! PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
+! 0 );
+
+! PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
+
+! menu->id = PtCreateWidget( PtMenuButton, parent->submenu_id, n, args );
+
+! PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
+
+ #ifdef USE_PANEL_GROUP
+! if( gui_ph_is_buffer_item( menu, parent ) == TRUE )
+ {
+! PtAddCallback( menu->id, Pt_CB_DESTROYED,
+! gui_ph_handle_buffer_remove, menu );
+! gui_ph_pg_add_buffer( menu->dname );
+ }
+ #endif
+ }
+
+! gui_ph_position_menu( menu->id, menu->priority );
+ }
+
+ void
+ gui_mch_destroy_menu(vimmenu_T *menu)
+ {
+! if( menu->submenu_id != NULL )
+! PtDestroyWidget( menu->submenu_id );
+! if( menu->id != NULL )
+! PtDestroyWidget( menu->id );
+
+ menu->submenu_id = NULL;
+ menu->id = NULL;
+--- 2681,2784 ----
+ PtArg_t args[13];
+
+ n = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
+
+ #ifdef FEAT_TOOLBAR
+! if (menu_is_toolbar(parent->name))
+ {
+! if (menu_is_separator(menu->name))
+ {
+! PtSetArg(&args[ n++ ], Pt_ARG_SEP_FLAGS,
+! Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION);
+! PtSetArg(&args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+! Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM);
+! PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, 2, 0);
+! menu->id = PtCreateWidget(PtSeparator, gui.vimToolBar, n, args);
+ }
+ else
+ {
+! if (strstr((const char *) p_toolbar, "text") != NULL)
+ {
+! PtSetArg(&args[ n++ ], Pt_ARG_BALLOON_POSITION,
+! Pt_BALLOON_BOTTOM, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0);
+ }
+! if ((strstr((const char *) p_toolbar, "icons") != NULL) &&
+! (gui_ph_toolbar_images != NULL))
+ {
+! PtSetArg(&args[ n++ ], Pt_ARG_LABEL_IMAGE,
+! gui_ph_toolbar_find_icon(menu), 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0);
+ }
+! if (strstr((const char *) p_toolbar, "tooltips") != NULL)
+ {
+! PtSetArg(&args[ n++ ], Pt_ARG_LABEL_BALLOON,
+! gui_ph_show_tooltip, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_LABEL_FLAGS,
+! Pt_TRUE, Pt_SHOW_BALLOON);
+ }
+! PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
+! Pt_HIGHLIGHTED | Pt_GETS_FOCUS);
+! PtSetArg(&args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0);
+! menu->id = PtCreateWidget(PtButton, gui.vimToolBar, n, args);
+
+! PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
+ }
+ /* Update toolbar if it's open */
+! if (PtWidgetIsRealized(gui.vimToolBar))
+! PtRealizeWidget(menu->id);
+ }
+ else
+ #endif
+! if (menu_is_separator(menu->name))
+ {
+! menu->id = PtCreateWidget(PtSeparator, parent->submenu_id, n, args);
+ }
+ else
+ {
+! accel_key = vim_strchr(menu->name, '&');
+! if (accel_key != NULL)
+ {
+ mnemonic_str[0] = accel_key[1];
+ mnemonic_str[1] = NUL;
+ }
+
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+! if (accel_key != NULL)
+! PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
+! 0);
+
+! PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
+
+! menu->id = PtCreateWidget(PtMenuButton, parent->submenu_id, n, args);
+
+! PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
+
+ #ifdef USE_PANEL_GROUP
+! if (gui_ph_is_buffer_item(menu, parent) == TRUE)
+ {
+! PtAddCallback(menu->id, Pt_CB_DESTROYED,
+! gui_ph_handle_buffer_remove, menu);
+! gui_ph_pg_add_buffer(menu->dname);
+ }
+ #endif
+ }
+
+! gui_ph_position_menu(menu->id, menu->priority);
+ }
+
+ void
+ gui_mch_destroy_menu(vimmenu_T *menu)
+ {
+! if (menu->submenu_id != NULL)
+! PtDestroyWidget(menu->submenu_id);
+! if (menu->id != NULL)
+! PtDestroyWidget(menu->id);
+
+ menu->submenu_id = NULL;
+ menu->id = NULL;
+***************
+*** 2789,2800 ****
+ {
+ long flags, mask, fields;
+
+! if( menu->id == NULL )
+ return;
+
+! flags = PtWidgetFlags( menu->id );
+! if( PtWidgetIsClass( menu->id, PtMenuButton ) &&
+! PtWidgetIsClass( PtWidgetParent( menu->id ), PtMenu ) )
+ {
+ fields = Pt_FALSE;
+ mask = Pt_SELECTABLE | Pt_HIGHLIGHTED;
+--- 2789,2800 ----
+ {
+ long flags, mask, fields;
+
+! if (menu->id == NULL)
+ return;
+
+! flags = PtWidgetFlags(menu->id);
+! if (PtWidgetIsClass(menu->id, PtMenuButton) &&
+! PtWidgetIsClass(PtWidgetParent(menu->id), PtMenu))
+ {
+ fields = Pt_FALSE;
+ mask = Pt_SELECTABLE | Pt_HIGHLIGHTED;
+***************
+*** 2805,2815 ****
+ mask = Pt_BLOCKED | Pt_GHOST;
+ }
+
+! if( ! grey )
+ fields = ~fields;
+
+! PtSetResource( menu->id, Pt_ARG_FLAGS, fields,
+! mask );
+ }
+
+ void
+--- 2805,2815 ----
+ mask = Pt_BLOCKED | Pt_GHOST;
+ }
+
+! if (! grey)
+ fields = ~fields;
+
+! PtSetResource(menu->id, Pt_ARG_FLAGS, fields,
+! mask);
+ }
+
+ void
+***************
+*** 2830,2837 ****
+ void
+ gui_mch_show_popupmenu(vimmenu_T *menu)
+ {
+! PtSetResource( menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0 );
+! PtRealizeWidget( menu->submenu_id );
+ }
+
+ void
+--- 2830,2837 ----
+ void
+ gui_mch_show_popupmenu(vimmenu_T *menu)
+ {
+! PtSetResource(menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0);
+! PtRealizeWidget(menu->submenu_id);
+ }
+
+ void
+***************
+*** 2842,2855 ****
+
+ #endif
+
+! #if defined( FEAT_TOOLBAR ) || defined( PROTO )
+ void
+ gui_mch_show_toolbar(int showit)
+ {
+! if( showit )
+! PtRealizeWidget( gui.vimToolBar );
+ else
+! PtUnrealizeWidget( gui.vimToolBar );
+ }
+ #endif
+
+--- 2842,2855 ----
+
+ #endif
+
+! #if defined(FEAT_TOOLBAR) || defined(PROTO)
+ void
+ gui_mch_show_toolbar(int showit)
+ {
+! if (showit)
+! PtRealizeWidget(gui.vimToolBar);
+ else
+! PtUnrealizeWidget(gui.vimToolBar);
+ }
+ #endif
+
+***************
+*** 2870,2903 ****
+ FontQueryInfo info;
+ int_u style;
+
+! font_tag = alloc( MAX_FONT_TAG );
+! if( font_tag != NULL )
+ {
+! if( PfGenerateFontName( font_name, font_flags, font_size,
+! font_tag ) != NULL )
+ {
+ /* Enforce some limits on the font used */
+ style = PHFONT_INFO_FIXED;
+
+! if( enforce & PF_STYLE_BOLD )
+ style |= PHFONT_INFO_BOLD;
+! if( enforce & PF_STYLE_ANTIALIAS )
+ style |= PHFONT_INFO_ALIAS;
+! if( enforce & PF_STYLE_ITALIC )
+ style |= PHFONT_INFO_ITALIC;
+
+! PfQueryFontInfo( font_tag, &info );
+
+! if( info.size == 0 )
+ font_size = 0;
+
+ /* Make sure font size matches, and that the font style
+ * at least has the bits we're checking for */
+! if( font_size == info.size &&
+! style == (info.style & style) )
+ return (GuiFont)font_tag;
+ }
+! vim_free( font_tag );
+ }
+ return NULL;
+ }
+--- 2870,2903 ----
+ FontQueryInfo info;
+ int_u style;
+
+! font_tag = alloc(MAX_FONT_TAG);
+! if (font_tag != NULL)
+ {
+! if (PfGenerateFontName(font_name, font_flags, font_size,
+! font_tag) != NULL)
+ {
+ /* Enforce some limits on the font used */
+ style = PHFONT_INFO_FIXED;
+
+! if (enforce & PF_STYLE_BOLD)
+ style |= PHFONT_INFO_BOLD;
+! if (enforce & PF_STYLE_ANTIALIAS)
+ style |= PHFONT_INFO_ALIAS;
+! if (enforce & PF_STYLE_ITALIC)
+ style |= PHFONT_INFO_ITALIC;
+
+! PfQueryFontInfo(font_tag, &info);
+
+! if (info.size == 0)
+ font_size = 0;
+
+ /* Make sure font size matches, and that the font style
+ * at least has the bits we're checking for */
+! if (font_size == info.size &&
+! style == (info.style & style))
+ return (GuiFont)font_tag;
+ }
+! vim_free(font_tag);
+ }
+ return NULL;
+ }
+***************
+*** 2919,2936 ****
+ char_u *vim_font,
+ char_u **font_name,
+ int_u *font_flags,
+! int_u *font_size )
+ {
+ char_u *mark;
+ int_u name_len, size;
+
+! mark = vim_strchr( vim_font, ':' );
+! if( mark == NULL )
+! name_len = STRLEN( vim_font );
+ else
+! name_len = (int_u) ( mark - vim_font );
+
+! *font_name = vim_strnsave( vim_font, name_len );
+ if (*font_name != NULL)
+ {
+ if (mark != NULL)
+--- 2919,2936 ----
+ char_u *vim_font,
+ char_u **font_name,
+ int_u *font_flags,
+! int_u *font_size)
+ {
+ char_u *mark;
+ int_u name_len, size;
+
+! mark = vim_strchr(vim_font, ':');
+! if (mark == NULL)
+! name_len = STRLEN(vim_font);
+ else
+! name_len = (int_u) (mark - vim_font);
+
+! *font_name = vim_strnsave(vim_font, name_len);
+ if (*font_name != NULL)
+ {
+ if (mark != NULL)
+***************
+*** 2944,2950 ****
+ case 'i': *font_flags |= PF_STYLE_ITALIC; break;
+
+ case 's':
+! size = getdigits( &mark );
+ /* Restrict the size to some vague limits */
+ if (size < 1 || size > 100)
+ size = 8;
+--- 2944,2950 ----
+ case 'i': *font_flags |= PF_STYLE_ITALIC; break;
+
+ case 's':
+! size = getdigits(&mark);
+ /* Restrict the size to some vague limits */
+ if (size < 1 || size > 100)
+ size = 8;
+***************
+*** 2979,3031 ****
+ vim_font_name = "PC Terminal";
+ }
+
+! if (STRCMP( vim_font_name, "*" ) == 0)
+ {
+! font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
+! "pcterm12", -1, PHFONT_FIXED, NULL );
+
+ if (font_tag == NULL)
+ return FAIL;
+
+! gui_mch_free_font( gui.norm_font );
+ gui.norm_font = font_tag;
+
+! PfQueryFontInfo( font_tag, &info );
+! font_name = vim_strsave( info.font );
+ }
+ else
+ {
+! if (gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) == FALSE)
+ return FAIL;
+
+! font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+ if (font_tag == NULL)
+ {
+! vim_free( font_name );
+ return FAIL;
+ }
+
+! gui_mch_free_font( gui.norm_font );
+ gui.norm_font = font_tag;
+ }
+
+! gui_mch_free_font( gui.bold_font );
+! gui.bold_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_BOLD,
+! font_size, PF_STYLE_BOLD );
+!
+! gui_mch_free_font( gui.ital_font );
+! gui.ital_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_ITALIC,
+! font_size, PF_STYLE_ITALIC );
+
+ /* This extent was brought to you by the letter 'g' */
+! PfExtentText( &extent, NULL, font_tag, "g", 1 );
+
+ gui.char_width = extent.lr.x - extent.ul.x + 1;
+ gui.char_height = (- extent.ul.y) + extent.lr.y + 1;
+ gui.char_ascent = - extent.ul.y;
+
+! vim_free( font_name );
+ return OK;
+ }
+
+--- 2979,3031 ----
+ vim_font_name = "PC Terminal";
+ }
+
+! if (STRCMP(vim_font_name, "*") == 0)
+ {
+! font_tag = PtFontSelection(gui.vimWindow, NULL, NULL,
+! "pcterm12", -1, PHFONT_FIXED, NULL);
+
+ if (font_tag == NULL)
+ return FAIL;
+
+! gui_mch_free_font(gui.norm_font);
+ gui.norm_font = font_tag;
+
+! PfQueryFontInfo(font_tag, &info);
+! font_name = vim_strsave(info.font);
+ }
+ else
+ {
+! if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
+! &font_size) == FALSE)
+ return FAIL;
+
+! font_tag = gui_ph_get_font(font_name, font_flags, font_size, 0);
+ if (font_tag == NULL)
+ {
+! vim_free(font_name);
+ return FAIL;
+ }
+
+! gui_mch_free_font(gui.norm_font);
+ gui.norm_font = font_tag;
+ }
+
+! gui_mch_free_font(gui.bold_font);
+! gui.bold_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_BOLD,
+! font_size, PF_STYLE_BOLD);
+!
+! gui_mch_free_font(gui.ital_font);
+! gui.ital_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_ITALIC,
+! font_size, PF_STYLE_ITALIC);
+
+ /* This extent was brought to you by the letter 'g' */
+! PfExtentText(&extent, NULL, font_tag, "g", 1);
+
+ gui.char_width = extent.lr.x - extent.ul.x + 1;
+ gui.char_height = (- extent.ul.y) + extent.lr.y + 1;
+ gui.char_ascent = - extent.ul.y;
+
+! vim_free(font_name);
+ return OK;
+ }
+
+***************
+*** 3037,3043 ****
+ {
+ FontQueryInfo info;
+
+! PfQueryFontInfo( gui.norm_font, &info );
+
+ gui.char_height = - info.ascender + info.descender + p_linespace;
+ gui.char_ascent = - info.ascender + p_linespace / 2;
+--- 3037,3043 ----
+ {
+ FontQueryInfo info;
+
+! PfQueryFontInfo(gui.norm_font, &info);
+
+ gui.char_height = - info.ascender + info.descender + p_linespace;
+ gui.char_ascent = - info.ascender + p_linespace / 2;
+***************
+*** 3053,3070 ****
+ int_u font_size = 12;
+ int_u font_flags = 0;
+
+! if (gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) != FALSE)
+ {
+! font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
+! vim_free( font_name );
+
+ if (font_tag != NULL)
+ return (GuiFont)font_tag;
+ }
+
+ if (report_error)
+! EMSG2(e_font, vim_font_name );
+
+ return FAIL;
+ }
+--- 3053,3070 ----
+ int_u font_size = 12;
+ int_u font_flags = 0;
+
+! if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
+! &font_size) != FALSE)
+ {
+! font_tag = gui_ph_get_font(font_name, font_flags, font_size, -1);
+! vim_free(font_name);
+
+ if (font_tag != NULL)
+ return (GuiFont)font_tag;
+ }
+
+ if (report_error)
+! EMSG2(e_font, vim_font_name);
+
+ return FAIL;
+ }
+***************
+*** 3088,3099 ****
+ void
+ gui_mch_set_font(GuiFont font)
+ {
+! PgSetFont( font );
+ }
+
+ void
+ gui_mch_free_font(GuiFont font)
+ {
+! vim_free( font );
+ }
+
+--- 3088,3099 ----
+ void
+ gui_mch_set_font(GuiFont font)
+ {
+! PgSetFont(font);
+ }
+
+ void
+ gui_mch_free_font(GuiFont font)
+ {
+! vim_free(font);
+ }
+
+*** ../vim-7.3.309/src/version.c 2011-09-14 15:41:54.000000000 +0200
+--- src/version.c 2011-09-14 16:01:50.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 310,
+ /**/
+
+--
+An operatingsystem is just a name you give to the rest of bloating
+idiosyncratic machine-based-features you left out of your editor.
+ (author unknown)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.311
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.311 (replaces 7.3.289)
+Problem: Complete function isn't called when the leader changed.
+Solution: Allow the complete function to return a dictionary with a flag
+ that indicates ins_compl_restart() is to be called when the leader
+ changes. (Taro Muraoka)
+Files: runtime/insert.txt, src/edit.c, src/eval.c, src/proto/eval.pro
+
+
+*** ../vim-7.3.310/src/edit.c 2011-09-05 20:13:37.000000000 +0200
+--- src/edit.c 2011-09-14 16:43:14.000000000 +0200
+***************
+*** 135,140 ****
+--- 135,142 ----
+ static int compl_cont_mode = 0;
+ static expand_T compl_xp;
+
++ static int compl_opt_refresh_always = FALSE;
++
+ static void ins_ctrl_x __ARGS((void));
+ static int has_compl_option __ARGS((int dict_opt));
+ static int ins_compl_accept_char __ARGS((int c));
+***************
+*** 153,161 ****
+ static void ins_compl_free __ARGS((void));
+ static void ins_compl_clear __ARGS((void));
+ static int ins_compl_bs __ARGS((void));
+ static void ins_compl_new_leader __ARGS((void));
+ static void ins_compl_addleader __ARGS((int c));
+! static int ins_compl_len __ARGS((void));
+ static void ins_compl_restart __ARGS((void));
+ static void ins_compl_set_original_text __ARGS((char_u *str));
+ static void ins_compl_addfrommatch __ARGS((void));
+--- 155,164 ----
+ static void ins_compl_free __ARGS((void));
+ static void ins_compl_clear __ARGS((void));
+ static int ins_compl_bs __ARGS((void));
++ static int ins_compl_need_restart __ARGS((void));
+ static void ins_compl_new_leader __ARGS((void));
+ static void ins_compl_addleader __ARGS((int c));
+! static int ins_compl_len __ARGS((void));
+ static void ins_compl_restart __ARGS((void));
+ static void ins_compl_set_original_text __ARGS((char_u *str));
+ static void ins_compl_addfrommatch __ARGS((void));
+***************
+*** 163,168 ****
+--- 166,172 ----
+ static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
+ #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
+ static void ins_compl_add_list __ARGS((list_T *list));
++ static void ins_compl_add_dict __ARGS((dict_T *dict));
+ #endif
+ static int ins_compl_get_exp __ARGS((pos_T *ini));
+ static void ins_compl_delete __ARGS((void));
+***************
+*** 3341,3347 ****
+ /* Deleted more than what was used to find matches or didn't finish
+ * finding all matches: need to look for matches all over again. */
+ if (curwin->w_cursor.col <= compl_col + compl_length
+! || compl_was_interrupted)
+ ins_compl_restart();
+
+ vim_free(compl_leader);
+--- 3345,3351 ----
+ /* Deleted more than what was used to find matches or didn't finish
+ * finding all matches: need to look for matches all over again. */
+ if (curwin->w_cursor.col <= compl_col + compl_length
+! || ins_compl_need_restart())
+ ins_compl_restart();
+
+ vim_free(compl_leader);
+***************
+*** 3355,3360 ****
+--- 3359,3378 ----
+ }
+
+ /*
++ * Return TRUE when we need to find matches again, ins_compl_restart() is to
++ * be called.
++ */
++ static int
++ ins_compl_need_restart()
++ {
++ /* Return TRUE if we didn't complete finding matches or when the
++ * 'completefunc' returned "always" in the "refresh" dictionary item. */
++ return compl_was_interrupted
++ || ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
++ && compl_opt_refresh_always);
++ }
++
++ /*
+ * Called after changing "compl_leader".
+ * Show the popup menu with a different set of matches.
+ * May also search for matches again if the previous search was interrupted.
+***************
+*** 3443,3449 ****
+ ins_char(c);
+
+ /* If we didn't complete finding matches we must search again. */
+! if (compl_was_interrupted)
+ ins_compl_restart();
+
+ vim_free(compl_leader);
+--- 3461,3467 ----
+ ins_char(c);
+
+ /* If we didn't complete finding matches we must search again. */
+! if (ins_compl_need_restart())
+ ins_compl_restart();
+
+ vim_free(compl_leader);
+***************
+*** 3871,3882 ****
+ int type; /* CTRL_X_OMNI or CTRL_X_FUNCTION */
+ char_u *base;
+ {
+! list_T *matchlist;
+ char_u *args[2];
+ char_u *funcname;
+ pos_T pos;
+ win_T *curwin_save;
+ buf_T *curbuf_save;
+
+ funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+ if (*funcname == NUL)
+--- 3889,3902 ----
+ int type; /* CTRL_X_OMNI or CTRL_X_FUNCTION */
+ char_u *base;
+ {
+! list_T *matchlist = NULL;
+! dict_T *matchdict = NULL;
+ char_u *args[2];
+ char_u *funcname;
+ pos_T pos;
+ win_T *curwin_save;
+ buf_T *curbuf_save;
++ typval_T rettv;
+
+ funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+ if (*funcname == NUL)
+***************
+*** 3889,3895 ****
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+! matchlist = call_func_retlist(funcname, 2, args, FALSE);
+ if (curwin_save != curwin || curbuf_save != curbuf)
+ {
+ EMSG(_(e_complwin));
+--- 3909,3933 ----
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+!
+! /* Call a function, which returns a list or dict. */
+! if (call_vim_function(funcname, 2, args, FALSE, &rettv) == OK)
+! {
+! switch (rettv.v_type)
+! {
+! case VAR_LIST:
+! matchlist = rettv.vval.v_list;
+! break;
+! case VAR_DICT:
+! matchdict = rettv.vval.v_dict;
+! break;
+! default:
+! /* TODO: Give error message? */
+! clear_tv(&rettv);
+! break;
+! }
+! }
+!
+ if (curwin_save != curwin || curbuf_save != curbuf)
+ {
+ EMSG(_(e_complwin));
+***************
+*** 3902,3911 ****
+--- 3940,3954 ----
+ EMSG(_(e_compldel));
+ goto theend;
+ }
++
+ if (matchlist != NULL)
+ ins_compl_add_list(matchlist);
++ else if (matchdict != NULL)
++ ins_compl_add_dict(matchdict);
+
+ theend:
++ if (matchdict != NULL)
++ dict_unref(matchdict);
+ if (matchlist != NULL)
+ list_unref(matchlist);
+ }
+***************
+*** 3934,3939 ****
+--- 3977,4009 ----
+ }
+
+ /*
++ * Add completions from a dict.
++ */
++ static void
++ ins_compl_add_dict(dict)
++ dict_T *dict;
++ {
++ dictitem_T *refresh;
++ dictitem_T *words;
++
++ /* Check for optional "refresh" item. */
++ compl_opt_refresh_always = FALSE;
++ refresh = dict_find(dict, (char_u *)"refresh", 7);
++ if (refresh != NULL && refresh->di_tv.v_type == VAR_STRING)
++ {
++ char_u *v = refresh->di_tv.vval.v_string;
++
++ if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
++ compl_opt_refresh_always = TRUE;
++ }
++
++ /* Add completions from a "words" list. */
++ words = dict_find(dict, (char_u *)"words", 5);
++ if (words != NULL && words->di_tv.v_type == VAR_LIST)
++ ins_compl_add_list(words->di_tv.vval.v_list);
++ }
++
++ /*
+ * Add a match to the list of matches from a typeval_T.
+ * If the given string is already in the list of completions, then return
+ * NOTDONE, otherwise add it to the list and return OK. If there is an error,
+***************
+*** 5088,5093 ****
+--- 5158,5169 ----
+ return FAIL;
+ }
+
++ /*
++ * Reset extended parameters of completion, when start new
++ * completion.
++ */
++ compl_opt_refresh_always = FALSE;
++
+ if (col < 0)
+ col = curs_col;
+ compl_col = col;
+*** ../vim-7.3.310/src/eval.c 2011-09-14 14:33:47.000000000 +0200
+--- src/eval.c 2011-09-14 16:16:47.000000000 +0200
+***************
+*** 380,388 ****
+
+ static void prepare_vimvar __ARGS((int idx, typval_T *save_tv));
+ static void restore_vimvar __ARGS((int idx, typval_T *save_tv));
+- #if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
+- static int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
+- #endif
+ static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
+ static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
+ static char_u *skip_var_one __ARGS((char_u *arg));
+--- 380,385 ----
+***************
+*** 451,457 ****
+ static void set_ref_in_list __ARGS((list_T *l, int copyID));
+ static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ static int rettv_dict_alloc __ARGS((typval_T *rettv));
+- static void dict_unref __ARGS((dict_T *d));
+ static void dict_free __ARGS((dict_T *d, int recurse));
+ static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
+ static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
+--- 448,453 ----
+***************
+*** 1563,1569 ****
+ * arguments are currently supported.
+ * Returns OK or FAIL.
+ */
+! static int
+ call_vim_function(func, argc, argv, safe, rettv)
+ char_u *func;
+ int argc;
+--- 1559,1565 ----
+ * arguments are currently supported.
+ * Returns OK or FAIL.
+ */
+! int
+ call_vim_function(func, argc, argv, safe, rettv)
+ char_u *func;
+ int argc;
+***************
+*** 6903,6909 ****
+ * Unreference a Dictionary: decrement the reference count and free it when it
+ * becomes zero.
+ */
+! static void
+ dict_unref(d)
+ dict_T *d;
+ {
+--- 6899,6905 ----
+ * Unreference a Dictionary: decrement the reference count and free it when it
+ * becomes zero.
+ */
+! void
+ dict_unref(d)
+ dict_T *d;
+ {
+*** ../vim-7.3.310/src/proto/eval.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/eval.pro 2011-09-14 16:16:47.000000000 +0200
+***************
+*** 23,28 ****
+--- 23,29 ----
+ list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+ int get_spellword __ARGS((list_T *list, char_u **pp));
+ typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
++ int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
+ void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
+***************
+*** 52,57 ****
+--- 53,59 ----
+ int list_append_string __ARGS((list_T *l, char_u *str, int len));
+ int garbage_collect __ARGS((void));
+ dict_T *dict_alloc __ARGS((void));
++ void dict_unref __ARGS((dict_T *d));
+ dictitem_T *dictitem_alloc __ARGS((char_u *key));
+ void dictitem_free __ARGS((dictitem_T *item));
+ int dict_add __ARGS((dict_T *d, dictitem_T *item));
+*** ../vim-7.3.310/src/version.c 2011-09-14 16:04:52.000000000 +0200
+--- src/version.c 2011-09-14 16:25:08.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 311,
+ /**/
+
+--
+Contrary to popular belief, it's often your clothing that gets promoted, not
+you.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.312
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.312 (after 7.3.306)
+Problem: Can't compile with tiny features.
+Solution: Add #ifdef around win_valid().
+Files: src/buffer.c
+
+
+*** ../vim-7.3.311/src/buffer.c 2011-09-14 14:43:21.000000000 +0200
+--- src/buffer.c 2011-09-14 17:46:24.000000000 +0200
+***************
+*** 416,422 ****
+ #endif
+
+ buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
+! if (win_valid(win) && win->w_buffer == buf)
+ win->w_buffer = NULL; /* make sure we don't use the buffer now */
+
+ #ifdef FEAT_AUTOCMD
+--- 416,426 ----
+ #endif
+
+ buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
+! if (
+! #ifdef FEAT_WINDOWS
+! win_valid(win) &&
+! #endif
+! win->w_buffer == buf)
+ win->w_buffer = NULL; /* make sure we don't use the buffer now */
+
+ #ifdef FEAT_AUTOCMD
+*** ../vim-7.3.311/src/version.c 2011-09-14 16:52:02.000000000 +0200
+--- src/version.c 2011-09-14 17:27:24.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 312,
+ /**/
+
+--
+You have heard the saying that if you put a thousand monkeys in a room with a
+thousand typewriters and waited long enough, eventually you would have a room
+full of dead monkeys.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.313
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.313 (after 7.3.307)
+Problem: One more warning when compiling with dynamic Python 3.
+Solution: Change PySliceObject to PyObject.
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.312/src/if_python3.c 2011-09-14 15:41:54.000000000 +0200
+--- src/if_python3.c 2011-09-14 18:54:49.000000000 +0200
+***************
+*** 194,200 ****
+ static int (*py3_PySys_SetObject)(char *, PyObject *);
+ static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+ static Py_ssize_t (*py3_PyList_Size)(PyObject *);
+! static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
+ static PyObject* (*py3_PyErr_NoMemory)(void);
+ static void (*py3_Py_Finalize)(void);
+--- 194,200 ----
+ static int (*py3_PySys_SetObject)(char *, PyObject *);
+ static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+ static Py_ssize_t (*py3_PyList_Size)(PyObject *);
+! static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
+ static PyObject* (*py3_PyErr_NoMemory)(void);
+ static void (*py3_Py_Finalize)(void);
+*** ../vim-7.3.312/src/version.c 2011-09-14 17:50:05.000000000 +0200
+--- src/version.c 2011-09-14 18:56:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 313,
+ /**/
+
+--
+All good vision statements are created by groups of people with bloated
+bladders who would rather be doing anything else.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.314
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.314 (after 7.3.304)
+Problem: Missing parenthesis.
+Solution: Add it. (Benjamin R. Haskell)
+Files: src/Make_mvc.mak
+
+
+*** ../vim-7.3.313/src/Make_mvc.mak 2011-09-14 10:49:44.000000000 +0200
+--- src/Make_mvc.mak 2011-09-14 18:56:24.000000000 +0200
+***************
+*** 785,791 ****
+ PERL_INC = /I $(PERL_INCDIR)
+ PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
+ XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
+! !if exist($(XSUBPP)
+ XSUBPP = $(PERL_EXE) $(XSUBPP)
+ !else
+ XSUBPP = xsubpp
+--- 785,791 ----
+ PERL_INC = /I $(PERL_INCDIR)
+ PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
+ XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
+! !if exist($(XSUBPP))
+ XSUBPP = $(PERL_EXE) $(XSUBPP)
+ !else
+ XSUBPP = xsubpp
+*** ../vim-7.3.313/src/version.c 2011-09-14 18:59:35.000000000 +0200
+--- src/version.c 2011-09-14 19:01:12.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 314,
+ /**/
+
+--
+Often you're less important than your furniture. If you think about it, you
+can get fired but your furniture stays behind, gainfully employed at the
+company that didn't need _you_ anymore.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.315
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.315
+Problem: Opening a window before forking causes problems for GTK.
+Solution: Fork first, create the window in the child and report back to the
+ parent process whether it worked. If successful the parent exits,
+ if unsuccessful the child exits and the parent continues in the
+ terminal. (Tim Starling)
+Files: src/gui.c
+
+
+*** ../vim-7.3.314/src/gui.c 2011-08-10 17:44:41.000000000 +0200
+--- src/gui.c 2011-09-14 17:34:30.000000000 +0200
+***************
+*** 37,42 ****
+--- 37,60 ----
+ static void gui_set_bg_color __ARGS((char_u *name));
+ static win_T *xy2win __ARGS((int x, int y));
+
++ #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
++ && !defined(__APPLE__)
++ # define MAY_FORK
++ static void gui_do_fork __ARGS((void));
++
++ static int gui_read_child_pipe __ARGS((int fd));
++
++ /* Return values for gui_read_child_pipe */
++ enum {
++ GUI_CHILD_IO_ERROR,
++ GUI_CHILD_OK,
++ GUI_CHILD_FAILED
++ };
++
++ #endif /* MAY_FORK */
++
++ static void gui_attempt_start __ARGS((void));
++
+ static int can_update_cursor = TRUE; /* can display the cursor */
+
+ /*
+***************
+*** 59,105 ****
+ gui_start()
+ {
+ char_u *old_term;
+- #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
+- && !defined(__APPLE__)
+- # define MAY_FORK
+- int dofork = TRUE;
+- #endif
+ static int recursive = 0;
+
+ old_term = vim_strsave(T_NAME);
+
+- /*
+- * Set_termname() will call gui_init() to start the GUI.
+- * Set the "starting" flag, to indicate that the GUI will start.
+- *
+- * We don't want to open the GUI shell until after we've read .gvimrc,
+- * otherwise we don't know what font we will use, and hence we don't know
+- * what size the shell should be. So if there are errors in the .gvimrc
+- * file, they will have to go to the terminal: Set full_screen to FALSE.
+- * full_screen will be set to TRUE again by a successful termcapinit().
+- */
+ settmode(TMODE_COOK); /* stop RAW mode */
+ if (full_screen)
+ cursor_on(); /* needed for ":gui" in .vimrc */
+- gui.starting = TRUE;
+ full_screen = FALSE;
+
+! #ifdef FEAT_GUI_GTK
+! gui.event_time = GDK_CURRENT_TIME;
+! #endif
+
+ #ifdef MAY_FORK
+! if (!gui.dofork || vim_strchr(p_go, GO_FORG) || recursive)
+! dofork = FALSE;
+ #endif
+! ++recursive;
+!
+! termcapinit((char_u *)"builtin_gui");
+! gui.starting = recursive - 1;
+
+ if (!gui.in_use) /* failed to start GUI */
+ {
+! termcapinit(old_term); /* back to old term settings */
+ settmode(TMODE_RAW); /* restart RAW mode */
+ #ifdef FEAT_TITLE
+ set_title_defaults(); /* set 'title' and 'icon' again */
+--- 77,123 ----
+ gui_start()
+ {
+ char_u *old_term;
+ static int recursive = 0;
+
+ old_term = vim_strsave(T_NAME);
+
+ settmode(TMODE_COOK); /* stop RAW mode */
+ if (full_screen)
+ cursor_on(); /* needed for ":gui" in .vimrc */
+ full_screen = FALSE;
+
+! ++recursive;
+
+ #ifdef MAY_FORK
+! /*
+! * Quit the current process and continue in the child.
+! * Makes "gvim file" disconnect from the shell it was started in.
+! * Don't do this when Vim was started with "-f" or the 'f' flag is present
+! * in 'guioptions'.
+! */
+! if (gui.dofork && !vim_strchr(p_go, GO_FORG) && recursive <= 1)
+! {
+! gui_do_fork();
+! }
+! else
+ #endif
+! {
+! gui_attempt_start();
+! }
+
+ if (!gui.in_use) /* failed to start GUI */
+ {
+! /* Back to old term settings
+! *
+! * FIXME: If we got here because a child process failed and flagged to
+! * the parent to resume, and X11 is enabled with FEAT_TITLE, this will
+! * hit an X11 I/O error and do a longjmp(), leaving recursive
+! * permanently set to 1. This is probably not as big a problem as it
+! * sounds, because gui_mch_init() in both gui_x11.c and gui_gtk_x11.c
+! * return "OK" unconditionally, so it would be very difficult to
+! * actually hit this case.
+! */
+! termcapinit(old_term);
+ settmode(TMODE_RAW); /* restart RAW mode */
+ #ifdef FEAT_TITLE
+ set_title_defaults(); /* set 'title' and 'icon' again */
+***************
+*** 108,113 ****
+--- 126,166 ----
+
+ vim_free(old_term);
+
++ #ifdef FEAT_AUTOCMD
++ /* If the GUI started successfully, trigger the GUIEnter event, otherwise
++ * the GUIFailed event. */
++ gui_mch_update();
++ apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
++ NULL, NULL, FALSE, curbuf);
++ #endif
++ --recursive;
++ }
++
++ /*
++ * Set_termname() will call gui_init() to start the GUI.
++ * Set the "starting" flag, to indicate that the GUI will start.
++ *
++ * We don't want to open the GUI shell until after we've read .gvimrc,
++ * otherwise we don't know what font we will use, and hence we don't know
++ * what size the shell should be. So if there are errors in the .gvimrc
++ * file, they will have to go to the terminal: Set full_screen to FALSE.
++ * full_screen will be set to TRUE again by a successful termcapinit().
++ */
++ static void
++ gui_attempt_start()
++ {
++ static int recursive = 0;
++
++ ++recursive;
++ gui.starting = TRUE;
++
++ #ifdef FEAT_GUI_GTK
++ gui.event_time = GDK_CURRENT_TIME;
++ #endif
++
++ termcapinit((char_u *)"builtin_gui");
++ gui.starting = recursive - 1;
++
+ #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
+ if (gui.in_use)
+ {
+***************
+*** 123,218 ****
+ display_errors();
+ }
+ #endif
+
+! #if defined(MAY_FORK) && !defined(__QNXNTO__)
+! /*
+! * Quit the current process and continue in the child.
+! * Makes "gvim file" disconnect from the shell it was started in.
+! * Don't do this when Vim was started with "-f" or the 'f' flag is present
+! * in 'guioptions'.
+! */
+! if (gui.in_use && dofork)
+ {
+! int pipefd[2]; /* pipe between parent and child */
+! int pipe_error;
+! char dummy;
+! pid_t pid = -1;
+!
+! /* Setup a pipe between the child and the parent, so that the parent
+! * knows when the child has done the setsid() call and is allowed to
+! * exit. */
+! pipe_error = (pipe(pipefd) < 0);
+! pid = fork();
+! if (pid > 0) /* Parent */
+ {
+! /* Give the child some time to do the setsid(), otherwise the
+! * exit() may kill the child too (when starting gvim from inside a
+! * gvim). */
+! if (pipe_error)
+! ui_delay(300L, TRUE);
+! else
+ {
+! /* The read returns when the child closes the pipe (or when
+! * the child dies for some reason). */
+! close(pipefd[1]);
+! ignored = (int)read(pipefd[0], &dummy, (size_t)1);
+! close(pipefd[0]);
+ }
+!
+! /* When swapping screens we may need to go to the next line, e.g.,
+! * after a hit-enter prompt and using ":gui". */
+! if (newline_on_exit)
+! mch_errmsg("\r\n");
+!
+! /*
+! * The parent must skip the normal exit() processing, the child
+! * will do it. For example, GTK messes up signals when exiting.
+! */
+! _exit(0);
+ }
+
+! # if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+ /*
+! * Change our process group. On some systems/shells a CTRL-C in the
+! * shell where Vim was started would otherwise kill gvim!
+ */
+! if (pid == 0) /* child */
+ # if defined(HAVE_SETSID)
+! (void)setsid();
+ # else
+! (void)setpgid(0, 0);
+ # endif
+ # endif
+! if (!pipe_error)
+! {
+! close(pipefd[0]);
+! close(pipefd[1]);
+! }
+
+ # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
+! /* Tell the session manager our new PID */
+! gui_mch_forked();
+ # endif
+ }
+- #else
+- # if defined(__QNXNTO__)
+- if (gui.in_use && dofork)
+- procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
+- PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
+- # endif
+- #endif
+
+! #ifdef FEAT_AUTOCMD
+! /* If the GUI started successfully, trigger the GUIEnter event, otherwise
+! * the GUIFailed event. */
+! gui_mch_update();
+! apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
+! NULL, NULL, FALSE, curbuf);
+ #endif
+
+! --recursive;
+ }
+
+ /*
+ * Call this when vim starts up, whether or not the GUI is started
+ */
+--- 176,346 ----
+ display_errors();
+ }
+ #endif
++ --recursive;
++ }
+
+! #ifdef MAY_FORK
+!
+! /* for waitpid() */
+! # if defined(HAVE_SYS_WAIT_H) || defined(HAVE_UNION_WAIT)
+! # include <sys/wait.h>
+! # endif
+!
+! /*
+! * Create a new process, by forking. In the child, start the GUI, and in
+! * the parent, exit.
+! *
+! * If something goes wrong, this will return with gui.in_use still set
+! * to FALSE, in which case the caller should continue execution without
+! * the GUI.
+! *
+! * If the child fails to start the GUI, then the child will exit and the
+! * parent will return. If the child succeeds, then the parent will exit
+! * and the child will return.
+! */
+! static void
+! gui_do_fork()
+! {
+! #ifdef __QNXNTO__
+! procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
+! PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
+! gui_attempt_start();
+! return;
+! #else
+! int pipefd[2]; /* pipe between parent and child */
+! int pipe_error;
+! int status;
+! int exit_status;
+! pid_t pid = -1;
+! FILE *parent_file;
+!
+! /* Setup a pipe between the child and the parent, so that the parent
+! * knows when the child has done the setsid() call and is allowed to
+! * exit. */
+! pipe_error = (pipe(pipefd) < 0);
+! pid = fork();
+! if (pid < 0) /* Fork error */
+ {
+! EMSG(_("E851: Failed to create a new process for the GUI"));
+! return;
+! }
+! else if (pid > 0) /* Parent */
+! {
+! /* Give the child some time to do the setsid(), otherwise the
+! * exit() may kill the child too (when starting gvim from inside a
+! * gvim). */
+! if (!pipe_error)
+ {
+! /* The read returns when the child closes the pipe (or when
+! * the child dies for some reason). */
+! close(pipefd[1]);
+! status = gui_read_child_pipe(pipefd[0]);
+! if (status == GUI_CHILD_FAILED)
+ {
+! /* The child failed to start the GUI, so the caller must
+! * continue. There may be more error information written
+! * to stderr by the child. */
+! # ifdef __NeXT__
+! wait4(pid, &exit_status, 0, (struct rusage *)0);
+! # else
+! waitpid(pid, &exit_status, 0);
+! # endif
+! EMSG(_("E852: The child process failed to start the GUI"));
+! return;
+ }
+! else if (status == GUI_CHILD_IO_ERROR)
+! {
+! pipe_error = TRUE;
+! }
+! /* else GUI_CHILD_OK: parent exit */
+ }
+
+! if (pipe_error)
+! ui_delay(300L, TRUE);
+!
+! /* When swapping screens we may need to go to the next line, e.g.,
+! * after a hit-enter prompt and using ":gui". */
+! if (newline_on_exit)
+! mch_errmsg("\r\n");
+!
+ /*
+! * The parent must skip the normal exit() processing, the child
+! * will do it. For example, GTK messes up signals when exiting.
+ */
+! _exit(0);
+! }
+! /* Child */
+!
+! # if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+! /*
+! * Change our process group. On some systems/shells a CTRL-C in the
+! * shell where Vim was started would otherwise kill gvim!
+! */
+ # if defined(HAVE_SETSID)
+! (void)setsid();
+ # else
+! (void)setpgid(0, 0);
+ # endif
+ # endif
+! if (!pipe_error)
+! close(pipefd[0]);
+
+ # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
+! /* Tell the session manager our new PID */
+! gui_mch_forked();
+ # endif
++
++ if (!pipe_error)
++ parent_file = fdopen(pipefd[1], "w");
++ else
++ parent_file = NULL;
++
++ /* Try to start the GUI */
++ gui_attempt_start();
++
++ /* Notify the parent */
++ if (parent_file != NULL)
++ {
++ fputs(gui.in_use ? "ok" : "fail", parent_file);
++ fclose(parent_file);
+ }
+
+! /* If we failed to start the GUI, exit now. */
+! if (!gui.in_use)
+! exit(1);
+ #endif
++ }
+
+! /*
+! * Read from a pipe assumed to be connected to the child process (this
+! * function is called from the parent).
+! * Return GUI_CHILD_OK if the child successfully started the GUI,
+! * GUY_CHILD_FAILED if the child failed, or GUI_CHILD_IO_ERROR if there was
+! * some other error.
+! *
+! * The file descriptor will be closed before the function returns.
+! */
+! static int
+! gui_read_child_pipe(int fd)
+! {
+! size_t bytes_read;
+! FILE *file;
+! char buffer[10];
+!
+! file = fdopen(fd, "r");
+! if (!file)
+! return GUI_CHILD_IO_ERROR;
+!
+! bytes_read = fread(buffer, sizeof(char), sizeof(buffer)-1, file);
+! buffer[bytes_read] = '\0';
+! fclose(file);
+! if (strcmp(buffer, "ok") == 0)
+! return GUI_CHILD_OK;
+! return GUI_CHILD_FAILED;
+ }
+
++ #endif /* MAY_FORK */
++
+ /*
+ * Call this when vim starts up, whether or not the GUI is started
+ */
+*** ../vim-7.3.314/src/version.c 2011-09-14 19:01:38.000000000 +0200
+--- src/version.c 2011-09-14 19:02:45.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 315,
+ /**/
+
+--
+A)bort, R)etry, B)ang it with a large hammer
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.316
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.316 (after 7.3.306)
+Problem: Crash when 'colorcolumn' is set and closing buffer.
+Solution: Check for w_buffer to be NULL. (Yasuhiro Matsumoto)
+Files: src/option.c
+
+
+*** ../vim-7.3.315/src/option.c 2011-06-12 22:13:37.000000000 +0200
+--- src/option.c 2011-09-21 13:26:31.000000000 +0200
+***************
+*** 7036,7041 ****
+--- 7036,7044 ----
+ int i;
+ int j = 0;
+
++ if (wp->w_buffer == NULL)
++ return NULL; /* buffer was closed */
++
+ for (s = wp->w_p_cc; *s != NUL && count < 255;)
+ {
+ if (*s == '-' || *s == '+')
+*** ../vim-7.3.315/src/version.c 2011-09-14 19:04:35.000000000 +0200
+--- src/version.c 2011-09-21 13:40:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 316,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+25. You believe nothing looks sexier than a man in boxer shorts illuminated
+ only by a 17" inch svga monitor.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.317
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.317
+Problem: Calling debug.debug() in Lua may cause Vim to hang.
+Solution: Add a better debug method. (Rob Hoelz, Luis Carvalho)
+Files: src/if_lua.c
+
+
+*** ../vim-7.3.316/src/if_lua.c 2011-01-17 19:53:20.000000000 +0100
+--- src/if_lua.c 2011-09-21 17:15:21.000000000 +0200
+***************
+*** 100,105 ****
+--- 100,106 ----
+ #define lua_setfield dll_lua_setfield
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
++ #define lua_remove dll_lua_remove
+ #define lua_setmetatable dll_lua_setmetatable
+ #define lua_call dll_lua_call
+ #define lua_pcall dll_lua_pcall
+***************
+*** 161,166 ****
+--- 162,168 ----
+ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
++ void (*dll_lua_remove) (lua_State *L, int idx);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
+ void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
+ int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
+***************
+*** 229,234 ****
+--- 231,237 ----
+ {"lua_setfield", (luaV_function) &dll_lua_setfield},
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+ {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
++ {"lua_remove", (luaV_function) &dll_lua_remove},
+ {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
+ {"lua_call", (luaV_function) &dll_lua_call},
+ {"lua_pcall", (luaV_function) &dll_lua_pcall},
+***************
+*** 924,929 ****
+--- 927,957 ----
+ }
+
+ static int
++ luaV_debug(lua_State *L)
++ {
++ lua_settop(L, 0);
++ lua_getglobal(L, "vim");
++ lua_getfield(L, -1, "eval");
++ lua_remove(L, -2); /* vim.eval at position 1 */
++ for (;;)
++ {
++ const char *input;
++ size_t l;
++ lua_pushvalue(L, 1); /* vim.eval */
++ lua_pushliteral(L, "input('lua_debug> ')");
++ lua_call(L, 1, 1); /* return string */
++ input = lua_tolstring(L, -1, &l);
++ if (l == 0 || strcmp(input, "cont") == 0)
++ return 0;
++ msg_putchar('\n'); /* avoid outputting on input line */
++ if (luaL_loadbuffer(L, input, l, "=(debug command)")
++ || lua_pcall(L, 0, 0, 0))
++ luaV_emsg(L);
++ lua_settop(L, 1); /* remove eventual returns, but keep vim.eval */
++ }
++ }
++
++ static int
+ luaV_command(lua_State *L)
+ {
+ do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
+***************
+*** 1082,1087 ****
+--- 1110,1120 ----
+ /* print */
+ lua_pushcfunction(L, luaV_print);
+ lua_setglobal(L, "print");
++ /* debug.debug */
++ lua_getglobal(L, "debug");
++ lua_pushcfunction(L, luaV_debug);
++ lua_setfield(L, -2, "debug");
++ lua_pop(L, 1);
+ /* free */
+ lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
+ lua_pushcfunction(L, luaV_free);
+*** ../vim-7.3.316/src/version.c 2011-09-21 13:40:13.000000000 +0200
+--- src/version.c 2011-09-21 17:14:01.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 317,
+ /**/
+
+--
+Q: What is the difference betwee open-source and commercial software?
+A: If you have a problem with commercial software you can call a phone
+ number and they will tell you it might be solved in a future version.
+ For open-source software there isn't a phone number to call, but you
+ get the solution within a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.318
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.318
+Problem: "C" on the last line deletes that line if it's blank.
+Solution: Only delete the last line for a delete operation. (James Vega)
+Files: src/ops.c
+
+
+*** ../vim-7.3.317/src/ops.c 2011-08-10 12:10:55.000000000 +0200
+--- src/ops.c 2011-09-21 17:32:36.000000000 +0200
+***************
+*** 1922,1928 ****
+ curwin->w_cursor.coladd = 0;
+ }
+ #endif
+! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+ {
+ /* Special case: gH<Del> deletes the last line. */
+--- 1922,1930 ----
+ curwin->w_cursor.coladd = 0;
+ }
+ #endif
+! if (oap->op_type == OP_DELETE
+! && oap->inclusive
+! && oap->end.lnum == curbuf->b_ml.ml_line_count
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+ {
+ /* Special case: gH<Del> deletes the last line. */
+***************
+*** 3331,3338 ****
+ if (regname == '=')
+ {
+ /* For the = register we need to split the string at NL
+! * characters. */
+! /* Loop twice: count the number of lines and save them. */
+ for (;;)
+ {
+ y_size = 0;
+--- 3333,3340 ----
+ if (regname == '=')
+ {
+ /* For the = register we need to split the string at NL
+! * characters.
+! * Loop twice: count the number of lines and save them. */
+ for (;;)
+ {
+ y_size = 0;
+***************
+*** 3348,3354 ****
+ if (y_array != NULL)
+ *ptr = NUL;
+ ++ptr;
+! /* A trailing '\n' makes the string linewise */
+ if (*ptr == NUL)
+ {
+ y_type = MLINE;
+--- 3350,3356 ----
+ if (y_array != NULL)
+ *ptr = NUL;
+ ++ptr;
+! /* A trailing '\n' makes the register linewise. */
+ if (*ptr == NUL)
+ {
+ y_type = MLINE;
+*** ../vim-7.3.317/src/version.c 2011-09-21 17:15:34.000000000 +0200
+--- src/version.c 2011-09-21 17:31:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 318,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+26. You check your mail. It says "no new messages." So you check it again.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.319
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.319 (after 7.3.311)
+Problem: Redobuff doesn't always include changes of the completion leader.
+Solution: Insert backspaces as needed. (idea by Taro Muraoka)
+Files: src/edit.c
+
+
+*** ../vim-7.3.318/src/edit.c 2011-09-14 16:52:02.000000000 +0200
+--- src/edit.c 2011-09-21 17:59:10.000000000 +0200
+***************
+*** 163,168 ****
+--- 163,169 ----
+ static void ins_compl_set_original_text __ARGS((char_u *str));
+ static void ins_compl_addfrommatch __ARGS((void));
+ static int ins_compl_prep __ARGS((int c));
++ static void ins_compl_fixRedoBufForLeader __ARGS((char_u *ptr_arg));
+ static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
+ #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
+ static void ins_compl_add_list __ARGS((list_T *list));
+***************
+*** 3713,3721 ****
+ * memory that was used, and make sure we can redo the insert. */
+ if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
+ {
+- char_u *p;
+- int temp = 0;
+-
+ /*
+ * If any of the original typed text has been changed, eg when
+ * ignorecase is set, we must add back-spaces to the redo
+--- 3714,3719 ----
+***************
+*** 3726,3750 ****
+ */
+ if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
+ ptr = compl_curr_match->cp_str;
+- else if (compl_leader != NULL)
+- ptr = compl_leader;
+ else
+! ptr = compl_orig_text;
+! if (compl_orig_text != NULL)
+! {
+! p = compl_orig_text;
+! for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
+! ++temp)
+! ;
+! #ifdef FEAT_MBYTE
+! if (temp > 0)
+! temp -= (*mb_head_off)(compl_orig_text, p + temp);
+! #endif
+! for (p += temp; *p != NUL; mb_ptr_adv(p))
+! AppendCharToRedobuff(K_BS);
+! }
+! if (ptr != NULL)
+! AppendToRedobuffLit(ptr + temp, -1);
+ }
+
+ #ifdef FEAT_CINDENT
+--- 3724,3732 ----
+ */
+ if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
+ ptr = compl_curr_match->cp_str;
+ else
+! ptr = NULL;
+! ins_compl_fixRedoBufForLeader(ptr);
+ }
+
+ #ifdef FEAT_CINDENT
+***************
+*** 3834,3839 ****
+--- 3816,3859 ----
+ }
+
+ /*
++ * Fix the redo buffer for the completion leader replacing some of the typed
++ * text. This inserts backspaces and appends the changed text.
++ * "ptr" is the known leader text or NUL.
++ */
++ static void
++ ins_compl_fixRedoBufForLeader(ptr_arg)
++ char_u *ptr_arg;
++ {
++ int len;
++ char_u *p;
++ char_u *ptr = ptr_arg;
++
++ if (ptr == NULL)
++ {
++ if (compl_leader != NULL)
++ ptr = compl_leader;
++ else
++ return; /* nothing to do */
++ }
++ if (compl_orig_text != NULL)
++ {
++ p = compl_orig_text;
++ for (len = 0; p[len] != NUL && p[len] == ptr[len]; ++len)
++ ;
++ #ifdef FEAT_MBYTE
++ if (len > 0)
++ len -= (*mb_head_off)(p, p + len);
++ #endif
++ for (p += len; *p != NUL; mb_ptr_adv(p))
++ AppendCharToRedobuff(K_BS);
++ }
++ else
++ len = 0;
++ if (ptr != NULL)
++ AppendToRedobuffLit(ptr + len, -1);
++ }
++
++ /*
+ * Loops through the list of windows, loaded-buffers or non-loaded-buffers
+ * (depending on flag) starting from buf and looking for a non-scanned
+ * buffer (other than curbuf). curbuf is special, if it is called with
+***************
+*** 5241,5246 ****
+--- 5261,5270 ----
+ else
+ edit_submode = (char_u *)_(CTRL_X_MSG(ctrl_x_mode));
+
++ /* If any of the original typed text has been changed we need to fix
++ * the redo buffer. */
++ ins_compl_fixRedoBufForLeader(NULL);
++
+ /* Always add completion for the original text. */
+ vim_free(compl_orig_text);
+ compl_orig_text = vim_strnsave(line + compl_col, compl_length);
+*** ../vim-7.3.318/src/version.c 2011-09-21 17:33:49.000000000 +0200
+--- src/version.c 2011-09-21 18:21:07.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 319,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+27. You refer to your age as 3.x.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.320
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.320
+Problem: When a 0xa0 character is in a sourced file the error message for
+ unrecognized command does not show the problem.
+Solution: Display 0xa0 as <a0>.
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.319/src/ex_docmd.c 2011-07-20 16:36:35.000000000 +0200
+--- src/ex_docmd.c 2011-09-21 19:02:15.000000000 +0200
+***************
+*** 61,66 ****
+--- 61,67 ----
+ static char_u *do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
+ static int if_level = 0; /* depth in :if */
+ #endif
++ static void append_command __ARGS((char_u *cmd));
+ static char_u *find_command __ARGS((exarg_T *eap, int *full));
+
+ static void ex_abbreviate __ARGS((exarg_T *eap));
+***************
+*** 2136,2145 ****
+ {
+ STRCPY(IObuff, _("E492: Not an editor command"));
+ if (!sourcing)
+! {
+! STRCAT(IObuff, ": ");
+! STRNCAT(IObuff, *cmdlinep, 40);
+! }
+ errormsg = IObuff;
+ }
+ goto doend;
+--- 2137,2143 ----
+ {
+ STRCPY(IObuff, _("E492: Not an editor command"));
+ if (!sourcing)
+! append_command(*cmdlinep);
+ errormsg = IObuff;
+ }
+ goto doend;
+***************
+*** 2708,2715 ****
+ STRCPY(IObuff, errormsg);
+ errormsg = IObuff;
+ }
+! STRCAT(errormsg, ": ");
+! STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
+ }
+ emsg(errormsg);
+ }
+--- 2706,2712 ----
+ STRCPY(IObuff, errormsg);
+ errormsg = IObuff;
+ }
+! append_command(*cmdlinep);
+ }
+ emsg(errormsg);
+ }
+***************
+*** 2797,2802 ****
+--- 2794,2835 ----
+ }
+
+ /*
++ * Append "cmd" to the error message in IObuff.
++ * Takes care of limiting the length and handling 0xa0, which would be
++ * invisible otherwise.
++ */
++ static void
++ append_command(cmd)
++ char_u *cmd;
++ {
++ char_u *s = cmd;
++ char_u *d;
++
++ STRCAT(IObuff, ": ");
++ d = IObuff + STRLEN(IObuff);
++ while (*s != NUL && d - IObuff < IOSIZE - 7)
++ {
++ if (
++ #ifdef FEAT_MBYTE
++ enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) :
++ #endif
++ *s == 0xa0)
++ {
++ s +=
++ #ifdef FEAT_MBYTE
++ enc_utf8 ? 2 :
++ #endif
++ 1;
++ STRCPY(d, "<a0>");
++ d += 4;
++ }
++ else
++ MB_COPY_CHAR(s, d);
++ }
++ *d = NUL;
++ }
++
++ /*
+ * Find an Ex command by its name, either built-in or user.
+ * Start of the name can be found at eap->cmd.
+ * Returns pointer to char after the command name.
+*** ../vim-7.3.319/src/version.c 2011-09-21 18:23:02.000000000 +0200
+--- src/version.c 2011-09-21 19:04:35.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 320,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+28. You have comandeered your teenager's phone line for the net and even his
+ friends know not to call on his line anymore.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.321
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.321
+Problem: Code not following Vim style.
+Solution: Fix the style. (Elias Diem)
+Files: src/os_qnx.c
+
+
+*** ../vim-7.3.320/src/os_qnx.c 2011-06-19 01:14:22.000000000 +0200
+--- src/os_qnx.c 2011-09-21 19:48:08.000000000 +0200
+***************
+*** 24,33 ****
+ #if defined(FEAT_GUI_PHOTON)
+ PhChannelParms_t parms;
+
+! memset( &parms, 0, sizeof( parms ) );
+ parms.flags = Ph_DYNAMIC_BUFFER;
+
+! is_photon_available = (PhAttach( NULL, &parms ) != NULL) ? TRUE : FALSE;
+ #endif
+ }
+
+--- 24,33 ----
+ #if defined(FEAT_GUI_PHOTON)
+ PhChannelParms_t parms;
+
+! memset(&parms, 0, sizeof(parms));
+ parms.flags = Ph_DYNAMIC_BUFFER;
+
+! is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE;
+ #endif
+ }
+
+***************
+*** 39,46 ****
+ /* Turn on the clipboard for a console vim when photon is running */
+ void qnx_clip_init()
+ {
+! if( is_photon_available == TRUE && !gui.in_use)
+! clip_init( TRUE );
+ }
+
+ /*****************************************************************************/
+--- 39,46 ----
+ /* Turn on the clipboard for a console vim when photon is running */
+ void qnx_clip_init()
+ {
+! if (is_photon_available == TRUE && !gui.in_use)
+! clip_init(TRUE);
+ }
+
+ /*****************************************************************************/
+***************
+*** 48,79 ****
+
+ /* No support for owning the clipboard */
+ int
+! clip_mch_own_selection( VimClipboard *cbd )
+ {
+ return FALSE;
+ }
+
+ void
+! clip_mch_lose_selection( VimClipboard *cbd )
+ {
+ }
+
+ void
+! clip_mch_request_selection( VimClipboard *cbd )
+ {
+ int type = MLINE, clip_length = 0, is_type_set = FALSE;
+ void *cbdata;
+ PhClipHeader *clip_header;
+ char_u *clip_text = NULL;
+
+! cbdata = PhClipboardPasteStart( PhInputGroup( NULL ));
+! if( cbdata != NULL )
+ {
+ /* Look for the vim specific clip first */
+! clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_VIM );
+! if( clip_header != NULL && clip_header->data != NULL )
+ {
+! switch( *(char *) clip_header->data )
+ {
+ default: /* fallthrough to line type */
+ case 'L': type = MLINE; break;
+--- 48,79 ----
+
+ /* No support for owning the clipboard */
+ int
+! clip_mch_own_selection(VimClipboard *cbd)
+ {
+ return FALSE;
+ }
+
+ void
+! clip_mch_lose_selection(VimClipboard *cbd)
+ {
+ }
+
+ void
+! clip_mch_request_selection(VimClipboard *cbd)
+ {
+ int type = MLINE, clip_length = 0, is_type_set = FALSE;
+ void *cbdata;
+ PhClipHeader *clip_header;
+ char_u *clip_text = NULL;
+
+! cbdata = PhClipboardPasteStart(PhInputGroup(NULL));
+! if (cbdata != NULL)
+ {
+ /* Look for the vim specific clip first */
+! clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_VIM);
+! if (clip_header != NULL && clip_header->data != NULL)
+ {
+! switch(*(char *) clip_header->data)
+ {
+ default: /* fallthrough to line type */
+ case 'L': type = MLINE; break;
+***************
+*** 86,112 ****
+ }
+
+ /* Try for just normal text */
+! clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_TEXT );
+! if( clip_header != NULL )
+ {
+ clip_text = clip_header->data;
+ clip_length = clip_header->length - 1;
+
+! if( clip_text != NULL && is_type_set == FALSE )
+ type = MAUTO;
+ }
+
+! if( (clip_text != NULL) && (clip_length > 0) )
+ {
+! clip_yank_selection( type, clip_text, clip_length, cbd );
+ }
+
+! PhClipboardPasteFinish( cbdata );
+ }
+ }
+
+ void
+! clip_mch_set_selection( VimClipboard *cbd )
+ {
+ int type;
+ long_u len;
+--- 86,112 ----
+ }
+
+ /* Try for just normal text */
+! clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_TEXT);
+! if (clip_header != NULL)
+ {
+ clip_text = clip_header->data;
+ clip_length = clip_header->length - 1;
+
+! if (clip_text != NULL && is_type_set == FALSE)
+ type = MAUTO;
+ }
+
+! if ((clip_text != NULL) && (clip_length > 0))
+ {
+! clip_yank_selection(type, clip_text, clip_length, cbd);
+ }
+
+! PhClipboardPasteFinish(cbdata);
+ }
+ }
+
+ void
+! clip_mch_set_selection(VimClipboard *cbd)
+ {
+ int type;
+ long_u len;
+***************
+*** 114,144 ****
+ PhClipHeader clip_header[2];
+
+ /* Prevent recursion from clip_get_selection() */
+! if( cbd->owned == TRUE )
+ return;
+
+ cbd->owned = TRUE;
+! clip_get_selection( cbd );
+ cbd->owned = FALSE;
+
+! type = clip_convert_selection( &str, &len, cbd );
+! if( type >= 0 )
+ {
+! text_clip = lalloc( len + 1, TRUE ); /* Normal text */
+
+! if( text_clip && vim_clip )
+ {
+! memset( clip_header, 0, sizeof( clip_header ) );
+
+! STRNCPY( clip_header[0].type, CLIP_TYPE_VIM, 8 );
+! clip_header[0].length = sizeof( vim_clip );
+ clip_header[0].data = vim_clip;
+
+! STRNCPY( clip_header[1].type, CLIP_TYPE_TEXT, 8 );
+ clip_header[1].length = len + 1;
+ clip_header[1].data = text_clip;
+
+! switch( type )
+ {
+ default: /* fallthrough to MLINE */
+ case MLINE: *vim_clip = 'L'; break;
+--- 114,144 ----
+ PhClipHeader clip_header[2];
+
+ /* Prevent recursion from clip_get_selection() */
+! if (cbd->owned == TRUE)
+ return;
+
+ cbd->owned = TRUE;
+! clip_get_selection(cbd);
+ cbd->owned = FALSE;
+
+! type = clip_convert_selection(&str, &len, cbd);
+! if (type >= 0)
+ {
+! text_clip = lalloc(len + 1, TRUE); /* Normal text */
+
+! if (text_clip && vim_clip)
+ {
+! memset(clip_header, 0, sizeof(clip_header));
+
+! STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8);
+! clip_header[0].length = sizeof(vim_clip);
+ clip_header[0].data = vim_clip;
+
+! STRNCPY(clip_header[1].type, CLIP_TYPE_TEXT, 8);
+ clip_header[1].length = len + 1;
+ clip_header[1].data = text_clip;
+
+! switch(type)
+ {
+ default: /* fallthrough to MLINE */
+ case MLINE: *vim_clip = 'L'; break;
+***************
+*** 148,161 ****
+ #endif
+ }
+
+! vim_strncpy( text_clip, str, len );
+
+ vim_clip[ 1 ] = NUL;
+
+! PhClipboardCopy( PhInputGroup( NULL ), 2, clip_header);
+ }
+! vim_free( text_clip );
+ }
+! vim_free( str );
+ }
+ #endif
+--- 148,161 ----
+ #endif
+ }
+
+! vim_strncpy(text_clip, str, len);
+
+ vim_clip[ 1 ] = NUL;
+
+! PhClipboardCopy(PhInputGroup(NULL), 2, clip_header);
+ }
+! vim_free(text_clip);
+ }
+! vim_free(str);
+ }
+ #endif
+*** ../vim-7.3.320/src/version.c 2011-09-21 19:10:42.000000000 +0200
+--- src/version.c 2011-09-21 19:47:50.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 321,
+ /**/
+
+--
+Bypasses are devices that allow some people to dash from point A to
+point B very fast while other people dash from point B to point A very
+fast. People living at point C, being a point directly in between, are
+often given to wonder what's so great about point A that so many people
+from point B are so keen to get there and what's so great about point B
+that so many people from point A are so keen to get there. They often
+wish that people would just once and for all work out where the hell
+they wanted to be.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.322
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.322
+Problem: #ifdef for PDP_RETVAL doesn't work, INT_PTR can be a typedef.
+Solution: Check the MSC version and 64 bit flags. (Sergiu Dotenco)
+Files: src/os_mswin.c
+
+
+*** ../vim-7.3.321/src/os_mswin.c 2011-08-10 17:07:56.000000000 +0200
+--- src/os_mswin.c 2011-09-21 20:09:05.000000000 +0200
+***************
+*** 1781,1787 ****
+ }
+
+ /* Attempt to make this work for old and new compilers */
+! #if !defined(_MSC_VER) || (_MSC_VER < 1300) || !defined(INT_PTR)
+ # define PDP_RETVAL BOOL
+ #else
+ # define PDP_RETVAL INT_PTR
+--- 1781,1787 ----
+ }
+
+ /* Attempt to make this work for old and new compilers */
+! #if !defined(_WIN64) && (!defined(_MSC_VER) || _MSC_VER < 1300)
+ # define PDP_RETVAL BOOL
+ #else
+ # define PDP_RETVAL INT_PTR
+*** ../vim-7.3.321/src/version.c 2011-09-21 19:50:00.000000000 +0200
+--- src/version.c 2011-09-21 20:08:29.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 322,
+ /**/
+
+--
+Don't Panic!
+ -- The Hitchhiker's Guide to the Galaxy
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.323
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.323
+Problem: The default 'errorformat' does not ignore some "included from"
+ lines.
+Solution: Add a few more patterns. (Ben Boeckel)
+Files: src/option.h
+
+
+*** ../vim-7.3.322/src/option.h 2011-07-27 13:59:12.000000000 +0200
+--- src/option.h 2011-09-30 14:32:13.000000000 +0200
+***************
+*** 33,39 ****
+ # ifdef EBCDIC
+ #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # else
+! #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # endif
+ # endif
+ # endif
+--- 33,39 ----
+ # ifdef EBCDIC
+ #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # else
+! #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # endif
+ # endif
+ # endif
+*** ../vim-7.3.322/src/version.c 2011-09-21 20:09:38.000000000 +0200
+--- src/version.c 2011-09-30 14:38:59.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 323,
+ /**/
+
+--
+Due knot trussed yore spell chequer two fined awl miss steaks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.324
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.324 (after 7.3.237)
+Problem: Completion for ":compiler" shows color scheme names.
+Solution: Fix the directory name. (James Vega)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.323/src/ex_getln.c 2011-08-17 16:25:43.000000000 +0200
+--- src/ex_getln.c 2011-09-30 16:22:14.000000000 +0200
+***************
+*** 4546,4552 ****
+ }
+ if (xp->xp_context == EXPAND_COMPILER)
+ {
+! char *directories[] = {"colors", NULL};
+ return ExpandRTDir(pat, num_file, file, directories);
+ }
+ if (xp->xp_context == EXPAND_OWNSYNTAX)
+--- 4546,4552 ----
+ }
+ if (xp->xp_context == EXPAND_COMPILER)
+ {
+! char *directories[] = {"compiler", NULL};
+ return ExpandRTDir(pat, num_file, file, directories);
+ }
+ if (xp->xp_context == EXPAND_OWNSYNTAX)
+*** ../vim-7.3.323/src/version.c 2011-09-30 14:44:49.000000000 +0200
+--- src/version.c 2011-09-30 16:23:15.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 324,
+ /**/
+
+
+--
+hundred-and-one symptoms of being an internet addict:
+31. You code your homework in HTML and give your instructor the URL.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.325
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.325
+Problem: A duplicated function argument gives an internal error.
+Solution: Give a proper error message. (based on patch by Tyru)
+Files: src/eval.c
+
+
+*** ../vim-7.3.324/src/eval.c 2011-09-14 16:52:02.000000000 +0200
+--- src/eval.c 2011-09-30 16:32:20.000000000 +0200
+***************
+*** 20461,20466 ****
+--- 20461,20467 ----
+ exarg_T *eap;
+ {
+ char_u *theline;
++ int i;
+ int j;
+ int c;
+ int saved_did_emsg;
+***************
+*** 20707,20712 ****
+--- 20708,20722 ----
+ arg = vim_strsave(arg);
+ if (arg == NULL)
+ goto erret;
++
++ /* Check for duplicate argument name. */
++ for (i = 0; i < newargs.ga_len; ++i)
++ if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
++ {
++ EMSG2(_("E853: Duplicate argument name: %s"), arg);
++ goto erret;
++ }
++
+ ((char_u **)(newargs.ga_data))[newargs.ga_len] = arg;
+ *p = c;
+ newargs.ga_len++;
+*** ../vim-7.3.324/src/version.c 2011-09-30 16:23:21.000000000 +0200
+--- src/version.c 2011-09-30 16:39:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 325,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+32. You don't know what sex three of your closest friends are, because they
+ have neutral nicknames and you never bothered to ask.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.326
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.326
+Problem: MingW 4.6 no longer supports the -mno-cygwin option.
+Solution: Split the Cygwin and MingW makefiles. (Matsushita Shougo)
+Files: src/GvimExt/Make_cyg.mak, src/GvimExt/Make_ming.mak,
+ src/Make_cyg.mak, src/Make_ming.mak, src/xxd/Make_ming.mak,
+ Filelist
+
+
+*** ../vim-7.3.325/src/GvimExt/Make_cyg.mak 2011-09-30 16:55:18.000000000 +0200
+--- src/GvimExt/Make_cyg.mak 2011-09-30 16:45:49.000000000 +0200
+***************
+*** 0 ****
+--- 1,77 ----
++ # Project: gvimext
++ # Generates gvimext.dll with gcc.
++ # To be used with Cygwin.
++ #
++ # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
++ # Now it is allocated dymanically by the linker by evaluating all DLLs
++ # already loaded in memory. The binary image contains as well information
++ # for automatic pseudo-rebasing, if needed by the system. ALV 2004-02-29
++
++ # If cross-compiling set this to yes, else set it to no
++ CROSS = no
++ #CROSS = yes
++ # For the old MinGW 2.95 (the one you get e.g. with debian woody)
++ # set the following variable to yes and check if the executables are
++ # really named that way.
++ # If you have a newer MinGW or you are using cygwin set it to no and
++ # check also the executables
++ MINGWOLD = no
++
++ # Link against the shared versions of libgcc/libstdc++ by default. Set
++ # STATIC_STDCPLUS to "yes" to link against static versions instead.
++ STATIC_STDCPLUS=no
++ #STATIC_STDCPLUS=yes
++
++ # Note: -static-libstdc++ is not available until gcc 4.5.x.
++ LDFLAGS += -shared
++ ifeq (yes, $(STATIC_STDCPLUS))
++ LDFLAGS += -static-libgcc -static-libstdc++
++ endif
++
++ ifeq ($(CROSS),yes)
++ DEL = rm
++ ifeq ($(MINGWOLD),yes)
++ CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
++ else
++ CXXFLAGS := -O2 -mno-cygwin
++ endif
++ else
++ CXXFLAGS := -O2 -mno-cygwin
++ ifneq (sh.exe, $(SHELL))
++ DEL = rm
++ else
++ DEL = del
++ endif
++ endif
++ CXX := $(CROSS_COMPILE)g++
++ WINDRES := $(CROSS_COMPILE)windres
++ WINDRES_CXX = $(CXX)
++ WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
++ LIBS := -luuid
++ RES := gvimext.res
++ DEFFILE = gvimext_ming.def
++ OBJ := gvimext.o
++
++ DLL := gvimext.dll
++
++ .PHONY: all all-before all-after clean clean-custom
++
++ all: all-before $(DLL) all-after
++
++ $(DLL): $(OBJ) $(RES) $(DEFFILE)
++ $(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
++ -Wl,--enable-auto-image-base \
++ -Wl,--enable-auto-import \
++ -Wl,--whole-archive \
++ $^ \
++ -Wl,--no-whole-archive \
++ $(LIBS)
++
++ gvimext.o: gvimext.cpp
++ $(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
++
++ $(RES): gvimext_ming.rc
++ $(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
++
++ clean: clean-custom
++ -$(DEL) $(OBJ) $(RES) $(DLL)
+*** ../vim-7.3.325/src/GvimExt/Make_ming.mak 2010-12-30 14:50:46.000000000 +0100
+--- src/GvimExt/Make_ming.mak 2011-09-30 16:47:09.000000000 +0200
+***************
+*** 1,6 ****
+ # Project: gvimext
+ # Generates gvimext.dll with gcc.
+! # Can be used for Cygwin and MingW (MingW ignores -mno-cygwin)
+ #
+ # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
+ # Now it is allocated dymanically by the linker by evaluating all DLLs
+--- 1,6 ----
+ # Project: gvimext
+ # Generates gvimext.dll with gcc.
+! # To be used with MingW.
+ #
+ # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
+ # Now it is allocated dymanically by the linker by evaluating all DLLs
+***************
+*** 31,42 ****
+ ifeq ($(CROSS),yes)
+ DEL = rm
+ ifeq ($(MINGWOLD),yes)
+! CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
+ else
+! CXXFLAGS := -O2 -mno-cygwin
+ endif
+ else
+! CXXFLAGS := -O2 -mno-cygwin
+ ifneq (sh.exe, $(SHELL))
+ DEL = rm
+ else
+--- 31,42 ----
+ ifeq ($(CROSS),yes)
+ DEL = rm
+ ifeq ($(MINGWOLD),yes)
+! CXXFLAGS := -O2 -fvtable-thunks
+ else
+! CXXFLAGS := -O2
+ endif
+ else
+! CXXFLAGS := -O2
+ ifneq (sh.exe, $(SHELL))
+ DEL = rm
+ else
+***************
+*** 75,78 ****
+
+ clean: clean-custom
+ -$(DEL) $(OBJ) $(RES) $(DLL)
+-
+--- 75,77 ----
+*** ../vim-7.3.325/src/Make_cyg.mak 2010-11-03 21:59:23.000000000 +0100
+--- src/Make_cyg.mak 2011-09-30 16:48:11.000000000 +0200
+***************
+*** 536,542 ****
+ $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
+
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+! $(MAKE) -C GvimExt -f Make_ming.mak CROSS_COMPILE=$(CROSS_COMPILE)
+
+ vimrun.exe: vimrun.c
+ $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIBS)
+--- 536,542 ----
+ $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
+
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+! $(MAKE) -C GvimExt -f Make_cyg.mak CROSS_COMPILE=$(CROSS_COMPILE)
+
+ vimrun.exe: vimrun.c
+ $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIBS)
+***************
+*** 565,571 ****
+ endif
+ -$(DEL) pathdef.c
+ $(MAKE) -C xxd -f Make_cyg.mak clean
+! $(MAKE) -C GvimExt -f Make_ming.mak clean
+
+ distclean: clean
+ -$(DEL) obj$(DIRSLASH)*.o
+--- 565,571 ----
+ endif
+ -$(DEL) pathdef.c
+ $(MAKE) -C xxd -f Make_cyg.mak clean
+! $(MAKE) -C GvimExt -f Make_cyg.mak clean
+
+ distclean: clean
+ -$(DEL) obj$(DIRSLASH)*.o
+*** ../vim-7.3.325/src/Make_ming.mak 2011-09-14 10:49:44.000000000 +0200
+--- src/Make_ming.mak 2011-09-30 16:48:11.000000000 +0200
+***************
+*** 641,647 ****
+ upx vim.exe
+
+ xxd/xxd.exe: xxd/xxd.c
+! $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC)
+
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+ $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
+--- 641,647 ----
+ upx vim.exe
+
+ xxd/xxd.exe: xxd/xxd.c
+! $(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
+
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+ $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
+***************
+*** 659,665 ****
+ -$(DEL) mzscheme_base.c
+ endif
+ $(MAKE) -C GvimExt -f Make_ming.mak clean
+! $(MAKE) -C xxd -f Make_cyg.mak clean
+
+ ###########################################################################
+ INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
+--- 659,665 ----
+ -$(DEL) mzscheme_base.c
+ endif
+ $(MAKE) -C GvimExt -f Make_ming.mak clean
+! $(MAKE) -C xxd -f Make_ming.mak clean
+
+ ###########################################################################
+ INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
+*** ../vim-7.3.325/src/xxd/Make_ming.mak 2011-09-30 16:55:18.000000000 +0200
+--- src/xxd/Make_ming.mak 2011-09-30 16:48:34.000000000 +0200
+***************
+*** 0 ****
+--- 1,28 ----
++ # The most simplistic Makefile, for MinGW gcc on MS-DOS
++
++ ifndef USEDLL
++ USEDLL = no
++ endif
++
++ ifeq (yes, $(USEDLL))
++ DEFINES =
++ LIBS = -lc
++ else
++ DEFINES =
++ LIBS =
++ endif
++
++ CC = gcc
++ CFLAGS = -O2 -Wall -DWIN32 $(DEFINES)
++
++ ifneq (sh.exe, $(SHELL))
++ DEL = rm
++ else
++ DEL = del
++ endif
++
++ xxd.exe: xxd.c
++ $(CC) $(CFLAGS) -s -o xxd.exe xxd.c $(LIBS)
++
++ clean:
++ -$(DEL) xxd.exe
+*** ../vim-7.3.325/Filelist 2011-06-12 20:36:00.000000000 +0200
+--- Filelist 2011-09-30 16:49:29.000000000 +0200
+***************
+*** 313,318 ****
+--- 313,319 ----
+ src/xxd/Make_bc5.mak \
+ src/xxd/Make_cyg.mak \
+ src/xxd/Make_djg.mak \
++ src/xxd/Make_ming.mak \
+ src/xxd/Make_mvc.mak \
+ nsis/gvim.nsi \
+ nsis/README.txt \
+*** ../vim-7.3.325/src/version.c 2011-09-30 16:39:41.000000000 +0200
+--- src/version.c 2011-09-30 16:49:57.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 326,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+33. You name your children Eudora, Mozilla and Dotcom.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.327
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.327
+Problem: When jumping to a help tag a closed fold doesn't open.
+Solution: Save and restore KeyTyped. (Yasuhiro Matsumoto)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.326/src/ex_cmds.c 2011-09-14 14:43:21.000000000 +0200
+--- src/ex_cmds.c 2011-09-30 17:24:03.000000000 +0200
+***************
+*** 5508,5513 ****
+--- 5508,5516 ----
+ int len;
+ char_u *lang;
+ #endif
++ #ifdef FEAT_FOLDING
++ int old_KeyTyped = KeyTyped;
++ #endif
+
+ if (eap != NULL)
+ {
+***************
+*** 5671,5676 ****
+--- 5674,5685 ----
+ if (!p_im)
+ restart_edit = 0; /* don't want insert mode in help file */
+
++ #ifdef FEAT_FOLDING
++ /* Restore KeyTyped, setting 'filetype=help' may reset it.
++ * It is needed for do_tag top open folds under the cursor. */
++ KeyTyped = old_KeyTyped;
++ #endif
++
+ if (tag != NULL)
+ do_tag(tag, DT_HELP, 1, FALSE, TRUE);
+
+*** ../vim-7.3.326/src/version.c 2011-09-30 16:56:00.000000000 +0200
+--- src/version.c 2011-09-30 17:24:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 327,
+ /**/
+
+--
+Q. What happens to programmers when they die?
+A: MS-Windows programmers are reinstalled. C++ programmers become undefined,
+ anyone who refers to them will die as well. Java programmers reincarnate
+ after being garbage collected.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.328
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.328
+Problem: When command line wraps the cursor may be displayed wrong when
+ there are multi-byte characters.
+Solution: Position the cursor before drawing the text. (Yasuhiro Matsumoto)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.327/src/ex_getln.c 2011-09-30 16:23:21.000000000 +0200
+--- src/ex_getln.c 2011-09-30 17:39:27.000000000 +0200
+***************
+*** 2870,2875 ****
+--- 2870,2876 ----
+ {
+ msg_no_more = TRUE;
+ i = cmdline_row;
++ cursorcmd();
+ draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
+ /* Avoid clearing the rest of the line too often. */
+ if (cmdline_row != i || ccline.overstrike)
+*** ../vim-7.3.327/src/version.c 2011-09-30 17:30:27.000000000 +0200
+--- src/version.c 2011-09-30 17:45:28.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 328,
+ /**/
+
+--
+To define recursion, we must first define recursion.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.329
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.329
+Problem: When skipping over code from ":for" to ":endfor" get an error for
+ calling a dict function. (Yasuhiro Matsumoto)
+Solution: Ignore errors when skipping over :call command.
+Files: src/ex_docmd.c, src/eval.c
+
+
+*** ../vim-7.3.328/src/ex_docmd.c 2011-09-21 19:10:42.000000000 +0200
+--- src/ex_docmd.c 2011-09-30 17:59:51.000000000 +0200
+***************
+*** 371,381 ****
+ # define ex_endif ex_ni
+ # define ex_else ex_ni
+ # define ex_while ex_ni
+- # define ex_for ex_ni
+ # define ex_continue ex_ni
+ # define ex_break ex_ni
+ # define ex_endwhile ex_ni
+- # define ex_endfor ex_ni
+ # define ex_throw ex_ni
+ # define ex_try ex_ni
+ # define ex_catch ex_ni
+--- 371,379 ----
+*** ../vim-7.3.328/src/eval.c 2011-09-30 16:39:41.000000000 +0200
+--- src/eval.c 2011-09-30 18:29:58.000000000 +0200
+***************
+*** 3377,3383 ****
+ /* trans_function_name() doesn't work well when skipping, use eval0()
+ * instead to skip to any following command, e.g. for:
+ * :if 0 | call dict.foo().bar() | endif */
+! eval0(eap->arg, &rettv, &eap->nextcmd, FALSE);
+ return;
+ }
+
+--- 3377,3386 ----
+ /* trans_function_name() doesn't work well when skipping, use eval0()
+ * instead to skip to any following command, e.g. for:
+ * :if 0 | call dict.foo().bar() | endif */
+! ++emsg_skip;
+! if (eval0(eap->arg, &rettv, &eap->nextcmd, FALSE) != FAIL)
+! clear_tv(&rettv);
+! --emsg_skip;
+ return;
+ }
+
+*** ../vim-7.3.328/src/version.c 2011-09-30 17:46:14.000000000 +0200
+--- src/version.c 2011-09-30 18:32:27.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 329,
+ /**/
+
+--
+Have you heard about the new Beowulf cluster? It's so fast, it executes
+an infinite loop in 6 seconds.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.330
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.330
+Problem: When longjmp() is invoked if the X server gives an error the state
+ is not properly restored.
+Solution: Reset vgetc_busy. (Yukihiro Nakadaira)
+Files: src/main.c
+
+
+*** ../vim-7.3.329/src/main.c 2011-05-10 16:41:13.000000000 +0200
+--- src/main.c 2011-10-04 16:41:03.000000000 +0200
+***************
+*** 1009,1014 ****
+--- 1009,1015 ----
+ skip_redraw = FALSE;
+ RedrawingDisabled = 0;
+ no_wait_return = 0;
++ vgetc_busy = 0;
+ # ifdef FEAT_EVAL
+ emsg_skip = 0;
+ # endif
+*** ../vim-7.3.329/src/version.c 2011-09-30 18:35:49.000000000 +0200
+--- src/version.c 2011-10-04 16:42:23.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 330,
+ /**/
+
+--
+Just remember...if the world didn't suck, we'd all fall off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.331
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.331
+Problem: "vit" selects wrong text when a tag name starts with the same text
+ as an outer tag name. (Ben Fritz)
+Solution: Add "\>" to the pattern to check for word boundary.
+Files: src/search.c
+
+
+*** ../vim-7.3.330/src/search.c 2011-07-15 13:21:24.000000000 +0200
+--- src/search.c 2011-10-04 16:54:08.000000000 +0200
+***************
+*** 3927,3933 ****
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! sprintf((char *)spat, "<%.*s\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+ sprintf((char *)epat, "</%.*s>\\c", len, p);
+
+ r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+--- 3927,3933 ----
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! sprintf((char *)spat, "<%.*s\\>\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+ sprintf((char *)epat, "</%.*s>\\c", len, p);
+
+ r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+*** ../vim-7.3.330/src/version.c 2011-10-04 16:43:49.000000000 +0200
+--- src/version.c 2011-10-04 16:59:47.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 331,
+ /**/
+
+--
+The 50-50-90 rule: Anytime you have a 50-50 chance of getting
+something right, there's a 90% probability you'll get it wrong.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.332
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.332 (after 7.3.202)
+Problem: Indent after "public:" is not increased in C++ code. (Lech Lorens)
+Solution: Check for namespace after the regular checks. (partly by Martin
+ Gieseking)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.331/src/misc1.c 2011-09-07 19:58:04.000000000 +0200
+--- src/misc1.c 2011-10-04 17:59:52.000000000 +0200
+***************
+*** 6389,6394 ****
+--- 6389,6395 ----
+ int lookfor_cpp_namespace = FALSE;
+ int cont_amount = 0; /* amount for continuation line */
+ int original_line_islabel;
++ int added_to_amount = 0;
+
+ for (options = curbuf->b_p_cino; *options; )
+ {
+***************
+*** 7216,7267 ****
+ else
+ amount += ind_continuation;
+ }
+! else if (lookfor_cpp_namespace)
+ {
+! if (curwin->w_cursor.lnum == ourscope)
+! continue;
+
+! if (curwin->w_cursor.lnum == 0
+! || curwin->w_cursor.lnum
+ < ourscope - FIND_NAMESPACE_LIM)
+! break;
+
+! l = ml_get_curline();
+
+! /*
+! * If we're in a comment now, skip to the start of the
+! * comment.
+! */
+! trypos = find_start_comment(ind_maxcomment);
+! if (trypos != NULL)
+! {
+! curwin->w_cursor.lnum = trypos->lnum + 1;
+! curwin->w_cursor.col = 0;
+! continue;
+! }
+!
+! /*
+! * Skip preprocessor directives and blank lines.
+! */
+! if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+! continue;
+
+! if (cin_is_cpp_namespace(l))
+! {
+! amount += ind_cpp_namespace;
+! break;
+! }
+
+! if (cin_nocode(l))
+! continue;
+
+! }
+! else if (lookfor != LOOKFOR_TERM
+! && lookfor != LOOKFOR_CPP_BASECLASS)
+! {
+! amount = scope_amount;
+! if (theline[0] == '{')
+! amount += ind_open_extra;
+ }
+ break;
+ }
+--- 7217,7275 ----
+ else
+ amount += ind_continuation;
+ }
+! else
+ {
+! if (lookfor != LOOKFOR_TERM
+! && lookfor != LOOKFOR_CPP_BASECLASS)
+! {
+! amount = scope_amount;
+! if (theline[0] == '{')
+! {
+! amount += ind_open_extra;
+! added_to_amount = ind_open_extra;
+! }
+! }
+
+! if (lookfor_cpp_namespace)
+! {
+! /*
+! * Looking for C++ namespace, need to look further
+! * back.
+! */
+! if (curwin->w_cursor.lnum == ourscope)
+! continue;
+!
+! if (curwin->w_cursor.lnum == 0
+! || curwin->w_cursor.lnum
+ < ourscope - FIND_NAMESPACE_LIM)
+! break;
+
+! l = ml_get_curline();
+
+! /* If we're in a comment now, skip to the start of
+! * the comment. */
+! trypos = find_start_comment(ind_maxcomment);
+! if (trypos != NULL)
+! {
+! curwin->w_cursor.lnum = trypos->lnum + 1;
+! curwin->w_cursor.col = 0;
+! continue;
+! }
+
+! /* Skip preprocessor directives and blank lines. */
+! if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+! continue;
+
+! /* Finally the actual check for "namespace". */
+! if (cin_is_cpp_namespace(l))
+! {
+! amount += ind_cpp_namespace - added_to_amount;
+! break;
+! }
+
+! if (cin_nocode(l))
+! continue;
+! }
+ }
+ break;
+ }
+*** ../vim-7.3.331/src/testdir/test3.in 2011-07-20 15:09:38.000000000 +0200
+--- src/testdir/test3.in 2011-10-04 17:45:20.000000000 +0200
+***************
+*** 1309,1314 ****
+--- 1309,1328 ----
+ };
+
+ STARTTEST
++ :set cino=(0,gs,hs
++ 2kdd]]=][
++ ENDTEST
++
++ class Foo : public Bar
++ {
++ public:
++ virtual void method1(void) = 0;
++ virtual void method2(int arg1,
++ int arg2,
++ int arg3) = 0;
++ };
++
++ STARTTEST
+ :set cino=+20
+ 2kdd]]=][
+ ENDTEST
+*** ../vim-7.3.331/src/testdir/test3.ok 2011-07-20 15:09:38.000000000 +0200
+--- src/testdir/test3.ok 2011-10-04 17:47:25.000000000 +0200
+***************
+*** 1190,1195 ****
+--- 1190,1205 ----
+ };
+
+
++ class Foo : public Bar
++ {
++ public:
++ virtual void method1(void) = 0;
++ virtual void method2(int arg1,
++ int arg2,
++ int arg3) = 0;
++ };
++
++
+ void
+ foo()
+ {
+*** ../vim-7.3.331/src/version.c 2011-10-04 17:00:13.000000000 +0200
+--- src/version.c 2011-10-04 18:02:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 332,
+ /**/
+
+--
+Latest survey shows that 3 out of 4 people make up 75% of the
+world's population.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.333
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.333
+Problem: Using "." to repeat a Visual delete counts the size in bytes, not
+ characters. (Connor Lane Smith)
+Solution: Store the virtual column numbers instead of byte positions.
+Files: src/normal.c
+
+
+*** ../vim-7.3.332/src/normal.c 2011-07-15 17:51:30.000000000 +0200
+--- src/normal.c 2011-10-04 19:47:14.000000000 +0200
+***************
+*** 20,26 ****
+ */
+ static int resel_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T resel_VIsual_line_count; /* number of lines */
+! static colnr_T resel_VIsual_col; /* nr of cols or end col */
+
+ static int restart_VIsual_select = 0;
+ #endif
+--- 20,26 ----
+ */
+ static int resel_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T resel_VIsual_line_count; /* number of lines */
+! static colnr_T resel_VIsual_vcol; /* nr of cols or end col */
+
+ static int restart_VIsual_select = 0;
+ #endif
+***************
+*** 1436,1442 ****
+ /* The visual area is remembered for redo */
+ static int redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T redo_VIsual_line_count; /* number of lines */
+! static colnr_T redo_VIsual_col; /* number of cols or end column */
+ static long redo_VIsual_count; /* count for Visual operator */
+ # ifdef FEAT_VIRTUALEDIT
+ int include_line_break = FALSE;
+--- 1436,1442 ----
+ /* The visual area is remembered for redo */
+ static int redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T redo_VIsual_line_count; /* number of lines */
+! static colnr_T redo_VIsual_vcol; /* number of cols or end column */
+ static long redo_VIsual_count; /* count for Visual operator */
+ # ifdef FEAT_VIRTUALEDIT
+ int include_line_break = FALSE;
+***************
+*** 1549,1570 ****
+ #ifdef FEAT_VISUAL
+ if (redo_VIsual_busy)
+ {
+ oap->start = curwin->w_cursor;
+ curwin->w_cursor.lnum += redo_VIsual_line_count - 1;
+ if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ VIsual_mode = redo_VIsual_mode;
+! if (VIsual_mode == 'v')
+ {
+! if (redo_VIsual_line_count <= 1)
+! curwin->w_cursor.col += redo_VIsual_col - 1;
+ else
+! curwin->w_cursor.col = redo_VIsual_col;
+! }
+! if (redo_VIsual_col == MAXCOL)
+! {
+! curwin->w_curswant = MAXCOL;
+! coladvance((colnr_T)MAXCOL);
+ }
+ cap->count0 = redo_VIsual_count;
+ if (redo_VIsual_count != 0)
+--- 1549,1579 ----
+ #ifdef FEAT_VISUAL
+ if (redo_VIsual_busy)
+ {
++ /* Redo of an operation on a Visual area. Use the same size from
++ * redo_VIsual_line_count and redo_VIsual_vcol. */
+ oap->start = curwin->w_cursor;
+ curwin->w_cursor.lnum += redo_VIsual_line_count - 1;
+ if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ VIsual_mode = redo_VIsual_mode;
+! if (redo_VIsual_vcol == MAXCOL || VIsual_mode == 'v')
+ {
+! if (VIsual_mode == 'v')
+! {
+! if (redo_VIsual_line_count <= 1)
+! {
+! validate_virtcol();
+! curwin->w_curswant =
+! curwin->w_virtcol + redo_VIsual_vcol - 1;
+! }
+! else
+! curwin->w_curswant = redo_VIsual_vcol;
+! }
+ else
+! {
+! curwin->w_curswant = MAXCOL;
+! }
+! coladvance(curwin->w_curswant);
+ }
+ cap->count0 = redo_VIsual_count;
+ if (redo_VIsual_count != 0)
+***************
+*** 1710,1716 ****
+ }
+ }
+ else if (redo_VIsual_busy)
+! oap->end_vcol = oap->start_vcol + redo_VIsual_col - 1;
+ /*
+ * Correct oap->end.col and oap->start.col to be the
+ * upper-left and lower-right corner of the block area.
+--- 1719,1725 ----
+ }
+ }
+ else if (redo_VIsual_busy)
+! oap->end_vcol = oap->start_vcol + redo_VIsual_vcol - 1;
+ /*
+ * Correct oap->end.col and oap->start.col to be the
+ * upper-left and lower-right corner of the block area.
+***************
+*** 1735,1747 ****
+ */
+ resel_VIsual_mode = VIsual_mode;
+ if (curwin->w_curswant == MAXCOL)
+! resel_VIsual_col = MAXCOL;
+! else if (VIsual_mode == Ctrl_V)
+! resel_VIsual_col = oap->end_vcol - oap->start_vcol + 1;
+! else if (oap->line_count > 1)
+! resel_VIsual_col = oap->end.col;
+ else
+! resel_VIsual_col = oap->end.col - oap->start.col + 1;
+ resel_VIsual_line_count = oap->line_count;
+ }
+
+--- 1744,1765 ----
+ */
+ resel_VIsual_mode = VIsual_mode;
+ if (curwin->w_curswant == MAXCOL)
+! resel_VIsual_vcol = MAXCOL;
+ else
+! {
+! if (VIsual_mode != Ctrl_V)
+! getvvcol(curwin, &(oap->end),
+! NULL, NULL, &oap->end_vcol);
+! if (VIsual_mode == Ctrl_V || oap->line_count <= 1)
+! {
+! if (VIsual_mode != Ctrl_V)
+! getvvcol(curwin, &(oap->start),
+! &oap->start_vcol, NULL, NULL);
+! resel_VIsual_vcol = oap->end_vcol - oap->start_vcol + 1;
+! }
+! else
+! resel_VIsual_vcol = oap->end_vcol;
+! }
+ resel_VIsual_line_count = oap->line_count;
+ }
+
+***************
+*** 1769,1775 ****
+ if (!redo_VIsual_busy)
+ {
+ redo_VIsual_mode = resel_VIsual_mode;
+! redo_VIsual_col = resel_VIsual_col;
+ redo_VIsual_line_count = resel_VIsual_line_count;
+ redo_VIsual_count = cap->count0;
+ }
+--- 1787,1793 ----
+ if (!redo_VIsual_busy)
+ {
+ redo_VIsual_mode = resel_VIsual_mode;
+! redo_VIsual_vcol = resel_VIsual_vcol;
+ redo_VIsual_line_count = resel_VIsual_line_count;
+ redo_VIsual_count = cap->count0;
+ }
+***************
+*** 7631,7642 ****
+ if (VIsual_mode == 'v')
+ {
+ if (resel_VIsual_line_count <= 1)
+! curwin->w_cursor.col += resel_VIsual_col * cap->count0 - 1;
+ else
+! curwin->w_cursor.col = resel_VIsual_col;
+! check_cursor_col();
+ }
+! if (resel_VIsual_col == MAXCOL)
+ {
+ curwin->w_curswant = MAXCOL;
+ coladvance((colnr_T)MAXCOL);
+--- 7649,7664 ----
+ if (VIsual_mode == 'v')
+ {
+ if (resel_VIsual_line_count <= 1)
+! {
+! validate_virtcol();
+! curwin->w_curswant = curwin->w_virtcol
+! + resel_VIsual_vcol * cap->count0 - 1;
+! }
+ else
+! curwin->w_curswant = resel_VIsual_vcol;
+! coladvance(curwin->w_curswant);
+ }
+! if (resel_VIsual_vcol == MAXCOL)
+ {
+ curwin->w_curswant = MAXCOL;
+ coladvance((colnr_T)MAXCOL);
+***************
+*** 7645,7651 ****
+ {
+ validate_virtcol();
+ curwin->w_curswant = curwin->w_virtcol
+! + resel_VIsual_col * cap->count0 - 1;
+ coladvance(curwin->w_curswant);
+ }
+ else
+--- 7667,7673 ----
+ {
+ validate_virtcol();
+ curwin->w_curswant = curwin->w_virtcol
+! + resel_VIsual_vcol * cap->count0 - 1;
+ coladvance(curwin->w_curswant);
+ }
+ else
+*** ../vim-7.3.332/src/version.c 2011-10-04 18:03:43.000000000 +0200
+--- src/version.c 2011-10-04 21:05:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 333,
+ /**/
+
+--
+It was recently discovered that research causes cancer in rats.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.334
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.334
+Problem: Latest MingW about XSUBPP referencing itself. (Gongqian Li)
+Solution: Rename the first use to XSUBPPTRY.
+Files: src/Make_ming.mak
+
+
+*** ../vim-7.3.333/src/Make_ming.mak 2011-09-30 16:56:00.000000000 +0200
+--- src/Make_ming.mak 2011-10-09 14:23:06.000000000 +0200
+***************
+*** 108,117 ****
+ # on NT, it's here:
+ PERLLIB=$(PERL)/lib
+ PERLLIBS=$(PERLLIB)/Core
+! XSUBPP=$(PERLLIB)/ExtUtils/xsubpp
+! XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPP)'")
+ ifeq "$(XSUBPP_EXISTS)" ""
+! XSUBPP=perl $(XSUBPP)
+ else
+ XSUBPP=xsubpp
+ endif
+--- 108,117 ----
+ # on NT, it's here:
+ PERLLIB=$(PERL)/lib
+ PERLLIBS=$(PERLLIB)/Core
+! XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
+! XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPPTRY)'")
+ ifeq "$(XSUBPP_EXISTS)" ""
+! XSUBPP=perl $(XSUBPPTRY)
+ else
+ XSUBPP=xsubpp
+ endif
+*** ../vim-7.3.333/src/version.c 2011-10-04 21:22:40.000000000 +0200
+--- src/version.c 2011-10-12 14:10:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 334,
+ /**/
+
+--
+Q: Should I clean my house or work on Vim?
+A: Whatever contains more bugs.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.335
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.335
+Problem: When 'imdisable' is reset from an autocommand in Insert mode it
+ doesn't take effect.
+Solution: Call im_set_active() in Insert mode. (Taro Muraoka)
+Files: src/option.c
+
+
+*** ../vim-7.3.334/src/option.c 2011-09-21 13:40:13.000000000 +0200
+--- src/option.c 2011-10-12 14:09:46.000000000 +0200
+***************
+*** 7806,7811 ****
+--- 7806,7815 ----
+ /* Only de-activate it here, it will be enabled when changing mode. */
+ if (p_imdisable)
+ im_set_active(FALSE);
++ else if (State & INSERT)
++ /* When the option is set from an autocommand, it may need to take
++ * effect right away. */
++ im_set_active(curbuf->b_p_iminsert == B_IMODE_IM);
+ }
+ #endif
+
+*** ../vim-7.3.334/src/version.c 2011-10-12 14:11:43.000000000 +0200
+--- src/version.c 2011-10-12 16:56:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 335,
+ /**/
+
+--
+Time is money. Especially if you make clocks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.336
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.336
+Problem: When a tags file specifies an encoding different from 'enc' it
+ may hang and using a pattern doesn't work.
+Solution: Convert the whole line. Continue reading the header after the
+ SORT tag. Add test83. (Yukihiro Nakadaira)
+Files: src/tag.c, src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms, src/testdir/Makefile,
+ src/testdir/test83-tags2, src/testdir/test83-tags3,
+ src/testdir/test83.in, src/testdir/test83.ok
+
+
+*** ../vim-7.3.335/src/tag.c 2011-04-11 21:35:03.000000000 +0200
+--- src/tag.c 2011-10-12 19:51:04.000000000 +0200
+***************
+*** 1277,1282 ****
+--- 1277,1283 ----
+ {
+ FILE *fp;
+ char_u *lbuf; /* line buffer */
++ int lbuf_size = LSIZE; /* length of lbuf */
+ char_u *tag_fname; /* name of tag file */
+ tagname_T tn; /* info for get_tagfname() */
+ int first_file; /* trying first tag file */
+***************
+*** 1291,1296 ****
+--- 1292,1298 ----
+ char_u *s;
+ int i;
+ #ifdef FEAT_TAG_BINS
++ int tag_file_sorted = NUL; /* !_TAG_FILE_SORTED value */
+ struct tag_search_info /* Binary search file offsets */
+ {
+ off_t low_offset; /* offset for first char of first line that
+***************
+*** 1360,1372 ****
+ char_u *saved_pat = NULL; /* copy of pat[] */
+ #endif
+
+- /* Use two sets of variables for the pattern: "orgpat" holds the values
+- * for the original pattern and "convpat" converted from 'encoding' to
+- * encoding of the tags file. "pats" point to either one of these. */
+- pat_T *pats;
+ pat_T orgpat; /* holds unconverted pattern info */
+ #ifdef FEAT_MBYTE
+- pat_T convpat; /* holds converted pattern info */
+ vimconv_T vimconv;
+ #endif
+
+--- 1362,1369 ----
+***************
+*** 1390,1396 ****
+
+ help_save = curbuf->b_help;
+ orgpat.pat = pat;
+- pats = &orgpat;
+ #ifdef FEAT_MBYTE
+ vimconv.vc_type = CONV_NONE;
+ #endif
+--- 1387,1392 ----
+***************
+*** 1398,1404 ****
+ /*
+ * Allocate memory for the buffers that are used
+ */
+! lbuf = alloc(LSIZE);
+ tag_fname = alloc(MAXPATHL + 1);
+ #ifdef FEAT_EMACS_TAGS
+ ebuf = alloc(LSIZE);
+--- 1394,1400 ----
+ /*
+ * Allocate memory for the buffers that are used
+ */
+! lbuf = alloc(lbuf_size);
+ tag_fname = alloc(MAXPATHL + 1);
+ #ifdef FEAT_EMACS_TAGS
+ ebuf = alloc(LSIZE);
+***************
+*** 1424,1453 ****
+ if (help_only) /* want tags from help file */
+ curbuf->b_help = TRUE; /* will be restored later */
+
+! pats->len = (int)STRLEN(pat);
+ #ifdef FEAT_MULTI_LANG
+ if (curbuf->b_help)
+ {
+ /* When "@ab" is specified use only the "ab" language, otherwise
+ * search all languages. */
+! if (pats->len > 3 && pat[pats->len - 3] == '@'
+! && ASCII_ISALPHA(pat[pats->len - 2])
+! && ASCII_ISALPHA(pat[pats->len - 1]))
+ {
+! saved_pat = vim_strnsave(pat, pats->len - 3);
+ if (saved_pat != NULL)
+ {
+! help_lang_find = &pat[pats->len - 2];
+! pats->pat = saved_pat;
+! pats->len -= 3;
+ }
+ }
+ }
+ #endif
+! if (p_tl != 0 && pats->len > p_tl) /* adjust for 'taglength' */
+! pats->len = p_tl;
+
+! prepare_pats(pats, has_re);
+
+ #ifdef FEAT_TAG_BINS
+ /* This is only to avoid a compiler warning for using search_info
+--- 1420,1449 ----
+ if (help_only) /* want tags from help file */
+ curbuf->b_help = TRUE; /* will be restored later */
+
+! orgpat.len = (int)STRLEN(pat);
+ #ifdef FEAT_MULTI_LANG
+ if (curbuf->b_help)
+ {
+ /* When "@ab" is specified use only the "ab" language, otherwise
+ * search all languages. */
+! if (orgpat.len > 3 && pat[orgpat.len - 3] == '@'
+! && ASCII_ISALPHA(pat[orgpat.len - 2])
+! && ASCII_ISALPHA(pat[orgpat.len - 1]))
+ {
+! saved_pat = vim_strnsave(pat, orgpat.len - 3);
+ if (saved_pat != NULL)
+ {
+! help_lang_find = &pat[orgpat.len - 2];
+! orgpat.pat = saved_pat;
+! orgpat.len -= 3;
+ }
+ }
+ }
+ #endif
+! if (p_tl != 0 && orgpat.len > p_tl) /* adjust for 'taglength' */
+! orgpat.len = p_tl;
+
+! prepare_pats(&orgpat, has_re);
+
+ #ifdef FEAT_TAG_BINS
+ /* This is only to avoid a compiler warning for using search_info
+***************
+*** 1466,1478 ****
+ * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+ */
+ #ifdef FEAT_TAG_BINS
+! pats->regmatch.rm_ic = ((p_ic || !noic)
+! && (findall || pats->headlen == 0 || !p_tbs));
+ for (round = 1; round <= 2; ++round)
+ {
+! linear = (pats->headlen == 0 || !p_tbs || round == 2);
+ #else
+! pats->regmatch.rm_ic = (p_ic || !noic);
+ #endif
+
+ /*
+--- 1462,1474 ----
+ * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+ */
+ #ifdef FEAT_TAG_BINS
+! orgpat.regmatch.rm_ic = ((p_ic || !noic)
+! && (findall || orgpat.headlen == 0 || !p_tbs));
+ for (round = 1; round <= 2; ++round)
+ {
+! linear = (orgpat.headlen == 0 || !p_tbs || round == 2);
+ #else
+! orgpat.regmatch.rm_ic = (p_ic || !noic);
+ #endif
+
+ /*
+***************
+*** 1701,1706 ****
+--- 1697,1732 ----
+ }
+ line_read_in:
+
++ #ifdef FEAT_MBYTE
++ if (vimconv.vc_type != CONV_NONE)
++ {
++ char_u *conv_line;
++ int len;
++
++ /* Convert every line. Converting the pattern from 'enc' to
++ * the tags file encoding doesn't work, because characters are
++ * not recognized. */
++ conv_line = string_convert(&vimconv, lbuf, NULL);
++ if (conv_line != NULL)
++ {
++ /* Copy or swap lbuf and conv_line. */
++ len = (int)STRLEN(conv_line) + 1;
++ if (len > lbuf_size)
++ {
++ vim_free(lbuf);
++ lbuf = conv_line;
++ lbuf_size = len;
++ }
++ else
++ {
++ STRCPY(lbuf, conv_line);
++ vim_free(conv_line);
++ }
++ }
++ }
++ #endif
++
++
+ #ifdef FEAT_EMACS_TAGS
+ /*
+ * Emacs tags line with CTRL-L: New file name on next line.
+***************
+*** 1770,1775 ****
+--- 1796,1828 ----
+ */
+ if (state == TS_START)
+ {
++ if (STRNCMP(lbuf, "!_TAG_", 6) <= 0)
++ {
++ /*
++ * Read header line.
++ */
++ #ifdef FEAT_TAG_BINS
++ if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
++ tag_file_sorted = lbuf[18];
++ #endif
++ #ifdef FEAT_MBYTE
++ if (STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
++ {
++ /* Prepare to convert every line from the specified
++ * encoding to 'encoding'. */
++ for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
++ ;
++ *p = NUL;
++ convert_setup(&vimconv, lbuf + 20, p_enc);
++ }
++ #endif
++
++ /* Read the next line. Unrecognized flags are ignored. */
++ continue;
++ }
++
++ /* Headers ends. */
++
+ #ifdef FEAT_TAG_BINS
+ /*
+ * When there is no tag head, or ignoring case, need to do a
+***************
+*** 1786,1809 ****
+ if (linear)
+ # endif
+ state = TS_LINEAR;
+! else if (STRNCMP(lbuf, "!_TAG_", 6) > 0)
+ state = TS_BINARY;
+! else if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
+! {
+! /* Check sorted flag */
+! if (lbuf[18] == '1')
+ state = TS_BINARY;
+! else if (lbuf[18] == '2')
+! {
+! state = TS_BINARY;
+! sortic = TRUE;
+! pats->regmatch.rm_ic = (p_ic || !noic);
+! }
+! else
+! state = TS_LINEAR;
+ }
+
+! if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
+ {
+ /* binary search won't work for ignoring case, use linear
+ * search. */
+--- 1839,1858 ----
+ if (linear)
+ # endif
+ state = TS_LINEAR;
+! else if (tag_file_sorted == NUL)
+ state = TS_BINARY;
+! else if (tag_file_sorted == '1')
+ state = TS_BINARY;
+! else if (tag_file_sorted == '2')
+! {
+! state = TS_BINARY;
+! sortic = TRUE;
+! orgpat.regmatch.rm_ic = (p_ic || !noic);
+ }
++ else
++ state = TS_LINEAR;
+
+! if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
+ {
+ /* binary search won't work for ignoring case, use linear
+ * search. */
+***************
+*** 1843,1882 ****
+ #endif
+ }
+
+- #ifdef FEAT_MBYTE
+- if (lbuf[0] == '!' && pats == &orgpat
+- && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
+- {
+- /* Convert the search pattern from 'encoding' to the
+- * specified encoding. */
+- for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
+- ;
+- *p = NUL;
+- convert_setup(&vimconv, p_enc, lbuf + 20);
+- if (vimconv.vc_type != CONV_NONE)
+- {
+- convpat.pat = string_convert(&vimconv, pats->pat, NULL);
+- if (convpat.pat != NULL)
+- {
+- pats = &convpat;
+- pats->len = (int)STRLEN(pats->pat);
+- prepare_pats(pats, has_re);
+- pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
+- }
+- }
+-
+- /* Prepare for converting a match the other way around. */
+- convert_setup(&vimconv, lbuf + 20, p_enc);
+- continue;
+- }
+- #endif
+-
+ /*
+ * Figure out where the different strings are in this line.
+ * For "normal" tags: Do a quick check if the tag matches.
+ * This speeds up tag searching a lot!
+ */
+! if (pats->headlen
+ #ifdef FEAT_EMACS_TAGS
+ && !is_etag
+ #endif
+--- 1892,1903 ----
+ #endif
+ }
+
+ /*
+ * Figure out where the different strings are in this line.
+ * For "normal" tags: Do a quick check if the tag matches.
+ * This speeds up tag searching a lot!
+ */
+! if (orgpat.headlen
+ #ifdef FEAT_EMACS_TAGS
+ && !is_etag
+ #endif
+***************
+*** 1933,1941 ****
+ cmplen = (int)(tagp.tagname_end - tagp.tagname);
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+! if (has_re && pats->headlen < cmplen)
+! cmplen = pats->headlen;
+! else if (state == TS_LINEAR && pats->headlen != cmplen)
+ continue;
+
+ #ifdef FEAT_TAG_BINS
+--- 1954,1962 ----
+ cmplen = (int)(tagp.tagname_end - tagp.tagname);
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+! if (has_re && orgpat.headlen < cmplen)
+! cmplen = orgpat.headlen;
+! else if (state == TS_LINEAR && orgpat.headlen != cmplen)
+ continue;
+
+ #ifdef FEAT_TAG_BINS
+***************
+*** 1954,1963 ****
+ * Compare the current tag with the searched tag.
+ */
+ if (sortic)
+! tagcmp = tag_strnicmp(tagp.tagname, pats->head,
+ (size_t)cmplen);
+ else
+! tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
+
+ /*
+ * A match with a shorter tag means to search forward.
+--- 1975,1984 ----
+ * Compare the current tag with the searched tag.
+ */
+ if (sortic)
+! tagcmp = tag_strnicmp(tagp.tagname, orgpat.head,
+ (size_t)cmplen);
+ else
+! tagcmp = STRNCMP(tagp.tagname, orgpat.head, cmplen);
+
+ /*
+ * A match with a shorter tag means to search forward.
+***************
+*** 1965,1973 ****
+ */
+ if (tagcmp == 0)
+ {
+! if (cmplen < pats->headlen)
+ tagcmp = -1;
+! else if (cmplen > pats->headlen)
+ tagcmp = 1;
+ }
+
+--- 1986,1994 ----
+ */
+ if (tagcmp == 0)
+ {
+! if (cmplen < orgpat.headlen)
+ tagcmp = -1;
+! else if (cmplen > orgpat.headlen)
+ tagcmp = 1;
+ }
+
+***************
+*** 2011,2017 ****
+ }
+ else if (state == TS_SKIP_BACK)
+ {
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ state = TS_STEP_FORWARD;
+ else
+ /* Have to skip back more. Restore the curr_offset
+--- 2032,2038 ----
+ }
+ else if (state == TS_SKIP_BACK)
+ {
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ state = TS_STEP_FORWARD;
+ else
+ /* Have to skip back more. Restore the curr_offset
+***************
+*** 2021,2027 ****
+ }
+ else if (state == TS_STEP_FORWARD)
+ {
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ {
+ if ((off_t)ftell(fp) > search_info.match_offset)
+ break; /* past last match */
+--- 2042,2048 ----
+ }
+ else if (state == TS_STEP_FORWARD)
+ {
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ {
+ if ((off_t)ftell(fp) > search_info.match_offset)
+ break; /* past last match */
+***************
+*** 2032,2038 ****
+ else
+ #endif
+ /* skip this match if it can't match */
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ continue;
+
+ /*
+--- 2053,2059 ----
+ else
+ #endif
+ /* skip this match if it can't match */
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ continue;
+
+ /*
+***************
+*** 2083,2123 ****
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+ /* if tag length does not match, don't try comparing */
+! if (pats->len != cmplen)
+ match = FALSE;
+ else
+ {
+! if (pats->regmatch.rm_ic)
+ {
+! match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
+ if (match)
+! match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
+ cmplen) == 0);
+ }
+ else
+! match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
+ }
+
+ /*
+ * Has a regexp: Also find tags matching regexp.
+ */
+ match_re = FALSE;
+! if (!match && pats->regmatch.regprog != NULL)
+ {
+ int cc;
+
+ cc = *tagp.tagname_end;
+ *tagp.tagname_end = NUL;
+! match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
+ if (match)
+ {
+! matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
+! if (pats->regmatch.rm_ic)
+ {
+! pats->regmatch.rm_ic = FALSE;
+! match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
+ (colnr_T)0);
+! pats->regmatch.rm_ic = TRUE;
+ }
+ }
+ *tagp.tagname_end = cc;
+--- 2104,2144 ----
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+ /* if tag length does not match, don't try comparing */
+! if (orgpat.len != cmplen)
+ match = FALSE;
+ else
+ {
+! if (orgpat.regmatch.rm_ic)
+ {
+! match = (MB_STRNICMP(tagp.tagname, orgpat.pat, cmplen) == 0);
+ if (match)
+! match_no_ic = (STRNCMP(tagp.tagname, orgpat.pat,
+ cmplen) == 0);
+ }
+ else
+! match = (STRNCMP(tagp.tagname, orgpat.pat, cmplen) == 0);
+ }
+
+ /*
+ * Has a regexp: Also find tags matching regexp.
+ */
+ match_re = FALSE;
+! if (!match && orgpat.regmatch.regprog != NULL)
+ {
+ int cc;
+
+ cc = *tagp.tagname_end;
+ *tagp.tagname_end = NUL;
+! match = vim_regexec(&orgpat.regmatch, tagp.tagname, (colnr_T)0);
+ if (match)
+ {
+! matchoff = (int)(orgpat.regmatch.startp[0] - tagp.tagname);
+! if (orgpat.regmatch.rm_ic)
+ {
+! orgpat.regmatch.rm_ic = FALSE;
+! match_no_ic = vim_regexec(&orgpat.regmatch, tagp.tagname,
+ (colnr_T)0);
+! orgpat.regmatch.rm_ic = TRUE;
+ }
+ }
+ *tagp.tagname_end = cc;
+***************
+*** 2174,2180 ****
+ else
+ mtt = MT_GL_OTH;
+ }
+! if (pats->regmatch.rm_ic && !match_no_ic)
+ mtt += MT_IC_OFF;
+ if (match_re)
+ mtt += MT_RE_OFF;
+--- 2195,2201 ----
+ else
+ mtt = MT_GL_OTH;
+ }
+! if (orgpat.regmatch.rm_ic && !match_no_ic)
+ mtt += MT_IC_OFF;
+ if (match_re)
+ mtt += MT_RE_OFF;
+***************
+*** 2187,2221 ****
+ */
+ if (ga_grow(&ga_match[mtt], 1) == OK)
+ {
+- #ifdef FEAT_MBYTE
+- char_u *conv_line = NULL;
+- char_u *lbuf_line = lbuf;
+-
+- if (vimconv.vc_type != CONV_NONE)
+- {
+- /* Convert the tag line from the encoding of the tags
+- * file to 'encoding'. Then parse the line again. */
+- conv_line = string_convert(&vimconv, lbuf, NULL);
+- if (conv_line != NULL)
+- {
+- if (parse_tag_line(conv_line,
+- #ifdef FEAT_EMACS_TAGS
+- is_etag,
+- #endif
+- &tagp) == OK)
+- lbuf_line = conv_line;
+- else
+- /* doesn't work, go back to unconverted line. */
+- (void)parse_tag_line(lbuf,
+- #ifdef FEAT_EMACS_TAGS
+- is_etag,
+- #endif
+- &tagp);
+- }
+- }
+- #else
+- # define lbuf_line lbuf
+- #endif
+ if (help_only)
+ {
+ #ifdef FEAT_MULTI_LANG
+--- 2208,2213 ----
+***************
+*** 2307,2313 ****
+ * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+ */
+ len = (int)STRLEN(tag_fname)
+! + (int)STRLEN(lbuf_line) + 3;
+ #ifdef FEAT_EMACS_TAGS
+ if (is_etag)
+ len += (int)STRLEN(ebuf) + 1;
+--- 2299,2305 ----
+ * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+ */
+ len = (int)STRLEN(tag_fname)
+! + (int)STRLEN(lbuf) + 3;
+ #ifdef FEAT_EMACS_TAGS
+ if (is_etag)
+ len += (int)STRLEN(ebuf) + 1;
+***************
+*** 2337,2343 ****
+ else
+ *s++ = NUL;
+ #endif
+! STRCPY(s, lbuf_line);
+ }
+ }
+
+--- 2329,2335 ----
+ else
+ *s++ = NUL;
+ #endif
+! STRCPY(s, lbuf);
+ }
+ }
+
+***************
+*** 2373,2382 ****
+ else
+ vim_free(mfp);
+ }
+- #ifdef FEAT_MBYTE
+- /* Note: this makes the values in "tagp" invalid! */
+- vim_free(conv_line);
+- #endif
+ }
+ else /* Out of memory! Just forget about the rest. */
+ {
+--- 2365,2370 ----
+***************
+*** 2415,2433 ****
+ }
+ #endif
+ #ifdef FEAT_MBYTE
+- if (pats == &convpat)
+- {
+- /* Go back from converted pattern to original pattern. */
+- vim_free(pats->pat);
+- vim_free(pats->regmatch.regprog);
+- orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
+- pats = &orgpat;
+- }
+ if (vimconv.vc_type != CONV_NONE)
+ convert_setup(&vimconv, NULL, NULL);
+ #endif
+
+ #ifdef FEAT_TAG_BINS
+ if (sort_error)
+ {
+ EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
+--- 2403,2414 ----
+ }
+ #endif
+ #ifdef FEAT_MBYTE
+ if (vimconv.vc_type != CONV_NONE)
+ convert_setup(&vimconv, NULL, NULL);
+ #endif
+
+ #ifdef FEAT_TAG_BINS
++ tag_file_sorted = NUL;
+ if (sort_error)
+ {
+ EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
+***************
+*** 2461,2473 ****
+ #ifdef FEAT_TAG_BINS
+ /* stop searching when already did a linear search, or when TAG_NOIC
+ * used, and 'ignorecase' not set or already did case-ignore search */
+! if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
+ break;
+ # ifdef FEAT_CSCOPE
+ if (use_cscope)
+ break;
+ # endif
+! pats->regmatch.rm_ic = TRUE; /* try another time while ignoring case */
+ }
+ #endif
+
+--- 2442,2454 ----
+ #ifdef FEAT_TAG_BINS
+ /* stop searching when already did a linear search, or when TAG_NOIC
+ * used, and 'ignorecase' not set or already did case-ignore search */
+! if (stop_searching || linear || (!p_ic && noic) || orgpat.regmatch.rm_ic)
+ break;
+ # ifdef FEAT_CSCOPE
+ if (use_cscope)
+ break;
+ # endif
+! orgpat.regmatch.rm_ic = TRUE; /* try another time while ignoring case */
+ }
+ #endif
+
+***************
+*** 2480,2486 ****
+
+ findtag_end:
+ vim_free(lbuf);
+! vim_free(pats->regmatch.regprog);
+ vim_free(tag_fname);
+ #ifdef FEAT_EMACS_TAGS
+ vim_free(ebuf);
+--- 2461,2467 ----
+
+ findtag_end:
+ vim_free(lbuf);
+! vim_free(orgpat.regmatch.regprog);
+ vim_free(tag_fname);
+ #ifdef FEAT_EMACS_TAGS
+ vim_free(ebuf);
+*** ../vim-7.3.335/src/testdir/Make_amiga.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_amiga.mak 2011-10-12 19:21:00.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 131,133 ****
+--- 131,134 ----
+ test80.out: test80.in
+ test81.out: test81.in
+ test82.out: test82.in
++ test83.out: test83.in
+*** ../vim-7.3.335/src/testdir/Make_dos.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_dos.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,35 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.335/src/testdir/Make_ming.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_ming.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,55 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.335/src/testdir/Make_os2.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_os2.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.335/src/testdir/Make_vms.mms 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 76,82 ****
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 76,82 ----
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out test83.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.335/src/testdir/Makefile 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Makefile 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,32 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS_GUI = test16.out
+
+***************
+*** 72,78 ****
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+--- 72,78 ----
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! # -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+*** ../vim-7.3.335/src/testdir/test83-tags2 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83-tags2 2011-10-12 19:34:15.000000000 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ !_TAG_FILE_ENCODING cp932 //
++ \82`\82a\82b Xtags2.txt /\82`\82a\82b
+*** ../vim-7.3.335/src/testdir/test83-tags3 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83-tags3 2011-10-12 19:35:42.000000000 +0200
+***************
+*** 0 ****
+--- 1,102 ----
++ !_TAG_FILE_SORTED 1 //
++ !_TAG_FILE_ENCODING cp932 //
++ abc1 Xtags3.txt /\82`\82a\82b
++ abc2 Xtags3.txt /\82`\82a\82b
++ abc3 Xtags3.txt /\82`\82a\82b
++ abc4 Xtags3.txt /\82`\82a\82b
++ abc5 Xtags3.txt /\82`\82a\82b
++ abc6 Xtags3.txt /\82`\82a\82b
++ abc7 Xtags3.txt /\82`\82a\82b
++ abc8 Xtags3.txt /\82`\82a\82b
++ abc9 Xtags3.txt /\82`\82a\82b
++ abc10 Xtags3.txt /\82`\82a\82b
++ abc11 Xtags3.txt /\82`\82a\82b
++ abc12 Xtags3.txt /\82`\82a\82b
++ abc13 Xtags3.txt /\82`\82a\82b
++ abc14 Xtags3.txt /\82`\82a\82b
++ abc15 Xtags3.txt /\82`\82a\82b
++ abc16 Xtags3.txt /\82`\82a\82b
++ abc17 Xtags3.txt /\82`\82a\82b
++ abc18 Xtags3.txt /\82`\82a\82b
++ abc19 Xtags3.txt /\82`\82a\82b
++ abc20 Xtags3.txt /\82`\82a\82b
++ abc21 Xtags3.txt /\82`\82a\82b
++ abc22 Xtags3.txt /\82`\82a\82b
++ abc23 Xtags3.txt /\82`\82a\82b
++ abc24 Xtags3.txt /\82`\82a\82b
++ abc25 Xtags3.txt /\82`\82a\82b
++ abc26 Xtags3.txt /\82`\82a\82b
++ abc27 Xtags3.txt /\82`\82a\82b
++ abc28 Xtags3.txt /\82`\82a\82b
++ abc29 Xtags3.txt /\82`\82a\82b
++ abc30 Xtags3.txt /\82`\82a\82b
++ abc31 Xtags3.txt /\82`\82a\82b
++ abc32 Xtags3.txt /\82`\82a\82b
++ abc33 Xtags3.txt /\82`\82a\82b
++ abc34 Xtags3.txt /\82`\82a\82b
++ abc35 Xtags3.txt /\82`\82a\82b
++ abc36 Xtags3.txt /\82`\82a\82b
++ abc37 Xtags3.txt /\82`\82a\82b
++ abc38 Xtags3.txt /\82`\82a\82b
++ abc39 Xtags3.txt /\82`\82a\82b
++ abc40 Xtags3.txt /\82`\82a\82b
++ abc41 Xtags3.txt /\82`\82a\82b
++ abc42 Xtags3.txt /\82`\82a\82b
++ abc43 Xtags3.txt /\82`\82a\82b
++ abc44 Xtags3.txt /\82`\82a\82b
++ abc45 Xtags3.txt /\82`\82a\82b
++ abc46 Xtags3.txt /\82`\82a\82b
++ abc47 Xtags3.txt /\82`\82a\82b
++ abc48 Xtags3.txt /\82`\82a\82b
++ abc49 Xtags3.txt /\82`\82a\82b
++ abc50 Xtags3.txt /\82`\82a\82b
++ abc51 Xtags3.txt /\82`\82a\82b
++ abc52 Xtags3.txt /\82`\82a\82b
++ abc53 Xtags3.txt /\82`\82a\82b
++ abc54 Xtags3.txt /\82`\82a\82b
++ abc55 Xtags3.txt /\82`\82a\82b
++ abc56 Xtags3.txt /\82`\82a\82b
++ abc57 Xtags3.txt /\82`\82a\82b
++ abc58 Xtags3.txt /\82`\82a\82b
++ abc59 Xtags3.txt /\82`\82a\82b
++ abc60 Xtags3.txt /\82`\82a\82b
++ abc61 Xtags3.txt /\82`\82a\82b
++ abc62 Xtags3.txt /\82`\82a\82b
++ abc63 Xtags3.txt /\82`\82a\82b
++ abc64 Xtags3.txt /\82`\82a\82b
++ abc65 Xtags3.txt /\82`\82a\82b
++ abc66 Xtags3.txt /\82`\82a\82b
++ abc67 Xtags3.txt /\82`\82a\82b
++ abc68 Xtags3.txt /\82`\82a\82b
++ abc69 Xtags3.txt /\82`\82a\82b
++ abc70 Xtags3.txt /\82`\82a\82b
++ abc71 Xtags3.txt /\82`\82a\82b
++ abc72 Xtags3.txt /\82`\82a\82b
++ abc73 Xtags3.txt /\82`\82a\82b
++ abc74 Xtags3.txt /\82`\82a\82b
++ abc75 Xtags3.txt /\82`\82a\82b
++ abc76 Xtags3.txt /\82`\82a\82b
++ abc77 Xtags3.txt /\82`\82a\82b
++ abc78 Xtags3.txt /\82`\82a\82b
++ abc79 Xtags3.txt /\82`\82a\82b
++ abc80 Xtags3.txt /\82`\82a\82b
++ abc81 Xtags3.txt /\82`\82a\82b
++ abc82 Xtags3.txt /\82`\82a\82b
++ abc83 Xtags3.txt /\82`\82a\82b
++ abc84 Xtags3.txt /\82`\82a\82b
++ abc85 Xtags3.txt /\82`\82a\82b
++ abc86 Xtags3.txt /\82`\82a\82b
++ abc87 Xtags3.txt /\82`\82a\82b
++ abc88 Xtags3.txt /\82`\82a\82b
++ abc89 Xtags3.txt /\82`\82a\82b
++ abc90 Xtags3.txt /\82`\82a\82b
++ abc91 Xtags3.txt /\82`\82a\82b
++ abc92 Xtags3.txt /\82`\82a\82b
++ abc93 Xtags3.txt /\82`\82a\82b
++ abc94 Xtags3.txt /\82`\82a\82b
++ abc95 Xtags3.txt /\82`\82a\82b
++ abc96 Xtags3.txt /\82`\82a\82b
++ abc97 Xtags3.txt /\82`\82a\82b
++ abc98 Xtags3.txt /\82`\82a\82b
++ abc99 Xtags3.txt /\82`\82a\82b
++ abc100 Xtags3.txt /\82`\82a\82b
+*** ../vim-7.3.335/src/testdir/test83.in 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83.in 2011-10-12 19:40:47.000000000 +0200
+***************
+*** 0 ****
+--- 1,76 ----
++ Tests for tag search with !_TAG_FILE_ENCODING.
++
++ STARTTEST
++ :so mbyte.vim
++ :if !has('iconv')
++ : e! test.ok
++ : w! test.out
++ : qa!
++ :endif
++ :set enc=utf8
++
++ :/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
++ :/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
++ :/^text for tags3$/,/^text for tags3$/+1w! Xtags3.txt
++ :/^tags1$/+1,/^tags1-end$/-1w! Xtags1
++
++ ggdG
++
++ :call setline('.', 'Results of test83')
++
++ :" case1:
++ :new
++ :set tags=Xtags1
++ :let v:errmsg = ''
++ :tag abcdefghijklmnopqrs
++ :if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
++ : close
++ : put ='case1: failed'
++ :else
++ : close
++ : put ='case1: ok'
++ :endif
++
++ :" case2:
++ :new
++ :set tags=test83-tags2
++ :let v:errmsg = ''
++ :tag /.BC
++ :if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
++ : close
++ : put ='case2: failed'
++ :else
++ : close
++ : put ='case2: ok'
++ :endif
++
++ :" case3:
++ :new
++ :set tags=test83-tags3
++ :let v:errmsg = ''
++ :tag abc50
++ :if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
++ : close
++ : put ='case3: failed'
++ :else
++ : close
++ : put ='case3: ok'
++ :endif
++ :close
++
++ :wq! test.out
++ ENDTEST
++
++ text for tags1
++ abcdefghijklmnopqrs
++
++ text for tags2
++ ABC
++
++ text for tags3
++ ABC
++
++ tags1
++ !_TAG_FILE_ENCODING utf-8 //
++ abcdefghijklmnopqrs Xtags1.txt /abcdefghijklmnopqrs
++ tags1-end
+*** ../vim-7.3.335/src/testdir/test83.ok 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83.ok 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 0 ****
+--- 1,4 ----
++ Results of test83
++ case1: ok
++ case2: ok
++ case3: ok
+*** ../vim-7.3.335/src/version.c 2011-10-12 16:57:07.000000000 +0200
+--- src/version.c 2011-10-12 19:45:46.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 336,
+ /**/
+
+
+--
+hundred-and-one symptoms of being an internet addict:
+62. If your doorbell rings, you think that new mail has arrived. And then
+ you're disappointed that it's only someone at the door.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.337
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.337 (after 7.3.295)
+Problem: Screen doesn't update after resizing the xterm until a character
+ is typed.
+Solution: When the select call is interrupted check do_resize. (Taylor
+ Hedberg)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.336/src/os_unix.c 2011-09-08 23:24:09.000000000 +0200
+--- src/os_unix.c 2011-10-12 20:57:15.000000000 +0200
+***************
+*** 5146,5156 ****
+--- 5146,5163 ----
+ # endif
+ # ifdef EINTR
+ if (ret == -1 && errno == EINTR)
++ {
++ /* Check whether window has been resized, EINTR may be caused by
++ * SIGWINCH. */
++ if (do_resize)
++ handle_resize();
++
+ /* Interrupted by a signal, need to try again. We ignore msec
+ * here, because we do want to check even after a timeout if
+ * characters are available. Needed for reading output of an
+ * external command after the process has finished. */
+ goto select_eintr;
++ }
+ # endif
+ # ifdef __TANDEM
+ if (ret == -1 && errno == ENOTSUP)
+*** ../vim-7.3.336/src/version.c 2011-10-12 19:53:31.000000000 +0200
+--- src/version.c 2011-10-12 21:03:47.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 337,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+64. The remote to the T.V. is missing...and you don't even care.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.338
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.338
+Problem: Using getchar() in an expression mapping doesn't work well.
+Solution: Don't save and restore the typeahead. (James Vega)
+Files: src/getchar.c, src/testdir/test34.ok
+
+
+*** ../vim-7.3.337/src/getchar.c 2011-08-17 20:33:18.000000000 +0200
+--- src/getchar.c 2011-10-12 21:53:27.000000000 +0200
+***************
+*** 2460,2486 ****
+
+ /*
+ * Handle ":map <expr>": evaluate the {rhs} as an
+! * expression. Save and restore the typeahead so that
+! * getchar() can be used. Also save and restore the
+! * command line for "normal :".
+ */
+ if (mp->m_expr)
+ {
+- tasave_T tabuf;
+ int save_vgetc_busy = vgetc_busy;
+
+! save_typeahead(&tabuf);
+! if (tabuf.typebuf_valid)
+! {
+! vgetc_busy = 0;
+! save_m_keys = vim_strsave(mp->m_keys);
+! save_m_str = vim_strsave(mp->m_str);
+! s = eval_map_expr(save_m_str, NUL);
+! vgetc_busy = save_vgetc_busy;
+! }
+! else
+! s = NULL;
+! restore_typeahead(&tabuf);
+ }
+ else
+ #endif
+--- 2460,2477 ----
+
+ /*
+ * Handle ":map <expr>": evaluate the {rhs} as an
+! * expression. Also save and restore the command line
+! * for "normal :".
+ */
+ if (mp->m_expr)
+ {
+ int save_vgetc_busy = vgetc_busy;
+
+! vgetc_busy = 0;
+! save_m_keys = vim_strsave(mp->m_keys);
+! save_m_str = vim_strsave(mp->m_str);
+! s = eval_map_expr(save_m_str, NUL);
+! vgetc_busy = save_vgetc_busy;
+ }
+ else
+ #endif
+*** ../vim-7.3.337/src/testdir/test34.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test34.ok 2011-10-12 21:59:39.000000000 +0200
+***************
+*** 1,5 ****
+ xxx4asdf fail nop ok 9 333
+! XX111XX
+ ---222---
+ 1. one
+ 2. two
+--- 1,5 ----
+ xxx4asdf fail nop ok 9 333
+! XX111-XX
+ ---222---
+ 1. one
+ 2. two
+*** ../vim-7.3.337/src/version.c 2011-10-12 21:04:15.000000000 +0200
+--- src/version.c 2011-10-12 21:20:31.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 338,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+65. The last time you looked at the clock it was 11:30pm, and in what
+ seems like only a few seconds later, your sister runs past you to
+ catch her 7am school bus.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.339
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.339
+Problem: "make shadow" doesn't link all test files.
+Solution: Add a line in Makefile and Filelist.
+Files: src/Makefile, Filelist
+
+
+*** ../vim-7.3.338/Filelist 2011-09-30 16:56:00.000000000 +0200
+--- Filelist 2011-10-16 14:00:42.000000000 +0200
+***************
+*** 81,86 ****
+--- 81,87 ----
+ src/testdir/test[0-9]*.ok \
+ src/testdir/test49.vim \
+ src/testdir/test60.vim \
++ src/testdir/test83-tags? \
+ src/proto.h \
+ src/proto/blowfish.pro \
+ src/proto/buffer.pro \
+*** ../vim-7.3.338/src/Makefile 2011-05-19 13:40:47.000000000 +0200
+--- src/Makefile 2011-10-16 13:59:40.000000000 +0200
+***************
+*** 2328,2333 ****
+--- 2328,2334 ----
+ ../../testdir/vimrc.unix \
+ ../../testdir/*.in \
+ ../../testdir/*.vim \
++ ../../testdir/test83-tags? \
+ ../../testdir/*.ok .
+
+ # Link needed for doing "make install" in a shadow directory.
+*** ../vim-7.3.338/src/version.c 2011-10-12 22:02:07.000000000 +0200
+--- src/version.c 2011-10-20 16:34:28.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 339,
+ /**/
+
+--
+From "know your smileys":
+ :-O>-o Smiley American tourist (note big mouth and camera)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.340
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.340
+Problem: When 'verbosefile' is set ftplugof.vim can give an error.
+Solution: Only remove filetypeplugin autocommands when they exist. (Yasuhiro
+ Matsumoto)
+Files: runtime/ftplugof.vim
+
+
+*** ../vim-7.3.339/runtime/ftplugof.vim 2010-08-15 21:57:11.000000000 +0200
+--- runtime/ftplugof.vim 2011-10-20 16:51:00.000000000 +0200
+***************
+*** 1,11 ****
+ " Vim support file to switch off loading plugins for file types
+ "
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2002 Apr 04
+
+ if exists("did_load_ftplugin")
+ unlet did_load_ftplugin
+ endif
+
+! " Remove all autocommands in the filetypeplugin group
+! silent! au! filetypeplugin *
+--- 1,13 ----
+ " Vim support file to switch off loading plugins for file types
+ "
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2011 Oct 20
+
+ if exists("did_load_ftplugin")
+ unlet did_load_ftplugin
+ endif
+
+! " Remove all autocommands in the filetypeplugin group, if any exist.
+! if exists("#filetypeplugin")
+! silent! au! filetypeplugin *
+! endif
+*** ../vim-7.3.339/src/version.c 2011-10-20 16:35:25.000000000 +0200
+--- src/version.c 2011-10-20 18:01:18.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 340,
+ /**/
+
+--
+How many light bulbs does it take to change a person?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.341
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.341
+Problem: Local help files are only listed in help.txt, not in translated
+ help files.
+Solution: Also find translated help files. (Yasuhiro Matsumoto)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.340/src/ex_cmds.c 2011-09-30 17:30:27.000000000 +0200
+--- src/ex_cmds.c 2011-10-20 17:39:45.000000000 +0200
+***************
+*** 5982,5987 ****
+--- 5982,5988 ----
+ char_u *line;
+ int in_example = FALSE;
+ int len;
++ char_u *fname;
+ char_u *p;
+ char_u *rt;
+ int mustfree;
+***************
+*** 6028,6151 ****
+ }
+
+ /*
+! * In the "help.txt" file, add the locally added help files.
+! * This uses the very first line in the help file.
+ */
+! if (fnamecmp(gettail(curbuf->b_fname), "help.txt") == 0)
+ {
+ for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+ {
+ line = ml_get_buf(curbuf, lnum, FALSE);
+! if (strstr((char *)line, "*local-additions*") != NULL)
+ {
+! /* Go through all directories in 'runtimepath', skipping
+! * $VIMRUNTIME. */
+! p = p_rtp;
+! while (*p != NUL)
+ {
+! copy_option_part(&p, NameBuff, MAXPATHL, ",");
+! mustfree = FALSE;
+! rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
+! if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
+! {
+! int fcount;
+! char_u **fnames;
+! FILE *fd;
+! char_u *s;
+! int fi;
+ #ifdef FEAT_MBYTE
+! vimconv_T vc;
+! char_u *cp;
+ #endif
+
+! /* Find all "doc/ *.txt" files in this directory. */
+! add_pathsep(NameBuff);
+! STRCAT(NameBuff, "doc/*.txt");
+! if (gen_expand_wildcards(1, &NameBuff, &fcount,
+! &fnames, EW_FILE|EW_SILENT) == OK
+! && fcount > 0)
+ {
+! for (fi = 0; fi < fcount; ++fi)
+ {
+! fd = mch_fopen((char *)fnames[fi], "r");
+! if (fd != NULL)
+ {
+! vim_fgets(IObuff, IOSIZE, fd);
+! if (IObuff[0] == '*'
+! && (s = vim_strchr(IObuff + 1, '*'))
+! != NULL)
+! {
+! #ifdef FEAT_MBYTE
+! int this_utf = MAYBE;
+ #endif
+! /* Change tag definition to a
+! * reference and remove <CR>/<NL>. */
+! IObuff[0] = '|';
+! *s = '|';
+! while (*s != NUL)
+! {
+! if (*s == '\r' || *s == '\n')
+! *s = NUL;
+ #ifdef FEAT_MBYTE
+! /* The text is utf-8 when a byte
+! * above 127 is found and no
+! * illegal byte sequence is found.
+! */
+! if (*s >= 0x80 && this_utf != FALSE)
+! {
+! int l;
+!
+! this_utf = TRUE;
+! l = utf_ptr2len(s);
+! if (l == 1)
+! this_utf = FALSE;
+! s += l - 1;
+! }
+ #endif
+! ++s;
+! }
+ #ifdef FEAT_MBYTE
+! /* The help file is latin1 or utf-8;
+! * conversion to the current
+! * 'encoding' may be required. */
+! vc.vc_type = CONV_NONE;
+! convert_setup(&vc, (char_u *)(
+! this_utf == TRUE ? "utf-8"
+! : "latin1"), p_enc);
+! if (vc.vc_type == CONV_NONE)
+! /* No conversion needed. */
+! cp = IObuff;
+! else
+ {
+! /* Do the conversion. If it fails
+! * use the unconverted text. */
+! cp = string_convert(&vc, IObuff,
+! NULL);
+! if (cp == NULL)
+! cp = IObuff;
+ }
+! convert_setup(&vc, NULL, NULL);
+
+! ml_append(lnum, cp, (colnr_T)0, FALSE);
+! if (cp != IObuff)
+! vim_free(cp);
+ #else
+! ml_append(lnum, IObuff, (colnr_T)0,
+! FALSE);
+ #endif
+! ++lnum;
+! }
+! fclose(fd);
+ }
+ }
+- FreeWild(fcount, fnames);
+ }
+ }
+- if (mustfree)
+- vim_free(rt);
+ }
+! break;
+ }
+ }
+ }
+ }
+--- 6029,6215 ----
+ }
+
+ /*
+! * In the "help.txt" and "help.abx" file, add the locally added help
+! * files. This uses the very first line in the help file.
+ */
+! fname = gettail(curbuf->b_fname);
+! if (fnamecmp(fname, "help.txt") == 0
+! #ifdef FEAT_MULTI_LANG
+! || (fnamencmp(fname, "help.", 5) == 0
+! && ASCII_ISALPHA(fname[5])
+! && ASCII_ISALPHA(fname[6])
+! && TOLOWER_ASC(fname[7]) == 'x'
+! && fname[8] == NUL)
+! #endif
+! )
+ {
+ for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+ {
+ line = ml_get_buf(curbuf, lnum, FALSE);
+! if (strstr((char *)line, "*local-additions*") == NULL)
+! continue;
+!
+! /* Go through all directories in 'runtimepath', skipping
+! * $VIMRUNTIME. */
+! p = p_rtp;
+! while (*p != NUL)
+ {
+! copy_option_part(&p, NameBuff, MAXPATHL, ",");
+! mustfree = FALSE;
+! rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
+! if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
+ {
+! int fcount;
+! char_u **fnames;
+! FILE *fd;
+! char_u *s;
+! int fi;
+ #ifdef FEAT_MBYTE
+! vimconv_T vc;
+! char_u *cp;
+ #endif
+
+! /* Find all "doc/ *.txt" files in this directory. */
+! add_pathsep(NameBuff);
+! #ifdef FEAT_MULTI_LANG
+! STRCAT(NameBuff, "doc/*.??[tx]");
+! #else
+! STRCAT(NameBuff, "doc/*.txt");
+! #endif
+! if (gen_expand_wildcards(1, &NameBuff, &fcount,
+! &fnames, EW_FILE|EW_SILENT) == OK
+! && fcount > 0)
+! {
+! #ifdef FEAT_MULTI_LANG
+! int i1;
+! int i2;
+! char_u *f1;
+! char_u *f2;
+! char_u *t1;
+! char_u *e1;
+! char_u *e2;
+!
+! /* If foo.abx is found use it instead of foo.txt in
+! * the same directory. */
+! for (i1 = 0; i1 < fcount; ++i1)
+ {
+! for (i2 = 0; i2 < fcount; ++i2)
+ {
+! if (i1 == i2)
+! continue;
+! if (fnames[i1] == NULL || fnames[i2] == NULL)
+! continue;
+! f1 = fnames[i1];
+! f2 = fnames[i2];
+! t1 = gettail(f1);
+! if (fnamencmp(f1, f2, t1 - f1) != 0)
+! continue;
+! e1 = vim_strrchr(t1, '.');
+! e2 = vim_strrchr(gettail(f2), '.');
+! if (e1 == NUL || e2 == NUL)
+! continue;
+! if (fnamecmp(e1, ".txt") != 0
+! && fnamecmp(e1, fname + 4) != 0)
+ {
+! /* Not .txt and not .abx, remove it. */
+! vim_free(fnames[i1]);
+! fnames[i1] = NULL;
+! continue;
+! }
+! if (fnamencmp(f1, f2, e1 - f1) != 0)
+! continue;
+! if (fnamecmp(e1, ".txt") == 0
+! && fnamecmp(e2, fname + 4) == 0)
+! {
+! /* use .abx instead of .txt */
+! vim_free(fnames[i1]);
+! fnames[i1] = NULL;
+! }
+! }
+! }
+ #endif
+! for (fi = 0; fi < fcount; ++fi)
+! {
+! if (fnames[fi] == NULL)
+! continue;
+! fd = mch_fopen((char *)fnames[fi], "r");
+! if (fd != NULL)
+! {
+! vim_fgets(IObuff, IOSIZE, fd);
+! if (IObuff[0] == '*'
+! && (s = vim_strchr(IObuff + 1, '*'))
+! != NULL)
+! {
+ #ifdef FEAT_MBYTE
+! int this_utf = MAYBE;
+ #endif
+! /* Change tag definition to a
+! * reference and remove <CR>/<NL>. */
+! IObuff[0] = '|';
+! *s = '|';
+! while (*s != NUL)
+! {
+! if (*s == '\r' || *s == '\n')
+! *s = NUL;
+ #ifdef FEAT_MBYTE
+! /* The text is utf-8 when a byte
+! * above 127 is found and no
+! * illegal byte sequence is found.
+! */
+! if (*s >= 0x80 && this_utf != FALSE)
+ {
+! int l;
+!
+! this_utf = TRUE;
+! l = utf_ptr2len(s);
+! if (l == 1)
+! this_utf = FALSE;
+! s += l - 1;
+ }
+! #endif
+! ++s;
+! }
+! #ifdef FEAT_MBYTE
+! /* The help file is latin1 or utf-8;
+! * conversion to the current
+! * 'encoding' may be required. */
+! vc.vc_type = CONV_NONE;
+! convert_setup(&vc, (char_u *)(
+! this_utf == TRUE ? "utf-8"
+! : "latin1"), p_enc);
+! if (vc.vc_type == CONV_NONE)
+! /* No conversion needed. */
+! cp = IObuff;
+! else
+! {
+! /* Do the conversion. If it fails
+! * use the unconverted text. */
+! cp = string_convert(&vc, IObuff,
+! NULL);
+! if (cp == NULL)
+! cp = IObuff;
+! }
+! convert_setup(&vc, NULL, NULL);
+
+! ml_append(lnum, cp, (colnr_T)0, FALSE);
+! if (cp != IObuff)
+! vim_free(cp);
+ #else
+! ml_append(lnum, IObuff, (colnr_T)0,
+! FALSE);
+ #endif
+! ++lnum;
+ }
++ fclose(fd);
+ }
+ }
++ FreeWild(fcount, fnames);
+ }
+ }
+! if (mustfree)
+! vim_free(rt);
+ }
++ break;
+ }
+ }
+ }
+*** ../vim-7.3.340/src/version.c 2011-10-20 18:12:27.000000000 +0200
+--- src/version.c 2011-10-20 18:13:46.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 341,
+ /**/
+
+--
+From "know your smileys":
+ :-)-O Smiling doctor with stethoscope
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.342
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.342
+Problem: Code not in Vim style.
+Solution: Fix the style. (Elias Diem)
+Files: src/os_amiga.c, src/os_mac_conv.c, src/os_win16.c
+
+
+*** ../vim-7.3.341/src/os_amiga.c 2010-08-15 21:57:27.000000000 +0200
+--- src/os_amiga.c 2011-10-20 18:19:45.000000000 +0200
+***************
+*** 1022,1028 ****
+
+ /* insure longword alignment */
+ #ifdef __amigaos4__
+! if(!(id = AllocDosObject(DOS_INFODATA, 0)))
+ goto out;
+ #else
+ id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
+--- 1022,1028 ----
+
+ /* insure longword alignment */
+ #ifdef __amigaos4__
+! if (!(id = AllocDosObject(DOS_INFODATA, 0)))
+ goto out;
+ #else
+ id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
+*** ../vim-7.3.341/src/os_mac_conv.c 2011-06-13 02:03:55.000000000 +0200
+--- src/os_mac_conv.c 2011-10-20 18:19:45.000000000 +0200
+***************
+*** 77,83 ****
+ *unconvlenp = 0;
+ cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
+
+! if(cfstr == NULL)
+ fprintf(stderr, "Encoding failed\n");
+ /* When conversion failed, try excluding bytes from the end, helps when
+ * there is an incomplete byte sequence. Only do up to 6 bytes to avoid
+--- 77,83 ----
+ *unconvlenp = 0;
+ cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
+
+! if (cfstr == NULL)
+ fprintf(stderr, "Encoding failed\n");
+ /* When conversion failed, try excluding bytes from the end, helps when
+ * there is an incomplete byte sequence. Only do up to 6 bytes to avoid
+*** ../vim-7.3.341/src/os_win16.c 2010-12-17 20:23:56.000000000 +0100
+--- src/os_win16.c 2011-10-20 18:19:45.000000000 +0200
+***************
+*** 243,251 ****
+ /* Wait for the command to terminate before continuing */
+ while (GetModuleUsage((HINSTANCE)h_module) > 0 && again )
+ {
+! while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) && again )
+ {
+! if(msg.message == WM_QUIT)
+
+ {
+ PostQuitMessage(msg.wParam);
+--- 243,251 ----
+ /* Wait for the command to terminate before continuing */
+ while (GetModuleUsage((HINSTANCE)h_module) > 0 && again )
+ {
+! while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && again)
+ {
+! if (msg.message == WM_QUIT)
+
+ {
+ PostQuitMessage(msg.wParam);
+*** ../vim-7.3.341/src/version.c 2011-10-20 18:17:38.000000000 +0200
+--- src/version.c 2011-10-20 18:21:43.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 342,
+ /**/
+
+--
+You are only young once, but you can stay immature indefinitely.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.343
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.343
+Problem: No mouse support for urxvt.
+Solution: Implement urxvt mouse support, also for > 252 columns. (Yiding
+ Jia)
+Files: src/feature.h, src/keymap.h, src/option.h, src/os_unix.c,
+ src/term.c, src/version.c
+
+
+*** ../vim-7.3.342/src/feature.h 2011-05-19 13:40:47.000000000 +0200
+--- src/feature.h 2011-10-20 21:02:15.000000000 +0200
+***************
+*** 1053,1058 ****
+--- 1053,1061 ----
+ # ifdef FEAT_BIG
+ # define FEAT_MOUSE_DEC
+ # endif
++ # ifdef FEAT_BIG
++ # define FEAT_MOUSE_URXVT
++ # endif
+ # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
+ # define DOS_MOUSE
+ # endif
+***************
+*** 1068,1080 ****
+ #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
+ # define FEAT_SYSMOUSE
+ #endif
+ /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
+ #if !defined(FEAT_MOUSE_TTY) \
+ && (defined(FEAT_MOUSE_XTERM) \
+! || defined(FEAT_MOUSE_NET) || defined(FEAT_MOUSE_DEC) \
+! || defined(DOS_MOUSE) || defined(FEAT_MOUSE_GPM) \
+! || defined(FEAT_MOUSE_JSB) || defined(FEAT_MOUSE_PTERM) \
+! || defined(FEAT_SYSMOUSE))
+ # define FEAT_MOUSE_TTY /* include non-GUI mouse support */
+ #endif
+ #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+--- 1071,1093 ----
+ #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
+ # define FEAT_SYSMOUSE
+ #endif
++
++ /* urxvt is a small variation of mouse_xterm, and shares its code */
++ #if defined(FEAT_MOUSE_URXVT) && !defined(FEAT_MOUSE_XTERM)
++ # define FEAT_MOUSE_XTERM
++ #endif
++
+ /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
+ #if !defined(FEAT_MOUSE_TTY) \
+ && (defined(FEAT_MOUSE_XTERM) \
+! || defined(FEAT_MOUSE_NET) \
+! || defined(FEAT_MOUSE_DEC) \
+! || defined(DOS_MOUSE) \
+! || defined(FEAT_MOUSE_GPM) \
+! || defined(FEAT_MOUSE_JSB) \
+! || defined(FEAT_MOUSE_PTERM) \
+! || defined(FEAT_SYSMOUSE) \
+! || defined(FEAT_MOUSE_URXVT))
+ # define FEAT_MOUSE_TTY /* include non-GUI mouse support */
+ #endif
+ #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+*** ../vim-7.3.342/src/keymap.h 2010-08-15 21:57:32.000000000 +0200
+--- src/keymap.h 2011-10-20 21:00:37.000000000 +0200
+***************
+*** 92,104 ****
+ */
+ #define KS_TEAROFF 244
+
+! /* used for JSB term mouse */
+ #define KS_JSBTERM_MOUSE 243
+
+! /* used a termcap entry that produces a normal character */
+ #define KS_KEY 242
+
+! /* Used for the qnx pterm mouse */
+ #define KS_PTERM_MOUSE 241
+
+ /* Used for click in a tab pages label. */
+--- 92,104 ----
+ */
+ #define KS_TEAROFF 244
+
+! /* Used for JSB term mouse. */
+ #define KS_JSBTERM_MOUSE 243
+
+! /* Used a termcap entry that produces a normal character. */
+ #define KS_KEY 242
+
+! /* Used for the qnx pterm mouse. */
+ #define KS_PTERM_MOUSE 241
+
+ /* Used for click in a tab pages label. */
+***************
+*** 107,112 ****
+--- 107,115 ----
+ /* Used for menu in a tab pages line. */
+ #define KS_TABMENU 239
+
++ /* Used for the urxvt mouse. */
++ #define KS_URXVT_MOUSE 238
++
+ /*
+ * Filler used after KS_SPECIAL and others
+ */
+*** ../vim-7.3.342/src/option.h 2011-09-30 14:44:49.000000000 +0200
+--- src/option.h 2011-10-20 19:38:59.000000000 +0200
+***************
+*** 819,825 ****
+ EXTERN char_u *p_ttym; /* 'ttymouse' */
+ EXTERN unsigned ttym_flags;
+ # ifdef IN_OPTION_C
+! static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", NULL};
+ # endif
+ # define TTYM_XTERM 0x01
+ # define TTYM_XTERM2 0x02
+--- 819,825 ----
+ EXTERN char_u *p_ttym; /* 'ttymouse' */
+ EXTERN unsigned ttym_flags;
+ # ifdef IN_OPTION_C
+! static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", NULL};
+ # endif
+ # define TTYM_XTERM 0x01
+ # define TTYM_XTERM2 0x02
+***************
+*** 827,832 ****
+--- 827,833 ----
+ # define TTYM_NETTERM 0x08
+ # define TTYM_JSBTERM 0x10
+ # define TTYM_PTERM 0x20
++ # define TTYM_URXVT 0x40
+ #endif
+ EXTERN char_u *p_udir; /* 'undodir' */
+ EXTERN long p_ul; /* 'undolevels' */
+*** ../vim-7.3.342/src/os_unix.c 2011-10-12 21:04:15.000000000 +0200
+--- src/os_unix.c 2011-10-20 21:02:00.000000000 +0200
+***************
+*** 2158,2167 ****
+--- 2158,2170 ----
+ * Return non-zero when using an xterm mouse, according to 'ttymouse'.
+ * Return 1 for "xterm".
+ * Return 2 for "xterm2".
++ * Return 3 for "urxvt".
+ */
+ int
+ use_xterm_mouse()
+ {
++ if (ttym_flags == TTYM_URXVT)
++ return 3;
+ if (ttym_flags == TTYM_XTERM2)
+ return 2;
+ if (ttym_flags == TTYM_XTERM)
+***************
+*** 3318,3323 ****
+--- 3321,3337 ----
+ return;
+
+ xterm_mouse_vers = use_xterm_mouse();
++
++ # ifdef FEAT_MOUSE_URXVT
++ if (ttym_flags == TTYM_URXVT) {
++ out_str_nf((char_u *)
++ (on
++ ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
++ : IF_EB("\033[?1015l", ESC_STR "[?1015l")));
++ ison = on;
++ }
++ # endif
++
+ if (xterm_mouse_vers > 0)
+ {
+ if (on) /* enable mouse events, use mouse tracking if available */
+***************
+*** 3434,3439 ****
+--- 3448,3456 ----
+ {
+ # ifdef FEAT_MOUSE_XTERM
+ if (use_xterm_mouse()
++ # ifdef FEAT_MOUSE_URXVT
++ && use_xterm_mouse() != 3
++ # endif
+ # ifdef FEAT_GUI
+ && !gui.in_use
+ # endif
+***************
+*** 3523,3528 ****
+--- 3540,3566 ----
+ else
+ del_mouse_termcode(KS_PTERM_MOUSE);
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ /* same as the dec mouse */
++ if (use_xterm_mouse() == 3
++ # ifdef FEAT_GUI
++ && !gui.in_use
++ # endif
++ )
++ {
++ set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME)
++ ? IF_EB("\233", CSI_STR)
++ : IF_EB("\033[", ESC_STR "[")));
++
++ if (*p_mouse != NUL)
++ {
++ mch_setmouse(FALSE);
++ setmouse();
++ }
++ }
++ else
++ del_mouse_termcode(KS_URXVT_MOUSE);
++ # endif
+ }
+ #endif
+
+*** ../vim-7.3.342/src/version.c 2011-10-20 18:24:16.000000000 +0200
+--- src/version.c 2011-10-20 19:40:48.000000000 +0200
+***************
+*** 380,383 ****
+--- 380,388 ----
+ "-mouse_xterm",
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ "+mouse_urxvt",
++ # else
++ "-mouse_urxvt",
++ # endif
+ #endif
+ #ifdef __QNX__
+***************
+*** 711,712 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 343,
+ /**/
+
+--
+Warning label on a superhero Halloween costume:
+"Caution: Cape does not enable user to fly."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.344
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.344
+Problem: Problem with GUI startup related to XInitThreads.
+Solution: Use read() and write() instead of fputs() and fread(). (James
+ Vega)
+Files: src/gui.c
+
+
+*** ../vim-7.3.343/src/gui.c 2011-09-14 19:04:35.000000000 +0200
+--- src/gui.c 2011-10-20 21:23:43.000000000 +0200
+***************
+*** 212,218 ****
+ int status;
+ int exit_status;
+ pid_t pid = -1;
+- FILE *parent_file;
+
+ /* Setup a pipe between the child and the parent, so that the parent
+ * knows when the child has done the setsid() call and is allowed to
+--- 212,217 ----
+***************
+*** 290,308 ****
+ gui_mch_forked();
+ # endif
+
+- if (!pipe_error)
+- parent_file = fdopen(pipefd[1], "w");
+- else
+- parent_file = NULL;
+-
+ /* Try to start the GUI */
+ gui_attempt_start();
+
+ /* Notify the parent */
+! if (parent_file != NULL)
+ {
+! fputs(gui.in_use ? "ok" : "fail", parent_file);
+! fclose(parent_file);
+ }
+
+ /* If we failed to start the GUI, exit now. */
+--- 289,305 ----
+ gui_mch_forked();
+ # endif
+
+ /* Try to start the GUI */
+ gui_attempt_start();
+
+ /* Notify the parent */
+! if (!pipe_error)
+ {
+! if (gui.in_use)
+! write_eintr(pipefd[1], "ok", 3);
+! else
+! write_eintr(pipefd[1], "fail", 5);
+! close(pipefd[1]);
+ }
+
+ /* If we failed to start the GUI, exit now. */
+***************
+*** 323,339 ****
+ static int
+ gui_read_child_pipe(int fd)
+ {
+! size_t bytes_read;
+! FILE *file;
+! char buffer[10];
+!
+! file = fdopen(fd, "r");
+! if (!file)
+ return GUI_CHILD_IO_ERROR;
+!
+! bytes_read = fread(buffer, sizeof(char), sizeof(buffer)-1, file);
+! buffer[bytes_read] = '\0';
+! fclose(file);
+ if (strcmp(buffer, "ok") == 0)
+ return GUI_CHILD_OK;
+ return GUI_CHILD_FAILED;
+--- 320,335 ----
+ static int
+ gui_read_child_pipe(int fd)
+ {
+! long bytes_read;
+! #define READ_BUFFER_SIZE 10
+! char buffer[READ_BUFFER_SIZE];
+!
+! bytes_read = read_eintr(fd, buffer, READ_BUFFER_SIZE - 1);
+! #undef READ_BUFFER_SIZE
+! close(fd);
+! if (bytes_read < 0)
+ return GUI_CHILD_IO_ERROR;
+! buffer[bytes_read] = NUL;
+ if (strcmp(buffer, "ok") == 0)
+ return GUI_CHILD_OK;
+ return GUI_CHILD_FAILED;
+*** ../vim-7.3.343/src/version.c 2011-10-20 21:09:25.000000000 +0200
+--- src/version.c 2011-10-20 21:27:31.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 344,
+ /**/
+
+--
+From "know your smileys":
+ *<|:-) Santa Claus (Ho Ho Ho)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.345
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.345
+Problem: When switching language with ":lang" the window title doesn't
+ change until later.
+Solution: Update the window title right away. (Dominique Pelle)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.344/src/ex_cmds2.c 2011-06-26 04:25:24.000000000 +0200
+--- src/ex_cmds2.c 2011-10-20 21:31:09.000000000 +0200
+***************
+*** 4154,4159 ****
+--- 4154,4162 ----
+ /* Set v:lang, v:lc_time and v:ctype to the final result. */
+ set_lang_var();
+ # endif
++ # ifdef FEAT_TITLE
++ maketitle();
++ # endif
+ }
+ }
+ }
+*** ../vim-7.3.344/src/version.c 2011-10-20 21:27:57.000000000 +0200
+--- src/version.c 2011-10-20 21:38:32.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 345,
+ /**/
+
+--
+You can't have everything. Where would you put it?
+ -- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.346
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.346
+Problem: It's hard to test netbeans commands.
+Solution: Process netbeans commands after :sleep. (Xavier de Gaye)
+Files: runtime/doc/netbeans.txt, src/ex_docmd.c, src/netbeans.c
+
+
+*** ../vim-7.3.345/runtime/doc/netbeans.txt 2010-09-29 17:26:57.000000000 +0200
+--- runtime/doc/netbeans.txt 2011-10-20 21:51:41.000000000 +0200
+***************
+*** 1,4 ****
+! *netbeans.txt* For Vim version 7.3. Last change: 2010 Aug 20
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur et al.
+--- 1,4 ----
+! *netbeans.txt* For Vim version 7.3. Last change: 2011 Oct 20
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur et al.
+***************
+*** 263,268 ****
+--- 263,274 ----
+ plain UTF-8 text this protocol could also be used with any other communication
+ mechanism.
+
++ Netbeans messages are processed when Vim is idle, waiting for user input.
++ When Vim is run in non-interactive mode, for example when running an automated
++ test case that sources a Vim script, the idle loop may not be called often
++ enough. In that case, insert |sleep| commands in the Vim script. The |sleep|
++ command does invoke Netbeans messages processing.
++
+ 6.1 Kinds of messages |nb-messages|
+ 6.2 Terms |nb-terms|
+ 6.3 Commands |nb-commands|
+***************
+*** 820,826 ****
+ ==============================================================================
+ 7. NetBeans commands *netbeans-commands*
+
+! *:nbstart* *E511*
+ :nbs[tart] {connection} Start a new Netbeans session with {connection} as the
+ socket connection parameters. The format of
+ {connection} is described in |netbeans-parameters|.
+--- 826,832 ----
+ ==============================================================================
+ 7. NetBeans commands *netbeans-commands*
+
+! *:nbstart* *E511* *E838*
+ :nbs[tart] {connection} Start a new Netbeans session with {connection} as the
+ socket connection parameters. The format of
+ {connection} is described in |netbeans-parameters|.
+***************
+*** 833,843 ****
+ signs.
+
+ *:nbkey*
+! :nb[key] {key} Pass the {key} to the Vim Controller for processing
+!
+! When a hot-key has been installed with the specialKeys command, this command
+! can be used to generate a hotkey messages to the Vim Controller. The events
+! newDotAndMark, keyCommand and keyAtPos are generated (in this order).
+
+
+ ==============================================================================
+--- 839,854 ----
+ signs.
+
+ *:nbkey*
+! :nb[key] {key} Pass the {key} to the Vim Controller for processing.
+! When a hot-key has been installed with the specialKeys
+! command, this command can be used to generate a hotkey
+! message to the Vim Controller.
+! This command can also be used to pass any text to the
+! Vim Controller. It is used by Pyclewn, for example,
+! to build the complete set of gdb commands as Vim user
+! commands.
+! The events newDotAndMark, keyCommand and keyAtPos are
+! generated (in this order).
+
+
+ ==============================================================================
+*** ../vim-7.3.345/src/ex_docmd.c 2011-09-30 18:35:49.000000000 +0200
+--- src/ex_docmd.c 2011-10-20 21:50:06.000000000 +0200
+***************
+*** 8205,8210 ****
+--- 8205,8216 ----
+ {
+ ui_delay(msec - done > 1000L ? 1000L : msec - done, TRUE);
+ ui_breakcheck();
++ #ifdef FEAT_NETBEANS_INTG
++ /* Process the netbeans messages that may have been received in the
++ * call to ui_breakcheck() when the GUI is in use. This may occur when
++ * running a test case. */
++ netbeans_parse_messages();
++ #endif
+ }
+ }
+
+*** ../vim-7.3.345/src/netbeans.c 2011-04-11 21:35:03.000000000 +0200
+--- src/netbeans.c 2011-10-20 21:47:17.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,26 ----
+ * which are *between* characters, whereas vim uses line number
+ * and column number which are *on* characters.
+ * See ":help netbeans-protocol" for explanation.
++ *
++ * The Netbeans messages are received and queued in the gui event loop, or in
++ * the select loop when Vim runs in a terminal. These messages are processed
++ * by netbeans_parse_messages() which is invoked in the idle loop when Vim is
++ * waiting for user input. The function netbeans_parse_messages() is also
++ * called from the ":sleep" command, to allow the execution of test cases that
++ * may not invoke the idle loop.
+ */
+
+ #include "vim.h"
+*** ../vim-7.3.345/src/version.c 2011-10-20 21:57:43.000000000 +0200
+--- src/version.c 2011-10-20 21:50:23.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 346,
+ /**/
+
+--
+From "know your smileys":
+ ...---... SOS
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.347
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.347
+Problem: When dropping text from a browser on Vim it receives HTML even
+ though "html" is excluded from 'clipboard'. (Andrei Avk)
+Solution: Fix the condition for TARGET_HTML.
+Files: src/gui_gtk_x11.c
+
+
+*** ../vim-7.3.346/src/gui_gtk_x11.c 2011-08-10 17:44:41.000000000 +0200
+--- src/gui_gtk_x11.c 2011-10-23 20:56:38.000000000 +0200
+***************
+*** 3081,3087 ****
+
+ for (i = 0; i < (int)N_DND_TARGETS; ++i)
+ {
+! if (!clip_html && selection_targets[i].info == TARGET_HTML)
+ n_targets--;
+ else
+ targets[j++] = dnd_targets[i];
+--- 3081,3087 ----
+
+ for (i = 0; i < (int)N_DND_TARGETS; ++i)
+ {
+! if (!clip_html && dnd_targets[i].info == TARGET_HTML)
+ n_targets--;
+ else
+ targets[j++] = dnd_targets[i];
+*** ../vim-7.3.346/src/version.c 2011-10-20 21:58:20.000000000 +0200
+--- src/version.c 2011-10-26 11:35:23.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 347,
+ /**/
+
+--
+I AM THANKFUL...
+...for a lawn that needs mowing, windows that need cleaning
+and gutters that need fixing because it means I have a home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.348
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.348
+Problem: "call range(1, 947948399)" causes a crash. (ZyX)
+Solution: Avoid a loop in the out of memory message.
+Files: src/misc2.c
+
+
+*** ../vim-7.3.347/src/misc2.c 2011-08-19 22:28:58.000000000 +0200
+--- src/misc2.c 2011-10-26 11:17:26.000000000 +0200
+***************
+*** 1012,1019 ****
+ {
+ /* Don't hide this message */
+ emsg_silent = 0;
+! EMSGN(_("E342: Out of memory! (allocating %lu bytes)"), size);
+ did_outofmem_msg = TRUE;
+ }
+ }
+
+--- 1012,1023 ----
+ {
+ /* Don't hide this message */
+ emsg_silent = 0;
+!
+! /* Must come first to avoid coming back here when printing the error
+! * message fails, e.g. when setting v:errmsg. */
+ did_outofmem_msg = TRUE;
++
++ EMSGN(_("E342: Out of memory! (allocating %lu bytes)"), size);
+ }
+ }
+
+*** ../vim-7.3.347/src/version.c 2011-10-26 11:36:21.000000000 +0200
+--- src/version.c 2011-10-26 11:38:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 348,
+ /**/
+
+--
+A fool learns from his mistakes, a wise man from someone else's.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.349
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.349
+Problem: When running out of memory during startup trying to open a
+ swapfile will loop forever.
+Solution: Let findswapname() set dirp to NULL if out of memory.
+Files: src/memline.c
+
+
+*** ../vim-7.3.348/src/memline.c 2011-06-13 01:07:22.000000000 +0200
+--- src/memline.c 2011-10-26 11:26:06.000000000 +0200
+***************
+*** 621,626 ****
+--- 621,628 ----
+ break;
+ fname = findswapname(buf, &dirp, mfp->mf_fname);
+ /* alloc's fname */
++ if (dirp == NULL) /* out of memory */
++ break;
+ if (fname == NULL) /* no file name found for this dir */
+ continue;
+
+***************
+*** 744,749 ****
+--- 746,753 ----
+ * and creating it, another Vim creates the file. In that case the
+ * creation will fail and we will use another directory. */
+ fname = findswapname(buf, &dirp, NULL); /* allocates fname */
++ if (dirp == NULL)
++ break; /* out of memory */
+ if (fname == NULL)
+ continue;
+ if (mf_open_file(mfp, fname) == OK) /* consumes fname! */
+***************
+*** 4114,4119 ****
+--- 4118,4124 ----
+ *
+ * Several names are tried to find one that does not exist
+ * Returns the name in allocated memory or NULL.
++ * When out of memory "dirp" is set to NULL.
+ *
+ * Note: If BASENAMELEN is not correct, you will get error messages for
+ * not being able to open the swap or undo file
+***************
+*** 4157,4163 ****
+ * First allocate some memory to put the directory name in.
+ */
+ dir_name = alloc((unsigned)STRLEN(*dirp) + 1);
+! if (dir_name != NULL)
+ (void)copy_option_part(dirp, dir_name, 31000, ",");
+
+ /*
+--- 4162,4170 ----
+ * First allocate some memory to put the directory name in.
+ */
+ dir_name = alloc((unsigned)STRLEN(*dirp) + 1);
+! if (dir_name == NULL)
+! *dirp = NULL;
+! else
+ (void)copy_option_part(dirp, dir_name, 31000, ",");
+
+ /*
+*** ../vim-7.3.348/src/version.c 2011-10-26 11:40:56.000000000 +0200
+--- src/version.c 2011-10-26 11:43:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 349,
+ /**/
+
+--
+I AM THANKFUL...
+...for all the complaining I hear about the government
+because it means we have freedom of speech.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.350
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.350
+Problem: Block of code after ":lua << EOF" may not work. (Paul Isambert)
+Solution: Recognize the ":lua" command, skip to EOF.
+Files: src/eval.c
+
+
+*** ../vim-7.3.349/src/eval.c 2011-09-30 18:35:49.000000000 +0200
+--- src/eval.c 2011-10-26 13:12:06.000000000 +0200
+***************
+*** 20899,20904 ****
+--- 20899,20906 ----
+ && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
+ || (p[0] == 't' && p[1] == 'c'
+ && (!ASCII_ISALPHA(p[2]) || p[2] == 'l'))
++ || (p[0] == 'l' && p[1] == 'u' && p[2] == 'a'
++ && !ASCII_ISALPHA(p[3]))
+ || (p[0] == 'r' && p[1] == 'u' && p[2] == 'b'
+ && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
+ || (p[0] == 'm' && p[1] == 'z'
+*** ../vim-7.3.349/src/version.c 2011-10-26 11:44:15.000000000 +0200
+--- src/version.c 2011-10-26 13:13:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 350,
+ /**/
+
+--
+From "know your smileys":
+ :-| :-| Deja' vu!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.351
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.351
+Problem: Text formatting uses start of insert position when it should not.
+ (Peter Wagenaar)
+Solution: Do not use Insstart when intentionally formatting.
+Files: src/edit.c
+
+
+*** ../vim-7.3.350/src/edit.c 2011-09-21 18:23:02.000000000 +0200
+--- src/edit.c 2011-10-26 16:58:21.000000000 +0200
+***************
+*** 6078,6083 ****
+--- 6078,6084 ----
+ * Stop at first entered white when 'formatoptions' has 'v'
+ */
+ while ((!fo_ins_blank && !has_format_option(FO_INS_VI))
++ || (flags & INSCHAR_FORMAT)
+ || curwin->w_cursor.lnum != Insstart.lnum
+ || curwin->w_cursor.col >= Insstart.col)
+ {
+*** ../vim-7.3.350/src/version.c 2011-10-26 13:19:23.000000000 +0200
+--- src/version.c 2011-10-26 17:03:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 351,
+ /**/
+
+--
+From "know your smileys":
+ :-* A big kiss!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.352
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.352
+Problem: When completing methods dict functions and script-local functions
+ get in the way.
+Solution: Sort function names starting with "<" to the end. (Yasuhiro
+ Matsumoto)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.351/src/ex_getln.c 2011-09-30 17:46:14.000000000 +0200
+--- src/ex_getln.c 2011-10-26 21:37:53.000000000 +0200
+***************
+*** 121,126 ****
+--- 121,134 ----
+ static int ex_window __ARGS((void));
+ #endif
+
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++ static int
++ #ifdef __BORLANDC__
++ _RTLENTRYF
++ #endif
++ sort_func_compare __ARGS((const void *s1, const void *s2));
++ #endif
++
+ /*
+ * getcmdline() - accept a command line starting with firstc.
+ *
+***************
+*** 3286,3291 ****
+--- 3294,3317 ----
+ return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
+ }
+
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++ static int
++ #ifdef __BORLANDC__
++ _RTLENTRYF
++ #endif
++ sort_func_compare(s1, s2)
++ const void *s1;
++ const void *s2;
++ {
++ char_u *p1 = *(char_u **)s1;
++ char_u *p2 = *(char_u **)s2;
++
++ if (*p1 != '<' && *p2 == '<') return -1;
++ if (*p1 == '<' && *p2 != '<') return 1;
++ return STRCMP(p1, p2);
++ }
++ #endif
++
+ /*
+ * Return FAIL if this is not an appropriate context in which to do
+ * completion of anything, return OK if it is (even if there are no matches).
+***************
+*** 4735,4741 ****
+
+ /* Sort the results. Keep menu's in the specified order. */
+ if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
+! sort_strings(*file, *num_file);
+
+ #ifdef FEAT_CMDL_COMPL
+ /* Reset the variables used for special highlight names expansion, so that
+--- 4761,4776 ----
+
+ /* Sort the results. Keep menu's in the specified order. */
+ if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
+! {
+! if (xp->xp_context == EXPAND_EXPRESSION
+! || xp->xp_context == EXPAND_FUNCTIONS
+! || xp->xp_context == EXPAND_USER_FUNC)
+! /* <SNR> functions should be sorted to the end. */
+! qsort((void *)*file, (size_t)*num_file, sizeof(char_u *),
+! sort_func_compare);
+! else
+! sort_strings(*file, *num_file);
+! }
+
+ #ifdef FEAT_CMDL_COMPL
+ /* Reset the variables used for special highlight names expansion, so that
+*** ../vim-7.3.351/src/version.c 2011-10-26 17:04:23.000000000 +0200
+--- src/version.c 2011-10-26 21:49:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 352,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+94. Now admit it... How many of you have made "modem noises" into
+ the phone just to see if it was possible? :-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.353
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.353 (after 7.3.343)
+Problem: Missing part of the urxvt patch.
+Solution: Add the change in term.c
+Files: src/term.c
+
+
+*** ../vim-7.3.352/src/term.c 2011-09-14 14:43:21.000000000 +0200
+--- src/term.c 2011-10-26 23:48:01.000000000 +0200
+***************
+*** 4008,4014 ****
+ }
+
+ #ifdef FEAT_TERMRESPONSE
+! if (key_name[0] == NUL)
+ {
+ /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c". Also
+ * eat other possible responses to t_RV, rxvt returns
+--- 4008,4016 ----
+ }
+
+ #ifdef FEAT_TERMRESPONSE
+! if (key_name[0] == NUL
+! /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+! || key_name[0] == KS_URXVT_MOUSE)
+ {
+ /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c". Also
+ * eat other possible responses to t_RV, rxvt returns
+***************
+*** 4047,4053 ****
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
+ /* if xterm version >= 95 use mouse dragging */
+! if (extra >= 95)
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"xterm2", 0);
+ /* if xterm version >= 141 try to get termcap codes */
+--- 4049,4055 ----
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
+ /* if xterm version >= 95 use mouse dragging */
+! if (extra >= 95 && ttym_flags != TTYM_URXVT)
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"xterm2", 0);
+ /* if xterm version >= 141 try to get termcap codes */
+***************
+*** 4141,4146 ****
+--- 4143,4151 ----
+ # ifdef FEAT_MOUSE_PTERM
+ || key_name[0] == (int)KS_PTERM_MOUSE
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ || key_name[0] == (int)KS_URXVT_MOUSE
++ # endif
+ )
+ {
+ is_click = is_drag = FALSE;
+***************
+*** 4219,4225 ****
+--- 4224,4292 ----
+ else
+ break;
+ }
++ }
++
++ # ifdef FEAT_MOUSE_URXVT
++ if (key_name[0] == (int)KS_URXVT_MOUSE)
++ {
++ for (;;)
++ {
++ /* URXVT 1015 mouse reporting mode:
++ * Almost identical to xterm mouse mode, except the values
++ * are decimal instead of bytes.
++ *
++ * \033[%d;%d;%dM
++ * ^-- row
++ * ^----- column
++ * ^-------- code
++ */
++ p = tp + slen;
++
++ mouse_code = getdigits(&p);
++ if (*p++ != ';')
++ return -1;
++
++ mouse_col = getdigits(&p) - 1;
++ if (*p++ != ';')
++ return -1;
++
++ mouse_row = getdigits(&p) - 1;
++ if (*p++ != 'M')
++ return -1;
++
++ slen += (int)(p - (tp + slen));
++
++ /* skip this one if next one has same code (like xterm
++ * case) */
++ j = termcodes[idx].len;
++ if (STRNCMP(tp, tp + slen, (size_t)j) == 0) {
++ /* check if the command is complete by looking for the
++ * M */
++ int slen2;
++ int cmd_complete = 0;
++ for (slen2 = slen; slen2 < len; slen2++) {
++ if (tp[slen2] == 'M') {
++ cmd_complete = 1;
++ break;
++ }
++ }
++ p += j;
++ if (cmd_complete && getdigits(&p) == mouse_code) {
++ slen += j; /* skip the \033[ */
++ continue;
++ }
++ }
++ break;
++ }
++ }
++ # endif
+
++ if (key_name[0] == (int)KS_MOUSE
++ #ifdef FEAT_MOUSE_URXVT
++ || key_name[0] == (int)KS_URXVT_MOUSE
++ #endif
++ )
++ {
+ # if !defined(MSWIN) && !defined(MSDOS)
+ /*
+ * Handle mouse events.
+*** ../vim-7.3.352/src/version.c 2011-10-26 22:02:10.000000000 +0200
+--- src/version.c 2011-10-26 23:43:26.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 353,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+99. The hum of a cooling fan and the click of keys is comforting to you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.354
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.354
+Problem: ":set backspace+=eol" doesn't work when 'backspace' has a
+ backwards compatible value of 2.
+Solution: Convert the number to a string. (Hirohito Higashi)
+Files: src/option.c
+
+
+*** ../vim-7.3.353/src/option.c 2011-10-12 16:57:07.000000000 +0200
+--- src/option.c 2011-11-30 11:11:15.000000000 +0100
+***************
+*** 4567,4572 ****
+--- 4567,4597 ----
+ arg = errbuf;
+ }
+ /*
++ * Convert 'backspace' number to string, for
++ * adding, prepending and removing string.
++ */
++ else if (varp == (char_u *)&p_bs
++ && VIM_ISDIGIT(**(char_u **)varp))
++ {
++ i = getdigits((char_u **)varp);
++ switch (i)
++ {
++ case 0:
++ *(char_u **)varp = empty_option;
++ break;
++ case 1:
++ *(char_u **)varp = vim_strsave(
++ (char_u *)"indent,eol");
++ break;
++ case 2:
++ *(char_u **)varp = vim_strsave(
++ (char_u *)"indent,eol,start");
++ break;
++ }
++ vim_free(oldval);
++ oldval = *(char_u **)varp;
++ }
++ /*
+ * Convert 'whichwrap' number to string, for
+ * backwards compatibility with Vim 3.0.
+ * Misuse errbuf[] for the resulting string.
+*** ../vim-7.3.353/src/version.c 2011-10-26 23:48:17.000000000 +0200
+--- src/version.c 2011-11-30 11:14:44.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 354,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+206. You religiously respond immediately to e-mail, while ignoring
+ your growing pile of snail mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.355
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.355
+Problem: GTK warnings when using netrw.vim. (Ivan Krasilnikov)
+Solution: Do not remove the beval event handler twice.
+Files: src/option.c
+
+
+*** ../vim-7.3.354/src/option.c 2011-11-30 11:15:40.000000000 +0100
+--- src/option.c 2011-11-30 11:11:15.000000000 +0100
+***************
+*** 7796,7804 ****
+ #ifdef FEAT_BEVAL
+ else if ((int *)varp == &p_beval)
+ {
+! if (p_beval == TRUE)
+ gui_mch_enable_beval_area(balloonEval);
+! else
+ gui_mch_disable_beval_area(balloonEval);
+ }
+ #endif
+--- 7796,7804 ----
+ #ifdef FEAT_BEVAL
+ else if ((int *)varp == &p_beval)
+ {
+! if (p_beval && !old_value)
+ gui_mch_enable_beval_area(balloonEval);
+! else if (!p_beval && old_value)
+ gui_mch_disable_beval_area(balloonEval);
+ }
+ #endif
+*** ../vim-7.3.354/src/version.c 2011-11-30 11:15:40.000000000 +0100
+--- src/version.c 2011-11-30 11:30:55.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 355,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+209. Your house stinks because you haven't cleaned it in a week.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.356
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.356
+Problem: Using "o" with 'cindent' set may freeze Vim. (lolilolicon)
+Solution: Skip over {} correctly. (Hari G)
+Files: src/misc1.c
+
+
+*** ../vim-7.3.355/src/misc1.c 2011-10-04 18:03:43.000000000 +0200
+--- src/misc1.c 2011-11-30 12:56:55.000000000 +0100
+***************
+*** 6127,6133 ****
+
+ /*
+ * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
+! * line "l".
+ */
+ static int
+ find_last_paren(l, start, end)
+--- 6127,6133 ----
+
+ /*
+ * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
+! * line "l". "l" must point to the start of the line.
+ */
+ static int
+ find_last_paren(l, start, end)
+***************
+*** 6140,6146 ****
+
+ curwin->w_cursor.col = 0; /* default is start of line */
+
+! for (i = 0; l[i]; i++)
+ {
+ i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
+ i = (int)(skip_string(l + i) - l); /* ignore parens in quotes */
+--- 6140,6146 ----
+
+ curwin->w_cursor.col = 0; /* default is start of line */
+
+! for (i = 0; l[i] != NUL; i++)
+ {
+ i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
+ i = (int)(skip_string(l + i) - l); /* ignore parens in quotes */
+***************
+*** 7953,7958 ****
+--- 7953,7959 ----
+ * If we're at the end of a block, skip to the start of
+ * that block.
+ */
++ l = ml_get_curline();
+ if (find_last_paren(l, '{', '}')
+ && (trypos = find_start_brace(ind_maxcomment))
+ != NULL) /* XXX */
+*** ../vim-7.3.355/src/version.c 2011-11-30 11:31:25.000000000 +0100
+--- src/version.c 2011-11-30 13:02:52.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 356,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+213. Your kids start referring to you as "that guy in front of the monitor."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.357
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.357
+Problem: Compiler warning in MS-Windows console build.
+Solution: Adjust return type of PrintHookProc(). (Mike Williams)
+Files: src/os_mswin.c
+
+
+*** ../vim-7.3.356/src/os_mswin.c 2011-09-21 20:09:38.000000000 +0200
+--- src/os_mswin.c 2011-11-30 13:41:13.000000000 +0100
+***************
+*** 1869,1875 ****
+
+ #ifndef FEAT_GUI
+
+! static UINT CALLBACK
+ PrintHookProc(
+ HWND hDlg, // handle to dialog box
+ UINT uiMsg, // message identifier
+--- 1869,1875 ----
+
+ #ifndef FEAT_GUI
+
+! static UINT_PTR CALLBACK
+ PrintHookProc(
+ HWND hDlg, // handle to dialog box
+ UINT uiMsg, // message identifier
+*** ../vim-7.3.356/src/version.c 2011-11-30 13:03:24.000000000 +0100
+--- src/version.c 2011-11-30 13:41:55.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 357,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+215. Your mouse-clicking forearm rivals Popeye's.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.358
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.358 (after 7.3.353)
+Problem: Mouse support doesn't work properly.
+Solution: Add HMT_URXVT. (lilydjwg, James McCoy)
+Files: src/term.c
+
+
+*** ../vim-7.3.357/src/term.c 2011-10-26 23:48:17.000000000 +0200
+--- src/term.c 2011-11-30 14:42:22.000000000 +0100
+***************
+*** 1996,2001 ****
+--- 1996,2002 ----
+ # define HMT_DEC 4
+ # define HMT_JSBTERM 8
+ # define HMT_PTERM 16
++ # define HMT_URXVT 32
+ static int has_mouse_termcode = 0;
+ # endif
+
+***************
+*** 2031,2036 ****
+--- 2032,2042 ----
+ has_mouse_termcode |= HMT_PTERM;
+ else
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ if (n == KS_URXVT_MOUSE)
++ has_mouse_termcode |= HMT_URXVT;
++ else
++ # endif
+ has_mouse_termcode |= HMT_NORMAL;
+ # endif
+ }
+***************
+*** 2068,2073 ****
+--- 2074,2084 ----
+ has_mouse_termcode &= ~HMT_PTERM;
+ else
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ if (n == KS_URXVT_MOUSE)
++ has_mouse_termcode &= ~HMT_URXVT;
++ else
++ # endif
+ has_mouse_termcode &= ~HMT_NORMAL;
+ # endif
+ }
+*** ../vim-7.3.357/src/version.c 2011-11-30 13:42:40.000000000 +0100
+--- src/version.c 2011-11-30 14:45:06.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 358,
+ /**/
+
+--
+I noticed my daughter's Disney-net password on a sticky note:
+"MickeyMinnieGoofyPluto". I asked her why it was so long.
+"Because they say it has to have at least four characters."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.359
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.359
+Problem: Command line completion shows dict functions.
+Solution: Skip dict functions for completion. (Yasuhiro Matsumoto)
+Files: src/eval.c
+
+
+*** ../vim-7.3.358/src/eval.c 2011-10-26 13:19:23.000000000 +0200
+--- src/eval.c 2011-11-30 14:53:38.000000000 +0100
+***************
+*** 875,881 ****
+
+ #ifdef EBCDIC
+ /*
+! * Sort the function table, to enable binary sort.
+ */
+ sortFunctions();
+ #endif
+--- 875,881 ----
+
+ #ifdef EBCDIC
+ /*
+! * Sort the function table, to enable binary search.
+ */
+ sortFunctions();
+ #endif
+***************
+*** 21737,21742 ****
+--- 21737,21745 ----
+ ++hi;
+ fp = HI2UF(hi);
+
++ if (fp->uf_flags & FC_DICT)
++ return NULL; /* don't show dict functions */
++
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+
+*** ../vim-7.3.358/src/version.c 2011-11-30 14:47:12.000000000 +0100
+--- src/version.c 2011-11-30 14:56:57.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 359,
+ /**/
+
+--
+'Psychologist' -- Someone who looks at everyone else when
+an attractive woman enters the room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.360
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.360
+Problem: Interrupting the load of an autoload function may cause a crash.
+Solution: Do not use the hashitem when not valid. (Yukihiro Nakadaira)
+Files: src/eval.c
+
+
+*** ../vim-7.3.359/src/eval.c 2011-11-30 14:57:26.000000000 +0100
+--- src/eval.c 2011-11-30 15:06:53.000000000 +0100
+***************
+*** 19589,19597 ****
+ * worked find the variable again. Don't auto-load a script if it was
+ * loaded already, otherwise it would be loaded every time when
+ * checking if a function name is a Funcref variable. */
+! if (ht == &globvarht && !writing
+! && script_autoload(varname, FALSE) && !aborting())
+ hi = hash_find(ht, varname);
+ if (HASHITEM_EMPTY(hi))
+ return NULL;
+ }
+--- 19589,19602 ----
+ * worked find the variable again. Don't auto-load a script if it was
+ * loaded already, otherwise it would be loaded every time when
+ * checking if a function name is a Funcref variable. */
+! if (ht == &globvarht && !writing)
+! {
+! /* Note: script_autoload() may make "hi" invalid. It must either
+! * be obtained again or not used. */
+! if (!script_autoload(varname, FALSE) || aborting())
+! return NULL;
+ hi = hash_find(ht, varname);
++ }
+ if (HASHITEM_EMPTY(hi))
+ return NULL;
+ }
+*** ../vim-7.3.359/src/version.c 2011-11-30 14:57:26.000000000 +0100
+--- src/version.c 2011-11-30 15:17:28.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 360,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+217. Your sex life has drastically improved...so what if it's only cyber-sex!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.361
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.361
+Problem: Accessing memory after it is freed when EXITFREE is defined.
+Solution: Don't access curwin when firstwin is NULL. (Dominique Pelle)
+Files: src/buffer.c
+
+*** ../vim-7.3.360/src/buffer.c 2011-09-14 17:50:05.000000000 +0200
+--- src/buffer.c 2011-11-30 15:38:00.000000000 +0100
+***************
+*** 567,574 ****
+ diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
+ #endif
+ #ifdef FEAT_SYN_HL
+! if (curwin->w_buffer == buf)
+! reset_synblock(curwin); /* remove any ownsyntax */
+ #endif
+
+ #ifdef FEAT_FOLDING
+--- 567,575 ----
+ diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
+ #endif
+ #ifdef FEAT_SYN_HL
+! /* Remove any ownsyntax, unless exiting. */
+! if (firstwin != NULL && curwin->w_buffer == buf)
+! reset_synblock(curwin);
+ #endif
+
+ #ifdef FEAT_FOLDING
+*** ../vim-7.3.360/src/version.c 2011-11-30 15:19:25.000000000 +0100
+--- src/version.c 2011-11-30 15:40:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 361,
+ /**/
+
+
+--
+From the classified section of a city newspaper:
+Dog for sale: eats anything and is fond of children.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.362
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.362
+Problem: ml_get error when using ":g" with folded lines.
+Solution: Adjust the line number for changed_lines(). (Christian Brabandt)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.361/src/ex_cmds.c 2011-10-20 18:17:38.000000000 +0200
+--- src/ex_cmds.c 2011-11-30 16:58:34.000000000 +0100
+***************
+*** 820,826 ****
+ curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
+
+ if (line1 < dest)
+! changed_lines(line1, 0, dest + num_lines + 1, 0L);
+ else
+ changed_lines(dest + 1, 0, line1 + num_lines, 0L);
+
+--- 820,832 ----
+ curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
+
+ if (line1 < dest)
+! {
+! dest += num_lines + 1;
+! last_line = curbuf->b_ml.ml_line_count;
+! if (dest > last_line + 1)
+! dest = last_line + 1;
+! changed_lines(line1, 0, dest, 0L);
+! }
+ else
+ changed_lines(dest + 1, 0, line1 + num_lines, 0L);
+
+*** ../vim-7.3.361/src/version.c 2011-11-30 15:40:51.000000000 +0100
+--- src/version.c 2011-11-30 17:01:07.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 362,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+218. Your spouse hands you a gift wrapped magnet with your PC's name
+ on it and you accuse him or her of genocide.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.363
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.363
+Problem: C indenting is wrong after #endif followed by a semicolon.
+Solution: Add special handling for a semicolon in a line by itself. (Lech
+ Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.362/src/misc1.c 2011-11-30 13:03:24.000000000 +0100
+--- src/misc1.c 2011-11-30 17:10:59.000000000 +0100
+***************
+*** 8143,8148 ****
+--- 8143,8171 ----
+ break;
+
+ /*
++ * Find a line only has a semicolon that belongs to a previous
++ * line ending in '}', e.g. before an #endif. Don't increase
++ * indent then.
++ */
++ if (*(look = skipwhite(l)) == ';' && cin_nocode(look + 1))
++ {
++ pos_T curpos_save = curwin->w_cursor;
++
++ while (curwin->w_cursor.lnum > 1)
++ {
++ look = ml_get(--curwin->w_cursor.lnum);
++ if (!(cin_nocode(look) || cin_ispreproc_cont(
++ &look, &curwin->w_cursor.lnum)))
++ break;
++ }
++ if (curwin->w_cursor.lnum > 0
++ && cin_ends_in(look, (char_u *)"}", NULL))
++ break;
++
++ curwin->w_cursor = curpos_save;
++ }
++
++ /*
+ * If the PREVIOUS line is a function declaration, the current
+ * line (and the ones that follow) needs to be indented as
+ * parameters.
+*** ../vim-7.3.362/src/testdir/test3.in 2011-10-04 18:03:43.000000000 +0200
+--- src/testdir/test3.in 2011-11-30 17:05:20.000000000 +0100
+***************
+*** 1454,1459 ****
+--- 1454,1469 ----
+ printf("This line used to be indented incorrectly.\n");
+ }
+
++ int foo[]
++ #ifdef BAR
++
++ = { 1, 2, 3,
++ 4, 5, 6 }
++
++ #endif
++ ;
++ int baz;
++
+ void func3(void)
+ {
+ int tab[] = {
+*** ../vim-7.3.362/src/testdir/test3.ok 2011-10-04 18:03:43.000000000 +0200
+--- src/testdir/test3.ok 2011-11-30 17:05:20.000000000 +0100
+***************
+*** 1307,1312 ****
+--- 1307,1322 ----
+ printf("This line used to be indented incorrectly.\n");
+ }
+
++ int foo[]
++ #ifdef BAR
++
++ = { 1, 2, 3,
++ 4, 5, 6 }
++
++ #endif
++ ;
++ int baz;
++
+ void func3(void)
+ {
+ int tab[] = {
+*** ../vim-7.3.362/src/version.c 2011-11-30 17:01:55.000000000 +0100
+--- src/version.c 2011-11-30 17:06:57.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 363,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+220. Your wife asks for sex and you tell her where to find you on IRC.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.364
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.364 (after 7.3.353)
+Problem: Can't compile on HP-UX. (John Marriott)
+Solution: Only use TTYM_URXVT when it is defined.
+Files: src/term.c
+
+
+*** ../vim-7.3.363/src/term.c 2011-11-30 14:47:12.000000000 +0100
+--- src/term.c 2011-12-01 20:53:57.000000000 +0100
+***************
+*** 4060,4066 ****
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
+ /* if xterm version >= 95 use mouse dragging */
+! if (extra >= 95 && ttym_flags != TTYM_URXVT)
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"xterm2", 0);
+ /* if xterm version >= 141 try to get termcap codes */
+--- 4060,4070 ----
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
+ /* if xterm version >= 95 use mouse dragging */
+! if (extra >= 95
+! # ifdef TTYM_URXVT
+! && ttym_flags != TTYM_URXVT
+! # endif
+! )
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"xterm2", 0);
+ /* if xterm version >= 141 try to get termcap codes */
+*** ../vim-7.3.363/src/version.c 2011-11-30 17:20:18.000000000 +0100
+--- src/version.c 2011-12-01 20:56:55.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 364,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+224. You set up your own Web page. You set up a Web page for each
+ of your kids... and your pets.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.365
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.365
+Problem: Crash when using a large Unicode character in a file that has
+ syntax highlighting. (ngollan)
+Solution: Check for going past the end of the utf tables. (Dominique Pelle)
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.364/src/mbyte.c 2011-08-10 13:21:30.000000000 +0200
+--- src/mbyte.c 2011-12-08 15:09:13.000000000 +0100
+***************
+*** 2764,2782 ****
+ int tableSize;
+ {
+ int start, mid, end; /* indices into table */
+
+ start = 0;
+! end = tableSize / sizeof(convertStruct);
+ while (start < end)
+ {
+ /* need to search further */
+! mid = (end + start) /2;
+ if (table[mid].rangeEnd < a)
+ start = mid + 1;
+ else
+ end = mid;
+ }
+! if (table[start].rangeStart <= a && a <= table[start].rangeEnd
+ && (a - table[start].rangeStart) % table[start].step == 0)
+ return (a + table[start].offset);
+ else
+--- 2764,2785 ----
+ int tableSize;
+ {
+ int start, mid, end; /* indices into table */
++ int entries = tableSize / sizeof(convertStruct);
+
+ start = 0;
+! end = entries;
+ while (start < end)
+ {
+ /* need to search further */
+! mid = (end + start) / 2;
+ if (table[mid].rangeEnd < a)
+ start = mid + 1;
+ else
+ end = mid;
+ }
+! if (start < entries
+! && table[start].rangeStart <= a
+! && a <= table[start].rangeEnd
+ && (a - table[start].rangeStart) % table[start].step == 0)
+ return (a + table[start].offset);
+ else
+***************
+*** 2791,2797 ****
+ utf_fold(a)
+ int a;
+ {
+! return utf_convert(a, foldCase, sizeof(foldCase));
+ }
+
+ static convertStruct toLower[] =
+--- 2794,2800 ----
+ utf_fold(a)
+ int a;
+ {
+! return utf_convert(a, foldCase, (int)sizeof(foldCase));
+ }
+
+ static convertStruct toLower[] =
+***************
+*** 3119,3125 ****
+ return TOUPPER_LOC(a);
+
+ /* For any other characters use the above mapping table. */
+! return utf_convert(a, toUpper, sizeof(toUpper));
+ }
+
+ int
+--- 3122,3128 ----
+ return TOUPPER_LOC(a);
+
+ /* For any other characters use the above mapping table. */
+! return utf_convert(a, toUpper, (int)sizeof(toUpper));
+ }
+
+ int
+***************
+*** 3152,3158 ****
+ return TOLOWER_LOC(a);
+
+ /* For any other characters use the above mapping table. */
+! return utf_convert(a, toLower, sizeof(toLower));
+ }
+
+ int
+--- 3155,3161 ----
+ return TOLOWER_LOC(a);
+
+ /* For any other characters use the above mapping table. */
+! return utf_convert(a, toLower, (int)sizeof(toLower));
+ }
+
+ int
+*** ../vim-7.3.364/src/version.c 2011-12-01 20:59:16.000000000 +0100
+--- src/version.c 2011-12-08 15:07:53.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 365,
+ /**/
+
+--
+Hear about the guy who played a blank tape at full blast?
+The mime next door went nuts.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.366
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.366
+Problem: A tags file with an extremely long name causes errors.
+Solution: Ignore tags that are too long. (Arno Renevier)
+Files: src/tag.c
+
+
+*** ../vim-7.3.365/src/tag.c 2011-10-12 19:53:31.000000000 +0200
+--- src/tag.c 2011-12-08 13:32:51.000000000 +0100
+***************
+*** 1906,1917 ****
+ tagp.tagname = lbuf;
+ #ifdef FEAT_TAG_ANYWHITE
+ tagp.tagname_end = skiptowhite(lbuf);
+! if (*tagp.tagname_end == NUL) /* corrupted tag line */
+ #else
+ tagp.tagname_end = vim_strchr(lbuf, TAB);
+! if (tagp.tagname_end == NULL) /* corrupted tag line */
+ #endif
+ {
+ line_error = TRUE;
+ break;
+ }
+--- 1906,1931 ----
+ tagp.tagname = lbuf;
+ #ifdef FEAT_TAG_ANYWHITE
+ tagp.tagname_end = skiptowhite(lbuf);
+! if (*tagp.tagname_end == NUL)
+ #else
+ tagp.tagname_end = vim_strchr(lbuf, TAB);
+! if (tagp.tagname_end == NULL)
+ #endif
+ {
++ if (vim_strchr(lbuf, NL) == NULL)
++ {
++ /* Truncated line, ignore it. Has been reported for
++ * Mozilla JS with extremely long names. */
++ if (p_verbose >= 5)
++ {
++ verbose_enter();
++ MSG(_("Ignoring long line in tags file"));
++ verbose_leave();
++ }
++ continue;
++ }
++
++ /* Corrupted tag line. */
+ line_error = TRUE;
+ break;
+ }
+*** ../vim-7.3.365/src/version.c 2011-12-08 15:09:46.000000000 +0100
+--- src/version.c 2011-12-08 15:11:10.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 366,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+246. You use up your free 100 hours in less than a week.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.367
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.367
+Problem: :wundo and :rundo use a wrong checksum.
+Solution: Include the last line when computing the hash. (Christian Brabandt)
+Files: src/undo.c
+
+
+*** ../vim-7.3.366/src/undo.c 2011-01-22 21:25:07.000000000 +0100
+--- src/undo.c 2011-12-08 14:19:03.000000000 +0100
+***************
+*** 719,725 ****
+ char_u *p;
+
+ sha256_start(&ctx);
+! for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+ {
+ p = ml_get(lnum);
+ sha256_update(&ctx, p, (UINT32_T)(STRLEN(p) + 1));
+--- 719,725 ----
+ char_u *p;
+
+ sha256_start(&ctx);
+! for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
+ {
+ p = ml_get(lnum);
+ sha256_update(&ctx, p, (UINT32_T)(STRLEN(p) + 1));
+*** ../vim-7.3.366/src/version.c 2011-12-08 15:12:08.000000000 +0100
+--- src/version.c 2011-12-08 15:13:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 367,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+247. You use www.switchboard.com instead of dialing 411 and 555-12-12
+ for directory assistance.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.368
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.368
+Problem: Gcc complains about redefining _FORTIFY_SOURCE.
+Solution: Undefine it before redefining it.
+Files: src/Makefile, src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.367/src/Makefile 2011-10-20 16:35:25.000000000 +0200
+--- src/Makefile 2011-12-08 15:16:13.000000000 +0100
+***************
+*** 561,568 ****
+ #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
+
+ # Use this with GCC to check for mistakes, unused arguments, etc.
+! #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1
+! #CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG
+ #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
+ #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
+
+--- 561,568 ----
+ #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
+
+ # Use this with GCC to check for mistakes, unused arguments, etc.
+! #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
+! #CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DU_DEBUG
+ #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
+ #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
+
+*** ../vim-7.3.367/src/configure.in 2011-09-02 12:27:20.000000000 +0200
+--- src/configure.in 2011-12-01 20:23:22.000000000 +0100
+***************
+*** 3584,3592 ****
+ dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
+ dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
+ dnl Also remove duplicate _FORTIFY_SOURCE arguments.
+ AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
+ if test "$gccmajor" -gt "3"; then
+! CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+--- 3584,3593 ----
+ dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
+ dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
+ dnl Also remove duplicate _FORTIFY_SOURCE arguments.
++ dnl And undefine it first to avoid a warning.
+ AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
+ if test "$gccmajor" -gt "3"; then
+! CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+*** ../vim-7.3.367/src/auto/configure 2011-09-02 12:27:20.000000000 +0200
+--- src/auto/configure 2011-12-01 20:24:02.000000000 +0100
+***************
+*** 12483,12492 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
+ $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
+ if test "$gccmajor" -gt "3"; then
+! CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+--- 12483,12492 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
+ $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
+ if test "$gccmajor" -gt "3"; then
+! CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+*** ../vim-7.3.367/src/version.c 2011-12-08 15:14:04.000000000 +0100
+--- src/version.c 2011-12-08 15:15:13.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 368,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+248. You sign your letters with your e-mail address instead of your name.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.369
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.369
+Problem: When compiled with Gnome get an error message when using --help.
+Solution: Don't fork. (Ivan Krasilnikov)
+Files: src/main.c
+
+
+*** ../vim-7.3.368/src/main.c 2011-10-04 16:43:49.000000000 +0200
+--- src/main.c 2011-12-01 20:27:11.000000000 +0100
+***************
+*** 3294,3300 ****
+--- 3294,3303 ----
+ #ifdef FEAT_GUI_GNOME
+ /* Gnome gives extra messages for --help if we continue, but not for -h. */
+ if (gui.starting)
++ {
+ mch_msg("\n");
++ gui.dofork = FALSE;
++ }
+ else
+ #endif
+ mch_exit(0);
+*** ../vim-7.3.368/src/version.c 2011-12-08 15:17:28.000000000 +0100
+--- src/version.c 2011-12-08 15:57:03.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 369,
+ /**/
+
+--
+Vi is clearly superior to emacs, since "vi" has only two characters
+(and two keystrokes), while "emacs" has five. (Randy C. Ford)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.370
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.370
+Problem: Compiler warns for unused variable in Lua interface.
+Solution: Remove the variable.
+Files: src/if_lua.c
+
+
+*** ../vim-7.3.369/src/if_lua.c 2011-09-21 17:15:34.000000000 +0200
+--- src/if_lua.c 2011-12-01 20:19:17.000000000 +0100
+***************
+*** 1044,1056 ****
+ static int
+ luaV_open(lua_State *L)
+ {
+- luaV_Buffer *b;
+ char_u *s = NULL;
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+ if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
+! b = luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
+ return 1;
+ }
+
+--- 1044,1055 ----
+ static int
+ luaV_open(lua_State *L)
+ {
+ char_u *s = NULL;
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+ if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
+! luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
+ return 1;
+ }
+
+*** ../vim-7.3.369/src/version.c 2011-12-08 15:57:54.000000000 +0100
+--- src/version.c 2011-12-08 15:59:35.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 370,
+ /**/
+
+--
+Emacs is a nice OS - but it lacks a good text editor.
+That's why I am using Vim. --Anonymous
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.371
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.371
+Problem: Crash in autocomplete. (Greg Weber)
+Solution: Check not going over allocated buffer size.
+Files: src/misc2.c
+
+
+*** ../vim-7.3.370/src/misc2.c 2011-10-26 11:40:56.000000000 +0200
+--- src/misc2.c 2011-12-08 17:49:23.000000000 +0100
+***************
+*** 4293,4298 ****
+--- 4293,4300 ----
+ static int ff_path_in_stoplist __ARGS((char_u *, int, char_u **));
+ #endif
+
++ static char_u e_pathtoolong[] = N_("E854: path too long for completion");
++
+ #if 0
+ /*
+ * if someone likes findfirst/findnext, here are the functions
+***************
+*** 4589,4594 ****
+--- 4591,4601 ----
+ len = 0;
+ while (*wc_part != NUL)
+ {
++ if (len + 5 >= MAXPATHL)
++ {
++ EMSG(_(e_pathtoolong));
++ break;
++ }
+ if (STRNCMP(wc_part, "**", 2) == 0)
+ {
+ ff_expand_buffer[len++] = *wc_part++;
+***************
+*** 4634,4639 ****
+--- 4641,4652 ----
+ }
+
+ /* create an absolute path */
++ if (STRLEN(search_ctx->ffsc_start_dir)
++ + STRLEN(search_ctx->ffsc_fix_path) + 3 >= MAXPATHL)
++ {
++ EMSG(_(e_pathtoolong));
++ goto error_return;
++ }
+ STRCPY(ff_expand_buffer, search_ctx->ffsc_start_dir);
+ add_pathsep(ff_expand_buffer);
+ STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
+*** ../vim-7.3.370/src/version.c 2011-12-08 16:00:12.000000000 +0100
+--- src/version.c 2011-12-08 17:46:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 371,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+253. You wait for a slow loading web page before going to the toilet.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.372
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.372
+Problem: When using a command line mapping to <Up> with file name
+ completion to go one directory up, 'wildchar' is inserted.
+ (Yasuhiro Matsumoto)
+Solution: Set the KeyTyped flag.
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.371/src/ex_getln.c 2011-10-26 22:02:10.000000000 +0200
+--- src/ex_getln.c 2011-12-08 18:40:49.000000000 +0100
+***************
+*** 645,651 ****
+--- 645,655 ----
+ }
+ else if (ccline.cmdpos > i)
+ cmdline_del(i);
++
++ /* Now complete in the new directory. Set KeyTyped in case the
++ * Up key came from a mapping. */
+ c = p_wc;
++ KeyTyped = TRUE;
+ }
+ }
+
+*** ../vim-7.3.371/src/version.c 2011-12-08 17:49:31.000000000 +0100
+--- src/version.c 2011-12-08 18:42:54.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 372,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+255. You work for a newspaper and your editor asks you to write an
+ article about Internet addiction...in the "first person."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.373
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.373 (after 7.3.366)
+Problem: A tags file with an extremely long name may cause an infinite loop.
+Solution: When encountering a long name switch to linear search.
+Files: src/tag.c
+
+
+*** ../vim-7.3.372/src/tag.c 2011-12-08 15:12:08.000000000 +0100
+--- src/tag.c 2011-12-14 14:13:28.000000000 +0100
+***************
+*** 1854,1860 ****
+
+ if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
+ {
+! /* binary search won't work for ignoring case, use linear
+ * search. */
+ linear = TRUE;
+ state = TS_LINEAR;
+--- 1854,1860 ----
+
+ if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
+ {
+! /* Binary search won't work for ignoring case, use linear
+ * search. */
+ linear = TRUE;
+ state = TS_LINEAR;
+***************
+*** 1922,1927 ****
+--- 1922,1940 ----
+ MSG(_("Ignoring long line in tags file"));
+ verbose_leave();
+ }
++ #ifdef FEAT_TAG_BINS
++ if (state != TS_LINEAR)
++ {
++ /* Avoid getting stuck. */
++ linear = TRUE;
++ state = TS_LINEAR;
++ # ifdef HAVE_FSEEKO
++ fseeko(fp, search_info.low_offset, SEEK_SET);
++ # else
++ fseek(fp, (long)search_info.low_offset, SEEK_SET);
++ # endif
++ }
++ #endif
+ continue;
+ }
+
+*** ../vim-7.3.372/src/version.c 2011-12-08 18:44:47.000000000 +0100
+--- src/version.c 2011-12-14 14:12:06.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 373,
+ /**/
+
+--
+ZOOT: I'm afraid our life must seem very dull and quiet compared to yours.
+ We are but eightscore young blondes, all between sixteen and
+ nineteen-and-a-half, cut off in this castle, with no one to protect us.
+ Oooh. It is a lonely life ... bathing ... dressing ... undressing ...
+ making exciting underwear....
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.374
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.374
+Problem: ++encoding does not work properly.
+Solution: Recognize ++encoding before ++enc. (Charles Cooper)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.373/src/ex_docmd.c 2011-10-20 21:58:20.000000000 +0200
+--- src/ex_docmd.c 2011-12-14 14:46:05.000000000 +0100
+***************
+*** 4840,4851 ****
+ #ifdef FEAT_MBYTE
+ else if (STRNCMP(arg, "enc", 3) == 0)
+ {
+! arg += 3;
+! pp = &eap->force_enc;
+! }
+! else if (STRNCMP(arg, "encoding", 8) == 0)
+! {
+! arg += 8;
+ pp = &eap->force_enc;
+ }
+ else if (STRNCMP(arg, "bad", 3) == 0)
+--- 4840,4849 ----
+ #ifdef FEAT_MBYTE
+ else if (STRNCMP(arg, "enc", 3) == 0)
+ {
+! if (STRNCMP(arg, "encoding", 8) == 0)
+! arg += 8;
+! else
+! arg += 3;
+ pp = &eap->force_enc;
+ }
+ else if (STRNCMP(arg, "bad", 3) == 0)
+*** ../vim-7.3.373/src/version.c 2011-12-14 14:15:12.000000000 +0100
+--- src/version.c 2011-12-14 14:44:01.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 374,
+ /**/
+
+--
+Linux is just like a wigwam: no Windows, no Gates and an Apache inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.375
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.375
+Problem: Duplicate return statement.
+Solution: Remove the superfluous one. (Dominique Pelle)
+Files: src/gui_mac.c
+
+
+*** ../vim-7.3.374/src/gui_mac.c 2011-06-19 01:14:22.000000000 +0200
+--- src/gui_mac.c 2011-12-10 17:20:59.000000000 +0100
+***************
+*** 3216,3222 ****
+ {
+ /* TODO:
+ * This proc is called when Normal is set to a value
+! * so what msut be done? I don't know
+ */
+ }
+
+--- 3216,3222 ----
+ {
+ /* TODO:
+ * This proc is called when Normal is set to a value
+! * so what must be done? I don't know
+ */
+ }
+
+***************
+*** 3303,3309 ****
+ *x = bounds.left;
+ *y = bounds.top;
+ return OK;
+- return FAIL;
+ }
+
+ /*
+--- 3303,3308 ----
+*** ../vim-7.3.374/src/version.c 2011-12-14 14:49:41.000000000 +0100
+--- src/version.c 2011-12-14 15:06:01.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 375,
+ /**/
+
+--
+GALAHAD: No look, really, this isn't nescess ...
+PIGLET: We must examine you.
+GALAHAD: There's nothing wrong with ... that.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.376
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.376
+Problem: Win32: Toolbar repainting does not work when the mouse pointer
+ hovers over a button.
+Solution: Call DefWindowProc() when not handling an event. (Sergiu Dotenco)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.375/src/gui_w32.c 2011-08-10 17:07:56.000000000 +0200
+--- src/gui_w32.c 2011-12-14 15:14:48.000000000 +0100
+***************
+*** 1101,1107 ****
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+
+! return 1;
+ }
+
+ /*
+--- 1101,1107 ----
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+
+! return DefWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+
+ /*
+*** ../vim-7.3.375/src/version.c 2011-12-14 15:07:11.000000000 +0100
+--- src/version.c 2011-12-14 15:23:10.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 376,
+ /**/
+
+--
+ GALAHAD hurries to the door and pushes through it. As he leaves the room
+ we CUT TO the reverse to show that he is now in a room full of bathing
+ and romping GIRLIES, all innocent, wide-eyed and beautiful. They smile
+ enchantingly at him as he tries to keep walking without being diverted by
+ the lovely sights assaulting his eyeballs.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.377
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.377
+Problem: No support for bitwise AND, OR, XOR and invert.
+Solution: Add and(), or(), invert() and xor() functions.
+Files: src/eval.c, src/testdir/test49.in, src/testdir/test65.in,
+ src/testdir/test65.ok, runtime/doc/eval.txt
+
+
+*** ../vim-7.3.376/src/eval.c 2011-11-30 15:19:25.000000000 +0100
+--- src/eval.c 2011-12-11 13:49:31.000000000 +0100
+***************
+*** 474,479 ****
+--- 474,480 ----
+ static void f_acos __ARGS((typval_T *argvars, typval_T *rettv));
+ #endif
+ static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_and __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 602,607 ****
+--- 603,609 ----
+ static void f_inputsave __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_inputsecret __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_insert __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_invert __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_isdirectory __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 640,645 ****
+--- 642,648 ----
+ #endif
+ static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_nr2char __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_or __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_pathshorten __ARGS((typval_T *argvars, typval_T *rettv));
+ #ifdef FEAT_FLOAT
+ static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 751,756 ****
+--- 754,760 ----
+ static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
+
+ static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
+ static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
+***************
+*** 7715,7720 ****
+--- 7719,7725 ----
+ {"acos", 1, 1, f_acos}, /* WJMc */
+ #endif
+ {"add", 2, 2, f_add},
++ {"and", 2, 2, f_and},
+ {"append", 2, 2, f_append},
+ {"argc", 0, 0, f_argc},
+ {"argidx", 0, 0, f_argidx},
+***************
+*** 7850,7855 ****
+--- 7855,7861 ----
+ {"inputsave", 0, 0, f_inputsave},
+ {"inputsecret", 1, 2, f_inputsecret},
+ {"insert", 2, 3, f_insert},
++ {"invert", 1, 1, f_invert},
+ {"isdirectory", 1, 1, f_isdirectory},
+ {"islocked", 1, 1, f_islocked},
+ {"items", 1, 1, f_items},
+***************
+*** 7888,7893 ****
+--- 7894,7900 ----
+ #endif
+ {"nextnonblank", 1, 1, f_nextnonblank},
+ {"nr2char", 1, 1, f_nr2char},
++ {"or", 2, 2, f_or},
+ {"pathshorten", 1, 1, f_pathshorten},
+ #ifdef FEAT_FLOAT
+ {"pow", 2, 2, f_pow},
+***************
+*** 7999,8004 ****
+--- 8006,8012 ----
+ {"winsaveview", 0, 0, f_winsaveview},
+ {"winwidth", 1, 1, f_winwidth},
+ {"writefile", 2, 3, f_writefile},
++ {"xor", 2, 2, f_xor},
+ };
+
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+***************
+*** 8572,8577 ****
+--- 8580,8597 ----
+ }
+
+ /*
++ * "and(expr, expr)" function
++ */
++ static void
++ f_and(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++ & get_tv_number_chk(&argvars[1], NULL);
++ }
++
++ /*
+ * "append(lnum, string/list)" function
+ */
+ static void
+***************
+*** 12958,12963 ****
+--- 12978,12994 ----
+ }
+
+ /*
++ * "invert(expr)" function
++ */
++ static void
++ f_invert(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
++ }
++
++ /*
+ * "isdirectory()" function
+ */
+ static void
+***************
+*** 14108,14113 ****
+--- 14139,14156 ----
+ }
+
+ /*
++ * "or(expr, expr)" function
++ */
++ static void
++ f_or(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++ | get_tv_number_chk(&argvars[1], NULL);
++ }
++
++ /*
+ * "pathshorten()" function
+ */
+ static void
+***************
+*** 18394,18399 ****
+--- 18437,18455 ----
+ }
+
+ /*
++ * "xor(expr, expr)" function
++ */
++ static void
++ f_xor(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++ ^ get_tv_number_chk(&argvars[1], NULL);
++ }
++
++
++ /*
+ * Translate a String variable into a position.
+ * Returns NULL when there is an error.
+ */
+*** ../vim-7.3.376/src/testdir/test65.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test65.in 2011-12-11 13:55:06.000000000 +0100
+***************
+*** 1,4 ****
+! Test for floating point.
+
+ STARTTEST
+ :so small.vim
+--- 1,4 ----
+! Test for floating point and logical operators.
+
+ STARTTEST
+ :so small.vim
+***************
+*** 72,77 ****
+--- 72,94 ----
+ :$put ='float2nr'
+ :$put =float2nr(123.456)
+ :$put =float2nr(-123.456)
++ :$put ='AND'
++ :$put =and(127, 127)
++ :$put =and(127, 16)
++ :$put =and(127, 128)
++ :$put ='OR'
++ :$put =or(16, 7)
++ :$put =or(8, 7)
++ :$put =or(0, 123)
++ :$put ='XOR'
++ :$put =xor(127, 127)
++ :$put =xor(127, 16)
++ :$put =xor(127, 128)
++ :$put ='invert'
++ :$put =and(invert(127), 65535)
++ :$put =and(invert(16), 65535)
++ :$put =and(invert(128), 65535)
++ :$put =invert(1.0)
+ :/^Results/,$wq! test.out
+ ENDTEST
+
+*** ../vim-7.3.376/src/testdir/test65.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test65.ok 2011-12-11 13:55:30.000000000 +0100
+***************
+*** 54,56 ****
+--- 54,73 ----
+ float2nr
+ 123
+ -123
++ AND
++ 127
++ 16
++ 0
++ OR
++ 23
++ 15
++ 123
++ XOR
++ 0
++ 111
++ 255
++ invert
++ 65408
++ 65519
++ 65407
++ 0
+*** ../vim-7.3.376/runtime/doc/eval.txt 2011-06-19 02:55:32.000000000 +0200
+--- runtime/doc/eval.txt 2011-12-14 15:28:23.000000000 +0100
+***************
+*** 798,808 ****
+ For |Lists| only "+" is possible and then both expr6 must be a list. The
+ result is a new list with the two lists Concatenated.
+
+! expr7 * expr7 .. number multiplication *expr-star*
+! expr7 / expr7 .. number division *expr-/*
+! expr7 % expr7 .. number modulo *expr-%*
+
+ For all, except ".", Strings are converted to Numbers.
+
+ Note the difference between "+" and ".":
+ "123" + "456" = 579
+--- 800,811 ----
+ For |Lists| only "+" is possible and then both expr6 must be a list. The
+ result is a new list with the two lists Concatenated.
+
+! expr7 * expr7 .. Number multiplication *expr-star*
+! expr7 / expr7 .. Number division *expr-/*
+! expr7 % expr7 .. Number modulo *expr-%*
+
+ For all, except ".", Strings are converted to Numbers.
++ For bitwise operators see |and()|, |or()| and |xor()|.
+
+ Note the difference between "+" and ".":
+ "123" + "456" = 579
+***************
+*** 1679,1684 ****
+--- 1688,1694 ----
+ abs( {expr}) Float or Number absolute value of {expr}
+ acos( {expr}) Float arc cosine of {expr}
+ add( {list}, {item}) List append {item} to |List| {list}
++ and( {expr}, {expr}) Number bitwise AND
+ append( {lnum}, {string}) Number append {string} below line {lnum}
+ append( {lnum}, {list}) Number append lines {list} below line {lnum}
+ argc() Number number of files in the argument list
+***************
+*** 1817,1822 ****
+--- 1827,1833 ----
+ inputsave() Number save and clear typeahead
+ inputsecret( {prompt} [, {text}]) String like input() but hiding the text
+ insert( {list}, {item} [, {idx}]) List insert {item} in {list} [before {idx}]
++ invert( {expr}) Number bitwise invert
+ isdirectory( {directory}) Number TRUE if {directory} is a directory
+ islocked( {expr}) Number TRUE if {expr} is locked
+ items( {dict}) List key-value pairs in {dict}
+***************
+*** 1856,1861 ****
+--- 1868,1874 ----
+ mzeval( {expr}) any evaluate |MzScheme| expression
+ nextnonblank( {lnum}) Number line nr of non-blank line >= {lnum}
+ nr2char( {expr}) String single char with ASCII value {expr}
++ or( {expr}, {expr}) Number bitwise OR
+ pathshorten( {expr}) String shorten directory names in a path
+ pow( {x}, {y}) Float {x} to the power of {y}
+ prevnonblank( {lnum}) Number line nr of non-blank line <= {lnum}
+***************
+*** 1978,1983 ****
+--- 1992,1998 ----
+ winwidth( {nr}) Number width of window {nr}
+ writefile( {list}, {fname} [, {binary}])
+ Number write list of lines to file {fname}
++ xor( {expr}, {expr}) Number bitwise XOR
+
+ abs({expr}) *abs()*
+ Return the absolute value of {expr}. When {expr} evaluates to
+***************
+*** 2017,2022 ****
+--- 2032,2044 ----
+ Use |insert()| to add an item at another position.
+
+
++ and({expr}, {expr}) *and()*
++ Bitwise AND on the two arguments. The arguments are converted
++ to a number. A List, Dict or Float argument causes an error.
++ Example: >
++ :let flag = and(bits, 0x80)
++
++
+ append({lnum}, {expr}) *append()*
+ When {expr} is a |List|: Append each item of the |List| as a
+ text line below line {lnum} in the current buffer.
+***************
+*** 3770,3775 ****
+--- 3798,3808 ----
+ Note that when {item} is a |List| it is inserted as a single
+ item. Use |extend()| to concatenate |Lists|.
+
++ invert({expr}) *invert()*
++ Bitwise invert. The argument is converted to a number. A
++ List, Dict or Float argument causes an error. Example: >
++ :let bits = invert(bits)
++
+ isdirectory({directory}) *isdirectory()*
+ The result is a Number, which is non-zero when a directory
+ with the name {directory} exists. If {directory} doesn't
+***************
+*** 4334,4339 ****
+--- 4368,4380 ----
+ call setpos('.', save_cursor)
+ < Also see |setpos()|.
+
++ or({expr}, {expr}) *or()*
++ Bitwise OR on the two arguments. The arguments are converted
++ to a number. A List, Dict or Float argument causes an error.
++ Example: >
++ :let bits = or(bits, 0x80)
++
++
+ pathshorten({expr}) *pathshorten()*
+ Shorten directory names in the path {expr} and return the
+ result. The tail, the file name, is kept as-is. The other
+***************
+*** 6097,6103 ****
+ To copy a file byte for byte: >
+ :let fl = readfile("foo", "b")
+ :call writefile(fl, "foocopy", "b")
+! <
+
+ *feature-list*
+ There are three types of features:
+--- 6149,6163 ----
+ To copy a file byte for byte: >
+ :let fl = readfile("foo", "b")
+ :call writefile(fl, "foocopy", "b")
+!
+!
+! xor({expr}, {expr}) *xor()*
+! Bitwise XOR on the two arguments. The arguments are converted
+! to a number. A List, Dict or Float argument causes an error.
+! Example: >
+! :let bits = xor(bits, 0x80)
+!
+!
+
+ *feature-list*
+ There are three types of features:
+*** ../vim-7.3.376/src/version.c 2011-12-14 15:23:53.000000000 +0100
+--- src/version.c 2011-12-14 15:28:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 377,
+ /**/
+
+--
+DINGO: Wicked wicked Zoot ... she is a bad person and she must pay the
+ penalty. And here in Castle Anthrax, we have but one punishment
+ ... you must tie her down on a bed ... and spank her. Come!
+GIRLS: A spanking! A spanking!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.378
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.378
+Problem: When cross-compiling the check for uint32_t fails.
+Solution: Only give a warning message. (Maksim Melnikau)
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.377/src/configure.in 2011-12-08 15:17:28.000000000 +0100
+--- src/configure.in 2011-12-14 19:18:36.000000000 +0100
+***************
+*** 3283,3289 ****
+ }],
+ AC_MSG_RESULT(ok),
+ AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
+! AC_MSG_ERROR([could not compile program using uint32_t.]))
+
+ dnl Check for memmove() before bcopy(), makes memmove() be used when both are
+ dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
+--- 3283,3289 ----
+ }],
+ AC_MSG_RESULT(ok),
+ AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
+! AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
+
+ dnl Check for memmove() before bcopy(), makes memmove() be used when both are
+ dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
+*** ../vim-7.3.377/src/auto/configure 2011-12-08 15:17:28.000000000 +0100
+--- src/auto/configure 2011-12-14 19:20:55.000000000 +0100
+***************
+*** 11777,11783 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
+ $as_echo_n "checking uint32_t is 32 bits... " >&6; }
+ if test "$cross_compiling" = yes; then :
+! as_fn_error "could not compile program using uint32_t." "$LINENO" 5
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+--- 11777,11784 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
+ $as_echo_n "checking uint32_t is 32 bits... " >&6; }
+ if test "$cross_compiling" = yes; then :
+! { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check uint32_t when cross-compiling." >&5
+! $as_echo "$as_me: WARNING: cannot check uint32_t when cross-compiling." >&2;}
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+*** ../vim-7.3.377/src/version.c 2011-12-14 15:32:44.000000000 +0100
+--- src/version.c 2011-12-14 19:21:08.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 378,
+ /**/
+
+--
+ ### Hiroshima 45, Chernobyl 86, Windows 95 ###
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.379
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.379
+Problem: C-indenting wrong for static enum.
+Solution: Skip over "static". (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.378/src/misc1.c 2011-11-30 17:20:18.000000000 +0100
+--- src/misc1.c 2011-12-14 19:37:48.000000000 +0100
+***************
+*** 5138,5143 ****
+--- 5138,5146 ----
+ if (STRNCMP(s, "typedef", 7) == 0 && !vim_isIDc(s[7]))
+ s = cin_skipcomment(s + 7);
+
++ if (STRNCMP(s, "static", 6) == 0 && !vim_isIDc(s[6]))
++ s = cin_skipcomment(s + 6);
++
+ if (STRNCMP(s, "enum", 4) == 0 && !vim_isIDc(s[4]))
+ return TRUE;
+
+*** ../vim-7.3.378/src/testdir/test3.in 2011-11-30 17:20:18.000000000 +0100
+--- src/testdir/test3.in 2011-12-14 20:03:11.000000000 +0100
+***************
+*** 299,316 ****
+
+ enum soppie
+ {
+! yes = 0,
+! no,
+! maybe
+ };
+
+ typedef enum soppie
+ {
+! yes = 0,
+! no,
+! maybe
+ };
+
+ {
+ int a,
+ b;
+--- 299,323 ----
+
+ enum soppie
+ {
+! yes = 0,
+! no,
+! maybe
+ };
+
+ typedef enum soppie
+ {
+! yes = 0,
+! no,
+! maybe
+ };
+
++ static enum
++ {
++ yes = 0,
++ no,
++ maybe
++ } soppie;
++
+ {
+ int a,
+ b;
+*** ../vim-7.3.378/src/testdir/test3.ok 2011-11-30 17:20:18.000000000 +0100
+--- src/testdir/test3.ok 2011-12-14 19:37:48.000000000 +0100
+***************
+*** 299,304 ****
+--- 299,311 ----
+ maybe
+ };
+
++ static enum
++ {
++ yes = 0,
++ no,
++ maybe
++ } soppie;
++
+ {
+ int a,
+ b;
+*** ../vim-7.3.378/src/version.c 2011-12-14 19:22:29.000000000 +0100
+--- src/version.c 2011-12-14 20:02:19.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 379,
+ /**/
+
+--
+You cannot propel yourself forward by patting yourself on the back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.380
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.380
+Problem: C-indenting wrong for a function header.
+Solution: Skip to the start paren. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.379/src/misc1.c 2011-12-14 20:05:17.000000000 +0100
+--- src/misc1.c 2011-12-14 20:16:43.000000000 +0100
+***************
+*** 4943,4949 ****
+ static int cin_islinecomment __ARGS((char_u *));
+ static int cin_isterminated __ARGS((char_u *, int, int));
+ static int cin_isinit __ARGS((void));
+! static int cin_isfuncdecl __ARGS((char_u **, linenr_T));
+ static int cin_isif __ARGS((char_u *));
+ static int cin_iselse __ARGS((char_u *));
+ static int cin_isdo __ARGS((char_u *));
+--- 4943,4949 ----
+ static int cin_islinecomment __ARGS((char_u *));
+ static int cin_isterminated __ARGS((char_u *, int, int));
+ static int cin_isinit __ARGS((void));
+! static int cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T, int, int));
+ static int cin_isif __ARGS((char_u *));
+ static int cin_iselse __ARGS((char_u *));
+ static int cin_isdo __ARGS((char_u *));
+***************
+*** 5585,5605 ****
+ * "sp" points to a string with the line. When looking at other lines it must
+ * be restored to the line. When it's NULL fetch lines here.
+ * "lnum" is where we start looking.
+ */
+ static int
+! cin_isfuncdecl(sp, first_lnum)
+ char_u **sp;
+ linenr_T first_lnum;
+ {
+ char_u *s;
+ linenr_T lnum = first_lnum;
+ int retval = FALSE;
+
+ if (sp == NULL)
+ s = ml_get(lnum);
+ else
+ s = *sp;
+
+ /* Ignore line starting with #. */
+ if (cin_ispreproc(s))
+ return FALSE;
+--- 5585,5621 ----
+ * "sp" points to a string with the line. When looking at other lines it must
+ * be restored to the line. When it's NULL fetch lines here.
+ * "lnum" is where we start looking.
++ * "min_lnum" is the line before which we will not be looking.
+ */
+ static int
+! cin_isfuncdecl(sp, first_lnum, min_lnum, ind_maxparen, ind_maxcomment)
+ char_u **sp;
+ linenr_T first_lnum;
++ linenr_T min_lnum;
++ int ind_maxparen;
++ int ind_maxcomment;
+ {
+ char_u *s;
+ linenr_T lnum = first_lnum;
+ int retval = FALSE;
++ pos_T *trypos;
++ int just_started = TRUE;
+
+ if (sp == NULL)
+ s = ml_get(lnum);
+ else
+ s = *sp;
+
++ if (find_last_paren(s, '(', ')')
++ && (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL)
++ {
++ lnum = trypos->lnum;
++ if (lnum < min_lnum)
++ return FALSE;
++
++ s = ml_get(lnum);
++ }
++
+ /* Ignore line starting with #. */
+ if (cin_ispreproc(s))
+ return FALSE;
+***************
+*** 5650,5662 ****
+ /* Require a comma at end of the line or a comma or ')' at the
+ * start of next line. */
+ s = skipwhite(s);
+! if (!comma && *s != ',' && *s != ')')
+ break;
+ }
+ else if (cin_iscomment(s)) /* ignore comments */
+ s = cin_skipcomment(s);
+ else
+ ++s;
+ }
+
+ done:
+--- 5666,5682 ----
+ /* Require a comma at end of the line or a comma or ')' at the
+ * start of next line. */
+ s = skipwhite(s);
+! if (!just_started && (!comma && *s != ',' && *s != ')'))
+ break;
++ just_started = FALSE;
+ }
+ else if (cin_iscomment(s)) /* ignore comments */
+ s = cin_skipcomment(s);
+ else
++ {
+ ++s;
++ just_started = FALSE;
++ }
+ }
+
+ done:
+***************
+*** 7158,7164 ****
+ * (it's a variable declaration).
+ */
+ if (start_brace != BRACE_IN_COL0
+! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+ {
+ /* if the line is terminated with another ','
+ * it is a continued variable initialization.
+--- 7178,7185 ----
+ * (it's a variable declaration).
+ */
+ if (start_brace != BRACE_IN_COL0
+! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum,
+! 0, ind_maxparen, ind_maxcomment))
+ {
+ /* if the line is terminated with another ','
+ * it is a continued variable initialization.
+***************
+*** 8019,8025 ****
+ && vim_strchr(theline, '}') == NULL
+ && !cin_ends_in(theline, (char_u *)":", NULL)
+ && !cin_ends_in(theline, (char_u *)",", NULL)
+! && cin_isfuncdecl(NULL, cur_curpos.lnum + 1)
+ && !cin_isterminated(theline, FALSE, TRUE))
+ {
+ amount = ind_func_type;
+--- 8040,8048 ----
+ && vim_strchr(theline, '}') == NULL
+ && !cin_ends_in(theline, (char_u *)":", NULL)
+ && !cin_ends_in(theline, (char_u *)",", NULL)
+! && cin_isfuncdecl(NULL, cur_curpos.lnum + 1,
+! cur_curpos.lnum + 1,
+! ind_maxparen, ind_maxcomment)
+ && !cin_isterminated(theline, FALSE, TRUE))
+ {
+ amount = ind_func_type;
+***************
+*** 8125,8131 ****
+ * If the line looks like a function declaration, and we're
+ * not in a comment, put it the left margin.
+ */
+! if (cin_isfuncdecl(NULL, cur_curpos.lnum)) /* XXX */
+ break;
+ l = ml_get_curline();
+
+--- 8148,8155 ----
+ * If the line looks like a function declaration, and we're
+ * not in a comment, put it the left margin.
+ */
+! if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0,
+! ind_maxparen, ind_maxcomment)) /* XXX */
+ break;
+ l = ml_get_curline();
+
+***************
+*** 8173,8179 ****
+ * line (and the ones that follow) needs to be indented as
+ * parameters.
+ */
+! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+ {
+ amount = ind_param;
+ break;
+--- 8197,8204 ----
+ * line (and the ones that follow) needs to be indented as
+ * parameters.
+ */
+! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0,
+! ind_maxparen, ind_maxcomment))
+ {
+ amount = ind_param;
+ break;
+*** ../vim-7.3.379/src/testdir/test3.in 2011-12-14 20:05:17.000000000 +0100
+--- src/testdir/test3.in 2011-12-14 20:11:24.000000000 +0100
+***************
+*** 1429,1435 ****
+
+ STARTTEST
+ :set cino&
+! 2kdd=4][
+ ENDTEST
+
+ void func(void)
+--- 1429,1435 ----
+
+ STARTTEST
+ :set cino&
+! 2kdd=7][
+ ENDTEST
+
+ void func(void)
+***************
+*** 1478,1484 ****
+ 3, 4,
+ 5, 6};
+
+! printf("Don't you dare indent this line incorrectly!\n);
+ }
+
+ STARTTEST
+--- 1478,1506 ----
+ 3, 4,
+ 5, 6};
+
+! printf("Don't you dare indent this line incorrectly!\n");
+! }
+!
+! void
+! func4(a, b,
+! c)
+! int a;
+! int b;
+! int c;
+! {
+! }
+!
+! void
+! func5(
+! int a,
+! int b)
+! {
+! }
+!
+! void
+! func6(
+! int a)
+! {
+ }
+
+ STARTTEST
+*** ../vim-7.3.379/src/testdir/test3.ok 2011-12-14 20:05:17.000000000 +0100
+--- src/testdir/test3.ok 2011-12-14 20:11:24.000000000 +0100
+***************
+*** 1331,1337 ****
+ 3, 4,
+ 5, 6};
+
+! printf("Don't you dare indent this line incorrectly!\n);
+ }
+
+
+--- 1331,1359 ----
+ 3, 4,
+ 5, 6};
+
+! printf("Don't you dare indent this line incorrectly!\n");
+! }
+!
+! void
+! func4(a, b,
+! c)
+! int a;
+! int b;
+! int c;
+! {
+! }
+!
+! void
+! func5(
+! int a,
+! int b)
+! {
+! }
+!
+! void
+! func6(
+! int a)
+! {
+ }
+
+
+*** ../vim-7.3.379/src/version.c 2011-12-14 20:05:17.000000000 +0100
+--- src/version.c 2011-12-14 20:20:50.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 380,
+ /**/
+
+--
+"Intelligence has much less practical application than you'd think."
+ -- Scott Adams, Dilbert.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.381
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.381
+Problem: Configure silently skips interfaces that won't work.
+Solution: Add the --enable-fail_if_missing argument. (Shlomi Fish)
+Files: src/Makefile, src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.380/src/Makefile 2011-12-08 15:17:28.000000000 +0100
+--- src/Makefile 2011-12-14 20:49:26.000000000 +0100
+***************
+*** 389,394 ****
+--- 389,399 ----
+ #CONF_OPT_PLTHOME = --with-plthome=/usr/local/drscheme
+ #CONF_OPT_PLTHOME = --with-plthome=/home/me/mz
+
++ # Uncomment the next line to fail if one of the requested language interfaces
++ # cannot be configured. Without this Vim will be build anyway, without
++ # the failing interfaces.
++ #CONF_OPT_FAIL = --enable-fail-if-missing
++
+ # PERL
+ # Uncomment one of these when you want to include the Perl interface.
+ # First one is for static linking, second one for dynamic loading.
+***************
+*** 1648,1654 ****
+ CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+ LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+ ./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
+! $(CONF_OPT_DARWIN) $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
+ $(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
+ $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
+ $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
+--- 1653,1660 ----
+ CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+ LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+ ./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
+! $(CONF_OPT_DARWIN) $(CONF_OPT_FAIL) \
+! $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
+ $(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
+ $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
+ $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
+*** ../vim-7.3.380/src/configure.in 2011-12-14 19:22:29.000000000 +0100
+--- src/configure.in 2011-12-14 20:46:36.000000000 +0100
+***************
+*** 28,33 ****
+--- 28,43 ----
+ AC_HEADER_STDC
+ AC_HEADER_SYS_WAIT
+
++ dnl Check for the flag that fails if stuff are missing.
++
++ AC_MSG_CHECKING(--enable-fail-if-missing argument)
++ AC_ARG_ENABLE(fail_if_missing,
++ [ --enable-fail-if-missing Fail if dependencies on additional features
++ specified on the command line are missing.],
++ [fail_if_missing="yes"],
++ [fail_if_missing="no"])
++ AC_MSG_RESULT($fail_if_missing)
++
+ dnl Set default value for CFLAGS if none is defined or it's empty
+ if test -z "$CFLAGS"; then
+ CFLAGS="-O"
+***************
+*** 491,496 ****
+--- 501,509 ----
+ LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+ fi
+ fi
++ if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
++ AC_MSG_ERROR([could not configure lua])
++ fi
+ AC_SUBST(LUA_SRC)
+ AC_SUBST(LUA_OBJ)
+ AC_SUBST(LUA_PRO)
+***************
+*** 781,786 ****
+--- 794,803 ----
+ PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
++ AC_MSG_ERROR([could not configure perl])
++ fi
+ fi
+ AC_SUBST(shrpenv)
+ AC_SUBST(PERL_SRC)
+***************
+*** 966,971 ****
+--- 983,992 ----
+ AC_MSG_RESULT(too old)
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
++ AC_MSG_ERROR([could not configure python])
++ fi
+ fi
+
+ AC_SUBST(PYTHON_CONFDIR)
+***************
+*** 1389,1394 ****
+--- 1410,1418 ----
+ AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
+ fi
+ fi
++ if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
++ AC_MSG_ERROR([could not configure Tcl])
++ fi
+ fi
+ AC_SUBST(TCL_SRC)
+ AC_SUBST(TCL_OBJ)
+***************
+*** 1469,1474 ****
+--- 1493,1502 ----
+ AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
++ AC_MSG_ERROR([could not configure Ruby])
++ fi
+ fi
+ AC_SUBST(RUBY_SRC)
+ AC_SUBST(RUBY_OBJ)
+*** ../vim-7.3.380/src/auto/configure 2011-12-14 19:22:29.000000000 +0100
+--- src/auto/configure 2011-12-14 20:49:51.000000000 +0100
+***************
+*** 741,746 ****
+--- 741,747 ----
+ ac_subst_files=''
+ ac_user_opts='
+ enable_option_checking
++ enable_fail_if_missing
+ enable_darwin
+ with_mac_arch
+ with_developer_dir
+***************
+*** 1418,1423 ****
+--- 1419,1426 ----
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
++ --enable-fail-if-missing Fail if dependencies on additional features
++ specified on the command line are missing.
+ --disable-darwin Disable Darwin (Mac OS X) support.
+ --disable-selinux Don't check for SELinux support.
+ --disable-xsmp Disable XSMP session management
+***************
+*** 3949,3954 ****
+--- 3952,3970 ----
+ 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; }
++ # Check whether --enable-fail_if_missing was given.
++ if test "${enable_fail_if_missing+set}" = set; then :
++ enableval=$enable_fail_if_missing; fail_if_missing="yes"
++ else
++ fail_if_missing="no"
++ fi
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $fail_if_missing" >&5
++ $as_echo "$fail_if_missing" >&6; }
++
+ if test -z "$CFLAGS"; then
+ CFLAGS="-O"
+ test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
+***************
+*** 4727,4732 ****
+--- 4743,4751 ----
+ LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+ fi
+ fi
++ if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
++ as_fn_error "could not configure lua" "$LINENO" 5
++ fi
+
+
+
+***************
+*** 5140,5145 ****
+--- 5159,5168 ----
+ PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
++ as_fn_error "could not configure perl" "$LINENO" 5
++ fi
+ fi
+
+
+***************
+*** 5429,5434 ****
+--- 5452,5461 ----
+ $as_echo "too old" >&6; }
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
++ as_fn_error "could not configure python" "$LINENO" 5
++ fi
+ fi
+
+
+***************
+*** 6216,6221 ****
+--- 6243,6251 ----
+ $as_echo "too old; need Tcl version 8.0 or later" >&6; }
+ fi
+ fi
++ if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
++ as_fn_error "could not configure Tcl" "$LINENO" 5
++ fi
+ fi
+
+
+***************
+*** 6353,6358 ****
+--- 6383,6392 ----
+ $as_echo "too old; need Ruby version 1.6.0 or later" >&6; }
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
++ as_fn_error "could not configure Ruby" "$LINENO" 5
++ fi
+ fi
+
+
+*** ../vim-7.3.380/src/version.c 2011-12-14 20:21:29.000000000 +0100
+--- src/version.c 2011-12-14 20:50:42.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 381,
+ /**/
+
+--
+The psychic said, "God bless you." I said, "I didn't sneeze." She
+looked deep into my eyes and said, "You will, eventually." And, damn
+if she wasn't right. Two days later, I sneezed. --Ellen Degeneres
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.382
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.382 (after 7.3.376)
+Problem: IME characters are inserted twice.
+Solution: Do not call DefWindowProc() if the event was handled. (Yasuhiro
+ Matsumoto)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.381/src/gui_w32.c 2011-12-14 15:23:53.000000000 +0100
+--- src/gui_w32.c 2011-12-15 21:50:51.000000000 +0100
+***************
+*** 798,804 ****
+ if (pt.y < rect.top)
+ {
+ show_tabline_popup_menu();
+! return 0;
+ }
+ }
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+--- 798,804 ----
+ if (pt.y < rect.top)
+ {
+ show_tabline_popup_menu();
+! return 0L;
+ }
+ }
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+***************
+*** 828,834 ****
+--- 828,837 ----
+
+ case WM_ENDSESSION:
+ if (wParam) /* system only really goes down when wParam is TRUE */
++ {
+ _OnEndSession();
++ return 0L;
++ }
+ break;
+
+ case WM_CHAR:
+***************
+*** 866,872 ****
+ * are received, mouse pointer remains hidden. */
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ #else
+! return 0;
+ #endif
+
+ case WM_SIZING: /* HANDLE_MSG doesn't seem to handle this one */
+--- 869,875 ----
+ * are received, mouse pointer remains hidden. */
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ #else
+! return 0L;
+ #endif
+
+ case WM_SIZING: /* HANDLE_MSG doesn't seem to handle this one */
+***************
+*** 874,880 ****
+
+ case WM_MOUSEWHEEL:
+ _OnMouseWheel(hwnd, HIWORD(wParam));
+! break;
+
+ /* Notification for change in SystemParametersInfo() */
+ case WM_SETTINGCHANGE:
+--- 877,883 ----
+
+ case WM_MOUSEWHEEL:
+ _OnMouseWheel(hwnd, HIWORD(wParam));
+! return 0L;
+
+ /* Notification for change in SystemParametersInfo() */
+ case WM_SETTINGCHANGE:
+***************
+*** 987,999 ****
+--- 990,1008 ----
+ case TCN_SELCHANGE:
+ if (gui_mch_showing_tabline()
+ && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
++ {
+ send_tabline_event(TabCtrl_GetCurSel(s_tabhwnd) + 1);
++ return 0L;
++ }
+ break;
+
+ case NM_RCLICK:
+ if (gui_mch_showing_tabline()
+ && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
++ {
+ show_tabline_popup_menu();
++ return 0L;
++ }
+ break;
+ # endif
+ default:
+***************
+*** 1037,1042 ****
+--- 1046,1052 ----
+ out_flush();
+ did_menu_tip = TRUE;
+ }
++ return 0L;
+ }
+ break;
+ #endif
+***************
+*** 1079,1096 ****
+ case WM_IME_NOTIFY:
+ if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+! break;
+ case WM_IME_COMPOSITION:
+ if (!_OnImeComposition(hwnd, wParam, lParam))
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+! break;
+ #endif
+
+ default:
+ if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0)
+ { /* handle MSH_MOUSEWHEEL messages for Intellimouse */
+ _OnMouseWheel(hwnd, HIWORD(wParam));
+! break;
+ }
+ #ifdef MSWIN_FIND_REPLACE
+ else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
+--- 1089,1107 ----
+ case WM_IME_NOTIFY:
+ if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+! return 1L;
+!
+ case WM_IME_COMPOSITION:
+ if (!_OnImeComposition(hwnd, wParam, lParam))
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+! return 1L;
+ #endif
+
+ default:
+ if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0)
+ { /* handle MSH_MOUSEWHEEL messages for Intellimouse */
+ _OnMouseWheel(hwnd, HIWORD(wParam));
+! return 0L;
+ }
+ #ifdef MSWIN_FIND_REPLACE
+ else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
+*** ../vim-7.3.381/src/version.c 2011-12-14 20:51:19.000000000 +0100
+--- src/version.c 2011-12-15 21:48:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 382,
+ /**/
+
+--
+Even got a Datapoint 3600(?) with a DD50 connector instead of the
+usual DB25... what a nightmare trying to figure out the pinout
+for *that* with no spex...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.383
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.383
+Problem: For EBCDIC pound sign is defined as 't'.
+Solution: Correctly define POUND.
+Files: src/ascii.h
+
+
+*** ../vim-7.3.382/src/ascii.h 2011-09-02 14:18:14.000000000 +0200
+--- src/ascii.h 2011-12-17 21:38:36.000000000 +0100
+***************
+*** 123,129 ****
+ #define DCS 0x90 /* Device Control String */
+ #define STERM 0x9c /* String Terminator */
+
+! #define POUND '\xA3'
+
+ #define CTRL_F_STR "\056"
+ #define CTRL_H_STR "\026"
+--- 123,129 ----
+ #define DCS 0x90 /* Device Control String */
+ #define STERM 0x9c /* String Terminator */
+
+! #define POUND 0xB1
+
+ #define CTRL_F_STR "\056"
+ #define CTRL_H_STR "\026"
+*** ../vim-7.3.382/src/version.c 2011-12-15 21:51:32.000000000 +0100
+--- src/version.c 2011-12-23 12:46:08.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 383,
+ /**/
+
+--
+Vim is like Emacs without all the typing. (John "Johann" Spetz)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.384
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.384
+Problem: Mapping CTRL-K in Insert mode breaks CTRL-X CTRL-K for dictionary
+ completion.
+Solution: Add CTRL-K to the list of recognized keys. (James McCoy)
+Files: src/edit.c
+
+
+*** ../vim-7.3.383/src/edit.c 2011-10-26 17:04:23.000000000 +0200
+--- src/edit.c 2011-12-23 12:36:22.000000000 +0100
+***************
+*** 2183,2189 ****
+ || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
+ || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
+ || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
+! || c == Ctrl_S || c == 's');
+ case CTRL_X_SCROLL:
+ return (c == Ctrl_Y || c == Ctrl_E);
+ case CTRL_X_WHOLE_LINE:
+--- 2183,2189 ----
+ || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
+ || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
+ || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
+! || c == Ctrl_S || c == Ctrl_K || c == 's');
+ case CTRL_X_SCROLL:
+ return (c == Ctrl_Y || c == Ctrl_E);
+ case CTRL_X_WHOLE_LINE:
+*** ../vim-7.3.383/src/version.c 2011-12-23 12:46:56.000000000 +0100
+--- src/version.c 2011-12-23 12:53:38.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 384,
+ /**/
+
+--
+Q: Is selling software the same as selling hardware?
+A: No, good hardware is sold new, good software has already been used by many.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.385
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.385
+Problem: When using an expression mapping on the command line the cursor
+ ends up in the wrong place. (Yasuhiro Matsumoto)
+Solution: Save and restore msg_col and msg_row when evaluating the
+ expression.
+Files: src/getchar.
+
+
+*** ../vim-7.3.384/src/getchar.c 2011-10-12 22:02:07.000000000 +0200
+--- src/getchar.c 2011-12-14 18:37:52.000000000 +0100
+***************
+*** 4510,4515 ****
+--- 4510,4517 ----
+ char_u *expr;
+ char_u *save_cmd;
+ pos_T save_cursor;
++ int save_msg_col;
++ int save_msg_row;
+
+ /* Remove escaping of CSI, because "str" is in a format to be used as
+ * typeahead. */
+***************
+*** 4533,4544 ****
+--- 4535,4550 ----
+ #endif
+ set_vim_var_char(c); /* set v:char to the typed character */
+ save_cursor = curwin->w_cursor;
++ save_msg_col = msg_col;
++ save_msg_row = msg_row;
+ p = eval_to_string(expr, NULL, FALSE);
+ --textlock;
+ #ifdef FEAT_EX_EXTRA
+ --ex_normal_lock;
+ #endif
+ curwin->w_cursor = save_cursor;
++ msg_col = save_msg_col;
++ msg_row = save_msg_row;
+
+ restore_cmdline_alloc(save_cmd);
+ vim_free(expr);
+*** ../vim-7.3.384/src/version.c 2011-12-23 13:14:58.000000000 +0100
+--- src/version.c 2011-12-23 14:53:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 385,
+ /**/
+
+--
+`When any government, or any church for that matter, undertakes to say to
+ its subjects, "This you may not read, this you must not see, this you are
+ forbidden to know," the end result is tyranny and oppression no matter how
+ holy the motives' -- Robert A Heinlein, "If this goes on --"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.386
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.386
+Problem: Test 83 fails when iconv does not support cp932. (raf)
+Solution: Test if conversion works. (Yukihiro Nakadaira)
+Files: src/testdir/test83.in
+
+
+*** ../vim-7.3.385/src/testdir/test83.in 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/test83.in 2011-12-21 21:01:44.000000000 +0100
+***************
+*** 2,8 ****
+
+ STARTTEST
+ :so mbyte.vim
+! :if !has('iconv')
+ : e! test.ok
+ : w! test.out
+ : qa!
+--- 2,8 ----
+
+ STARTTEST
+ :so mbyte.vim
+! :if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
+ : e! test.ok
+ : w! test.out
+ : qa!
+*** ../vim-7.3.385/src/version.c 2011-12-23 14:54:01.000000000 +0100
+--- src/version.c 2011-12-23 14:55:38.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 386,
+ /**/
+
+--
+WOMAN: King of the who?
+ARTHUR: The Britons.
+WOMAN: Who are the Britons?
+ARTHUR: Well, we all are. we're all Britons and I am your king.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.387
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.387 (after 7.3.386)
+Problem: Test 83 may fail for some encodings.
+Solution: Set 'encoding' to utf-8 earlier.
+Files: src/testdir/test83.in
+
+
+*** ../vim-7.3.386/src/testdir/test83.in 2011-12-23 14:56:24.000000000 +0100
+--- src/testdir/test83.in 2011-12-30 13:05:05.000000000 +0100
+***************
+*** 2,13 ****
+
+ STARTTEST
+ :so mbyte.vim
+ :if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
+ : e! test.ok
+ : w! test.out
+ : qa!
+ :endif
+- :set enc=utf8
+
+ :/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
+ :/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
+--- 2,13 ----
+
+ STARTTEST
+ :so mbyte.vim
++ :set enc=utf8
+ :if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
+ : e! test.ok
+ : w! test.out
+ : qa!
+ :endif
+
+ :/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
+ :/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
+*** ../vim-7.3.386/src/version.c 2011-12-23 14:56:24.000000000 +0100
+--- src/version.c 2011-12-30 13:06:17.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 387,
+ /**/
+
+--
+Mental Floss prevents moral decay!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.388
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.388
+Problem: Crash on exit when EXITFREE is defined and using tiny features.
+Solution: Check for NULL window pointer. (Dominique Pelle)
+Files: src/buffer.c
+
+
+*** ../vim-7.3.387/src/buffer.c 2011-11-30 15:40:51.000000000 +0100
+--- src/buffer.c 2011-12-30 13:35:26.000000000 +0100
+***************
+*** 419,424 ****
+--- 419,426 ----
+ if (
+ #ifdef FEAT_WINDOWS
+ win_valid(win) &&
++ #else
++ win != NULL &&
+ #endif
+ win->w_buffer == buf)
+ win->w_buffer = NULL; /* make sure we don't use the buffer now */
+*** ../vim-7.3.387/src/version.c 2011-12-30 13:09:15.000000000 +0100
+--- src/version.c 2011-12-30 13:37:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 388,
+ /**/
+
+--
+Be nice to your kids... they'll be the ones choosing your nursing home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.389
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.389
+Problem: After typing at a prompt the "MORE" message appears too soon.
+Solution: reset lines_left in msg_end_prompt(). (Eswald)
+Files: src/message.c
+
+
+*** ../vim-7.3.388/src/message.c 2011-09-14 15:39:26.000000000 +0200
+--- src/message.c 2011-12-30 14:08:05.000000000 +0100
+***************
+*** 85,91 ****
+ * need_wait_return to be set. This is a hack to make ":ts"
+ * work without an extra prompt.
+ * lines_left Number of lines available for messages before the
+! * more-prompt is to be given.
+ * need_wait_return TRUE when the hit-return prompt is needed.
+ * Reset: After giving the hit-return prompt, when the user
+ * has answered some other prompt.
+--- 85,91 ----
+ * need_wait_return to be set. This is a hack to make ":ts"
+ * work without an extra prompt.
+ * lines_left Number of lines available for messages before the
+! * more-prompt is to be given. -1 when not set.
+ * need_wait_return TRUE when the hit-return prompt is needed.
+ * Reset: After giving the hit-return prompt, when the user
+ * has answered some other prompt.
+***************
+*** 855,860 ****
+--- 855,861 ----
+ cmdline_row = msg_row;
+ msg_col = 0;
+ msg_clr_eos();
++ lines_left = -1;
+ }
+ #endif
+
+*** ../vim-7.3.388/src/version.c 2011-12-30 13:39:04.000000000 +0100
+--- src/version.c 2011-12-30 14:11:00.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 389,
+ /**/
+
+--
+Proofread carefully to see if you any words out.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.390
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.390
+Problem: Using NULL buffer pointer in a window.
+Solution: Check for w_buffer being NULL in more places. (Bjorn Winckler)
+Files: src/ex_cmds.c, src/quickfix.c, src/window.c
+
+
+*** ../vim-7.3.389/src/ex_cmds.c 2011-11-30 17:01:55.000000000 +0100
+--- src/ex_cmds.c 2011-12-30 14:59:57.000000000 +0100
+***************
+*** 3390,3395 ****
+--- 3390,3402 ----
+ (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
+
+ #ifdef FEAT_AUTOCMD
++ /* Autocommands may open a new window and leave oldwin open
++ * which leads to crashes since the above call sets
++ * oldwin->w_buffer to NULL. */
++ if (curwin != oldwin && oldwin != aucmd_win
++ && win_valid(oldwin) && oldwin->w_buffer == NULL)
++ win_close(oldwin, FALSE);
++
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+ {
+*** ../vim-7.3.389/src/quickfix.c 2011-08-10 18:36:49.000000000 +0200
+--- src/quickfix.c 2011-12-30 14:45:19.000000000 +0100
+***************
+*** 2675,2681 ****
+ bt_quickfix(buf)
+ buf_T *buf;
+ {
+! return (buf->b_p_bt[0] == 'q');
+ }
+
+ /*
+--- 2675,2681 ----
+ bt_quickfix(buf)
+ buf_T *buf;
+ {
+! return buf != NULL && buf->b_p_bt[0] == 'q';
+ }
+
+ /*
+***************
+*** 2686,2693 ****
+ bt_nofile(buf)
+ buf_T *buf;
+ {
+! return (buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+! || buf->b_p_bt[0] == 'a';
+ }
+
+ /*
+--- 2686,2693 ----
+ bt_nofile(buf)
+ buf_T *buf;
+ {
+! return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+! || buf->b_p_bt[0] == 'a');
+ }
+
+ /*
+***************
+*** 2697,2703 ****
+ bt_dontwrite(buf)
+ buf_T *buf;
+ {
+! return (buf->b_p_bt[0] == 'n');
+ }
+
+ int
+--- 2697,2703 ----
+ bt_dontwrite(buf)
+ buf_T *buf;
+ {
+! return buf != NULL && buf->b_p_bt[0] == 'n';
+ }
+
+ int
+*** ../vim-7.3.389/src/window.c 2011-09-14 14:43:21.000000000 +0200
+--- src/window.c 2011-12-30 14:44:18.000000000 +0100
+***************
+*** 2170,2176 ****
+
+ /* When closing the help window, try restoring a snapshot after closing
+ * the window. Otherwise clear the snapshot, it's now invalid. */
+! if (win->w_buffer->b_help)
+ help_window = TRUE;
+ else
+ clear_snapshot(curtab, SNAP_HELP_IDX);
+--- 2170,2176 ----
+
+ /* When closing the help window, try restoring a snapshot after closing
+ * the window. Otherwise clear the snapshot, it's now invalid. */
+! if (win->w_buffer != NULL && win->w_buffer->b_help)
+ help_window = TRUE;
+ else
+ clear_snapshot(curtab, SNAP_HELP_IDX);
+***************
+*** 2214,2226 ****
+
+ #ifdef FEAT_SYN_HL
+ /* Free independent synblock before the buffer is freed. */
+! reset_synblock(win);
+ #endif
+
+ /*
+ * Close the link to the buffer.
+ */
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+--- 2214,2228 ----
+
+ #ifdef FEAT_SYN_HL
+ /* Free independent synblock before the buffer is freed. */
+! if (win->w_buffer != NULL)
+! reset_synblock(win);
+ #endif
+
+ /*
+ * Close the link to the buffer.
+ */
+! if (win->w_buffer != NULL)
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+*** ../vim-7.3.389/src/version.c 2011-12-30 14:14:16.000000000 +0100
+--- src/version.c 2011-12-30 14:38:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 390,
+ /**/
+
+--
+There can't be a crisis today, my schedule is already full.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.391
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.391
+Problem: Can't check if the XPM_W32 feature is enabled.
+Solution: Add xpm_w32 to the list of features. (kat)
+Files: src/eval.c
+
+
+*** ../vim-7.3.390/src/eval.c 2011-12-14 15:32:44.000000000 +0100
+--- src/eval.c 2012-01-04 14:33:22.000000000 +0100
+***************
+*** 12260,12265 ****
+--- 12260,12268 ----
+ #ifdef FEAT_XFONTSET
+ "xfontset",
+ #endif
++ #ifdef FEAT_XPM_W32
++ "xpm_w32",
++ #endif
+ #ifdef USE_XSMP
+ "xsmp",
+ #endif
+*** ../vim-7.3.390/src/version.c 2011-12-30 15:01:55.000000000 +0100
+--- src/version.c 2012-01-04 14:34:31.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 391,
+ /**/
+
+--
+ROBIN: The what?
+ARTHUR: The Holy Hand Grenade of Antioch. 'Tis one of the sacred relics
+ Brother Maynard always carries with him.
+ALL: Yes. Of course.
+ARTHUR: (shouting) Bring up the Holy Hand Grenade!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.392
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.392
+Problem: When setting 'undofile' while the file is already loaded but
+ unchanged, try reading the undo file. (Andy Wokula)
+Solution: Compute a checksum of the text when 'undofile' is set. (Christian
+ Brabandt)
+Files: src/option.c, src/testdir/test72.in, src/testdir/test72.ok
+
+
+*** ../vim-7.3.391/src/option.c 2011-11-30 11:31:25.000000000 +0100
+--- src/option.c 2012-01-04 19:34:11.000000000 +0100
+***************
+*** 7516,7521 ****
+--- 7516,7545 ----
+ compatible_set();
+ }
+
++ #ifdef FEAT_PERSISTENT_UNDO
++ /* 'undofile' */
++ else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf)
++ {
++ char_u hash[UNDO_HASH_SIZE];
++ buf_T *save_curbuf = curbuf;
++
++ for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
++ {
++ /* When 'undofile' is set globally: for every buffer, otherwise
++ * only for the current buffer: Try to read in the undofile, if
++ * one exists and the buffer wasn't changed. */
++ if ((curbuf == save_curbuf
++ || (opt_flags & OPT_GLOBAL) || opt_flags == 0)
++ && !curbufIsChanged())
++ {
++ u_compute_hash(hash);
++ u_read_undo(NULL, hash, curbuf->b_fname);
++ }
++ }
++ curbuf = save_curbuf;
++ }
++ #endif
++
+ /* 'list', 'number' */
+ else if ((int *)varp == &curwin->w_p_list
+ || (int *)varp == &curwin->w_p_nu
+*** ../vim-7.3.391/src/testdir/test72.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test72.in 2012-01-04 19:04:17.000000000 +0100
+***************
+*** 51,56 ****
+--- 51,62 ----
+ :e Xtestfile
+ uuu:w >>test.out
+ :"
++ :" Test that reading the undofiles when setting undofile works
++ :set noundofile ul=0
++ i
++ \eu:e! Xtestfile
++ :set undofile ul=100
++ uuuuuu:w >>test.out
+ :" And now with encryption, cryptmethod=zip
+ :e! Xtestfile
+ :set undofile cm=zip
+*** ../vim-7.3.391/src/testdir/test72.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test72.ok 2012-01-04 19:04:17.000000000 +0100
+***************
+*** 7,12 ****
+--- 7,22 ----
+ eight
+ nine
+ ten
++ one
++ two
++ three
++ four
++ five
++ six
++ seven
++ eight
++ nine
++ ten
+ monday
+ wednesday
+ thursday
+*** ../vim-7.3.391/src/version.c 2012-01-04 14:35:31.000000000 +0100
+--- src/version.c 2012-01-04 19:33:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 392,
+ /**/
+
+--
+BROTHER MAYNARD: Armaments Chapter Two Verses Nine to Twenty One.
+ANOTHER MONK: And St. Attila raised his hand grenade up on high saying "O
+ Lord bless this thy hand grenade that with it thou mayest
+ blow thine enemies to tiny bits, in thy mercy. "and the Lord
+ did grin and people did feast upon the lambs and sloths and
+ carp and anchovies and orang-utans and breakfast cereals and
+ fruit bats and...
+BROTHER MAYNARD: Skip a bit brother ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.393
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.393
+Problem: Win32: When resizing Vim it is always moved to the primary monitor
+ if the secondary monitor is on the left.
+Solution: Use the nearest monitor. (Yukihiro Nakadaira)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.392/src/gui_w32.c 2011-12-15 21:51:32.000000000 +0100
+--- src/gui_w32.c 2012-01-04 20:25:58.000000000 +0100
+***************
+*** 1661,1669 ****
+ {
+ RECT workarea_rect;
+ int win_width, win_height;
+- int win_xpos, win_ypos;
+ WINDOWPLACEMENT wndpl;
+- int workarea_left;
+
+ /* Try to keep window completely on screen. */
+ /* Get position of the screen work area. This is the part that is not
+--- 1661,1667 ----
+***************
+*** 1685,1693 ****
+ GetWindowPlacement(s_hwnd, &wndpl);
+ }
+
+- win_xpos = wndpl.rcNormalPosition.left;
+- win_ypos = wndpl.rcNormalPosition.top;
+-
+ /* compute the size of the outside of the window */
+ win_width = width + GetSystemMetrics(SM_CXFRAME) * 2;
+ win_height = height + GetSystemMetrics(SM_CYFRAME) * 2
+--- 1683,1688 ----
+***************
+*** 1697,1732 ****
+ #endif
+ ;
+
+! /* There is an inconsistency when using two monitors and Vim is on the
+! * second (right) one: win_xpos will be the offset from the workarea of
+! * the left monitor. While with one monitor it's the offset from the
+! * workarea (including a possible taskbar on the left). Detect the second
+! * monitor by checking for the left offset to be quite big. */
+! if (workarea_rect.left > 300)
+! workarea_left = 0;
+! else
+! workarea_left = workarea_rect.left;
+
+! /* If the window is going off the screen, move it on to the screen.
+! * win_xpos and win_ypos are relative to the workarea. */
+ if ((direction & RESIZE_HOR)
+! && workarea_left + win_xpos + win_width > workarea_rect.right)
+! win_xpos = workarea_rect.right - win_width - workarea_left;
+
+! if ((direction & RESIZE_HOR) && win_xpos < 0)
+! win_xpos = 0;
+
+ if ((direction & RESIZE_VERT)
+! && workarea_rect.top + win_ypos + win_height > workarea_rect.bottom)
+! win_ypos = workarea_rect.bottom - win_height - workarea_rect.top;
+
+! if ((direction & RESIZE_VERT) && win_ypos < 0)
+! win_ypos = 0;
+!
+! wndpl.rcNormalPosition.left = win_xpos;
+! wndpl.rcNormalPosition.right = win_xpos + win_width;
+! wndpl.rcNormalPosition.top = win_ypos;
+! wndpl.rcNormalPosition.bottom = win_ypos + win_height;
+
+ /* set window position - we should use SetWindowPlacement rather than
+ * SetWindowPos as the MSDN docs say the coord systems returned by
+--- 1692,1723 ----
+ #endif
+ ;
+
+! /* The following should take care of keeping Vim on the same monitor, no
+! * matter if the secondary monitor is left or right of the primary
+! * monitor. */
+! wndpl.rcNormalPosition.right = wndpl.rcNormalPosition.left + win_width;
+! wndpl.rcNormalPosition.bottom = wndpl.rcNormalPosition.top + win_height;
+
+! /* If the window is going off the screen, move it on to the screen. */
+ if ((direction & RESIZE_HOR)
+! && wndpl.rcNormalPosition.right > workarea_rect.right)
+! OffsetRect(&wndpl.rcNormalPosition,
+! workarea_rect.right - wndpl.rcNormalPosition.right, 0);
+
+! if ((direction & RESIZE_HOR)
+! && wndpl.rcNormalPosition.left < workarea_rect.left)
+! OffsetRect(&wndpl.rcNormalPosition,
+! workarea_rect.left - wndpl.rcNormalPosition.left, 0);
+
+ if ((direction & RESIZE_VERT)
+! && wndpl.rcNormalPosition.bottom > workarea_rect.bottom)
+! OffsetRect(&wndpl.rcNormalPosition,
+! 0, workarea_rect.bottom - wndpl.rcNormalPosition.bottom);
+
+! if ((direction & RESIZE_VERT)
+! && wndpl.rcNormalPosition.top < workarea_rect.top)
+! OffsetRect(&wndpl.rcNormalPosition,
+! 0, workarea_rect.top - wndpl.rcNormalPosition.top);
+
+ /* set window position - we should use SetWindowPlacement rather than
+ * SetWindowPos as the MSDN docs say the coord systems returned by
+*** ../vim-7.3.392/src/version.c 2012-01-04 19:34:32.000000000 +0100
+--- src/version.c 2012-01-04 20:28:57.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 393,
+ /**/
+
+--
+I wonder, do vegetarians eat fruit bats?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.394
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.394
+Problem: When placing a mark while starting up a screen redraw messes up
+ the screen. (lith)
+Solution: Don't redraw while still starting up. (Christian Brabandt)
+Files: src/screen.c
+
+
+*** ../vim-7.3.393/src/screen.c 2011-09-02 14:07:31.000000000 +0200
+--- src/screen.c 2012-01-10 12:36:52.000000000 +0100
+***************
+*** 764,772 ****
+ doit = TRUE;
+ }
+
+! /* Return when there is nothing to do or screen updating already
+! * happening. */
+! if (!doit || updating_screen)
+ return;
+
+ /* update all windows that need updating */
+--- 764,776 ----
+ doit = TRUE;
+ }
+
+! /* Return when there is nothing to do, screen updating is already
+! * happening (recursive call) or still starting up. */
+! if (!doit || updating_screen
+! #ifdef FEAT_GUI
+! || gui.starting
+! #endif
+! || starting)
+ return;
+
+ /* update all windows that need updating */
+*** ../vim-7.3.393/src/version.c 2012-01-04 20:29:18.000000000 +0100
+--- src/version.c 2012-01-10 12:41:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 394,
+ /**/
+
+--
+It is illegal for anyone to try and stop a child from playfully jumping over
+puddles of water.
+ [real standing law in California, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.395
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.395 (after 7.3.251)
+Problem: "dv?bar" in the last line deletes too much and breaks undo.
+Solution: Only adjust the cursor position when it's after the last line of
+ the buffer. Add a test. (Christian Brabandt)
+Files: src/ops.c, src/testdir/test43.in, src/testdir/test43.ok
+
+
+*** ../vim-7.3.394/src/ops.c 2011-09-21 17:33:49.000000000 +0200
+--- src/ops.c 2012-01-10 13:28:05.000000000 +0100
+***************
+*** 1961,1968 ****
+ /* Special case: gH<Del> deletes the last line. */
+ del_lines(1L, FALSE);
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+! if (curwin->w_cursor.lnum > 1)
+! --curwin->w_cursor.lnum;
+ }
+ else
+ {
+--- 1962,1969 ----
+ /* Special case: gH<Del> deletes the last line. */
+ del_lines(1L, FALSE);
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+! if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+! curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ }
+ else
+ {
+***************
+*** 4434,4440 ****
+ #endif
+
+ /*
+! * implementation of the format operator 'gq'
+ */
+ void
+ op_format(oap, keep_cursor)
+--- 4435,4441 ----
+ #endif
+
+ /*
+! * Implementation of the format operator 'gq'.
+ */
+ void
+ op_format(oap, keep_cursor)
+*** ../vim-7.3.394/src/testdir/test43.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test43.in 2012-01-10 13:41:13.000000000 +0100
+***************
+*** 13,19 ****
+ x:set magic
+ /\v(a)(b)\2\1\1/e
+ x/\V[ab]\(\[xy]\)\1
+! x:?^1?,$w! test.out
+ :qa!
+ ENDTEST
+
+--- 13,23 ----
+ x:set magic
+ /\v(a)(b)\2\1\1/e
+ x/\V[ab]\(\[xy]\)\1
+! x:$
+! :set undolevels=100
+! dv?bar?
+! Yup:"
+! :?^1?,$w! test.out
+ :qa!
+ ENDTEST
+
+***************
+*** 25,27 ****
+--- 29,33 ----
+ 6 x ^aa$ x
+ 7 (a)(b) abbaa
+ 8 axx [ab]xx
++ 9 foobar
++
+*** ../vim-7.3.394/src/testdir/test43.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test43.ok 2012-01-10 13:42:39.000000000 +0100
+***************
+*** 6,8 ****
+--- 6,11 ----
+ 6 x aa$ x
+ 7 (a)(b) abba
+ 8 axx ab]xx
++ 9 foobar
++ 9 foo
++
+*** ../vim-7.3.394/src/version.c 2012-01-10 12:42:05.000000000 +0100
+--- src/version.c 2012-01-10 13:30:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 395,
+ /**/
+
+--
+The Law, in its majestic equality, forbids the rich, as well as the
+poor, to sleep under the bridges, to beg in the streets, and to steal
+bread. -- Anatole France
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.396
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.396
+Problem: After forcing an operator to be characterwise it can still become
+ linewise when spanning whole lines.
+Solution: Don't make the operator linewise when motion_force was set.
+ (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.395/src/ops.c 2012-01-10 13:44:23.000000000 +0100
+--- src/ops.c 2012-01-10 13:28:05.000000000 +0100
+***************
+*** 1648,1653 ****
+--- 1648,1654 ----
+ && !oap->block_mode
+ #endif
+ && oap->line_count > 1
++ && oap->motion_force == NUL
+ && oap->op_type == OP_DELETE)
+ {
+ ptr = ml_get(oap->end.lnum) + oap->end.col;
+*** ../vim-7.3.395/src/version.c 2012-01-10 13:44:23.000000000 +0100
+--- src/version.c 2012-01-10 13:45:31.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 396,
+ /**/
+
+--
+Any sufficiently advanced technology is indistinguishable from magic.
+ Arthur C. Clarke
+Any sufficiently advanced bug is indistinguishable from a feature.
+ Rich Kulawiec
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.397
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.397
+Problem: ":helpgrep" does not work properly when 'encoding' is not utf-8 or
+ latin1.
+Solution: Convert non-ascii lines to 'encoding'. (Yasuhiro Matsumoto)
+Files: src/quickfix.c, src/spell.c, src/misc2.c, src/proto/misc2.pro
+
+
+*** ../vim-7.3.396/src/quickfix.c 2011-12-30 15:01:55.000000000 +0100
+--- src/quickfix.c 2012-01-10 16:18:51.000000000 +0100
+***************
+*** 3914,3919 ****
+--- 3914,3929 ----
+ regmatch.rm_ic = FALSE;
+ if (regmatch.regprog != NULL)
+ {
++ #ifdef FEAT_MBYTE
++ vimconv_T vc;
++
++ /* Help files are in utf-8 or latin1, convert lines when 'encoding'
++ * differs. */
++ vc.vc_type = CONV_NONE;
++ if (!enc_utf8)
++ convert_setup(&vc, (char_u *)"utf-8", p_enc);
++ #endif
++
+ /* create a new quickfix list */
+ qf_new_list(qi, *eap->cmdlinep);
+
+***************
+*** 3948,3968 ****
+ lnum = 1;
+ while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
+ {
+! if (vim_regexec(®match, IObuff, (colnr_T)0))
+ {
+! int l = (int)STRLEN(IObuff);
+
+ /* remove trailing CR, LF, spaces, etc. */
+! while (l > 0 && IObuff[l - 1] <= ' ')
+! IObuff[--l] = NUL;
+
+ if (qf_add_entry(qi, &prevp,
+ NULL, /* dir */
+ fnames[fi],
+ 0,
+! IObuff,
+ lnum,
+! (int)(regmatch.startp[0] - IObuff)
+ + 1, /* col */
+ FALSE, /* vis_col */
+ NULL, /* search pattern */
+--- 3958,3990 ----
+ lnum = 1;
+ while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
+ {
+! char_u *line = IObuff;
+! #ifdef FEAT_MBYTE
+! /* Convert a line if 'encoding' is not utf-8 and
+! * the line contains a non-ASCII character. */
+! if (vc.vc_type != CONV_NONE
+! && has_non_ascii(IObuff)) {
+! line = string_convert(&vc, IObuff, NULL);
+! if (line == NULL)
+! line = IObuff;
+! }
+! #endif
+!
+! if (vim_regexec(®match, line, (colnr_T)0))
+ {
+! int l = (int)STRLEN(line);
+
+ /* remove trailing CR, LF, spaces, etc. */
+! while (l > 0 && line[l - 1] <= ' ')
+! line[--l] = NUL;
+
+ if (qf_add_entry(qi, &prevp,
+ NULL, /* dir */
+ fnames[fi],
+ 0,
+! line,
+ lnum,
+! (int)(regmatch.startp[0] - line)
+ + 1, /* col */
+ FALSE, /* vis_col */
+ NULL, /* search pattern */
+***************
+*** 3972,3980 ****
+--- 3994,4010 ----
+ ) == FAIL)
+ {
+ got_int = TRUE;
++ #ifdef FEAT_MBYTE
++ if (line != IObuff)
++ vim_free(line);
++ #endif
+ break;
+ }
+ }
++ #ifdef FEAT_MBYTE
++ if (line != IObuff)
++ vim_free(line);
++ #endif
+ ++lnum;
+ line_breakcheck();
+ }
+***************
+*** 3984,3990 ****
+--- 4014,4025 ----
+ FreeWild(fcount, fnames);
+ }
+ }
++
+ vim_free(regmatch.regprog);
++ #ifdef FEAT_MBYTE
++ if (vc.vc_type != CONV_NONE)
++ convert_setup(&vc, NULL, NULL);
++ #endif
+
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+ qi->qf_lists[qi->qf_curlist].qf_ptr =
+*** ../vim-7.3.396/src/spell.c 2011-09-02 14:18:14.000000000 +0200
+--- src/spell.c 2012-01-10 16:19:33.000000000 +0100
+***************
+*** 5020,5026 ****
+ static int str_equal __ARGS((char_u *s1, char_u *s2));
+ static void add_fromto __ARGS((spellinfo_T *spin, garray_T *gap, char_u *from, char_u *to));
+ static int sal_to_bool __ARGS((char_u *s));
+- static int has_non_ascii __ARGS((char_u *s));
+ static void spell_free_aff __ARGS((afffile_T *aff));
+ static int spell_read_dic __ARGS((spellinfo_T *spin, char_u *fname, afffile_T *affile));
+ static int get_affix_flags __ARGS((afffile_T *affile, char_u *afflist));
+--- 5020,5025 ----
+***************
+*** 6485,6507 ****
+ }
+
+ /*
+- * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
+- * When "s" is NULL FALSE is returned.
+- */
+- static int
+- has_non_ascii(s)
+- char_u *s;
+- {
+- char_u *p;
+-
+- if (s != NULL)
+- for (p = s; *p != NUL; ++p)
+- if (*p >= 128)
+- return TRUE;
+- return FALSE;
+- }
+-
+- /*
+ * Free the structure filled by spell_read_aff().
+ */
+ static void
+--- 6484,6489 ----
+*** ../vim-7.3.396/src/misc2.c 2011-12-08 17:49:31.000000000 +0100
+--- src/misc2.c 2012-01-10 16:25:53.000000000 +0100
+***************
+*** 6541,6543 ****
+--- 6541,6563 ----
+ #endif
+
+ #endif
++
++ #if (defined(FEAT_MBYTE) && defined(FEAT_QUICKFIX)) \
++ || defined(FEAT_SPELL) || defined(PROTO)
++ /*
++ * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
++ * When "s" is NULL FALSE is returned.
++ */
++ int
++ has_non_ascii(s)
++ char_u *s;
++ {
++ char_u *p;
++
++ if (s != NULL)
++ for (p = s; *p != NUL; ++p)
++ if (*p >= 128)
++ return TRUE;
++ return FALSE;
++ }
++ #endif
+*** ../vim-7.3.396/src/proto/misc2.pro 2011-07-07 16:20:45.000000000 +0200
+--- src/proto/misc2.pro 2012-01-10 16:20:03.000000000 +0100
+***************
+*** 116,119 ****
+--- 116,120 ----
+ char_u *read_string __ARGS((FILE *fd, int cnt));
+ int put_bytes __ARGS((FILE *fd, long_u nr, int len));
+ void put_time __ARGS((FILE *fd, time_t the_time));
++ int has_non_ascii __ARGS((char_u *s));
+ /* vim: set ft=c : */
+*** ../vim-7.3.396/src/version.c 2012-01-10 13:46:18.000000000 +0100
+--- src/version.c 2012-01-10 16:26:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 397,
+ /**/
+
+--
+Biting someone with your natural teeth is "simple assault," while biting
+someone with your false teeth is "aggravated assault."
+ [real standing law in Louisana, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.398
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.398
+Problem: When creating more than 10 location lists and adding items one by
+ one a previous location may be used. (Audrius Kažukauskas)
+Solution: Clear the location list completely when adding the tenth one.
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.397/src/quickfix.c 2012-01-10 16:28:41.000000000 +0100
+--- src/quickfix.c 2012-01-10 16:58:52.000000000 +0100
+***************
+*** 899,906 ****
+ }
+ else
+ qi->qf_curlist = qi->qf_listcount++;
+! qi->qf_lists[qi->qf_curlist].qf_index = 0;
+! qi->qf_lists[qi->qf_curlist].qf_count = 0;
+ if (qf_title != NULL)
+ {
+ char_u *p = alloc((int)STRLEN(qf_title) + 2);
+--- 899,905 ----
+ }
+ else
+ qi->qf_curlist = qi->qf_listcount++;
+! vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
+ if (qf_title != NULL)
+ {
+ char_u *p = alloc((int)STRLEN(qf_title) + 2);
+***************
+*** 909,916 ****
+ if (p != NULL)
+ sprintf((char *)p, ":%s", (char *)qf_title);
+ }
+- else
+- qi->qf_lists[qi->qf_curlist].qf_title = NULL;
+ }
+
+ /*
+--- 908,913 ----
+*** ../vim-7.3.397/src/version.c 2012-01-10 16:28:41.000000000 +0100
+--- src/version.c 2012-01-10 17:13:09.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 398,
+ /**/
+
+--
+Why don't cannibals eat clowns?
+Because they taste funny.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.399
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.399
+Problem: ":cd" doesn't work when the path contains wildcards. (Yukihiro
+ Nakadaira)
+Solution: Ignore wildcard errors when the EW_NOTWILD flag is used.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.398/src/misc1.c 2011-12-14 20:21:29.000000000 +0100
+--- src/misc1.c 2012-01-10 17:57:42.000000000 +0100
+***************
+*** 9103,9117 ****
+ }
+
+ /* compile the regexp into a program */
+! if (flags & EW_NOERROR)
+ ++emsg_silent;
+ regmatch.rm_ic = TRUE; /* Always ignore case */
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+! if (flags & EW_NOERROR)
+ --emsg_silent;
+ vim_free(pat);
+
+! if (regmatch.regprog == NULL)
+ {
+ vim_free(buf);
+ return 0;
+--- 9103,9117 ----
+ }
+
+ /* compile the regexp into a program */
+! if (flags & (EW_NOERROR | EW_NOTWILD))
+ ++emsg_silent;
+ regmatch.rm_ic = TRUE; /* Always ignore case */
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+! if (flags & (EW_NOERROR | EW_NOTWILD))
+ --emsg_silent;
+ vim_free(pat);
+
+! if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
+ {
+ vim_free(buf);
+ return 0;
+***************
+*** 9179,9185 ****
+ * all entries found with "matchname". */
+ if ((p[0] != '.' || starts_with_dot)
+ && (matchname == NULL
+! || vim_regexec(®match, p, (colnr_T)0)
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), p, e - s) == 0)))
+ {
+--- 9179,9186 ----
+ * all entries found with "matchname". */
+ if ((p[0] != '.' || starts_with_dot)
+ && (matchname == NULL
+! || (regmatch.regprog != NULL
+! && vim_regexec(®match, p, (colnr_T)0))
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), p, e - s) == 0)))
+ {
+***************
+*** 9419,9428 ****
+ else
+ regmatch.rm_ic = FALSE; /* Don't ignore case */
+ #endif
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+ vim_free(pat);
+
+! if (regmatch.regprog == NULL)
+ {
+ vim_free(buf);
+ return 0;
+--- 9420,9433 ----
+ else
+ regmatch.rm_ic = FALSE; /* Don't ignore case */
+ #endif
++ if (flags & (EW_NOERROR | EW_NOTWILD))
++ ++emsg_silent;
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
++ if (flags & (EW_NOERROR | EW_NOTWILD))
++ --emsg_silent;
+ vim_free(pat);
+
+! if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
+ {
+ vim_free(buf);
+ return 0;
+***************
+*** 9452,9458 ****
+ if (dp == NULL)
+ break;
+ if ((dp->d_name[0] != '.' || starts_with_dot)
+! && (vim_regexec(®match, (char_u *)dp->d_name, (colnr_T)0)
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
+ {
+--- 9457,9464 ----
+ if (dp == NULL)
+ break;
+ if ((dp->d_name[0] != '.' || starts_with_dot)
+! && ((regmatch.regprog != NULL && vim_regexec(®match,
+! (char_u *)dp->d_name, (colnr_T)0))
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
+ {
+*** ../vim-7.3.398/src/version.c 2012-01-10 17:13:48.000000000 +0100
+--- src/version.c 2012-01-10 18:21:05.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 399,
+ /**/
+
+--
+Close your shells, or I'll kill -9 you
+Tomorrow I'll quota you
+Remember the disks'll always be full
+And then while I'm away
+I'll write ~ everyday
+And I'll send-pr all my buggings to you.
+ [ CVS log "Beatles style" for FreeBSD ports/INDEX, Satoshi Asami ]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.400
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.400
+Problem: Compiler warnings for shadowed variables.
+Solution: Remove or rename the variables.
+Files: src/charset.c, src/digraph.c, src/edit.c, src/eval.c, src/fold.c,
+ src/getchar.c, src/message.c, src/misc2.c, src/move.c,
+ src/netbeans.c, src/option.c, src/os_unix.c, src/screen.c,
+ src/search.c, src/spell.c, src/syntax.c, src/tag.c, src/window.c
+
+
+*** ../vim-7.3.399/src/charset.c 2010-08-15 21:57:25.000000000 +0200
+--- src/charset.c 2012-01-10 21:55:50.000000000 +0100
+***************
+*** 463,503 ****
+ if (enc_utf8)
+ {
+ int c = utf_ptr2char(STR_PTR(i));
+! int ol = utf_ptr2len(STR_PTR(i));
+ int lc = utf_tolower(c);
+
+ /* Only replace the character when it is not an invalid
+ * sequence (ASCII character or more than one byte) and
+ * utf_tolower() doesn't return the original character. */
+! if ((c < 0x80 || ol > 1) && c != lc)
+ {
+! int nl = utf_char2len(lc);
+
+ /* If the byte length changes need to shift the following
+ * characters forward or backward. */
+! if (ol != nl)
+ {
+! if (nl > ol)
+ {
+! if (buf == NULL ? ga_grow(&ga, nl - ol + 1) == FAIL
+! : len + nl - ol >= buflen)
+ {
+ /* out of memory, keep old char */
+ lc = c;
+! nl = ol;
+ }
+ }
+! if (ol != nl)
+ {
+ if (buf == NULL)
+ {
+! STRMOVE(GA_PTR(i) + nl, GA_PTR(i) + ol);
+! ga.ga_len += nl - ol;
+ }
+ else
+ {
+! STRMOVE(buf + i + nl, buf + i + ol);
+! len += nl - ol;
+ }
+ }
+ }
+--- 463,504 ----
+ if (enc_utf8)
+ {
+ int c = utf_ptr2char(STR_PTR(i));
+! int olen = utf_ptr2len(STR_PTR(i));
+ int lc = utf_tolower(c);
+
+ /* Only replace the character when it is not an invalid
+ * sequence (ASCII character or more than one byte) and
+ * utf_tolower() doesn't return the original character. */
+! if ((c < 0x80 || olen > 1) && c != lc)
+ {
+! int nlen = utf_char2len(lc);
+
+ /* If the byte length changes need to shift the following
+ * characters forward or backward. */
+! if (olen != nlen)
+ {
+! if (nlen > olen)
+ {
+! if (buf == NULL
+! ? ga_grow(&ga, nlen - olen + 1) == FAIL
+! : len + nlen - olen >= buflen)
+ {
+ /* out of memory, keep old char */
+ lc = c;
+! nlen = olen;
+ }
+ }
+! if (olen != nlen)
+ {
+ if (buf == NULL)
+ {
+! STRMOVE(GA_PTR(i) + nlen, GA_PTR(i) + olen);
+! ga.ga_len += nlen - olen;
+ }
+ else
+ {
+! STRMOVE(buf + i + nlen, buf + i + olen);
+! len += nlen - olen;
+ }
+ }
+ }
+*** ../vim-7.3.399/src/digraph.c 2010-08-15 21:57:28.000000000 +0200
+--- src/digraph.c 2012-01-10 21:57:16.000000000 +0100
+***************
+*** 2080,2092 ****
+ /*
+ * Lookup the pair "char1", "char2" in the digraph tables.
+ * If no match, return "char2".
+! * If "meta" is TRUE and "char1" is a space, return "char2" | 0x80.
+ */
+ static int
+! getexactdigraph(char1, char2, meta)
+ int char1;
+ int char2;
+! int meta;
+ {
+ int i;
+ int retval = 0;
+--- 2080,2092 ----
+ /*
+ * Lookup the pair "char1", "char2" in the digraph tables.
+ * If no match, return "char2".
+! * If "meta_char" is TRUE and "char1" is a space, return "char2" | 0x80.
+ */
+ static int
+! getexactdigraph(char1, char2, meta_char)
+ int char1;
+ int char2;
+! int meta_char;
+ {
+ int i;
+ int retval = 0;
+***************
+*** 2159,2165 ****
+
+ if (retval == 0) /* digraph deleted or not found */
+ {
+! if (char1 == ' ' && meta) /* <space> <char> --> meta-char */
+ return (char2 | 0x80);
+ return char2;
+ }
+--- 2159,2165 ----
+
+ if (retval == 0) /* digraph deleted or not found */
+ {
+! if (char1 == ' ' && meta_char) /* <space> <char> --> meta-char */
+ return (char2 | 0x80);
+ return char2;
+ }
+***************
+*** 2171,2186 ****
+ * Allow for both char1-char2 and char2-char1
+ */
+ int
+! getdigraph(char1, char2, meta)
+ int char1;
+ int char2;
+! int meta;
+ {
+ int retval;
+
+! if (((retval = getexactdigraph(char1, char2, meta)) == char2)
+ && (char1 != char2)
+! && ((retval = getexactdigraph(char2, char1, meta)) == char1))
+ return char2;
+ return retval;
+ }
+--- 2171,2186 ----
+ * Allow for both char1-char2 and char2-char1
+ */
+ int
+! getdigraph(char1, char2, meta_char)
+ int char1;
+ int char2;
+! int meta_char;
+ {
+ int retval;
+
+! if (((retval = getexactdigraph(char1, char2, meta_char)) == char2)
+ && (char1 != char2)
+! && ((retval = getexactdigraph(char2, char1, meta_char)) == char1))
+ return char2;
+ return retval;
+ }
+*** ../vim-7.3.399/src/edit.c 2011-12-23 13:14:58.000000000 +0100
+--- src/edit.c 2012-01-10 21:58:28.000000000 +0100
+***************
+*** 4003,4026 ****
+ ins_compl_add_dict(dict)
+ dict_T *dict;
+ {
+! dictitem_T *refresh;
+! dictitem_T *words;
+
+ /* Check for optional "refresh" item. */
+ compl_opt_refresh_always = FALSE;
+! refresh = dict_find(dict, (char_u *)"refresh", 7);
+! if (refresh != NULL && refresh->di_tv.v_type == VAR_STRING)
+ {
+! char_u *v = refresh->di_tv.vval.v_string;
+
+ if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
+ compl_opt_refresh_always = TRUE;
+ }
+
+ /* Add completions from a "words" list. */
+! words = dict_find(dict, (char_u *)"words", 5);
+! if (words != NULL && words->di_tv.v_type == VAR_LIST)
+! ins_compl_add_list(words->di_tv.vval.v_list);
+ }
+
+ /*
+--- 4003,4026 ----
+ ins_compl_add_dict(dict)
+ dict_T *dict;
+ {
+! dictitem_T *di_refresh;
+! dictitem_T *di_words;
+
+ /* Check for optional "refresh" item. */
+ compl_opt_refresh_always = FALSE;
+! di_refresh = dict_find(dict, (char_u *)"refresh", 7);
+! if (di_refresh != NULL && di_refresh->di_tv.v_type == VAR_STRING)
+ {
+! char_u *v = di_refresh->di_tv.vval.v_string;
+
+ if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
+ compl_opt_refresh_always = TRUE;
+ }
+
+ /* Add completions from a "words" list. */
+! di_words = dict_find(dict, (char_u *)"words", 5);
+! if (di_words != NULL && di_words->di_tv.v_type == VAR_LIST)
+! ins_compl_add_list(di_words->di_tv.vval.v_list);
+ }
+
+ /*
+*** ../vim-7.3.399/src/eval.c 2012-01-04 14:35:31.000000000 +0100
+--- src/eval.c 2012-01-10 22:00:50.000000000 +0100
+***************
+*** 6573,6587 ****
+
+ /*
+ * Join list "l" into a string in "*gap", using separator "sep".
+! * When "echo" is TRUE use String as echoed, otherwise as inside a List.
+ * Return FAIL or OK.
+ */
+ static int
+! list_join(gap, l, sep, echo, copyID)
+ garray_T *gap;
+ list_T *l;
+ char_u *sep;
+! int echo;
+ int copyID;
+ {
+ int first = TRUE;
+--- 6573,6587 ----
+
+ /*
+ * Join list "l" into a string in "*gap", using separator "sep".
+! * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
+ * Return FAIL or OK.
+ */
+ static int
+! list_join(gap, l, sep, echo_style, copyID)
+ garray_T *gap;
+ list_T *l;
+ char_u *sep;
+! int echo_style;
+ int copyID;
+ {
+ int first = TRUE;
+***************
+*** 6597,6603 ****
+ else
+ ga_concat(gap, sep);
+
+! if (echo)
+ s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ else
+ s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+--- 6597,6603 ----
+ else
+ ga_concat(gap, sep);
+
+! if (echo_style)
+ s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ else
+ s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+***************
+*** 17893,17899 ****
+ typval_T *argvars;
+ typval_T *rettv;
+ {
+! char_u *instr;
+ char_u *fromstr;
+ char_u *tostr;
+ char_u *p;
+--- 17893,17899 ----
+ typval_T *argvars;
+ typval_T *rettv;
+ {
+! char_u *in_str;
+ char_u *fromstr;
+ char_u *tostr;
+ char_u *p;
+***************
+*** 17910,17916 ****
+ char_u buf2[NUMBUFLEN];
+ garray_T ga;
+
+! instr = get_tv_string(&argvars[0]);
+ fromstr = get_tv_string_buf_chk(&argvars[1], buf);
+ tostr = get_tv_string_buf_chk(&argvars[2], buf2);
+
+--- 17910,17916 ----
+ char_u buf2[NUMBUFLEN];
+ garray_T ga;
+
+! in_str = get_tv_string(&argvars[0]);
+ fromstr = get_tv_string_buf_chk(&argvars[1], buf);
+ tostr = get_tv_string_buf_chk(&argvars[2], buf2);
+
+***************
+*** 17936,17954 ****
+ }
+
+ /* fromstr and tostr have to contain the same number of chars */
+! while (*instr != NUL)
+ {
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+! inlen = (*mb_ptr2len)(instr);
+! cpstr = instr;
+ cplen = inlen;
+ idx = 0;
+ for (p = fromstr; *p != NUL; p += fromlen)
+ {
+ fromlen = (*mb_ptr2len)(p);
+! if (fromlen == inlen && STRNCMP(instr, p, inlen) == 0)
+ {
+ for (p = tostr; *p != NUL; p += tolen)
+ {
+--- 17936,17954 ----
+ }
+
+ /* fromstr and tostr have to contain the same number of chars */
+! while (*in_str != NUL)
+ {
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+! inlen = (*mb_ptr2len)(in_str);
+! cpstr = in_str;
+ cplen = inlen;
+ idx = 0;
+ for (p = fromstr; *p != NUL; p += fromlen)
+ {
+ fromlen = (*mb_ptr2len)(p);
+! if (fromlen == inlen && STRNCMP(in_str, p, inlen) == 0)
+ {
+ for (p = tostr; *p != NUL; p += tolen)
+ {
+***************
+*** 17967,17977 ****
+ ++idx;
+ }
+
+! if (first && cpstr == instr)
+ {
+ /* Check that fromstr and tostr have the same number of
+ * (multi-byte) characters. Done only once when a character
+! * of instr doesn't appear in fromstr. */
+ first = FALSE;
+ for (p = tostr; *p != NUL; p += tolen)
+ {
+--- 17967,17977 ----
+ ++idx;
+ }
+
+! if (first && cpstr == in_str)
+ {
+ /* Check that fromstr and tostr have the same number of
+ * (multi-byte) characters. Done only once when a character
+! * of in_str doesn't appear in fromstr. */
+ first = FALSE;
+ for (p = tostr; *p != NUL; p += tolen)
+ {
+***************
+*** 17986,18003 ****
+ mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
+ ga.ga_len += cplen;
+
+! instr += inlen;
+ }
+ else
+ #endif
+ {
+ /* When not using multi-byte chars we can do it faster. */
+! p = vim_strchr(fromstr, *instr);
+ if (p != NULL)
+ ga_append(&ga, tostr[p - fromstr]);
+ else
+! ga_append(&ga, *instr);
+! ++instr;
+ }
+ }
+
+--- 17986,18003 ----
+ mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
+ ga.ga_len += cplen;
+
+! in_str += inlen;
+ }
+ else
+ #endif
+ {
+ /* When not using multi-byte chars we can do it faster. */
+! p = vim_strchr(fromstr, *in_str);
+ if (p != NULL)
+ ga_append(&ga, tostr[p - fromstr]);
+ else
+! ga_append(&ga, *in_str);
+! ++in_str;
+ }
+ }
+
+*** ../vim-7.3.399/src/fold.c 2011-08-26 16:12:55.000000000 +0200
+--- src/fold.c 2012-01-10 22:01:26.000000000 +0100
+***************
+*** 1033,1042 ****
+ * Init the fold info in a new window.
+ */
+ void
+! foldInitWin(newwin)
+! win_T *newwin;
+ {
+! ga_init2(&newwin->w_folds, (int)sizeof(fold_T), 10);
+ }
+
+ /* find_wl_entry() {{{2 */
+--- 1033,1042 ----
+ * Init the fold info in a new window.
+ */
+ void
+! foldInitWin(new_win)
+! win_T *new_win;
+ {
+! ga_init2(&new_win->w_folds, (int)sizeof(fold_T), 10);
+ }
+
+ /* find_wl_entry() {{{2 */
+*** ../vim-7.3.399/src/getchar.c 2011-12-23 14:54:01.000000000 +0100
+--- src/getchar.c 2012-01-10 22:02:30.000000000 +0100
+***************
+*** 418,429 ****
+
+ /*
+ * Remove the contents of the stuff buffer and the mapped characters in the
+! * typeahead buffer (used in case of an error). If 'typeahead' is true,
+ * flush all typeahead characters (used when interrupted by a CTRL-C).
+ */
+ void
+! flush_buffers(typeahead)
+! int typeahead;
+ {
+ init_typebuf();
+
+--- 418,429 ----
+
+ /*
+ * Remove the contents of the stuff buffer and the mapped characters in the
+! * typeahead buffer (used in case of an error). If "flush_typeahead" is true,
+ * flush all typeahead characters (used when interrupted by a CTRL-C).
+ */
+ void
+! flush_buffers(flush_typeahead)
+! int flush_typeahead;
+ {
+ init_typebuf();
+
+***************
+*** 431,437 ****
+ while (read_stuff(TRUE) != NUL)
+ ;
+
+! if (typeahead) /* remove all typeahead */
+ {
+ /*
+ * We have to get all characters, because we may delete the first part
+--- 431,437 ----
+ while (read_stuff(TRUE) != NUL)
+ ;
+
+! if (flush_typeahead) /* remove all typeahead */
+ {
+ /*
+ * We have to get all characters, because we may delete the first part
+*** ../vim-7.3.399/src/message.c 2011-12-30 14:14:16.000000000 +0100
+--- src/message.c 2012-01-10 22:03:56.000000000 +0100
+***************
+*** 2487,2493 ****
+ #ifdef FEAT_CON_DIALOG
+ int retval = FALSE;
+ #endif
+! int scroll;
+ msgchunk_T *mp_last = NULL;
+ msgchunk_T *mp;
+ int i;
+--- 2487,2493 ----
+ #ifdef FEAT_CON_DIALOG
+ int retval = FALSE;
+ #endif
+! int toscroll;
+ msgchunk_T *mp_last = NULL;
+ msgchunk_T *mp;
+ int i;
+***************
+*** 2538,2586 ****
+ }
+ #endif
+
+! scroll = 0;
+ switch (c)
+ {
+ case BS: /* scroll one line back */
+ case K_BS:
+ case 'k':
+ case K_UP:
+! scroll = -1;
+ break;
+
+ case CAR: /* one extra line */
+ case NL:
+ case 'j':
+ case K_DOWN:
+! scroll = 1;
+ break;
+
+ case 'u': /* Up half a page */
+! scroll = -(Rows / 2);
+ break;
+
+ case 'd': /* Down half a page */
+! scroll = Rows / 2;
+ break;
+
+ case 'b': /* one page back */
+ case K_PAGEUP:
+! scroll = -(Rows - 1);
+ break;
+
+ case ' ': /* one extra page */
+ case 'f':
+ case K_PAGEDOWN:
+ case K_LEFTMOUSE:
+! scroll = Rows - 1;
+ break;
+
+ case 'g': /* all the way back to the start */
+! scroll = -999999;
+ break;
+
+ case 'G': /* all the way to the end */
+! scroll = 999999;
+ lines_left = 999999;
+ break;
+
+--- 2538,2586 ----
+ }
+ #endif
+
+! toscroll = 0;
+ switch (c)
+ {
+ case BS: /* scroll one line back */
+ case K_BS:
+ case 'k':
+ case K_UP:
+! toscroll = -1;
+ break;
+
+ case CAR: /* one extra line */
+ case NL:
+ case 'j':
+ case K_DOWN:
+! toscroll = 1;
+ break;
+
+ case 'u': /* Up half a page */
+! toscroll = -(Rows / 2);
+ break;
+
+ case 'd': /* Down half a page */
+! toscroll = Rows / 2;
+ break;
+
+ case 'b': /* one page back */
+ case K_PAGEUP:
+! toscroll = -(Rows - 1);
+ break;
+
+ case ' ': /* one extra page */
+ case 'f':
+ case K_PAGEDOWN:
+ case K_LEFTMOUSE:
+! toscroll = Rows - 1;
+ break;
+
+ case 'g': /* all the way back to the start */
+! toscroll = -999999;
+ break;
+
+ case 'G': /* all the way to the end */
+! toscroll = 999999;
+ lines_left = 999999;
+ break;
+
+***************
+*** 2633,2641 ****
+ continue;
+ }
+
+! if (scroll != 0)
+ {
+! if (scroll < 0)
+ {
+ /* go to start of last line */
+ if (mp_last == NULL)
+--- 2633,2641 ----
+ continue;
+ }
+
+! if (toscroll != 0)
+ {
+! if (toscroll < 0)
+ {
+ /* go to start of last line */
+ if (mp_last == NULL)
+***************
+*** 2653,2659 ****
+ if (mp != NULL && mp->sb_prev != NULL)
+ {
+ /* Find line to be displayed at top. */
+! for (i = 0; i > scroll; --i)
+ {
+ if (mp == NULL || mp->sb_prev == NULL)
+ break;
+--- 2653,2659 ----
+ if (mp != NULL && mp->sb_prev != NULL)
+ {
+ /* Find line to be displayed at top. */
+! for (i = 0; i > toscroll; --i)
+ {
+ if (mp == NULL || mp->sb_prev == NULL)
+ break;
+***************
+*** 2664,2670 ****
+ mp_last = msg_sb_start(mp_last->sb_prev);
+ }
+
+! if (scroll == -1 && screen_ins_lines(0, 0, 1,
+ (int)Rows, NULL) == OK)
+ {
+ /* display line at top */
+--- 2664,2670 ----
+ mp_last = msg_sb_start(mp_last->sb_prev);
+ }
+
+! if (toscroll == -1 && screen_ins_lines(0, 0, 1,
+ (int)Rows, NULL) == OK)
+ {
+ /* display line at top */
+***************
+*** 2680,2692 ****
+ ++msg_scrolled;
+ }
+ }
+! scroll = 0;
+ }
+ }
+ else
+ {
+ /* First display any text that we scrolled back. */
+! while (scroll > 0 && mp_last != NULL)
+ {
+ /* scroll up, display line at bottom */
+ msg_scroll_up();
+--- 2680,2692 ----
+ ++msg_scrolled;
+ }
+ }
+! toscroll = 0;
+ }
+ }
+ else
+ {
+ /* First display any text that we scrolled back. */
+! while (toscroll > 0 && mp_last != NULL)
+ {
+ /* scroll up, display line at bottom */
+ msg_scroll_up();
+***************
+*** 2694,2704 ****
+ screen_fill((int)Rows - 2, (int)Rows - 1, 0,
+ (int)Columns, ' ', ' ', 0);
+ mp_last = disp_sb_line((int)Rows - 2, mp_last);
+! --scroll;
+ }
+ }
+
+! if (scroll <= 0)
+ {
+ /* displayed the requested text, more prompt again */
+ screen_fill((int)Rows - 1, (int)Rows, 0,
+--- 2694,2704 ----
+ screen_fill((int)Rows - 2, (int)Rows - 1, 0,
+ (int)Columns, ' ', ' ', 0);
+ mp_last = disp_sb_line((int)Rows - 2, mp_last);
+! --toscroll;
+ }
+ }
+
+! if (toscroll <= 0)
+ {
+ /* displayed the requested text, more prompt again */
+ screen_fill((int)Rows - 1, (int)Rows, 0,
+***************
+*** 2708,2714 ****
+ }
+
+ /* display more text, return to caller */
+! lines_left = scroll;
+ }
+
+ break;
+--- 2708,2714 ----
+ }
+
+ /* display more text, return to caller */
+! lines_left = toscroll;
+ }
+
+ break;
+*** ../vim-7.3.399/src/misc2.c 2012-01-10 16:28:41.000000000 +0100
+--- src/misc2.c 2012-01-10 22:04:25.000000000 +0100
+***************
+*** 1559,1565 ****
+ if (enc_utf8)
+ {
+ int c, uc;
+! int nl;
+ char_u *s;
+
+ c = utf_ptr2char(p);
+--- 1559,1565 ----
+ if (enc_utf8)
+ {
+ int c, uc;
+! int newl;
+ char_u *s;
+
+ c = utf_ptr2char(p);
+***************
+*** 1568,1588 ****
+ /* Reallocate string when byte count changes. This is rare,
+ * thus it's OK to do another malloc()/free(). */
+ l = utf_ptr2len(p);
+! nl = utf_char2len(uc);
+! if (nl != l)
+ {
+! s = alloc((unsigned)STRLEN(res) + 1 + nl - l);
+ if (s == NULL)
+ break;
+ mch_memmove(s, res, p - res);
+! STRCPY(s + (p - res) + nl, p + l);
+ p = s + (p - res);
+ vim_free(res);
+ res = s;
+ }
+
+ utf_char2bytes(uc, p);
+! p += nl;
+ }
+ else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ p += l; /* skip multi-byte character */
+--- 1568,1588 ----
+ /* Reallocate string when byte count changes. This is rare,
+ * thus it's OK to do another malloc()/free(). */
+ l = utf_ptr2len(p);
+! newl = utf_char2len(uc);
+! if (newl != l)
+ {
+! s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
+ if (s == NULL)
+ break;
+ mch_memmove(s, res, p - res);
+! STRCPY(s + (p - res) + newl, p + l);
+ p = s + (p - res);
+ vim_free(res);
+ res = s;
+ }
+
+ utf_char2bytes(uc, p);
+! p += newl;
+ }
+ else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ p += l; /* skip multi-byte character */
+*** ../vim-7.3.399/src/move.c 2011-02-01 18:01:06.000000000 +0100
+--- src/move.c 2012-01-10 22:05:22.000000000 +0100
+***************
+*** 926,933 ****
+ * Also updates curwin->w_leftcol.
+ */
+ void
+! curs_columns(scroll)
+! int scroll; /* when TRUE, may scroll horizontally */
+ {
+ int diff;
+ int extra; /* offset for first screen line */
+--- 926,933 ----
+ * Also updates curwin->w_leftcol.
+ */
+ void
+! curs_columns(may_scroll)
+! int may_scroll; /* when TRUE, may scroll horizontally */
+ {
+ int diff;
+ int extra; /* offset for first screen line */
+***************
+*** 1014,1020 ****
+ /* No line wrapping: compute curwin->w_leftcol if scrolling is on and line
+ * is not folded.
+ * If scrolling is off, curwin->w_leftcol is assumed to be 0 */
+! else if (scroll
+ #ifdef FEAT_FOLDING
+ && !curwin->w_cline_folded
+ #endif
+--- 1014,1020 ----
+ /* No line wrapping: compute curwin->w_leftcol if scrolling is on and line
+ * is not folded.
+ * If scrolling is off, curwin->w_leftcol is assumed to be 0 */
+! else if (may_scroll
+ #ifdef FEAT_FOLDING
+ && !curwin->w_cline_folded
+ #endif
+*** ../vim-7.3.399/src/netbeans.c 2011-10-20 21:58:20.000000000 +0200
+--- src/netbeans.c 2012-01-10 22:16:26.000000000 +0100
+***************
+*** 1395,1401 ****
+ int cmdno,
+ char_u *args) /* points to space before arguments or NUL */
+ {
+! int doupdate = 0;
+ long off = 0;
+ nbbuf_T *buf = nb_get_buf(bufno);
+ static int skip = 0;
+--- 1395,1401 ----
+ int cmdno,
+ char_u *args) /* points to space before arguments or NUL */
+ {
+! int do_update = 0;
+ long off = 0;
+ nbbuf_T *buf = nb_get_buf(bufno);
+ static int skip = 0;
+***************
+*** 1600,1606 ****
+ last.lnum, last.col));
+ del_from_lnum = first.lnum;
+ del_to_lnum = last.lnum;
+! doupdate = 1;
+
+ /* Get the position of the first byte after the deleted
+ * section. "next" is NULL when deleting to the end of the
+--- 1600,1606 ----
+ last.lnum, last.col));
+ del_from_lnum = first.lnum;
+ del_to_lnum = last.lnum;
+! do_update = 1;
+
+ /* Get the position of the first byte after the deleted
+ * section. "next" is NULL when deleting to the end of the
+***************
+*** 1777,1783 ****
+ lnum = lnum_start;
+
+ /* Loop over the "\n" separated lines of the argument. */
+! doupdate = 1;
+ while (*args != NUL)
+ {
+ nl = vim_strchr(args, '\n');
+--- 1777,1783 ----
+ lnum = lnum_start;
+
+ /* Loop over the "\n" separated lines of the argument. */
+! do_update = 1;
+ while (*args != NUL)
+ {
+ nl = vim_strchr(args, '\n');
+***************
+*** 1992,1998 ****
+ EMSG("E640: invalid buffer identifier in initDone");
+ return FAIL;
+ }
+! doupdate = 1;
+ buf->initDone = TRUE;
+ nb_set_curbuf(buf->bufp);
+ #if defined(FEAT_AUTOCMD)
+--- 1992,1998 ----
+ EMSG("E640: invalid buffer identifier in initDone");
+ return FAIL;
+ }
+! do_update = 1;
+ buf->initDone = TRUE;
+ nb_set_curbuf(buf->bufp);
+ #if defined(FEAT_AUTOCMD)
+***************
+*** 2081,2087 ****
+ ECMD_HIDE + ECMD_OLDBUF, curwin);
+ buf->bufp = curbuf;
+ buf->initDone = TRUE;
+! doupdate = 1;
+ #if defined(FEAT_TITLE)
+ maketitle();
+ #endif
+--- 2081,2087 ----
+ ECMD_HIDE + ECMD_OLDBUF, curwin);
+ buf->bufp = curbuf;
+ buf->initDone = TRUE;
+! do_update = 1;
+ #if defined(FEAT_TITLE)
+ maketitle();
+ #endif
+***************
+*** 2109,2115 ****
+ exarg.forceit = FALSE;
+ dosetvisible = TRUE;
+ goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
+! doupdate = 1;
+ dosetvisible = FALSE;
+
+ #ifdef FEAT_GUI
+--- 2109,2115 ----
+ exarg.forceit = FALSE;
+ dosetvisible = TRUE;
+ goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
+! do_update = 1;
+ dosetvisible = FALSE;
+
+ #ifdef FEAT_GUI
+***************
+*** 2309,2315 ****
+ buf->bufp->b_fnum, TRUE);
+ buf->bufp = NULL;
+ buf->initDone = FALSE;
+! doupdate = 1;
+ /* =====================================================================*/
+ }
+ else if (streq((char *)cmd, "setStyle")) /* obsolete... */
+--- 2309,2315 ----
+ buf->bufp->b_fnum, TRUE);
+ buf->bufp = NULL;
+ buf->initDone = FALSE;
+! do_update = 1;
+ /* =====================================================================*/
+ }
+ else if (streq((char *)cmd, "setStyle")) /* obsolete... */
+***************
+*** 2400,2406 ****
+ return FAIL;
+ }
+
+! doupdate = 1;
+
+ cp = (char *)args;
+ serNum = strtol(cp, &cp, 10);
+--- 2400,2406 ----
+ return FAIL;
+ }
+
+! do_update = 1;
+
+ cp = (char *)args;
+ serNum = strtol(cp, &cp, 10);
+***************
+*** 2448,2454 ****
+ nbdebug((" invalid buffer identifier in removeAnno\n"));
+ return FAIL;
+ }
+! doupdate = 1;
+ cp = (char *)args;
+ serNum = strtol(cp, &cp, 10);
+ args = (char_u *)cp;
+--- 2448,2454 ----
+ nbdebug((" invalid buffer identifier in removeAnno\n"));
+ return FAIL;
+ }
+! do_update = 1;
+ cp = (char *)args;
+ serNum = strtol(cp, &cp, 10);
+ args = (char_u *)cp;
+***************
+*** 2493,2499 ****
+ len = strtol(cp, NULL, 10);
+ args = (char_u *)cp;
+ pos = off2pos(buf->bufp, off);
+! doupdate = 1;
+ if (!pos)
+ nbdebug((" no such start pos in %s, %ld\n", cmd, off));
+ else
+--- 2493,2499 ----
+ len = strtol(cp, NULL, 10);
+ args = (char_u *)cp;
+ pos = off2pos(buf->bufp, off);
+! do_update = 1;
+ if (!pos)
+ nbdebug((" no such start pos in %s, %ld\n", cmd, off));
+ else
+***************
+*** 2555,2561 ****
+ inAtomic = 0;
+ if (needupdate)
+ {
+! doupdate = 1;
+ needupdate = 0;
+ }
+ /* =====================================================================*/
+--- 2555,2561 ----
+ inAtomic = 0;
+ if (needupdate)
+ {
+! do_update = 1;
+ needupdate = 0;
+ }
+ /* =====================================================================*/
+***************
+*** 2636,2653 ****
+ * Unrecognized command is ignored.
+ */
+ }
+! if (inAtomic && doupdate)
+ {
+ needupdate = 1;
+! doupdate = 0;
+ }
+
+ /*
+ * Is this needed? I moved the netbeans_Xt_connect() later during startup
+ * and it may no longer be necessary. If its not needed then needupdate
+! * and doupdate can also be removed.
+ */
+! if (buf != NULL && buf->initDone && doupdate)
+ {
+ update_screen(NOT_VALID);
+ setcursor();
+--- 2636,2653 ----
+ * Unrecognized command is ignored.
+ */
+ }
+! if (inAtomic && do_update)
+ {
+ needupdate = 1;
+! do_update = 0;
+ }
+
+ /*
+ * Is this needed? I moved the netbeans_Xt_connect() later during startup
+ * and it may no longer be necessary. If its not needed then needupdate
+! * and do_update can also be removed.
+ */
+! if (buf != NULL && buf->initDone && do_update)
+ {
+ update_screen(NOT_VALID);
+ setcursor();
+*** ../vim-7.3.399/src/option.c 2012-01-04 19:34:32.000000000 +0100
+--- src/option.c 2012-01-10 22:06:03.000000000 +0100
+***************
+*** 8584,8591 ****
+ long_u flags;
+ {
+ /* Careful: P_RCLR and P_RALL are a combination of other P_ flags */
+! int clear = (flags & P_RCLR) == P_RCLR;
+! int all = ((flags & P_RALL) == P_RALL || clear);
+
+ #ifdef FEAT_WINDOWS
+ if ((flags & P_RSTAT) || all) /* mark all status lines dirty */
+--- 8584,8591 ----
+ long_u flags;
+ {
+ /* Careful: P_RCLR and P_RALL are a combination of other P_ flags */
+! int doclear = (flags & P_RCLR) == P_RCLR;
+! int all = ((flags & P_RALL) == P_RALL || doclear);
+
+ #ifdef FEAT_WINDOWS
+ if ((flags & P_RSTAT) || all) /* mark all status lines dirty */
+***************
+*** 8596,8602 ****
+ changed_window_setting();
+ if (flags & P_RBUF)
+ redraw_curbuf_later(NOT_VALID);
+! if (clear)
+ redraw_all_later(CLEAR);
+ else if (all)
+ redraw_all_later(NOT_VALID);
+--- 8596,8602 ----
+ changed_window_setting();
+ if (flags & P_RBUF)
+ redraw_curbuf_later(NOT_VALID);
+! if (doclear)
+ redraw_all_later(CLEAR);
+ else if (all)
+ redraw_all_later(NOT_VALID);
+*** ../vim-7.3.399/src/os_unix.c 2011-10-20 21:09:25.000000000 +0200
+--- src/os_unix.c 2012-01-10 21:48:49.000000000 +0100
+***************
+*** 3884,3890 ****
+ char_u *p_shcf_copy = NULL;
+ int i;
+ char_u *p;
+- char_u *s;
+ int inquote;
+ int pty_master_fd = -1; /* for pty's */
+ # ifdef FEAT_GUI
+--- 3884,3889 ----
+***************
+*** 3963,3968 ****
+--- 3962,3969 ----
+ }
+ if (cmd != NULL)
+ {
++ char_u *s;
++
+ if (extra_shell_arg != NULL)
+ argv[argc++] = (char *)extra_shell_arg;
+
+***************
+*** 4325,4331 ****
+ linenr_T lnum = curbuf->b_op_start.lnum;
+ int written = 0;
+ char_u *lp = ml_get(lnum);
+- char_u *s;
+ size_t l;
+
+ close(fromshell_fd);
+--- 4326,4331 ----
+***************
+*** 4339,4345 ****
+ len = write(toshell_fd, "", (size_t)1);
+ else
+ {
+! s = vim_strchr(lp + written, NL);
+ len = write(toshell_fd, (char *)lp + written,
+ s == NULL ? l
+ : (size_t)(s - (lp + written)));
+--- 4339,4346 ----
+ len = write(toshell_fd, "", (size_t)1);
+ else
+ {
+! char_u *s = vim_strchr(lp + written, NL);
+!
+ len = write(toshell_fd, (char *)lp + written,
+ s == NULL ? l
+ : (size_t)(s - (lp + written)));
+*** ../vim-7.3.399/src/screen.c 2012-01-10 12:42:05.000000000 +0100
+--- src/screen.c 2012-01-10 22:06:51.000000000 +0100
+***************
+*** 7849,7863 ****
+
+ /*
+ * screen_valid - allocate screen buffers if size changed
+! * If "clear" is TRUE: clear screen if it has been resized.
+ * Returns TRUE if there is a valid screen to write to.
+ * Returns FALSE when starting up and screen not initialized yet.
+ */
+ int
+! screen_valid(clear)
+! int clear;
+ {
+! screenalloc(clear); /* allocate screen buffers if size changed */
+ return (ScreenLines != NULL);
+ }
+
+--- 7849,7863 ----
+
+ /*
+ * screen_valid - allocate screen buffers if size changed
+! * If "doclear" is TRUE: clear screen if it has been resized.
+ * Returns TRUE if there is a valid screen to write to.
+ * Returns FALSE when starting up and screen not initialized yet.
+ */
+ int
+! screen_valid(doclear)
+! int doclear;
+ {
+! screenalloc(doclear); /* allocate screen buffers if size changed */
+ return (ScreenLines != NULL);
+ }
+
+***************
+*** 7872,7879 ****
+ * final size of the shell is needed.
+ */
+ void
+! screenalloc(clear)
+! int clear;
+ {
+ int new_row, old_row;
+ #ifdef FEAT_GUI
+--- 7872,7879 ----
+ * final size of the shell is needed.
+ */
+ void
+! screenalloc(doclear)
+! int doclear;
+ {
+ int new_row, old_row;
+ #ifdef FEAT_GUI
+***************
+*** 8069,8075 ****
+ * (used when resizing the window at the "--more--" prompt or when
+ * executing an external command, for the GUI).
+ */
+! if (!clear)
+ {
+ (void)vim_memset(new_ScreenLines + new_row * Columns,
+ ' ', (size_t)Columns * sizeof(schar_T));
+--- 8069,8075 ----
+ * (used when resizing the window at the "--more--" prompt or when
+ * executing an external command, for the GUI).
+ */
+! if (!doclear)
+ {
+ (void)vim_memset(new_ScreenLines + new_row * Columns,
+ ' ', (size_t)Columns * sizeof(schar_T));
+***************
+*** 8159,8165 ****
+ screen_Columns = Columns;
+
+ must_redraw = CLEAR; /* need to clear the screen later */
+! if (clear)
+ screenclear2();
+
+ #ifdef FEAT_GUI
+--- 8159,8165 ----
+ screen_Columns = Columns;
+
+ must_redraw = CLEAR; /* need to clear the screen later */
+! if (doclear)
+ screenclear2();
+
+ #ifdef FEAT_GUI
+*** ../vim-7.3.399/src/search.c 2011-10-04 17:00:13.000000000 +0200
+--- src/search.c 2012-01-10 22:07:16.000000000 +0100
+***************
+*** 2402,2425 ****
+ {
+ if (vim_strchr(p, ';') != NULL) /* there may be comments */
+ {
+! int instr = FALSE; /* inside of string */
+
+ p = line; /* scan from start */
+ while ((p = vim_strpbrk(p, (char_u *)"\";")) != NULL)
+ {
+ if (*p == '"')
+ {
+! if (instr)
+ {
+ if (*(p - 1) != '\\') /* skip escaped quote */
+! instr = FALSE;
+ }
+ else if (p == line || ((p - line) >= 2
+ /* skip #\" form */
+ && *(p - 1) != '\\' && *(p - 2) != '#'))
+! instr = TRUE;
+ }
+! else if (!instr && ((p - line) < 2
+ || (*(p - 1) != '\\' && *(p - 2) != '#')))
+ break; /* found! */
+ ++p;
+--- 2402,2425 ----
+ {
+ if (vim_strchr(p, ';') != NULL) /* there may be comments */
+ {
+! int in_str = FALSE; /* inside of string */
+
+ p = line; /* scan from start */
+ while ((p = vim_strpbrk(p, (char_u *)"\";")) != NULL)
+ {
+ if (*p == '"')
+ {
+! if (in_str)
+ {
+ if (*(p - 1) != '\\') /* skip escaped quote */
+! in_str = FALSE;
+ }
+ else if (p == line || ((p - line) >= 2
+ /* skip #\" form */
+ && *(p - 1) != '\\' && *(p - 2) != '#'))
+! in_str = TRUE;
+ }
+! else if (!in_str && ((p - line) < 2
+ || (*(p - 1) != '\\' && *(p - 2) != '#')))
+ break; /* found! */
+ ++p;
+*** ../vim-7.3.399/src/spell.c 2012-01-10 16:28:41.000000000 +0100
+--- src/spell.c 2012-01-10 22:09:23.000000000 +0100
+***************
+*** 5049,5055 ****
+ static int offset2bytes __ARGS((int nr, char_u *buf));
+ static int bytes2offset __ARGS((char_u **pp));
+ static void sug_write __ARGS((spellinfo_T *spin, char_u *fname));
+! static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int overwrite, int added_word));
+ static void spell_message __ARGS((spellinfo_T *spin, char_u *str));
+ static void init_spellfile __ARGS((void));
+
+--- 5049,5055 ----
+ static int offset2bytes __ARGS((int nr, char_u *buf));
+ static int bytes2offset __ARGS((char_u **pp));
+ static void sug_write __ARGS((spellinfo_T *spin, char_u *fname));
+! static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int over_write, int added_word));
+ static void spell_message __ARGS((spellinfo_T *spin, char_u *str));
+ static void init_spellfile __ARGS((void));
+
+***************
+*** 9085,9095 ****
+ * and ".spl" is appended to make the output file name.
+ */
+ static void
+! mkspell(fcount, fnames, ascii, overwrite, added_word)
+ int fcount;
+ char_u **fnames;
+ int ascii; /* -ascii argument given */
+! int overwrite; /* overwrite existing output file */
+ int added_word; /* invoked through "zg" */
+ {
+ char_u *fname = NULL;
+--- 9085,9095 ----
+ * and ".spl" is appended to make the output file name.
+ */
+ static void
+! mkspell(fcount, fnames, ascii, over_write, added_word)
+ int fcount;
+ char_u **fnames;
+ int ascii; /* -ascii argument given */
+! int over_write; /* overwrite existing output file */
+ int added_word; /* invoked through "zg" */
+ {
+ char_u *fname = NULL;
+***************
+*** 9173,9179 ****
+ {
+ /* Check for overwriting before doing things that may take a lot of
+ * time. */
+! if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
+ {
+ EMSG(_(e_exists));
+ goto theend;
+--- 9173,9179 ----
+ {
+ /* Check for overwriting before doing things that may take a lot of
+ * time. */
+! if (!over_write && mch_stat((char *)wfname, &st) >= 0)
+ {
+ EMSG(_(e_exists));
+ goto theend;
+*** ../vim-7.3.399/src/syntax.c 2011-06-19 04:54:17.000000000 +0200
+--- src/syntax.c 2012-01-10 22:10:23.000000000 +0100
+***************
+*** 4006,4022 ****
+ }
+
+ static void
+! syn_list_flags(nl, flags, attr)
+! struct name_list *nl;
+ int flags;
+ int attr;
+ {
+ int i;
+
+! for (i = 0; nl[i].flag != 0; ++i)
+! if (flags & nl[i].flag)
+ {
+! msg_puts_attr((char_u *)nl[i].name, attr);
+ msg_putchar(' ');
+ }
+ }
+--- 4006,4022 ----
+ }
+
+ static void
+! syn_list_flags(nlist, flags, attr)
+! struct name_list *nlist;
+ int flags;
+ int attr;
+ {
+ int i;
+
+! for (i = 0; nlist[i].flag != 0; ++i)
+! if (flags & nlist[i].flag)
+ {
+! msg_puts_attr((char_u *)nlist[i].name, attr);
+ msg_putchar(' ');
+ }
+ }
+*** ../vim-7.3.399/src/tag.c 2011-12-14 14:15:12.000000000 +0100
+--- src/tag.c 2012-01-10 21:51:05.000000000 +0100
+***************
+*** 1353,1359 ****
+ int match_count = 0; /* number of matches found */
+ char_u **matches;
+ int mtt;
+- int len;
+ int help_save;
+ #ifdef FEAT_MULTI_LANG
+ int help_pri = 0;
+--- 1353,1358 ----
+***************
+*** 2235,2240 ****
+--- 2234,2241 ----
+ */
+ if (ga_grow(&ga_match[mtt], 1) == OK)
+ {
++ int len;
++
+ if (help_only)
+ {
+ #ifdef FEAT_MULTI_LANG
+*** ../vim-7.3.399/src/window.c 2011-12-30 15:01:55.000000000 +0100
+--- src/window.c 2012-01-10 22:11:41.000000000 +0100
+***************
+*** 683,701 ****
+ }
+
+ /*
+! * When "newwin" is NULL: split the current window in two.
+! * When "newwin" is not NULL: insert this window at the far
+ * top/left/right/bottom.
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! win_split_ins(size, flags, newwin, dir)
+ int size;
+ int flags;
+! win_T *newwin;
+ int dir;
+ {
+! win_T *wp = newwin;
+ win_T *oldwin;
+ int new_size = size;
+ int i;
+--- 683,701 ----
+ }
+
+ /*
+! * When "new_wp" is NULL: split the current window in two.
+! * When "new_wp" is not NULL: insert this window at the far
+ * top/left/right/bottom.
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! win_split_ins(size, flags, new_wp, dir)
+ int size;
+ int flags;
+! win_T *new_wp;
+ int dir;
+ {
+! win_T *wp = new_wp;
+ win_T *oldwin;
+ int new_size = size;
+ int i;
+***************
+*** 718,724 ****
+ /* add a status line when p_ls == 1 and splitting the first window */
+ if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
+ {
+! if (oldwin->w_height <= p_wmh && newwin == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+--- 718,724 ----
+ /* add a status line when p_ls == 1 and splitting the first window */
+ if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
+ {
+! if (oldwin->w_height <= p_wmh && new_wp == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+***************
+*** 751,757 ****
+ }
+ else
+ available = oldwin->w_width;
+! if (available < needed && newwin == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+--- 751,757 ----
+ }
+ else
+ available = oldwin->w_width;
+! if (available < needed && new_wp == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+***************
+*** 815,821 ****
+ available = oldwin->w_height;
+ needed += p_wmh;
+ }
+! if (available < needed && newwin == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+--- 815,821 ----
+ available = oldwin->w_height;
+ needed += p_wmh;
+ }
+! if (available < needed && new_wp == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+***************
+*** 888,907 ****
+ p_sb))))
+ {
+ /* new window below/right of current one */
+! if (newwin == NULL)
+ wp = win_alloc(oldwin, FALSE);
+ else
+ win_append(oldwin, wp);
+ }
+ else
+ {
+! if (newwin == NULL)
+ wp = win_alloc(oldwin->w_prev, FALSE);
+ else
+ win_append(oldwin->w_prev, wp);
+ }
+
+! if (newwin == NULL)
+ {
+ if (wp == NULL)
+ return FAIL;
+--- 888,907 ----
+ p_sb))))
+ {
+ /* new window below/right of current one */
+! if (new_wp == NULL)
+ wp = win_alloc(oldwin, FALSE);
+ else
+ win_append(oldwin, wp);
+ }
+ else
+ {
+! if (new_wp == NULL)
+ wp = win_alloc(oldwin->w_prev, FALSE);
+ else
+ win_append(oldwin->w_prev, wp);
+ }
+
+! if (new_wp == NULL)
+ {
+ if (wp == NULL)
+ return FAIL;
+***************
+*** 972,981 ****
+ frp->fr_parent = curfrp;
+ }
+
+! if (newwin == NULL)
+ frp = wp->w_frame;
+ else
+! frp = newwin->w_frame;
+ frp->fr_parent = curfrp->fr_parent;
+
+ /* Insert the new frame at the right place in the frame list. */
+--- 972,981 ----
+ frp->fr_parent = curfrp;
+ }
+
+! if (new_wp == NULL)
+ frp = wp->w_frame;
+ else
+! frp = new_wp->w_frame;
+ frp->fr_parent = curfrp->fr_parent;
+
+ /* Insert the new frame at the right place in the frame list. */
+***************
+*** 4284,4302 ****
+ win_T *after UNUSED;
+ int hidden UNUSED;
+ {
+! win_T *newwin;
+
+ /*
+ * allocate window structure and linesizes arrays
+ */
+! newwin = (win_T *)alloc_clear((unsigned)sizeof(win_T));
+! if (newwin != NULL && win_alloc_lines(newwin) == FAIL)
+ {
+! vim_free(newwin);
+! newwin = NULL;
+ }
+
+! if (newwin != NULL)
+ {
+ #ifdef FEAT_AUTOCMD
+ /* Don't execute autocommands while the window is not properly
+--- 4284,4302 ----
+ win_T *after UNUSED;
+ int hidden UNUSED;
+ {
+! win_T *new_wp;
+
+ /*
+ * allocate window structure and linesizes arrays
+ */
+! new_wp = (win_T *)alloc_clear((unsigned)sizeof(win_T));
+! if (new_wp != NULL && win_alloc_lines(new_wp) == FAIL)
+ {
+! vim_free(new_wp);
+! new_wp = NULL;
+ }
+
+! if (new_wp != NULL)
+ {
+ #ifdef FEAT_AUTOCMD
+ /* Don't execute autocommands while the window is not properly
+***************
+*** 4309,4361 ****
+ */
+ #ifdef FEAT_WINDOWS
+ if (!hidden)
+! win_append(after, newwin);
+ #endif
+ #ifdef FEAT_VERTSPLIT
+! newwin->w_wincol = 0;
+! newwin->w_width = Columns;
+ #endif
+
+ /* position the display and the cursor at the top of the file. */
+! newwin->w_topline = 1;
+ #ifdef FEAT_DIFF
+! newwin->w_topfill = 0;
+ #endif
+! newwin->w_botline = 2;
+! newwin->w_cursor.lnum = 1;
+ #ifdef FEAT_SCROLLBIND
+! newwin->w_scbind_pos = 1;
+ #endif
+
+ /* We won't calculate w_fraction until resizing the window */
+! newwin->w_fraction = 0;
+! newwin->w_prev_fraction_row = -1;
+
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+ {
+! gui_create_scrollbar(&newwin->w_scrollbars[SBAR_LEFT],
+! SBAR_LEFT, newwin);
+! gui_create_scrollbar(&newwin->w_scrollbars[SBAR_RIGHT],
+! SBAR_RIGHT, newwin);
+ }
+ #endif
+ #ifdef FEAT_EVAL
+ /* init w: variables */
+! init_var_dict(&newwin->w_vars, &newwin->w_winvar);
+ #endif
+ #ifdef FEAT_FOLDING
+! foldInitWin(newwin);
+ #endif
+ #ifdef FEAT_AUTOCMD
+ unblock_autocmds();
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+! newwin->w_match_head = NULL;
+! newwin->w_next_match_id = 4;
+ #endif
+ }
+! return newwin;
+ }
+
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+--- 4309,4361 ----
+ */
+ #ifdef FEAT_WINDOWS
+ if (!hidden)
+! win_append(after, new_wp);
+ #endif
+ #ifdef FEAT_VERTSPLIT
+! new_wp->w_wincol = 0;
+! new_wp->w_width = Columns;
+ #endif
+
+ /* position the display and the cursor at the top of the file. */
+! new_wp->w_topline = 1;
+ #ifdef FEAT_DIFF
+! new_wp->w_topfill = 0;
+ #endif
+! new_wp->w_botline = 2;
+! new_wp->w_cursor.lnum = 1;
+ #ifdef FEAT_SCROLLBIND
+! new_wp->w_scbind_pos = 1;
+ #endif
+
+ /* We won't calculate w_fraction until resizing the window */
+! new_wp->w_fraction = 0;
+! new_wp->w_prev_fraction_row = -1;
+
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+ {
+! gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_LEFT],
+! SBAR_LEFT, new_wp);
+! gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_RIGHT],
+! SBAR_RIGHT, new_wp);
+ }
+ #endif
+ #ifdef FEAT_EVAL
+ /* init w: variables */
+! init_var_dict(&new_wp->w_vars, &new_wp->w_winvar);
+ #endif
+ #ifdef FEAT_FOLDING
+! foldInitWin(new_wp);
+ #endif
+ #ifdef FEAT_AUTOCMD
+ unblock_autocmds();
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+! new_wp->w_match_head = NULL;
+! new_wp->w_next_match_id = 4;
+ #endif
+ }
+! return new_wp;
+ }
+
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+*** ../vim-7.3.399/src/version.c 2012-01-10 18:37:53.000000000 +0100
+--- src/version.c 2012-01-10 22:23:10.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 400,
+ /**/
+
+--
+A parent can be arrested if his child cannot hold back a burp during a church
+service.
+ [real standing law in Nebraska, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.401
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.401
+Problem: A couple more shadowed variables.
+Solution: Rename the variables.
+Files: src/netbeans.c
+
+
+*** ../vim-7.3.400/src/netbeans.c 2012-01-10 22:26:12.000000000 +0100
+--- src/netbeans.c 2012-01-10 22:30:17.000000000 +0100
+***************
+*** 443,449 ****
+ FILE *fp;
+ char_u buf[BUFSIZ];
+ char_u *lp;
+! char_u *nl;
+ #ifdef UNIX
+ struct stat st;
+
+--- 443,449 ----
+ FILE *fp;
+ char_u buf[BUFSIZ];
+ char_u *lp;
+! char_u *nlp;
+ #ifdef UNIX
+ struct stat st;
+
+***************
+*** 472,479 ****
+ /* Read the file. There should be one of each parameter */
+ while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
+ {
+! if ((nl = vim_strchr(lp, '\n')) != NULL)
+! *nl = 0; /* strip off the trailing newline */
+
+ if (STRNCMP(lp, "host=", 5) == 0)
+ {
+--- 472,479 ----
+ /* Read the file. There should be one of each parameter */
+ while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
+ {
+! if ((nlp = vim_strchr(lp, '\n')) != NULL)
+! *nlp = 0; /* strip off the trailing newline */
+
+ if (STRNCMP(lp, "host=", 5) == 0)
+ {
+***************
+*** 1740,1746 ****
+ int added = 0;
+ int oldFire = netbeansFireChanges;
+ int old_b_changed;
+! char_u *nl;
+ linenr_T lnum;
+ linenr_T lnum_start;
+ pos_T *pos;
+--- 1740,1746 ----
+ int added = 0;
+ int oldFire = netbeansFireChanges;
+ int old_b_changed;
+! char_u *nlp;
+ linenr_T lnum;
+ linenr_T lnum_start;
+ pos_T *pos;
+***************
+*** 1780,1787 ****
+ do_update = 1;
+ while (*args != NUL)
+ {
+! nl = vim_strchr(args, '\n');
+! if (nl == NULL)
+ {
+ /* Incomplete line, probably truncated. Next "insert"
+ * command should append to this one. */
+--- 1780,1787 ----
+ do_update = 1;
+ while (*args != NUL)
+ {
+! nlp = vim_strchr(args, '\n');
+! if (nlp == NULL)
+ {
+ /* Incomplete line, probably truncated. Next "insert"
+ * command should append to this one. */
+***************
+*** 1789,1801 ****
+ }
+ else
+ {
+! len = nl - args;
+
+ /*
+ * We need to detect EOL style, because the commands
+ * use a character offset.
+ */
+! if (nl > args && nl[-1] == '\r')
+ {
+ ff_detected = EOL_DOS;
+ --len;
+--- 1789,1801 ----
+ }
+ else
+ {
+! len = nlp - args;
+
+ /*
+ * We need to detect EOL style, because the commands
+ * use a character offset.
+ */
+! if (nlp > args && nlp[-1] == '\r')
+ {
+ ff_detected = EOL_DOS;
+ --len;
+***************
+*** 1814,1820 ****
+
+ /* Insert halfway a line. For simplicity we assume we
+ * need to append to the line. */
+! newline = alloc_check((unsigned)(STRLEN(oldline) + len + 1));
+ if (newline != NULL)
+ {
+ STRCPY(newline, oldline);
+--- 1814,1821 ----
+
+ /* Insert halfway a line. For simplicity we assume we
+ * need to append to the line. */
+! newline = alloc_check(
+! (unsigned)(STRLEN(oldline) + len + 1));
+ if (newline != NULL)
+ {
+ STRCPY(newline, oldline);
+***************
+*** 1826,1839 ****
+ {
+ /* Append a new line. Not that we always do this,
+ * also when the text doesn't end in a "\n". */
+! ml_append((linenr_T)(lnum - 1), args, (colnr_T)(len + 1), FALSE);
+ ++added;
+ }
+
+! if (nl == NULL)
+ break;
+ ++lnum;
+! args = nl + 1;
+ }
+
+ /* Adjust the marks below the inserted lines. */
+--- 1827,1841 ----
+ {
+ /* Append a new line. Not that we always do this,
+ * also when the text doesn't end in a "\n". */
+! ml_append((linenr_T)(lnum - 1), args,
+! (colnr_T)(len + 1), FALSE);
+ ++added;
+ }
+
+! if (nlp == NULL)
+ break;
+ ++lnum;
+! args = nlp + 1;
+ }
+
+ /* Adjust the marks below the inserted lines. */
+*** ../vim-7.3.400/src/version.c 2012-01-10 22:26:12.000000000 +0100
+--- src/version.c 2012-01-10 22:30:47.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 401,
+ /**/
+
+--
+So when I saw the post to comp.editors, I rushed over to the FTP site to
+grab it. So I yank apart the tarball, light x candles, where x= the
+vim version multiplied by the md5sum of the source divided by the MAC of
+my NIC (8A3FA78155A8A1D346C3C4A), put on black robes, dim the lights,
+wave a dead chicken over the hard drive, and summon the power of GNU GCC
+with the magic words "make config ; make!".
+ [Jason Spence, compiling Vim 5.0]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.402
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.402
+Problem: When jumping to the first error a line of the buffer is sometimes
+ redrawn on top of the list of errors.
+Solution: Do not call update_topline_redraw() if the display was scrolled
+ up.
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.401/src/quickfix.c 2012-01-10 17:13:48.000000000 +0100
+--- src/quickfix.c 2012-01-20 13:13:25.000000000 +0100
+***************
+*** 1842,1849 ****
+ #endif
+ if (print_message)
+ {
+! /* Update the screen before showing the message */
+! update_topline_redraw();
+ sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
+ qi->qf_lists[qi->qf_curlist].qf_count,
+ qf_ptr->qf_cleared ? _(" (line deleted)") : "",
+--- 1842,1851 ----
+ #endif
+ if (print_message)
+ {
+! /* Update the screen before showing the message, unless the screen
+! * scrolled up. */
+! if (!msg_scrolled)
+! update_topline_redraw();
+ sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
+ qi->qf_lists[qi->qf_curlist].qf_count,
+ qf_ptr->qf_cleared ? _(" (line deleted)") : "",
+*** ../vim-7.3.401/src/version.c 2012-01-10 22:31:26.000000000 +0100
+--- src/version.c 2012-01-20 13:17:50.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 402,
+ /**/
+
+--
+If all you have is a hammer, everything looks like a nail.
+When your hammer is C++, everything begins to look like a thumb.
+ -- Steve Hoflich, comp.lang.c++
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.403
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.403
+Problem: ":helpgrep" does not trigger QuickFixCmd* autocommands.
+Solution: Trigger the autocommands. (Christian Brabandt)
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.402/src/quickfix.c 2012-01-20 13:28:28.000000000 +0100
+--- src/quickfix.c 2012-01-20 13:37:10.000000000 +0100
+***************
+*** 3878,3893 ****
+ qf_info_T *qi = &ql_info;
+ int new_qi = FALSE;
+ win_T *wp;
+!
+! /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
+! save_cpo = p_cpo;
+! p_cpo = empty_option;
+
+ #ifdef FEAT_MULTI_LANG
+ /* Check for a specified language */
+ lang = check_help_lang(eap->arg);
+ #endif
+
+ if (eap->cmdidx == CMD_lhelpgrep)
+ {
+ /* Find an existing help window */
+--- 3878,3912 ----
+ qf_info_T *qi = &ql_info;
+ int new_qi = FALSE;
+ win_T *wp;
+! #ifdef FEAT_AUTOCMD
+! char_u *au_name = NULL;
+! #endif
+
+ #ifdef FEAT_MULTI_LANG
+ /* Check for a specified language */
+ lang = check_help_lang(eap->arg);
+ #endif
+
++ #ifdef FEAT_AUTOCMD
++ switch (eap->cmdidx)
++ {
++ case CMD_helpgrep: au_name = (char_u *)"helpgrep"; break;
++ case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break;
++ default: break;
++ }
++ if (au_name != NULL)
++ {
++ apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
++ curbuf->b_fname, TRUE, curbuf);
++ if (did_throw || force_abort)
++ return;
++ }
++ #endif
++
++ /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
++ save_cpo = p_cpo;
++ p_cpo = empty_option;
++
+ if (eap->cmdidx == CMD_lhelpgrep)
+ {
+ /* Find an existing help window */
+***************
+*** 4036,4041 ****
+--- 4055,4071 ----
+ qf_update_buffer(qi);
+ #endif
+
++ #ifdef FEAT_AUTOCMD
++ if (au_name != NULL)
++ {
++ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
++ curbuf->b_fname, TRUE, curbuf);
++ if (!new_qi && qi != &ql_info && qf_find_buf(qi) == NULL)
++ /* autocommands made "qi" invalid */
++ return;
++ }
++ #endif
++
+ /* Jump to first match. */
+ if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
+ qf_jump(qi, 0, 0, FALSE);
+*** ../vim-7.3.402/src/version.c 2012-01-20 13:28:28.000000000 +0100
+--- src/version.c 2012-01-20 13:30:37.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 403,
+ /**/
+
+--
+Looking at Perl through Lisp glasses, Perl looks atrocious.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.404
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.404
+Problem: When a complete function uses refresh "always" redo will not work
+ properly.
+Solution: Do not reset compl_leader when compl_opt_refresh_always is set.
+ (Yasuhiro Matsumoto)
+Files: src/edit.c
+
+
+*** ../vim-7.3.403/src/edit.c 2012-01-10 22:26:12.000000000 +0100
+--- src/edit.c 2012-01-20 14:26:06.000000000 +0100
+***************
+*** 3465,3475 ****
+ if (ins_compl_need_restart())
+ ins_compl_restart();
+
+! vim_free(compl_leader);
+! compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+ (int)(curwin->w_cursor.col - compl_col));
+! if (compl_leader != NULL)
+! ins_compl_new_leader();
+ }
+
+ /*
+--- 3465,3481 ----
+ if (ins_compl_need_restart())
+ ins_compl_restart();
+
+! /* When 'always' is set, don't reset compl_leader. While completing,
+! * cursor don't point original position, changing compl_leader would
+! * break redo. */
+! if (!compl_opt_refresh_always)
+! {
+! vim_free(compl_leader);
+! compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+ (int)(curwin->w_cursor.col - compl_col));
+! if (compl_leader != NULL)
+! ins_compl_new_leader();
+! }
+ }
+
+ /*
+***************
+*** 4554,4559 ****
+--- 4560,4570 ----
+ int found_end = FALSE;
+ int advance;
+
++ /* When user complete function return -1 for findstart which is next
++ * time of 'always', compl_shown_match become NULL. */
++ if (compl_shown_match == NULL)
++ return -1;
++
+ if (compl_leader != NULL
+ && (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
+ {
+*** ../vim-7.3.403/src/version.c 2012-01-20 13:39:03.000000000 +0100
+--- src/version.c 2012-01-20 14:31:26.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 404,
+ /**/
+
+--
+ARTHUR: I've said I'm sorry about the old woman, but from the behind you
+ looked ...
+DENNIS: What I object to is that you automatically treat me like an inferior...
+ARTHUR: Well ... I AM king.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.405
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.405
+Problem: When xterm gets back the function keys it may delete the urxvt
+ mouse termcap code.
+Solution: Check for the whole code, not just the start. (Egmont Koblinger)
+Files: src/keymap.h, src/misc2.c, src/term.c
+
+
+*** ../vim-7.3.404/src/keymap.h 2011-10-20 21:09:25.000000000 +0200
+--- src/keymap.h 2012-01-20 16:35:43.000000000 +0100
+***************
+*** 411,416 ****
+--- 411,417 ----
+ #define K_DEC_MOUSE TERMCAP2KEY(KS_DEC_MOUSE, KE_FILLER)
+ #define K_JSBTERM_MOUSE TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
+ #define K_PTERM_MOUSE TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
++ #define K_URXVT_MOUSE TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
+
+ #define K_SELECT TERMCAP2KEY(KS_SELECT, KE_FILLER)
+ #define K_TEAROFF TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
+*** ../vim-7.3.404/src/misc2.c 2012-01-10 22:26:12.000000000 +0100
+--- src/misc2.c 2012-01-20 16:38:27.000000000 +0100
+***************
+*** 2416,2425 ****
+--- 2416,2436 ----
+ {'<', (char_u *)"lt"},
+
+ {K_MOUSE, (char_u *)"Mouse"},
++ #ifdef FEAT_MOUSE_NET
+ {K_NETTERM_MOUSE, (char_u *)"NetMouse"},
++ #endif
++ #ifdef FEAT_MOUSE_DEC
+ {K_DEC_MOUSE, (char_u *)"DecMouse"},
++ #endif
++ #ifdef FEAT_MOUSE_JSB
+ {K_JSBTERM_MOUSE, (char_u *)"JsbMouse"},
++ #endif
++ #ifdef FEAT_MOUSE_PTERM
+ {K_PTERM_MOUSE, (char_u *)"PtermMouse"},
++ #endif
++ #ifdef FEAT_MOUSE_URXVT
++ {K_URXVT_MOUSE, (char_u *)"UrxvtMouse"},
++ #endif
+ {K_LEFTMOUSE, (char_u *)"LeftMouse"},
+ {K_LEFTMOUSE_NM, (char_u *)"LeftMouseNM"},
+ {K_LEFTDRAG, (char_u *)"LeftDrag"},
+*** ../vim-7.3.404/src/term.c 2011-12-01 20:59:16.000000000 +0100
+--- src/term.c 2012-01-20 16:50:41.000000000 +0100
+***************
+*** 5252,5263 ****
+ char_u *src;
+ {
+ int i;
+! int slen;
+
+ for (i = 0; i < tc_len; ++i)
+ {
+! slen = termcodes[i].len;
+! if (slen > 1 && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
+ return i;
+ }
+ return -1;
+--- 5252,5263 ----
+ char_u *src;
+ {
+ int i;
+! int slen = STRLEN(src);
+
+ for (i = 0; i < tc_len; ++i)
+ {
+! if (slen == termcodes[i].len
+! && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
+ return i;
+ }
+ return -1;
+*** ../vim-7.3.404/src/version.c 2012-01-20 14:32:22.000000000 +0100
+--- src/version.c 2012-01-20 16:59:47.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 405,
+ /**/
+
+--
+"The future's already arrived - it's just not evenly distributed yet."
+ -- William Gibson
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.406
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.406
+Problem: Multi-byte characters in b:browsefilter are not handled correctly.
+Solution: First use convert_filter() normally and then convert to wide
+ characters. (Taro Muraoka)
+Files: src/gui_w48.c
+
+
+*** ../vim-7.3.405/src/gui_w48.c 2011-09-07 18:58:24.000000000 +0200
+--- src/gui_w48.c 2012-01-20 17:54:19.000000000 +0100
+***************
+*** 328,333 ****
+--- 328,337 ----
+ static LRESULT _OnImeNotify(HWND hWnd, DWORD dwCommand, DWORD dwData);
+ #endif
+
++ #if defined(FEAT_MBYTE) && defined(WIN3264)
++ static char_u *convert_filter(char_u *s);
++ #endif
++
+ #ifdef DEBUG_PRINT_ERROR
+ /*
+ * Print out the last Windows error message
+***************
+*** 3275,3302 ****
+
+ # if defined(FEAT_MBYTE) && defined(WIN3264)
+ /*
+! * Wide version of convert_filter(). Keep in sync!
+ */
+ static WCHAR *
+ convert_filterW(char_u *s)
+ {
+! WCHAR *res;
+! unsigned s_len = (unsigned)STRLEN(s);
+! unsigned i;
+
+! res = (WCHAR *)alloc((s_len + 3) * sizeof(WCHAR));
+! if (res != NULL)
+! {
+! for (i = 0; i < s_len; ++i)
+! if (s[i] == '\t' || s[i] == '\n')
+! res[i] = '\0';
+! else
+! res[i] = s[i];
+! res[s_len] = NUL;
+! /* Add two extra NULs to make sure it's properly terminated. */
+! res[s_len + 1] = NUL;
+! res[s_len + 2] = NUL;
+! }
+ return res;
+ }
+
+--- 3279,3298 ----
+
+ # if defined(FEAT_MBYTE) && defined(WIN3264)
+ /*
+! * Wide version of convert_filter().
+ */
+ static WCHAR *
+ convert_filterW(char_u *s)
+ {
+! char_u *tmp;
+! int len;
+
+! tmp = convert_filter(s);
+! if (tmp == NULL)
+! return NULL;
+! len = (int)STRLEN(s) + 3;
+! res = enc_to_utf16(tmp, &len);
+! vim_free(tmp);
+ return res;
+ }
+
+*** ../vim-7.3.405/src/version.c 2012-01-20 17:15:47.000000000 +0100
+--- src/version.c 2012-01-20 17:57:09.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 406,
+ /**/
+
+--
+DENNIS: Look, strange women lying on their backs in ponds handing out
+ swords ... that's no basis for a system of government. Supreme
+ executive power derives from a mandate from the masses, not from some
+ farcical aquatic ceremony.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.407
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.407
+Problem: ":12verbose call F()" may duplicate text while trying to truncate.
+ (Thinca)
+Solution: Only truncate when there is not enough room. Also check the byte
+ length of the buffer.
+Files: src/buffer.c, src/eval.c, src/ex_getln.c, src/message.c,
+ src/proto/message.pro
+
+
+*** ../vim-7.3.406/src/buffer.c 2011-12-30 13:39:04.000000000 +0100
+--- src/buffer.c 2012-01-20 18:37:43.000000000 +0100
+***************
+*** 3258,3266 ****
+ if (maxlen > 0)
+ {
+ /* make it shorter by removing a bit in the middle */
+! len = vim_strsize(buf);
+! if (len > maxlen)
+! trunc_string(buf, buf, maxlen);
+ }
+ }
+ }
+--- 3258,3265 ----
+ if (maxlen > 0)
+ {
+ /* make it shorter by removing a bit in the middle */
+! if (vim_strsize(buf) > maxlen)
+! trunc_string(buf, buf, maxlen, IOSIZE);
+ }
+ }
+ }
+*** ../vim-7.3.406/src/eval.c 2012-01-10 22:26:12.000000000 +0100
+--- src/eval.c 2012-01-20 20:43:32.000000000 +0100
+***************
+*** 22163,22170 ****
+ s = tv2string(&argvars[i], &tofree, numbuf2, 0);
+ if (s != NULL)
+ {
+! trunc_string(s, buf, MSG_BUF_CLEN);
+! msg_puts(buf);
+ vim_free(tofree);
+ }
+ }
+--- 22163,22174 ----
+ s = tv2string(&argvars[i], &tofree, numbuf2, 0);
+ if (s != NULL)
+ {
+! if (vim_strsize(s) > MSG_BUF_CLEN)
+! {
+! trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
+! s = buf;
+! }
+! msg_puts(s);
+ vim_free(tofree);
+ }
+ }
+***************
+*** 22252,22259 ****
+ s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+ if (s != NULL)
+ {
+! trunc_string(s, buf, MSG_BUF_CLEN);
+! smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
+ vim_free(tofree);
+ }
+ }
+--- 22256,22267 ----
+ s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+ if (s != NULL)
+ {
+! if (vim_strsize(s) > MSG_BUF_CLEN)
+! {
+! trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
+! s = buf;
+! }
+! smsg((char_u *)_("%s returning %s"), sourcing_name, s);
+ vim_free(tofree);
+ }
+ }
+*** ../vim-7.3.406/src/ex_getln.c 2011-12-08 18:44:47.000000000 +0100
+--- src/ex_getln.c 2012-01-20 18:40:46.000000000 +0100
+***************
+*** 5923,5929 ****
+ hist[i].hisnum);
+ if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+! (int)Columns - 10);
+ else
+ STRCAT(IObuff, hist[i].hisstr);
+ msg_outtrans(IObuff);
+--- 5923,5929 ----
+ hist[i].hisnum);
+ if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+! (int)Columns - 10, IOSIZE - STRLEN(IObuff));
+ else
+ STRCAT(IObuff, hist[i].hisstr);
+ msg_outtrans(IObuff);
+*** ../vim-7.3.406/src/message.c 2012-01-10 22:26:12.000000000 +0100
+--- src/message.c 2012-01-20 20:38:29.000000000 +0100
+***************
+*** 222,236 ****
+ if (enc_utf8)
+ /* may have up to 18 bytes per cell (6 per char, up to two
+ * composing chars) */
+! buf = alloc((room + 2) * 18);
+ else if (enc_dbcs == DBCS_JPNU)
+ /* may have up to 2 bytes per cell for euc-jp */
+! buf = alloc((room + 2) * 2);
+ else
+ #endif
+! buf = alloc(room + 2);
+ if (buf != NULL)
+! trunc_string(s, buf, room);
+ }
+ }
+ return buf;
+--- 222,237 ----
+ if (enc_utf8)
+ /* may have up to 18 bytes per cell (6 per char, up to two
+ * composing chars) */
+! len = (room + 2) * 18;
+ else if (enc_dbcs == DBCS_JPNU)
+ /* may have up to 2 bytes per cell for euc-jp */
+! len = (room + 2) * 2;
+ else
+ #endif
+! len = room + 2;
+! buf = alloc(len);
+ if (buf != NULL)
+! trunc_string(s, buf, room, len);
+ }
+ }
+ return buf;
+***************
+*** 241,250 ****
+ * "s" and "buf" may be equal.
+ */
+ void
+! trunc_string(s, buf, room)
+ char_u *s;
+ char_u *buf;
+ int room;
+ {
+ int half;
+ int len;
+--- 242,252 ----
+ * "s" and "buf" may be equal.
+ */
+ void
+! trunc_string(s, buf, room, buflen)
+ char_u *s;
+ char_u *buf;
+ int room;
++ int buflen;
+ {
+ int half;
+ int len;
+***************
+*** 257,263 ****
+ len = 0;
+
+ /* First part: Start of the string. */
+! for (e = 0; len < half; ++e)
+ {
+ if (s[e] == NUL)
+ {
+--- 259,265 ----
+ len = 0;
+
+ /* First part: Start of the string. */
+! for (e = 0; len < half && e < buflen; ++e)
+ {
+ if (s[e] == NUL)
+ {
+***************
+*** 274,280 ****
+ if (has_mbyte)
+ for (n = (*mb_ptr2len)(s + e); --n > 0; )
+ {
+! ++e;
+ buf[e] = s[e];
+ }
+ #endif
+--- 276,283 ----
+ if (has_mbyte)
+ for (n = (*mb_ptr2len)(s + e); --n > 0; )
+ {
+! if (++e == buflen)
+! break;
+ buf[e] = s[e];
+ }
+ #endif
+***************
+*** 319,326 ****
+ }
+
+ /* Set the middle and copy the last part. */
+! mch_memmove(buf + e, "...", (size_t)3);
+! STRMOVE(buf + e + 3, s + i);
+ }
+
+ /*
+--- 322,340 ----
+ }
+
+ /* Set the middle and copy the last part. */
+! if (e + 3 < buflen)
+! {
+! mch_memmove(buf + e, "...", (size_t)3);
+! len = STRLEN(s + i) + 1;
+! if (len >= buflen - e - 3)
+! len = buflen - e - 3 - 1;
+! mch_memmove(buf + e + 3, s + i, len);
+! buf[e + 3 + len - 1] = NUL;
+! }
+! else
+! {
+! buf[e - 1] = NUL; // make sure it is truncated
+! }
+ }
+
+ /*
+*** ../vim-7.3.406/src/proto/message.pro 2011-01-17 20:08:03.000000000 +0100
+--- src/proto/message.pro 2012-01-20 18:51:19.000000000 +0100
+***************
+*** 4,10 ****
+ int msg_attr __ARGS((char_u *s, int attr));
+ int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
+ char_u *msg_strtrunc __ARGS((char_u *s, int force));
+! void trunc_string __ARGS((char_u *s, char_u *buf, int room));
+ void reset_last_sourcing __ARGS((void));
+ void msg_source __ARGS((int attr));
+ int emsg_not_now __ARGS((void));
+--- 4,10 ----
+ int msg_attr __ARGS((char_u *s, int attr));
+ int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
+ char_u *msg_strtrunc __ARGS((char_u *s, int force));
+! void trunc_string __ARGS((char_u *s, char_u *buf, int room, int buflen));
+ void reset_last_sourcing __ARGS((void));
+ void msg_source __ARGS((int attr));
+ int emsg_not_now __ARGS((void));
+*** ../vim-7.3.406/src/version.c 2012-01-20 17:57:47.000000000 +0100
+--- src/version.c 2012-01-20 20:42:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 407,
+ /**/
+
+--
+Hanson's Treatment of Time:
+ There are never enough hours in a day, but always too
+ many days before Saturday.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.408
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.408 (after 7.3.406)
+Problem: Missing declaration.
+Solution: Add the declaration. (John Marriott)
+Files: src/gui_w48.c
+
+
+*** ../vim-7.3.407/src/gui_w48.c 2012-01-20 17:57:47.000000000 +0100
+--- src/gui_w48.c 2012-01-20 20:51:57.000000000 +0100
+***************
+*** 3286,3291 ****
+--- 3286,3292 ----
+ {
+ char_u *tmp;
+ int len;
++ WCHAR *res;
+
+ tmp = convert_filter(s);
+ if (tmp == NULL)
+*** ../vim-7.3.407/src/version.c 2012-01-20 20:44:38.000000000 +0100
+--- src/version.c 2012-01-20 20:52:56.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 408,
+ /**/
+
+--
+BLACK KNIGHT: None shall pass.
+ARTHUR: I have no quarrel with you, brave Sir knight, but I must cross
+ this bridge.
+BLACK KNIGHT: Then you shall die.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.409
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.409
+Problem: The license in pty.c is unclear.
+Solution: Add a comment about the license.
+Files: src/pty.c
+
+
+*** ../vim-7.3.408/src/pty.c 2011-05-19 13:40:47.000000000 +0200
+--- src/pty.c 2012-01-20 21:07:56.000000000 +0100
+***************
+*** 14,19 ****
+--- 14,23 ----
+ * It has been modified to work better with Vim.
+ * The parts that are not used in Vim have been deleted.
+ * See the "screen" sources for the complete stuff.
++ *
++ * This specific version is distibuted under the Vim license (attribution by
++ * Juergen Weigert), the GPL applies to the original version, see the
++ * copyright notice below.
+ */
+
+ /* Copyright (c) 1993
+*** ../vim-7.3.408/src/version.c 2012-01-20 20:54:15.000000000 +0100
+--- src/version.c 2012-01-20 21:13:11.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 409,
+ /**/
+
+--
+ARTHUR: What are you going to do. bleed on me?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.410
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.410
+Problem: Compiler error for // comment. (Joachim Schmitz)
+Solution: Turn into /* comment */.
+Files: src/message.c
+
+
+*** ../vim-7.3.409/src/message.c 2012-01-20 20:44:38.000000000 +0100
+--- src/message.c 2012-01-23 20:46:36.000000000 +0100
+***************
+*** 333,339 ****
+ }
+ else
+ {
+! buf[e - 1] = NUL; // make sure it is truncated
+ }
+ }
+
+--- 333,339 ----
+ }
+ else
+ {
+! buf[e - 1] = NUL; /* make sure it is truncated */
+ }
+ }
+
+*** ../vim-7.3.409/src/version.c 2012-01-20 21:13:55.000000000 +0100
+--- src/version.c 2012-01-23 20:47:30.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 410,
+ /**/
+
+
+--
+Are leaders born or made? And if they're made, can we return them under
+warranty?
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.411
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.411
+Problem: Pasting in Visual mode using the "" register does not work. (John
+ Beckett)
+Solution: Detect that the write is overwriting the pasted register.
+ (Christian Brabandt)
+Files: src/normal.c
+
+
+*** ../vim-7.3.410/src/normal.c 2011-10-04 21:22:40.000000000 +0200
+--- src/normal.c 2012-01-23 22:13:44.000000000 +0100
+***************
+*** 9329,9335 ****
+ # ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(®name);
+ # endif
+! if (regname == 0 || VIM_ISDIGIT(regname)
+ # ifdef FEAT_CLIPBOARD
+ || (clip_unnamed && (regname == '*' || regname == '+'))
+ # endif
+--- 9329,9335 ----
+ # ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(®name);
+ # endif
+! if (regname == 0 || regname == '"' || VIM_ISDIGIT(regname)
+ # ifdef FEAT_CLIPBOARD
+ || (clip_unnamed && (regname == '*' || regname == '+'))
+ # endif
+*** ../vim-7.3.410/src/version.c 2012-01-23 20:48:34.000000000 +0100
+--- src/version.c 2012-01-26 11:42:33.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 411,
+ /**/
+
+--
+Engineers understand that their appearance only bothers other people and
+therefore it is not worth optimizing.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.412
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.412
+Problem: Storing a float in a session file has an additional '&'.
+Solution: Remove the '&'. (Yasuhiro Matsumoto)
+Files: src/eval.c
+
+
+*** ../vim-7.3.411/src/eval.c 2012-01-20 20:44:38.000000000 +0100
+--- src/eval.c 2012-01-26 11:39:39.000000000 +0100
+***************
+*** 22929,22935 ****
+ f = -f;
+ sign = '-';
+ }
+! if ((fprintf(fd, "let %s = %c&%f",
+ this_var->di_key, sign, f) < 0)
+ || put_eol(fd) == FAIL)
+ return FAIL;
+--- 22929,22935 ----
+ f = -f;
+ sign = '-';
+ }
+! if ((fprintf(fd, "let %s = %c%f",
+ this_var->di_key, sign, f) < 0)
+ || put_eol(fd) == FAIL)
+ return FAIL;
+*** ../vim-7.3.411/src/version.c 2012-01-26 11:43:04.000000000 +0100
+--- src/version.c 2012-01-26 11:44:56.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 412,
+ /**/
+
+--
+Imagine a world without hypothetical situations.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.413
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.413
+Problem: Build warnings on MS-Windows.
+Solution: Add type casts. (Mike Williams)
+Files: src/ex_getln.c, src/message.c, src/term.c
+
+
+*** ../vim-7.3.412/src/ex_getln.c 2012-01-20 20:44:38.000000000 +0100
+--- src/ex_getln.c 2012-01-26 12:58:54.000000000 +0100
+***************
+*** 5923,5929 ****
+ hist[i].hisnum);
+ if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+! (int)Columns - 10, IOSIZE - STRLEN(IObuff));
+ else
+ STRCAT(IObuff, hist[i].hisstr);
+ msg_outtrans(IObuff);
+--- 5923,5929 ----
+ hist[i].hisnum);
+ if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+! (int)Columns - 10, IOSIZE - (int)STRLEN(IObuff));
+ else
+ STRCAT(IObuff, hist[i].hisstr);
+ msg_outtrans(IObuff);
+*** ../vim-7.3.412/src/message.c 2012-01-23 20:48:34.000000000 +0100
+--- src/message.c 2012-01-26 12:58:54.000000000 +0100
+***************
+*** 325,331 ****
+ if (e + 3 < buflen)
+ {
+ mch_memmove(buf + e, "...", (size_t)3);
+! len = STRLEN(s + i) + 1;
+ if (len >= buflen - e - 3)
+ len = buflen - e - 3 - 1;
+ mch_memmove(buf + e + 3, s + i, len);
+--- 325,331 ----
+ if (e + 3 < buflen)
+ {
+ mch_memmove(buf + e, "...", (size_t)3);
+! len = (int)STRLEN(s + i) + 1;
+ if (len >= buflen - e - 3)
+ len = buflen - e - 3 - 1;
+ mch_memmove(buf + e + 3, s + i, len);
+*** ../vim-7.3.412/src/term.c 2012-01-20 17:15:47.000000000 +0100
+--- src/term.c 2012-01-26 12:58:54.000000000 +0100
+***************
+*** 5252,5258 ****
+ char_u *src;
+ {
+ int i;
+! int slen = STRLEN(src);
+
+ for (i = 0; i < tc_len; ++i)
+ {
+--- 5252,5258 ----
+ char_u *src;
+ {
+ int i;
+! int slen = (int)STRLEN(src);
+
+ for (i = 0; i < tc_len; ++i)
+ {
+*** ../vim-7.3.412/src/version.c 2012-01-26 11:45:25.000000000 +0100
+--- src/version.c 2012-01-26 12:59:14.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 413,
+ /**/
+
+--
+It doesn't really matter what you are able to do if you don't do it.
+ (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.414
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.414
+Problem: Using CTRL-A on "000" drops the leading zero, while on "001" it
+ doesn't.
+Solution: Detect "000" as an octal number. (James McCoy)
+Files: src/charset.c
+
+
+*** ../vim-7.3.413/src/charset.c 2012-01-10 22:26:12.000000000 +0100
+--- src/charset.c 2012-01-26 13:33:45.000000000 +0100
+***************
+*** 764,770 ****
+ }
+
+ /*
+! * Return the number of characters string "s" will take on the screen,
+ * counting TABs as two characters: "^I".
+ */
+ int
+--- 764,770 ----
+ }
+
+ /*
+! * Return the number of character cells string "s" will take on the screen,
+ * counting TABs as two characters: "^I".
+ */
+ int
+***************
+*** 775,782 ****
+ }
+
+ /*
+! * Return the number of characters string "s[len]" will take on the screen,
+! * counting TABs as two characters: "^I".
+ */
+ int
+ vim_strnsize(s, len)
+--- 775,782 ----
+ }
+
+ /*
+! * Return the number of character cells string "s[len]" will take on the
+! * screen, counting TABs as two characters: "^I".
+ */
+ int
+ vim_strnsize(s, len)
+***************
+*** 1830,1836 ****
+ hex = 0; /* can't be octal */
+ break;
+ }
+! if (ptr[n] > '0')
+ hex = '0'; /* assume octal */
+ }
+ }
+--- 1830,1836 ----
+ hex = 0; /* can't be octal */
+ break;
+ }
+! if (ptr[n] >= '0')
+ hex = '0'; /* assume octal */
+ }
+ }
+*** ../vim-7.3.413/src/version.c 2012-01-26 13:01:54.000000000 +0100
+--- src/version.c 2012-01-26 13:38:04.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 414,
+ /**/
+
+--
+No engineer can take a shower without wondering if some sort of Teflon coating
+would make showering unnecessary.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.415
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.415 (after 7.3.359)
+Problem: Completion of functions stops once a dictionary is encountered.
+ (James McCoy)
+Solution: Return an empty string instead of NULL.
+Files: src/eval.c
+
+
+*** ../vim-7.3.414/src/eval.c 2012-01-26 11:45:25.000000000 +0100
+--- src/eval.c 2012-01-26 13:45:52.000000000 +0100
+***************
+*** 21802,21808 ****
+ fp = HI2UF(hi);
+
+ if (fp->uf_flags & FC_DICT)
+! return NULL; /* don't show dict functions */
+
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+--- 21802,21808 ----
+ fp = HI2UF(hi);
+
+ if (fp->uf_flags & FC_DICT)
+! return ""; /* don't show dict functions */
+
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+*** ../vim-7.3.414/src/version.c 2012-01-26 13:40:04.000000000 +0100
+--- src/version.c 2012-01-26 14:32:16.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 415,
+ /**/
+
+--
+Normal people believe that if it ain't broke, don't fix it. Engineers believe
+that if it ain't broke, it doesn't have enough features yet.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.416
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.416 (after 7.3.415)
+Problem: Compiler warning for wrong pointer.
+Solution: Add type cast.
+Files: src/eval.c
+
+
+*** ../vim-7.3.415/src/eval.c 2012-01-26 14:32:26.000000000 +0100
+--- src/eval.c 2012-01-26 15:42:56.000000000 +0100
+***************
+*** 21802,21808 ****
+ fp = HI2UF(hi);
+
+ if (fp->uf_flags & FC_DICT)
+! return ""; /* don't show dict functions */
+
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+--- 21802,21808 ----
+ fp = HI2UF(hi);
+
+ if (fp->uf_flags & FC_DICT)
+! return (char_u *)""; /* don't show dict functions */
+
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+*** ../vim-7.3.415/src/version.c 2012-01-26 14:32:26.000000000 +0100
+--- src/version.c 2012-01-26 15:43:31.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 416,
+ /**/
+
+--
+It's totally unfair to suggest - as many have - that engineers are socially
+inept. Engineers simply have different objectives when it comes to social
+interaction.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.417
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.417 (after 7.3.395)
+Problem: Test 43 fails with a tiny build.
+Solution: Only run test 43 with at least a small build.
+Files: src/testdir/test43.in
+
+
+*** ../vim-7.3.415/src/testdir/test43.in 2012-01-10 13:44:23.000000000 +0100
+--- src/testdir/test43.in 2012-01-26 18:00:06.000000000 +0100
+***************
+*** 1,6 ****
+--- 1,7 ----
+ Tests for regexp with various magic settings.
+
+ STARTTEST
++ :so small.vim
+ :set nocompatible viminfo+=nviminfo
+ /^1
+ /a*b\{2}c\+/e
+*** ../vim-7.3.415/src/version.c 2012-01-26 14:32:26.000000000 +0100
+--- src/version.c 2012-01-26 18:02:30.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 417,
+ /**/
+
+--
+I learned the customs and mannerisms of engineers by observing them, much the
+way Jane Goodall learned about the great apes, but without the hassle of
+grooming.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.418
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.418
+Problem: When a user complete function returns -1 an error message is
+ given.
+Solution: When -2 is returned stop completion silently. (Yasuhiro Matsumoto)
+Files: src/edit.c
+
+
+*** ../vim-7.3.417/src/edit.c 2012-01-20 14:32:22.000000000 +0100
+--- src/edit.c 2012-01-26 18:32:23.000000000 +0100
+***************
+*** 5189,5194 ****
+--- 5189,5199 ----
+ return FAIL;
+ }
+
++ /* Return value -2 means the user complete function wants to
++ * cancel the complete without an error. */
++ if (col == -2)
++ return FAIL;
++
+ /*
+ * Reset extended parameters of completion, when start new
+ * completion.
+*** ../vim-7.3.417/src/version.c 2012-01-26 18:58:13.000000000 +0100
+--- src/version.c 2012-01-26 18:42:14.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 418,
+ /**/
+
+--
+If someone questions your market projections, simply point out that your
+target market is "People who are nuts" and "People who will buy any damn
+thing". Nobody is going to tell you there aren't enough of those people
+to go around.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.419
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.419
+Problem: DBCS encoding in a user command does not always work.
+Solution: Skip over DBCS characters. (Yasuhiro Matsumoto)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.418/src/ex_docmd.c 2011-12-14 14:49:41.000000000 +0100
+--- src/ex_docmd.c 2012-01-26 20:04:01.000000000 +0100
+***************
+*** 5967,5973 ****
+ result = STRLEN(eap->arg) + 2;
+ for (p = eap->arg; *p; ++p)
+ {
+! if (*p == '\\' || *p == '"')
+ ++result;
+ }
+
+--- 5967,5980 ----
+ result = STRLEN(eap->arg) + 2;
+ for (p = eap->arg; *p; ++p)
+ {
+! #ifdef FEAT_MBYTE
+! if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
+! /* DBCS can contain \ in a trail byte, skip the
+! * double-byte character. */
+! ++p;
+! else
+! #endif
+! if (*p == '\\' || *p == '"')
+ ++result;
+ }
+
+***************
+*** 5976,5982 ****
+ *buf++ = '"';
+ for (p = eap->arg; *p; ++p)
+ {
+! if (*p == '\\' || *p == '"')
+ *buf++ = '\\';
+ *buf++ = *p;
+ }
+--- 5983,5996 ----
+ *buf++ = '"';
+ for (p = eap->arg; *p; ++p)
+ {
+! #ifdef FEAT_MBYTE
+! if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
+! /* DBCS can contain \ in a trail byte, copy the
+! * double-byte character to avoid escaping. */
+! *buf++ = *p++;
+! else
+! #endif
+! if (*p == '\\' || *p == '"')
+ *buf++ = '\\';
+ *buf++ = *p;
+ }
+*** ../vim-7.3.418/src/version.c 2012-01-26 18:58:25.000000000 +0100
+--- src/version.c 2012-01-26 20:40:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 419,
+ /**/
+
+--
+You have heard the saying that if you put a thousand monkeys in a room with a
+thousand typewriters and waited long enough, eventually you would have a room
+full of dead monkeys.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.420
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.420
+Problem: "it" and "at" don't work properly with a dash in the tag name.
+Solution: Require a space to match the tag name. (Christian Brabandt)
+Files: src/search.c
+
+
+*** ../vim-7.3.419/src/search.c 2012-01-10 22:26:12.000000000 +0100
+--- src/search.c 2012-01-26 20:51:43.000000000 +0100
+***************
+*** 3918,3924 ****
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! spat = alloc(len + 29);
+ epat = alloc(len + 9);
+ if (spat == NULL || epat == NULL)
+ {
+--- 3918,3924 ----
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! spat = alloc(len + 31);
+ epat = alloc(len + 9);
+ if (spat == NULL || epat == NULL)
+ {
+***************
+*** 3927,3933 ****
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! sprintf((char *)spat, "<%.*s\\>\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+ sprintf((char *)epat, "</%.*s>\\c", len, p);
+
+ r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+--- 3927,3933 ----
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! sprintf((char *)spat, "<%.*s\\>\\%%(\\s\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+ sprintf((char *)epat, "</%.*s>\\c", len, p);
+
+ r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+*** ../vim-7.3.419/src/version.c 2012-01-26 20:41:22.000000000 +0100
+--- src/version.c 2012-01-26 20:51:16.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 420,
+ /**/
+
+--
+All good vision statements are created by groups of people with bloated
+bladders who would rather be doing anything else.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.421
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.421
+Problem: Get E832 when setting 'undofile' in vimrc and there is a file to
+ be edited on the command line. (Toothpik)
+Solution: Do not try reading the undo file for a file that wasn't loaded.
+Files: src/option.c
+
+
+*** ../vim-7.3.420/src/option.c 2012-01-10 22:26:12.000000000 +0100
+--- src/option.c 2012-01-28 17:55:24.000000000 +0100
+***************
+*** 7527,7536 ****
+ {
+ /* When 'undofile' is set globally: for every buffer, otherwise
+ * only for the current buffer: Try to read in the undofile, if
+! * one exists and the buffer wasn't changed. */
+ if ((curbuf == save_curbuf
+ || (opt_flags & OPT_GLOBAL) || opt_flags == 0)
+! && !curbufIsChanged())
+ {
+ u_compute_hash(hash);
+ u_read_undo(NULL, hash, curbuf->b_fname);
+--- 7527,7537 ----
+ {
+ /* When 'undofile' is set globally: for every buffer, otherwise
+ * only for the current buffer: Try to read in the undofile, if
+! * one exists and the buffer wasn't changed and the buffer was
+! * loaded. */
+ if ((curbuf == save_curbuf
+ || (opt_flags & OPT_GLOBAL) || opt_flags == 0)
+! && !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL)
+ {
+ u_compute_hash(hash);
+ u_read_undo(NULL, hash, curbuf->b_fname);
+*** ../vim-7.3.420/src/version.c 2012-01-26 20:58:21.000000000 +0100
+--- src/version.c 2012-01-28 18:03:09.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 421,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+4. Your eyeglasses have a web site burned in on them.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.422
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.422
+Problem: Python 3 does not have __members__.
+Solution: Add "name" and "number" in another way. (lilydjwg)
+Files: src/if_py_both.h, src/if_python3.c
+
+
+*** ../vim-7.3.421/src/if_py_both.h 2011-09-07 19:30:17.000000000 +0200
+--- src/if_py_both.h 2012-02-04 19:59:43.000000000 +0100
+***************
+*** 1479,1484 ****
+--- 1479,1487 ----
+ {"append", BufferAppend, 1, "Append data to Vim buffer" },
+ {"mark", BufferMark, 1, "Return (row,col) representing position of named mark" },
+ {"range", BufferRange, 1, "Return a range object which represents the part of the given buffer between line numbers s and e" },
++ #if PY_VERSION_HEX >= 0x03000000
++ {"__dir__", BufferDir, 4, "List its attributes" },
++ #endif
+ { NULL, NULL, 0, NULL }
+ };
+
+*** ../vim-7.3.421/src/if_python3.c 2011-09-14 18:59:35.000000000 +0200
+--- src/if_python3.c 2012-02-04 20:13:00.000000000 +0100
+***************
+*** 468,473 ****
+--- 468,474 ----
+ static PyObject *BufferNew (buf_T *);
+ static PyObject *WindowNew(win_T *);
+ static PyObject *LineToString(const char *);
++ static PyObject *BufferDir(PyObject *, PyObject *);
+
+ static PyTypeObject RangeType;
+
+***************
+*** 961,973 ****
+ return Py_BuildValue("s", this->buf->b_ffname);
+ else if (strcmp(name, "number") == 0)
+ return Py_BuildValue("n", this->buf->b_fnum);
+- else if (strcmp(name,"__members__") == 0)
+- return Py_BuildValue("[ss]", "name", "number");
+ else
+ return PyObject_GenericGetAttr(self, nameobj);
+ }
+
+ static PyObject *
+ BufferRepr(PyObject *self)
+ {
+ static char repr[100];
+--- 962,979 ----
+ return Py_BuildValue("s", this->buf->b_ffname);
+ else if (strcmp(name, "number") == 0)
+ return Py_BuildValue("n", this->buf->b_fnum);
+ else
+ return PyObject_GenericGetAttr(self, nameobj);
+ }
+
+ static PyObject *
++ BufferDir(PyObject *self UNUSED, PyObject *args UNUSED)
++ {
++ return Py_BuildValue("[sssss]", "name", "number",
++ "append", "mark", "range");
++ }
++
++ static PyObject *
+ BufferRepr(PyObject *self)
+ {
+ static char repr[100];
+*** ../vim-7.3.421/src/version.c 2012-01-28 18:03:30.000000000 +0100
+--- src/version.c 2012-02-04 20:14:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 422,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+15. Five days in advance, tell your friends you can't attend their
+ party because you're not in the mood.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.423
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.423
+Problem: Small mistakes in comments, proto and indent.
+Solution: Fix the mistakes.
+Files: src/ex_cmds2.c, src/structs.h, src/ui.c, src/proto/ex_docmd.pro
+
+
+*** ../vim-7.3.422/src/ex_cmds2.c 2011-10-20 21:38:37.000000000 +0200
+--- src/ex_cmds2.c 2011-11-30 11:02:20.000000000 +0100
+***************
+*** 1939,1945 ****
+ }
+
+ /*
+! * Return TRUE if window "win" is editing then file at the current argument
+ * index.
+ */
+ static int
+--- 1939,1945 ----
+ }
+
+ /*
+! * Return TRUE if window "win" is editing the file at the current argument
+ * index.
+ */
+ static int
+*** ../vim-7.3.422/src/structs.h 2011-05-19 13:40:47.000000000 +0200
+--- src/structs.h 2011-09-10 13:48:53.000000000 +0200
+***************
+*** 1846,1852 ****
+ often, keep it the first item!) */
+
+ #if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
+! synblock_T *w_s;
+ #endif
+
+ #ifdef FEAT_WINDOWS
+--- 1846,1852 ----
+ often, keep it the first item!) */
+
+ #if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
+! synblock_T *w_s; /* for :ownsyntax */
+ #endif
+
+ #ifdef FEAT_WINDOWS
+*** ../vim-7.3.422/src/ui.c 2011-07-07 16:20:45.000000000 +0200
+--- src/ui.c 2012-01-21 14:03:42.000000000 +0100
+***************
+*** 2363,2376 ****
+ XtLastTimestampProcessed(XtDisplay(myShell)),
+ clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
+ NULL) == False)
+! return FAIL;
+ }
+ else
+ #endif
+ {
+ if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
+ cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
+! return FAIL;
+ }
+ /* Flush is required in a terminal as nothing else is doing it. */
+ XFlush(XtDisplay(myShell));
+--- 2363,2376 ----
+ XtLastTimestampProcessed(XtDisplay(myShell)),
+ clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
+ NULL) == False)
+! return FAIL;
+ }
+ else
+ #endif
+ {
+ if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
+ cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
+! return FAIL;
+ }
+ /* Flush is required in a terminal as nothing else is doing it. */
+ XFlush(XtDisplay(myShell));
+*** ../vim-7.3.422/src/proto/ex_docmd.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/ex_docmd.pro 2011-01-16 00:22:21.000000000 +0100
+***************
+*** 1,7 ****
+ /* ex_docmd.c */
+ void do_exmode __ARGS((int improved));
+ int do_cmdline_cmd __ARGS((char_u *cmd));
+! int do_cmdline __ARGS((char_u *cmdline, char_u *(*getline)(int, void *, int), void *cookie, int flags));
+ int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
+ void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
+ int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
+--- 1,7 ----
+ /* ex_docmd.c */
+ void do_exmode __ARGS((int improved));
+ int do_cmdline_cmd __ARGS((char_u *cmd));
+! int do_cmdline __ARGS((char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags));
+ int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
+ void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
+ int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
+*** ../vim-7.3.422/src/version.c 2012-02-04 20:17:21.000000000 +0100
+--- src/version.c 2012-02-04 21:56:43.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 423,
+ /**/
+
+--
+In many of the more relaxed civilizations on the Outer Eastern Rim of the
+Galaxy, "The Hitchhiker's Guide to the Galaxy" has already supplanted the
+great "Encyclopedia Galactica" as the standard repository of all knowledge
+and wisdom, for though it has many omissions and contains much that is
+apocryphal, or at least wildly inaccurate, it scores over the older, more
+pedestrian work in two important respects.
+First, it is slightly cheaper; and second, it has the words "DON'T PANIC"
+inscribed in large friendly letters on its cover.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.424
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.424
+Problem: Win16 version missing some functions.
+Solution: Add #defines for the functions.
+Files: src/gui_w16.c
+
+
+*** ../vim-7.3.423/src/gui_w16.c 2011-01-17 20:08:03.000000000 +0100
+--- src/gui_w16.c 2011-08-10 16:50:21.000000000 +0200
+***************
+*** 21,26 ****
+--- 21,32 ----
+ *
+ */
+
++ /* Win16 doesn't use the "W" methods. */
++ #define pDispatchMessage DispatchMessage
++ #define pGetMessage GetMessage
++ #define pIsDialogMessage IsDialogMessage
++ #define pPeekMessage PeekMessage
++
+ /*
+ * Include the common stuff for MS-Windows GUI.
+ */
+*** ../vim-7.3.423/src/version.c 2012-02-04 21:57:44.000000000 +0100
+--- src/version.c 2012-02-04 22:01:13.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 424,
+ /**/
+
+--
+Now it is such a bizarrely improbable coincidence that anything as
+mind-bogglingly useful as the Babel fish could have evolved purely by chance
+that some thinkers have chosen to see it as a final and clinching proof of the
+NON-existence of God.
+The argument goes something like this: 'I refuse to prove that I exist,' says
+God, 'for proof denies faith, and without faith I am nothing.'
+'But,' says Man, 'the Babel fish is a dead giveaway, isn't it? It could not
+have evolved by chance. It proves you exist, and so therefore, by your own
+arguments, you don't. QED.'
+'Oh dear,' says God, 'I hadn't thought of that,' and promptly vanishes in a
+puff of logic.
+'Oh, that was easy,' says Man, and for an encore goes on to prove that black
+is white and gets himself killed on the next pedestrian crossing.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.425
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.425 (after 7.3.265)
+Problem: Search history lines are duplicated. (Edwin Steiner)
+Solution: Convert separator character from space to NUL.
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.424/src/ex_getln.c 2012-01-26 13:01:54.000000000 +0100
+--- src/ex_getln.c 2012-02-04 22:27:43.000000000 +0100
+***************
+*** 6027,6034 ****
+ val = viminfo_readstring(virp, 1, TRUE);
+ if (val != NULL && *val != NUL)
+ {
+ if (!in_history(type, val + (type == HIST_SEARCH),
+! viminfo_add_at_front, *val))
+ {
+ /* Need to re-allocate to append the separator byte. */
+ len = STRLEN(val);
+--- 6027,6036 ----
+ val = viminfo_readstring(virp, 1, TRUE);
+ if (val != NULL && *val != NUL)
+ {
++ int sep = (*val == ' ' ? NUL : *val);
++
+ if (!in_history(type, val + (type == HIST_SEARCH),
+! viminfo_add_at_front, sep))
+ {
+ /* Need to re-allocate to append the separator byte. */
+ len = STRLEN(val);
+***************
+*** 6040,6046 ****
+ /* Search entry: Move the separator from the first
+ * column to after the NUL. */
+ mch_memmove(p, val + 1, (size_t)len);
+! p[len] = (*val == ' ' ? NUL : *val);
+ }
+ else
+ {
+--- 6042,6048 ----
+ /* Search entry: Move the separator from the first
+ * column to after the NUL. */
+ mch_memmove(p, val + 1, (size_t)len);
+! p[len] = sep;
+ }
+ else
+ {
+*** ../vim-7.3.424/src/version.c 2012-02-04 22:01:44.000000000 +0100
+--- src/version.c 2012-02-04 22:30:36.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 425,
+ /**/
+
+--
+"So this is it," said Arthur, "we are going to die."
+"Yes," said Ford, "except...no! Wait a minute!" He suddenly lunged across
+the chamber at something behind Arthur's line of vision. "What's this
+switch?" he cried.
+"What? Where?" cried Arthur, twisting around.
+"No, I was only fooling," said Ford, "we are going to die after all."
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.426
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.426
+Problem: With '$' in 'cpoptions' the $ is not displayed in the first
+ column.
+Solution: Use -1 instead of 0 as a special value. (Hideki Eiraku and
+ Hirohito Higashi)
+Files: src/edit.c, src/globals.h, src/move.c, src/screen.c, src/search.c
+
+
+*** ../vim-7.3.425/src/edit.c 2012-01-26 18:58:25.000000000 +0100
+--- src/edit.c 2012-02-04 23:23:45.000000000 +0100
+***************
+*** 1763,1771 ****
+ static void
+ undisplay_dollar()
+ {
+! if (dollar_vcol)
+ {
+! dollar_vcol = 0;
+ redrawWinline(curwin->w_cursor.lnum, FALSE);
+ }
+ }
+--- 1763,1771 ----
+ static void
+ undisplay_dollar()
+ {
+! if (dollar_vcol >= 0)
+ {
+! dollar_vcol = -1;
+ redrawWinline(curwin->w_cursor.lnum, FALSE);
+ }
+ }
+***************
+*** 5441,5447 ****
+ compl_curr_match->cp_number);
+ edit_submode_extra = match_ref;
+ edit_submode_highl = HLF_R;
+! if (dollar_vcol)
+ curs_columns(FALSE);
+ }
+ }
+--- 5441,5447 ----
+ compl_curr_match->cp_number);
+ edit_submode_extra = match_ref;
+ edit_submode_highl = HLF_R;
+! if (dollar_vcol >= 0)
+ curs_columns(FALSE);
+ }
+ }
+***************
+*** 8961,8967 ****
+ * We can emulate the vi behaviour by pretending there is a dollar
+ * displayed even when there isn't.
+ * --pkv Sun Jan 19 01:56:40 EST 2003 */
+! if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0)
+ dollar_vcol = curwin->w_virtcol;
+
+ #ifdef FEAT_FOLDING
+--- 8961,8967 ----
+ * We can emulate the vi behaviour by pretending there is a dollar
+ * displayed even when there isn't.
+ * --pkv Sun Jan 19 01:56:40 EST 2003 */
+! if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == -1)
+ dollar_vcol = curwin->w_virtcol;
+
+ #ifdef FEAT_FOLDING
+*** ../vim-7.3.425/src/globals.h 2011-05-10 16:41:13.000000000 +0200
+--- src/globals.h 2012-02-04 23:24:07.000000000 +0100
+***************
+*** 113,121 ****
+ * When '$' is included in 'cpoptions' option set:
+ * When a change command is given that deletes only part of a line, a dollar
+ * is put at the end of the changed text. dollar_vcol is set to the virtual
+! * column of this '$'.
+ */
+! EXTERN colnr_T dollar_vcol INIT(= 0);
+
+ #ifdef FEAT_INS_EXPAND
+ /*
+--- 113,121 ----
+ * When '$' is included in 'cpoptions' option set:
+ * When a change command is given that deletes only part of a line, a dollar
+ * is put at the end of the changed text. dollar_vcol is set to the virtual
+! * column of this '$'. -1 is used to indicate no $ is being displayed.
+ */
+! EXTERN colnr_T dollar_vcol INIT(= -1);
+
+ #ifdef FEAT_INS_EXPAND
+ /*
+*** ../vim-7.3.425/src/move.c 2012-01-10 22:26:12.000000000 +0100
+--- src/move.c 2012-02-04 23:21:08.000000000 +0100
+***************
+*** 362,368 ****
+ #endif
+ )
+ {
+! dollar_vcol = 0;
+ if (curwin->w_skipcol != 0)
+ {
+ curwin->w_skipcol = 0;
+--- 362,368 ----
+ #endif
+ )
+ {
+! dollar_vcol = -1;
+ if (curwin->w_skipcol != 0)
+ {
+ curwin->w_skipcol = 0;
+***************
+*** 966,972 ****
+
+ /* remove '$' from change command when cursor moves onto it */
+ if (startcol > dollar_vcol)
+! dollar_vcol = 0;
+
+ extra = curwin_col_off();
+ curwin->w_wcol = curwin->w_virtcol + extra;
+--- 966,972 ----
+
+ /* remove '$' from change command when cursor moves onto it */
+ if (startcol > dollar_vcol)
+! dollar_vcol = -1;
+
+ extra = curwin_col_off();
+ curwin->w_wcol = curwin->w_virtcol + extra;
+*** ../vim-7.3.425/src/screen.c 2012-01-10 22:26:12.000000000 +0100
+--- src/screen.c 2012-02-04 23:22:44.000000000 +0100
+***************
+*** 1637,1647 ****
+ * When at start of changed lines: May scroll following lines
+ * up or down to minimize redrawing.
+ * Don't do this when the change continues until the end.
+! * Don't scroll when dollar_vcol is non-zero, keep the "$".
+ */
+ if (lnum == mod_top
+ && mod_bot != MAXLNUM
+! && !(dollar_vcol != 0 && mod_bot == mod_top + 1))
+ {
+ int old_rows = 0;
+ int new_rows = 0;
+--- 1637,1647 ----
+ * When at start of changed lines: May scroll following lines
+ * up or down to minimize redrawing.
+ * Don't do this when the change continues until the end.
+! * Don't scroll when dollar_vcol >= 0, keep the "$".
+ */
+ if (lnum == mod_top
+ && mod_bot != MAXLNUM
+! && !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
+ {
+ int old_rows = 0;
+ int new_rows = 0;
+***************
+*** 1868,1879 ****
+ if (row > wp->w_height) /* past end of screen */
+ {
+ /* we may need the size of that too long line later on */
+! if (dollar_vcol == 0)
+ wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
+ ++idx;
+ break;
+ }
+! if (dollar_vcol == 0)
+ wp->w_lines[idx].wl_size = row - srow;
+ ++idx;
+ #ifdef FEAT_FOLDING
+--- 1868,1879 ----
+ if (row > wp->w_height) /* past end of screen */
+ {
+ /* we may need the size of that too long line later on */
+! if (dollar_vcol == -1)
+ wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
+ ++idx;
+ break;
+ }
+! if (dollar_vcol == -1)
+ wp->w_lines[idx].wl_size = row - srow;
+ ++idx;
+ #ifdef FEAT_FOLDING
+***************
+*** 1990,1996 ****
+ }
+ #endif
+ }
+! else if (dollar_vcol == 0)
+ wp->w_botline = lnum;
+
+ /* make sure the rest of the screen is blank */
+--- 1990,1996 ----
+ }
+ #endif
+ }
+! else if (dollar_vcol == -1)
+ wp->w_botline = lnum;
+
+ /* make sure the rest of the screen is blank */
+***************
+*** 2005,2011 ****
+ wp->w_old_botfill = wp->w_botfill;
+ #endif
+
+! if (dollar_vcol == 0)
+ {
+ /*
+ * There is a trick with w_botline. If we invalidate it on each
+--- 2005,2011 ----
+ wp->w_old_botfill = wp->w_botfill;
+ #endif
+
+! if (dollar_vcol == -1)
+ {
+ /*
+ * There is a trick with w_botline. If we invalidate it on each
+***************
+*** 3564,3570 ****
+ }
+
+ /* When still displaying '$' of change command, stop at cursor */
+! if (dollar_vcol != 0 && wp == curwin
+ && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
+ #ifdef FEAT_DIFF
+ && filler_todo <= 0
+--- 3564,3570 ----
+ }
+
+ /* When still displaying '$' of change command, stop at cursor */
+! if (dollar_vcol >= 0 && wp == curwin
+ && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
+ #ifdef FEAT_DIFF
+ && filler_todo <= 0
+*** ../vim-7.3.425/src/search.c 2012-01-26 20:58:21.000000000 +0100
+--- src/search.c 2012-02-04 23:23:10.000000000 +0100
+***************
+*** 2501,2508 ****
+ save_siso = p_siso;
+ /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
+ * stop displaying the "$". */
+! if (dollar_vcol > 0 && dollar_vcol == curwin->w_virtcol)
+! dollar_vcol = 0;
+ ++curwin->w_virtcol; /* do display ')' just before "$" */
+ update_screen(VALID); /* show the new char first */
+
+--- 2501,2508 ----
+ save_siso = p_siso;
+ /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
+ * stop displaying the "$". */
+! if (dollar_vcol >= 0 && dollar_vcol == curwin->w_virtcol)
+! dollar_vcol = -1;
+ ++curwin->w_virtcol; /* do display ')' just before "$" */
+ update_screen(VALID); /* show the new char first */
+
+*** ../vim-7.3.425/src/version.c 2012-02-04 22:44:27.000000000 +0100
+--- src/version.c 2012-02-04 23:32:55.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 426,
+ /**/
+
+
+--
+I am also told that there is a logical proof out there somewhere
+that demonstrates that there is no task which duct tape cannot handle.
+ -- Paul Brannan
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.427
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.427
+Problem: readfile() can be slow with long lines.
+Solution: Use realloc() instead of alloc(). (John Little)
+Files: src/eval.c
+
+
+*** ../vim-7.3.426/src/eval.c 2012-01-26 14:32:26.000000000 +0100
+--- src/eval.c 2012-02-05 00:25:39.000000000 +0100
+***************
+*** 14325,14346 ****
+ typval_T *rettv;
+ {
+ int binary = FALSE;
+ char_u *fname;
+ FILE *fd;
+! listitem_T *li;
+! #define FREAD_SIZE 200 /* optimized for text lines */
+! char_u buf[FREAD_SIZE];
+! int readlen; /* size of last fread() */
+! int buflen; /* nr of valid chars in buf[] */
+! int filtd; /* how much in buf[] was NUL -> '\n' filtered */
+! int tolist; /* first byte in buf[] still to be put in list */
+! int chop; /* how many CR to chop off */
+! char_u *prev = NULL; /* previously read bytes, if any */
+! int prevlen = 0; /* length of "prev" if not NULL */
+! char_u *s;
+! int len;
+! long maxline = MAXLNUM;
+! long cnt = 0;
+
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ {
+--- 14325,14343 ----
+ typval_T *rettv;
+ {
+ int binary = FALSE;
++ int failed = FALSE;
+ char_u *fname;
+ FILE *fd;
+! char_u buf[(IOSIZE/256)*256]; /* rounded to avoid odd + 1 */
+! int io_size = sizeof(buf);
+! int readlen; /* size of last fread() */
+! char_u *prev = NULL; /* previously read bytes, if any */
+! long prevlen = 0; /* length of data in prev */
+! long prevsize = 0; /* size of prev buffer */
+! long maxline = MAXLNUM;
+! long cnt = 0;
+! char_u *p; /* position in buf */
+! char_u *start; /* start of current line */
+
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ {
+***************
+*** 14362,14410 ****
+ return;
+ }
+
+- filtd = 0;
+ while (cnt < maxline || maxline < 0)
+ {
+! readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd, fd);
+! buflen = filtd + readlen;
+! tolist = 0;
+! for ( ; filtd < buflen || readlen <= 0; ++filtd)
+! {
+! if (readlen <= 0 || buf[filtd] == '\n')
+! {
+! /* In binary mode add an empty list item when the last
+! * non-empty line ends in a '\n'. */
+! if (!binary && readlen == 0 && filtd == 0 && prev == NULL)
+! break;
+
+! /* Found end-of-line or end-of-file: add a text line to the
+! * list. */
+! chop = 0;
+! if (!binary)
+! while (filtd - chop - 1 >= tolist
+! && buf[filtd - chop - 1] == '\r')
+! ++chop;
+! len = filtd - tolist - chop;
+! if (prev == NULL)
+! s = vim_strnsave(buf + tolist, len);
+ else
+ {
+! s = alloc((unsigned)(prevlen + len + 1));
+! if (s != NULL)
+ {
+! mch_memmove(s, prev, prevlen);
+! vim_free(prev);
+! prev = NULL;
+! mch_memmove(s + prevlen, buf + tolist, len);
+ s[prevlen + len] = NUL;
+ }
+ }
+! tolist = filtd + 1;
+
+! li = listitem_alloc();
+! if (li == NULL)
+ {
+ vim_free(s);
+ break;
+ }
+ li->li_tv.v_type = VAR_STRING;
+--- 14359,14419 ----
+ return;
+ }
+
+ while (cnt < maxline || maxline < 0)
+ {
+! readlen = (int)fread(buf, 1, io_size, fd);
+!
+! /* This for loop processes what was read, but is also entered at end
+! * of file so that either:
+! * - an incomplete line gets written
+! * - a "binary" file gets an empty line at the end if it ends in a
+! * newline. */
+! for (p = buf, start = buf;
+! p < buf + readlen || (readlen <= 0 && (prevlen > 0 || binary));
+! ++p)
+! {
+! if (*p == '\n' || readlen <= 0)
+! {
+! listitem_T *li;
+! char_u *s = NULL;
+! long_u len = p - start;
+
+! /* Finished a line. Remove CRs before NL. */
+! if (readlen > 0 && !binary)
+! {
+! while (len > 0 && start[len - 1] == '\r')
+! --len;
+! /* removal may cross back to the "prev" string */
+! if (len == 0)
+! while (prevlen > 0 && prev[prevlen - 1] == '\r')
+! --prevlen;
+! }
+! if (prevlen == 0)
+! s = vim_strnsave(start, len);
+ else
+ {
+! /* Change "prev" buffer to be the right size. This way
+! * the bytes are only copied once, and very long lines are
+! * allocated only once. */
+! if ((s = vim_realloc(prev, prevlen + len + 1)) != NULL)
+ {
+! mch_memmove(s + prevlen, start, len);
+ s[prevlen + len] = NUL;
++ prev = NULL; /* the list will own the string */
++ prevlen = prevsize = 0;
+ }
+ }
+! if (s == NULL)
+! {
+! do_outofmem_msg((long_u) prevlen + len + 1);
+! failed = TRUE;
+! break;
+! }
+
+! if ((li = listitem_alloc()) == NULL)
+ {
+ vim_free(s);
++ failed = TRUE;
+ break;
+ }
+ li->li_tv.v_type = VAR_STRING;
+***************
+*** 14412,14485 ****
+ li->li_tv.vval.v_string = s;
+ list_append(rettv->vval.v_list, li);
+
+! if (++cnt >= maxline && maxline >= 0)
+! break;
+! if (readlen <= 0)
+ break;
+ }
+! else if (buf[filtd] == NUL)
+! buf[filtd] = '\n';
+ #ifdef FEAT_MBYTE
+! else if (buf[filtd] == 0xef
+! && enc_utf8
+! && filtd + 2 < buflen
+! && !binary
+! && buf[filtd + 1] == 0xbb
+! && buf[filtd + 2] == 0xbf)
+! {
+! /* remove utf-8 byte order mark */
+! mch_memmove(buf + filtd, buf + filtd + 3, buflen - filtd - 3);
+! --filtd;
+! buflen -= 3;
+ }
+ #endif
+! }
+! if (readlen <= 0)
+! break;
+
+! if (tolist == 0)
+ {
+! if (buflen >= FREAD_SIZE / 2)
+ {
+! /* "buf" is full, need to move text to an allocated buffer */
+! if (prev == NULL)
+ {
+! prev = vim_strnsave(buf, buflen);
+! prevlen = buflen;
+ }
+! else
+ {
+! s = alloc((unsigned)(prevlen + buflen));
+! if (s != NULL)
+! {
+! mch_memmove(s, prev, prevlen);
+! mch_memmove(s + prevlen, buf, buflen);
+! vim_free(prev);
+! prev = s;
+! prevlen += buflen;
+! }
+ }
+! filtd = 0;
+ }
+ }
+! else
+! {
+! mch_memmove(buf, buf + tolist, buflen - tolist);
+! filtd -= tolist;
+! }
+! }
+
+ /*
+ * For a negative line count use only the lines at the end of the file,
+ * free the rest.
+ */
+! if (maxline < 0)
+ while (cnt > -maxline)
+ {
+ listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
+ --cnt;
+ }
+
+ vim_free(prev);
+ fclose(fd);
+ }
+--- 14421,14529 ----
+ li->li_tv.vval.v_string = s;
+ list_append(rettv->vval.v_list, li);
+
+! start = p + 1; /* step over newline */
+! if ((++cnt >= maxline && maxline >= 0) || readlen <= 0)
+ break;
+ }
+! else if (*p == NUL)
+! *p = '\n';
+ #ifdef FEAT_MBYTE
+! /* Check for utf8 "bom"; U+FEFF is encoded as EF BB BF. Do this
+! * when finding the BF and check the previous two bytes. */
+! else if (*p == 0xbf && enc_utf8 && !binary)
+! {
+! /* Find the two bytes before the 0xbf. If p is at buf, or buf
+! * + 1, these may be in the "prev" string. */
+! char_u back1 = p >= buf + 1 ? p[-1]
+! : prevlen >= 1 ? prev[prevlen - 1] : NUL;
+! char_u back2 = p >= buf + 2 ? p[-2]
+! : p == buf + 1 && prevlen >= 1 ? prev[prevlen - 1]
+! : prevlen >= 2 ? prev[prevlen - 2] : NUL;
+!
+! if (back2 == 0xef && back1 == 0xbb)
+! {
+! char_u *dest = p - 2;
+!
+! /* Usually a BOM is at the beginning of a file, and so at
+! * the beginning of a line; then we can just step over it.
+! */
+! if (start == dest)
+! start = p + 1;
+! else
+! {
+! /* have to shuffle buf to close gap */
+! int adjust_prevlen = 0;
+!
+! if (dest < buf)
+! {
+! adjust_prevlen = buf - dest; /* must be 1 or 2 */
+! dest = buf;
+! }
+! if (readlen > p - buf + 1)
+! mch_memmove(dest, p + 1, readlen - (p - buf) - 1);
+! readlen -= 3 - adjust_prevlen;
+! prevlen -= adjust_prevlen;
+! p = dest - 1;
+! }
+! }
+ }
+ #endif
+! } /* for */
+
+! if (failed || (cnt >= maxline && maxline >= 0) || readlen <= 0)
+! break;
+! if (start < p)
+ {
+! /* There's part of a line in buf, store it in "prev". */
+! if (p - start + prevlen >= prevsize)
+ {
+! /* need bigger "prev" buffer */
+! char_u *newprev;
+!
+! /* A common use case is ordinary text files and "prev" gets a
+! * fragment of a line, so the first allocation is made
+! * small, to avoid repeatedly 'allocing' large and
+! * 'reallocing' small. */
+! if (prevsize == 0)
+! prevsize = p - start;
+! else
+ {
+! long grow50pc = (prevsize * 3) / 2;
+! long growmin = (p - start) * 2 + prevlen;
+! prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+! if ((newprev = vim_realloc(prev, prevsize)) == NULL)
+ {
+! do_outofmem_msg((long_u)prevsize);
+! failed = TRUE;
+! break;
+ }
+! prev = newprev;
+ }
++ /* Add the line part to end of "prev". */
++ mch_memmove(prev + prevlen, start, p - start);
++ prevlen += p - start;
+ }
+! } /* while */
+
+ /*
+ * For a negative line count use only the lines at the end of the file,
+ * free the rest.
+ */
+! if (!failed && maxline < 0)
+ while (cnt > -maxline)
+ {
+ listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
+ --cnt;
+ }
+
++ if (failed)
++ {
++ list_free(rettv->vval.v_list, TRUE);
++ /* readfile doc says an empty list is returned on error */
++ rettv->vval.v_list = list_alloc();
++ }
++
+ vim_free(prev);
+ fclose(fd);
+ }
+*** ../vim-7.3.426/src/version.c 2012-02-04 23:34:57.000000000 +0100
+--- src/version.c 2012-02-05 00:38:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 427,
+ /**/
+
+--
+One difference between a man and a machine is that a machine is quiet
+when well oiled.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.428
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.428
+Problem: Win32: an xpm file without a mask crashes Vim.
+Solution: Fail when the mask is missing. (Dave Bodenstab)
+Files: src/xpm_w32.c
+
+
+*** ../vim-7.3.427/src/xpm_w32.c 2010-08-15 21:57:25.000000000 +0200
+--- src/xpm_w32.c 2012-02-05 00:46:13.000000000 +0100
+***************
+*** 1,4 ****
+! /*
+ * Load XPM image.
+ *
+ * This function is placed in separate file because Xpm headers conflict with
+--- 1,5 ----
+! /* vi:set ts=8 sts=4 sw=4:
+! *
+ * Load XPM image.
+ *
+ * This function is placed in separate file because Xpm headers conflict with
+***************
+*** 30,38 ****
+ #include "xpm.h"
+
+ /*
+! * Tries to load Xpm image from file 'filename'.
+! * If fails return -1.
+! * success - 0 and image and mask BITMAPS
+ */
+ int
+ LoadXpmImage(filename, hImage, hShape)
+--- 31,40 ----
+ #include "xpm.h"
+
+ /*
+! * Tries to load an Xpm image from the file "filename".
+! * Returns -1 on failure.
+! * Returns 0 on success and stores image and mask BITMAPS in "hImage" and
+! * "hShape".
+ */
+ int
+ LoadXpmImage(filename, hImage, hShape)
+***************
+*** 40,46 ****
+ HBITMAP *hImage;
+ HBITMAP *hShape;
+ {
+! XImage *img; /* loaded image */
+ XImage *shp; /* shapeimage */
+ XpmAttributes attr;
+ int res;
+--- 42,48 ----
+ HBITMAP *hImage;
+ HBITMAP *hShape;
+ {
+! XImage *img; /* loaded image */
+ XImage *shp; /* shapeimage */
+ XpmAttributes attr;
+ int res;
+***************
+*** 51,60 ****
+ DeleteDC(hdc);
+ if (res < 0)
+ return -1;
+! else
+ {
+! *hImage = img->bitmap;
+! *hShape = shp->bitmap;
+! return 0;
+ }
+ }
+--- 53,65 ----
+ DeleteDC(hdc);
+ if (res < 0)
+ return -1;
+! if (shp == NULL)
+ {
+! if (img)
+! XDestroyImage(img);
+! return -1;
+ }
++ *hImage = img->bitmap;
++ *hShape = shp->bitmap;
++ return 0;
+ }
+*** ../vim-7.3.427/src/version.c 2012-02-05 00:39:14.000000000 +0100
+--- src/version.c 2012-02-05 00:47:08.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 428,
+ /**/
+
+--
+I'm not familiar with this proof, but I'm aware of a significant
+following of toddlers who believe that peanut butter is the solution
+to all of life's problems... -- Tim Hammerquist
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.429
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.429
+Problem: When 'cpoptions' includes "E" "c0" in the first column is an
+ error. The redo register is then set to the errornous command.
+Solution: Do not set the redo register if the command fails because of an
+ empty region. (Hideki Eiraku)
+Files: src/getchar.c, src/normal.c, src/proto/getchar.pro
+
+
+*** ../vim-7.3.428/src/getchar.c 2012-01-10 22:26:12.000000000 +0100
+--- src/getchar.c 2012-02-05 01:05:09.000000000 +0100
+***************
+*** 470,475 ****
+--- 470,493 ----
+ }
+ }
+
++ /*
++ * Discard the contents of the redo buffer and restore the previous redo
++ * buffer.
++ */
++ void
++ CancelRedo()
++ {
++ if (!block_redo)
++ {
++ free_buff(&redobuff);
++ redobuff = old_redobuff;
++ old_redobuff.bh_first.b_next = NULL;
++ start_stuff();
++ while (read_stuff(TRUE) != NUL)
++ ;
++ }
++ }
++
+ #if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
+ /*
+ * Save redobuff and old_redobuff to save_redobuff and save_old_redobuff.
+***************
+*** 691,699 ****
+ * Read a character from the redo buffer. Translates K_SPECIAL, CSI and
+ * multibyte characters.
+ * The redo buffer is left as it is.
+! * if init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
+! * otherwise
+! * if old is TRUE, use old_redobuff instead of redobuff
+ */
+ static int
+ read_redo(init, old_redo)
+--- 709,717 ----
+ * Read a character from the redo buffer. Translates K_SPECIAL, CSI and
+ * multibyte characters.
+ * The redo buffer is left as it is.
+! * If init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
+! * otherwise.
+! * If old is TRUE, use old_redobuff instead of redobuff.
+ */
+ static int
+ read_redo(init, old_redo)
+*** ../vim-7.3.428/src/normal.c 2012-01-26 11:43:04.000000000 +0100
+--- src/normal.c 2012-02-05 01:06:01.000000000 +0100
+***************
+*** 1978,1984 ****
+--- 1978,1987 ----
+ VIsual_reselect = FALSE; /* don't reselect now */
+ #endif
+ if (empty_region_error)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ else
+ {
+ (void)op_delete(oap);
+***************
+*** 1992,1998 ****
+--- 1995,2004 ----
+ if (empty_region_error)
+ {
+ if (!gui_yank)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ }
+ else
+ (void)op_yank(oap, FALSE, !gui_yank);
+***************
+*** 2004,2010 ****
+--- 2010,2019 ----
+ VIsual_reselect = FALSE; /* don't reselect now */
+ #endif
+ if (empty_region_error)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ else
+ {
+ /* This is a new edit command, not a restart. Need to
+***************
+*** 2066,2072 ****
+--- 2075,2084 ----
+ case OP_LOWER:
+ case OP_ROT13:
+ if (empty_region_error)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ else
+ op_tilde(oap);
+ check_cursor_col();
+***************
+*** 2099,2105 ****
+--- 2111,2120 ----
+ #endif
+ #ifdef FEAT_VISUALEXTRA
+ if (empty_region_error)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ else
+ {
+ /* This is a new edit command, not a restart. Need to
+***************
+*** 2129,2135 ****
+--- 2144,2153 ----
+ #ifdef FEAT_VISUALEXTRA
+ if (empty_region_error)
+ #endif
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ #ifdef FEAT_VISUALEXTRA
+ else
+ op_replace(oap, cap->nchar);
+*** ../vim-7.3.428/src/proto/getchar.pro 2010-10-20 21:22:17.000000000 +0200
+--- src/proto/getchar.pro 2012-02-05 01:05:20.000000000 +0100
+***************
+*** 4,11 ****
+ char_u *get_inserted __ARGS((void));
+ int stuff_empty __ARGS((void));
+ void typeahead_noflush __ARGS((int c));
+! void flush_buffers __ARGS((int typeahead));
+ void ResetRedobuff __ARGS((void));
+ void saveRedobuff __ARGS((void));
+ void restoreRedobuff __ARGS((void));
+ void AppendToRedobuff __ARGS((char_u *s));
+--- 4,12 ----
+ char_u *get_inserted __ARGS((void));
+ int stuff_empty __ARGS((void));
+ void typeahead_noflush __ARGS((int c));
+! void flush_buffers __ARGS((int flush_typeahead));
+ void ResetRedobuff __ARGS((void));
++ void CancelRedo __ARGS((void));
+ void saveRedobuff __ARGS((void));
+ void restoreRedobuff __ARGS((void));
+ void AppendToRedobuff __ARGS((char_u *s));
+*** ../vim-7.3.428/src/version.c 2012-02-05 00:47:56.000000000 +0100
+--- src/version.c 2012-02-05 01:09:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 429,
+ /**/
+
+--
+The History of every major Galactic Civilization tends to pass through
+three distinct and recognizable phases, those of Survival, Inquiry and
+Sophistication, otherwise known as the How, Why and Where phases.
+For instance, the first phase is characterized by the question 'How can
+we eat?' the second by the question 'Why do we eat?' and the third by
+the question 'Where shall we have lunch?'
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.430
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.430
+Problem: When a custom filetype detection uses "augroup END" the conf
+ fileytpe detection does not have the filetypedetect group.
+Solution: Always end the group and include filetypedetect in the conf
+ autocommand. (Lech Lorens)
+Files: runtime/filetype.vim
+
+
+*** ../vim-7.3.429/runtime/filetype.vim 2012-02-05 20:08:08.000000000 +0100
+--- runtime/filetype.vim 2012-02-05 19:59:40.000000000 +0100
+***************
+*** 2545,2561 ****
+ " detected filetypes.
+ runtime! ftdetect/*.vim
+
+
+ " Generic configuration file (check this last, it's just guessing!)
+! au BufNewFile,BufRead,StdinReadPost *
+ \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
+ \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
+ \ || getline(4) =~ '^#' || getline(5) =~ '^#') |
+ \ setf conf |
+ \ endif
+
+- augroup END
+-
+
+ " If the GUI is already running, may still need to install the Syntax menu.
+ " Don't do it when the 'M' flag is included in 'guioptions'.
+--- 2545,2563 ----
+ " detected filetypes.
+ runtime! ftdetect/*.vim
+
++ " NOTE: The above command could have ended the filetypedetect autocmd group
++ " and started another one. Let's make sure it has ended to get to a consistant
++ " state.
++ augroup END
+
+ " Generic configuration file (check this last, it's just guessing!)
+! au filetypedetect BufNewFile,BufRead,StdinReadPost *
+ \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
+ \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
+ \ || getline(4) =~ '^#' || getline(5) =~ '^#') |
+ \ setf conf |
+ \ endif
+
+
+ " If the GUI is already running, may still need to install the Syntax menu.
+ " Don't do it when the 'M' flag is included in 'guioptions'.
+*** ../vim-7.3.429/src/version.c 2012-02-05 01:18:41.000000000 +0100
+--- src/version.c 2012-02-05 20:02:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 430,
+ /**/
+
+--
+The technology involved in making anything invisible is so infinitely
+complex that nine hundred and ninety-nine billion, nine hundred and
+ninety-nine million, nine hundred and ninety-nine thousand, nine hundred
+and ninety-nine times out of a trillion it is much simpler and more
+effective just to take the thing away and do without it.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.431
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.431
+Problem: Fetching a key at a prompt may be confused by escape sequences.
+ Especially when getting a prompt at a VimEnter autocommand.
+ (Alex Efros)
+Solution: Properly handle escape sequences deleted by check_termcode().
+Files: src/getchar.c, src/misc1.c, src/term.c, src/proto/term.pro
+
+
+*** ../vim-7.3.430/src/getchar.c 2012-02-05 01:18:41.000000000 +0100
+--- src/getchar.c 2012-02-05 22:04:33.000000000 +0100
+***************
+*** 2282,2288 ****
+ typebuf.tb_off] == RM_YES))
+ && !timedout)
+ {
+! keylen = check_termcode(max_mlen + 1, NULL, 0);
+
+ /* If no termcode matched but 'pastetoggle'
+ * matched partially it's like an incomplete key
+--- 2282,2289 ----
+ typebuf.tb_off] == RM_YES))
+ && !timedout)
+ {
+! keylen = check_termcode(max_mlen + 1,
+! NULL, 0, NULL);
+
+ /* If no termcode matched but 'pastetoggle'
+ * matched partially it's like an incomplete key
+*** ../vim-7.3.430/src/misc1.c 2012-01-10 18:37:53.000000000 +0100
+--- src/misc1.c 2012-02-05 21:59:53.000000000 +0100
+***************
+*** 3105,3112 ****
+ int
+ get_keystroke()
+ {
+! #define CBUFLEN 151
+! char_u buf[CBUFLEN];
+ int len = 0;
+ int n;
+ int save_mapped_ctrl_c = mapped_ctrl_c;
+--- 3105,3113 ----
+ int
+ get_keystroke()
+ {
+! char_u *buf = NULL;
+! int buflen = 150;
+! int maxlen;
+ int len = 0;
+ int n;
+ int save_mapped_ctrl_c = mapped_ctrl_c;
+***************
+*** 3118,3129 ****
+ cursor_on();
+ out_flush();
+
+ /* First time: blocking wait. Second time: wait up to 100ms for a
+! * terminal code to complete. Leave some room for check_termcode() to
+! * insert a key code into (max 5 chars plus NUL). And
+! * fix_input_buffer() can triple the number of bytes. */
+! n = ui_inchar(buf + len, (CBUFLEN - 6 - len) / 3,
+! len == 0 ? -1L : 100L, 0);
+ if (n > 0)
+ {
+ /* Replace zero and CSI by a special key code. */
+--- 3119,3147 ----
+ cursor_on();
+ out_flush();
+
++ /* Leave some room for check_termcode() to insert a key code into (max
++ * 5 chars plus NUL). And fix_input_buffer() can triple the number of
++ * bytes. */
++ maxlen = (buflen - 6 - len) / 3;
++ if (buf == NULL)
++ buf = alloc(buflen);
++ else if (maxlen < 10)
++ {
++ /* Need some more space. This migth happen when receiving a long
++ * escape sequence. */
++ buflen += 100;
++ buf = vim_realloc(buf, buflen);
++ maxlen = (buflen - 6 - len) / 3;
++ }
++ if (buf == NULL)
++ {
++ do_outofmem_msg((long_u)buflen);
++ return ESC; /* panic! */
++ }
++
+ /* First time: blocking wait. Second time: wait up to 100ms for a
+! * terminal code to complete. */
+! n = ui_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
+ if (n > 0)
+ {
+ /* Replace zero and CSI by a special key code. */
+***************
+*** 3135,3141 ****
+ ++waited; /* keep track of the waiting time */
+
+ /* Incomplete termcode and not timed out yet: get more characters */
+! if ((n = check_termcode(1, buf, len)) < 0
+ && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
+
+--- 3153,3159 ----
+ ++waited; /* keep track of the waiting time */
+
+ /* Incomplete termcode and not timed out yet: get more characters */
+! if ((n = check_termcode(1, buf, buflen, &len)) < 0
+ && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
+
+***************
+*** 3203,3209 ****
+ {
+ if (MB_BYTE2LEN(n) > len)
+ continue; /* more bytes to get */
+! buf[len >= CBUFLEN ? CBUFLEN - 1 : len] = NUL;
+ n = (*mb_ptr2char)(buf);
+ }
+ #endif
+--- 3221,3227 ----
+ {
+ if (MB_BYTE2LEN(n) > len)
+ continue; /* more bytes to get */
+! buf[len >= buflen ? buflen - 1 : len] = NUL;
+ n = (*mb_ptr2char)(buf);
+ }
+ #endif
+***************
+*** 3213,3218 ****
+--- 3231,3237 ----
+ #endif
+ break;
+ }
++ vim_free(buf);
+
+ mapped_ctrl_c = save_mapped_ctrl_c;
+ return n;
+*** ../vim-7.3.430/src/term.c 2012-01-26 13:01:54.000000000 +0100
+--- src/term.c 2012-02-05 21:45:09.000000000 +0100
+***************
+*** 3785,3798 ****
+ * With a match, the match is removed, the replacement code is inserted in
+ * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
+ * returned.
+! * When "buf" is not NULL, it is used instead of typebuf.tb_buf[]. "buflen" is
+! * then the length of the string in buf[].
+ */
+ int
+! check_termcode(max_offset, buf, buflen)
+ int max_offset;
+ char_u *buf;
+! int buflen;
+ {
+ char_u *tp;
+ char_u *p;
+--- 3785,3800 ----
+ * With a match, the match is removed, the replacement code is inserted in
+ * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
+ * returned.
+! * When "buf" is not NULL, buf[bufsize] is used instead of typebuf.tb_buf[].
+! * "buflen" is then the length of the string in buf[] and is updated for
+! * inserts and deletes.
+ */
+ int
+! check_termcode(max_offset, buf, bufsize, buflen)
+ int max_offset;
+ char_u *buf;
+! int bufsize;
+! int *buflen;
+ {
+ char_u *tp;
+ char_u *p;
+***************
+*** 3864,3873 ****
+ }
+ else
+ {
+! if (offset >= buflen)
+ break;
+ tp = buf + offset;
+! len = buflen - offset;
+ }
+
+ /*
+--- 3866,3875 ----
+ }
+ else
+ {
+! if (offset >= *buflen)
+ break;
+ tp = buf + offset;
+! len = *buflen - offset;
+ }
+
+ /*
+***************
+*** 5002,5013 ****
+ if (extra < 0)
+ /* remove matched characters */
+ mch_memmove(buf + offset, buf + offset - extra,
+! (size_t)(buflen + offset + extra));
+ else if (extra > 0)
+! /* insert the extra space we need */
+ mch_memmove(buf + offset + extra, buf + offset,
+! (size_t)(buflen - offset));
+ mch_memmove(buf + offset, string, (size_t)new_slen);
+ }
+ return retval == 0 ? (len + extra + offset) : retval;
+ }
+--- 5004,5021 ----
+ if (extra < 0)
+ /* remove matched characters */
+ mch_memmove(buf + offset, buf + offset - extra,
+! (size_t)(*buflen + offset + extra));
+ else if (extra > 0)
+! {
+! /* Insert the extra space we need. If there is insufficient
+! * space return -1. */
+! if (*buflen + extra + new_slen >= bufsize)
+! return -1;
+ mch_memmove(buf + offset + extra, buf + offset,
+! (size_t)(*buflen - offset));
+! }
+ mch_memmove(buf + offset, string, (size_t)new_slen);
++ *buflen = *buflen + extra + new_slen;
+ }
+ return retval == 0 ? (len + extra + offset) : retval;
+ }
+*** ../vim-7.3.430/src/proto/term.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/term.pro 2012-02-05 21:45:16.000000000 +0100
+***************
+*** 50,56 ****
+ char_u *get_termcode __ARGS((int i));
+ void del_termcode __ARGS((char_u *name));
+ void set_mouse_topline __ARGS((win_T *wp));
+! int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
+ char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
+ int find_term_bykeys __ARGS((char_u *src));
+ void show_termcodes __ARGS((void));
+--- 50,56 ----
+ char_u *get_termcode __ARGS((int i));
+ void del_termcode __ARGS((char_u *name));
+ void set_mouse_topline __ARGS((win_T *wp));
+! int check_termcode __ARGS((int max_offset, char_u *buf, int bufsize, int *buflen));
+ char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
+ int find_term_bykeys __ARGS((char_u *src));
+ void show_termcodes __ARGS((void));
+*** ../vim-7.3.430/src/version.c 2012-02-05 20:08:30.000000000 +0100
+--- src/version.c 2012-02-05 22:03:43.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 431,
+ /**/
+
+--
+"You know, it's at times like this when I'm trapped in a Vogon airlock with
+a man from Betelgeuse and about to die of asphyxiation in deep space that I
+really wish I'd listened to what my mother told me when I was young!"
+"Why, what did she tell you?"
+"I don't know, I didn't listen!"
+ -- Arthur Dent and Ford Prefect in Douglas Adams'
+ "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.432
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.432
+Problem: ACLs are not supported for ZFS or NFSv4 on Solaris.
+Solution: Add configure check and code. (Danek Duvall)
+Files: src/configure.in, src/auto/configure, src/config.h.in,
+ src/os_unix.c
+
+
+*** ../vim-7.3.431/src/configure.in 2011-12-14 20:51:19.000000000 +0100
+--- src/configure.in 2012-02-05 22:40:22.000000000 +0100
+***************
+*** 3106,3111 ****
+--- 3106,3112 ----
+
+ dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
+ dnl when -lacl works, also try to use -lattr (required for Debian).
++ dnl On Solaris, use the acl_get/set functions in libsec, if present.
+ AC_MSG_CHECKING(--disable-acl argument)
+ AC_ARG_ENABLE(acl,
+ [ --disable-acl Don't check for ACL support.],
+***************
+*** 3128,3133 ****
+--- 3129,3135 ----
+ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
+ AC_MSG_RESULT(no))
+
++ AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
+ AC_MSG_CHECKING(for Solaris ACL support)
+ AC_TRY_LINK([
+ #ifdef HAVE_SYS_ACL_H
+***************
+*** 3135,3141 ****
+ #endif], [acl("foo", GETACLCNT, 0, NULL);
+ ],
+ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
+! AC_MSG_RESULT(no))
+
+ AC_MSG_CHECKING(for AIX ACL support)
+ AC_TRY_LINK([
+--- 3137,3143 ----
+ #endif], [acl("foo", GETACLCNT, 0, NULL);
+ ],
+ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
+! AC_MSG_RESULT(no)))
+
+ AC_MSG_CHECKING(for AIX ACL support)
+ AC_TRY_LINK([
+*** ../vim-7.3.431/src/auto/configure 2011-12-14 20:51:19.000000000 +0100
+--- src/auto/configure 2012-02-05 22:41:01.000000000 +0100
+***************
+*** 11328,11334 ****
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
+ $as_echo_n "checking for Solaris ACL support... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+--- 11328,11374 ----
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5
+! $as_echo_n "checking for acl_get in -lsec... " >&6; }
+! if test "${ac_cv_lib_sec_acl_get+set}" = set; then :
+! $as_echo_n "(cached) " >&6
+! else
+! ac_check_lib_save_LIBS=$LIBS
+! LIBS="-lsec $LIBS"
+! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+! /* end confdefs.h. */
+!
+! /* Override any GCC internal prototype to avoid an error.
+! Use char because int might match the return type of a GCC
+! builtin and then its argument prototype would still apply. */
+! #ifdef __cplusplus
+! extern "C"
+! #endif
+! char acl_get ();
+! int
+! main ()
+! {
+! return acl_get ();
+! ;
+! return 0;
+! }
+! _ACEOF
+! if ac_fn_c_try_link "$LINENO"; then :
+! ac_cv_lib_sec_acl_get=yes
+! else
+! ac_cv_lib_sec_acl_get=no
+! fi
+! rm -f core conftest.err conftest.$ac_objext \
+! conftest$ac_exeext conftest.$ac_ext
+! LIBS=$ac_check_lib_save_LIBS
+! fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5
+! $as_echo "$ac_cv_lib_sec_acl_get" >&6; }
+! if test "x$ac_cv_lib_sec_acl_get" = x""yes; then :
+! LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h
+!
+! else
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
+ $as_echo_n "checking for Solaris ACL support... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+***************
+*** 11355,11360 ****
+--- 11395,11402 ----
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
++ fi
++
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AIX ACL support" >&5
+ $as_echo_n "checking for AIX ACL support... " >&6; }
+*** ../vim-7.3.431/src/config.h.in 2011-09-02 12:27:20.000000000 +0200
+--- src/config.h.in 2012-02-05 22:40:22.000000000 +0100
+***************
+*** 363,368 ****
+--- 363,369 ----
+
+ /* Define if you want to add support for ACL */
+ #undef HAVE_POSIX_ACL
++ #undef HAVE_SOLARIS_ZFS_ACL
+ #undef HAVE_SOLARIS_ACL
+ #undef HAVE_AIX_ACL
+
+*** ../vim-7.3.431/src/os_unix.c 2012-01-10 22:26:12.000000000 +0100
+--- src/os_unix.c 2012-02-05 22:40:22.000000000 +0100
+***************
+*** 2746,2751 ****
+--- 2746,2758 ----
+ #ifdef HAVE_POSIX_ACL
+ ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS);
+ #else
++ #ifdef HAVE_SOLARIS_ZFS_ACL
++ acl_t *aclent;
++
++ if (acl_get((char *)fname, 0, &aclent) < 0)
++ return NULL;
++ ret = (vim_acl_T)aclent;
++ #else
+ #ifdef HAVE_SOLARIS_ACL
+ vim_acl_solaris_T *aclent;
+
+***************
+*** 2791,2796 ****
+--- 2798,2804 ----
+ ret = (vim_acl_T)aclent;
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++ #endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+ return ret;
+ }
+***************
+*** 2808,2813 ****
+--- 2816,2824 ----
+ #ifdef HAVE_POSIX_ACL
+ acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent);
+ #else
++ #ifdef HAVE_SOLARIS_ZFS_ACL
++ acl_set((char *)fname, (acl_t *)aclent);
++ #else
+ #ifdef HAVE_SOLARIS_ACL
+ acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt,
+ ((vim_acl_solaris_T *)aclent)->acl_entry);
+***************
+*** 2816,2821 ****
+--- 2827,2833 ----
+ chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len);
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++ #endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+ }
+
+***************
+*** 2828,2833 ****
+--- 2840,2848 ----
+ #ifdef HAVE_POSIX_ACL
+ acl_free((acl_t)aclent);
+ #else
++ #ifdef HAVE_SOLARIS_ZFS_ACL
++ acl_free((acl_t *)aclent);
++ #else
+ #ifdef HAVE_SOLARIS_ACL
+ free(((vim_acl_solaris_T *)aclent)->acl_entry);
+ free(aclent);
+***************
+*** 2836,2841 ****
+--- 2851,2857 ----
+ free(aclent);
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++ #endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+ }
+ #endif
+*** ../vim-7.3.431/src/version.c 2012-02-05 22:05:44.000000000 +0100
+--- src/version.c 2012-02-05 22:44:10.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 432,
+ /**/
+
+--
+If you put 7 of the most talented OSS developers in a room for a week
+and asked them to fix a bug in a spreadsheet program, in 1 week
+you'd have 2 new mail readers and a text-based web browser.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.433
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.433
+Problem: Using continued lines in a Vim script can be slow.
+Solution: Instead of reallocating for every line use a growarray. (Yasuhiro
+ Matsumoto)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.432/src/ex_cmds2.c 2012-02-04 21:57:44.000000000 +0100
+--- src/ex_cmds2.c 2012-02-05 23:06:31.000000000 +0100
+***************
+*** 3439,3460 ****
+ {
+ /* compensate for the one line read-ahead */
+ --sourcing_lnum;
+! for (;;)
+ {
+! sp->nextline = get_one_sourceline(sp);
+! if (sp->nextline == NULL)
+! break;
+! p = skipwhite(sp->nextline);
+! if (*p != '\\')
+! break;
+! s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
+! if (s == NULL) /* out of memory */
+! break;
+! STRCPY(s, line);
+! STRCAT(s, p + 1);
+ vim_free(line);
+! line = s;
+! vim_free(sp->nextline);
+ }
+ }
+
+--- 3439,3470 ----
+ {
+ /* compensate for the one line read-ahead */
+ --sourcing_lnum;
+!
+! /* Get the next line and concatenate it when it starts with a
+! * backslash. We always need to read the next line, keep it in
+! * sp->nextline. */
+! sp->nextline = get_one_sourceline(sp);
+! if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
+ {
+! garray_T ga;
+!
+! ga_init2(&ga, (int)sizeof(char_u), 200);
+! ga_concat(&ga, line);
+! ga_concat(&ga, p + 1);
+! for (;;)
+! {
+! vim_free(sp->nextline);
+! sp->nextline = get_one_sourceline(sp);
+! if (sp->nextline == NULL)
+! break;
+! p = skipwhite(sp->nextline);
+! if (*p != '\\')
+! break;
+! ga_concat(&ga, p + 1);
+! }
+! ga_append(&ga, NUL);
+ vim_free(line);
+! line = ga.ga_data;
+ }
+ }
+
+*** ../vim-7.3.432/src/version.c 2012-02-05 22:51:27.000000000 +0100
+--- src/version.c 2012-02-05 23:09:21.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 433,
+ /**/
+
+--
+Due knot trussed yore spell chequer two fined awl miss steaks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.434
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.434
+Problem: Using join() can be slow.
+Solution: Compute the size of the result before allocation to avoid a lot of
+ allocations and copies. (Taro Muraoka)
+Files: src/eval.c
+
+
+*** ../vim-7.3.433/src/eval.c 2012-02-05 00:39:14.000000000 +0100
+--- src/eval.c 2012-02-06 00:05:31.000000000 +0100
+***************
+*** 442,447 ****
+--- 442,448 ----
+ static list_T *list_copy __ARGS((list_T *orig, int deep, int copyID));
+ static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+ static char_u *list2string __ARGS((typval_T *tv, int copyID));
++ static int list_join_inner __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo_style, int copyID, garray_T *join_gap));
+ static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
+ static int free_unref_items __ARGS((int copyID));
+ static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+***************
+*** 6571,6617 ****
+ return (char_u *)ga.ga_data;
+ }
+
+! /*
+! * Join list "l" into a string in "*gap", using separator "sep".
+! * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
+! * Return FAIL or OK.
+! */
+ static int
+! list_join(gap, l, sep, echo_style, copyID)
+! garray_T *gap;
+ list_T *l;
+ char_u *sep;
+ int echo_style;
+ int copyID;
+ {
+ int first = TRUE;
+ char_u *tofree;
+ char_u numbuf[NUMBUFLEN];
+ listitem_T *item;
+ char_u *s;
+
+ for (item = l->lv_first; item != NULL && !got_int; item = item->li_next)
+ {
+- if (first)
+- first = FALSE;
+- else
+- ga_concat(gap, sep);
+-
+ if (echo_style)
+ s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ else
+ s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+- if (s != NULL)
+- ga_concat(gap, s);
+- vim_free(tofree);
+ if (s == NULL)
+ return FAIL;
+ line_breakcheck();
+ }
+ return OK;
+ }
+
+ /*
+ * Garbage collection for lists and dictionaries.
+ *
+ * We use reference counts to be able to free most items right away when they
+--- 6572,6690 ----
+ return (char_u *)ga.ga_data;
+ }
+
+! typedef struct join_S {
+! char_u *s;
+! char_u *tofree;
+! } join_T;
+!
+ static int
+! list_join_inner(gap, l, sep, echo_style, copyID, join_gap)
+! garray_T *gap; /* to store the result in */
+ list_T *l;
+ char_u *sep;
+ int echo_style;
+ int copyID;
++ garray_T *join_gap; /* to keep each list item string */
+ {
++ int i;
++ join_T *p;
++ int len;
++ int sumlen = 0;
+ int first = TRUE;
+ char_u *tofree;
+ char_u numbuf[NUMBUFLEN];
+ listitem_T *item;
+ char_u *s;
+
++ /* Stringify each item in the list. */
+ for (item = l->lv_first; item != NULL && !got_int; item = item->li_next)
+ {
+ if (echo_style)
+ s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ else
+ s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+ if (s == NULL)
+ return FAIL;
++
++ len = (int)STRLEN(s);
++ sumlen += len;
++
++ ga_grow(join_gap, 1);
++ p = ((join_T *)join_gap->ga_data) + (join_gap->ga_len++);
++ if (tofree != NULL || s != numbuf)
++ {
++ p->s = s;
++ p->tofree = tofree;
++ }
++ else
++ {
++ p->s = vim_strnsave(s, len);
++ p->tofree = p->s;
++ }
++
++ line_breakcheck();
++ }
++
++ /* Allocate result buffer with its total size, avoid re-allocation and
++ * multiple copy operations. Add 2 for a tailing ']' and NUL. */
++ if (join_gap->ga_len >= 2)
++ sumlen += (int)STRLEN(sep) * (join_gap->ga_len - 1);
++ if (ga_grow(gap, sumlen + 2) == FAIL)
++ return FAIL;
++
++ for (i = 0; i < join_gap->ga_len && !got_int; ++i)
++ {
++ if (first)
++ first = FALSE;
++ else
++ ga_concat(gap, sep);
++ p = ((join_T *)join_gap->ga_data) + i;
++
++ if (p->s != NULL)
++ ga_concat(gap, p->s);
+ line_breakcheck();
+ }
++
+ return OK;
+ }
+
+ /*
++ * Join list "l" into a string in "*gap", using separator "sep".
++ * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
++ * Return FAIL or OK.
++ */
++ static int
++ list_join(gap, l, sep, echo_style, copyID)
++ garray_T *gap;
++ list_T *l;
++ char_u *sep;
++ int echo_style;
++ int copyID;
++ {
++ garray_T join_ga;
++ int retval;
++ join_T *p;
++ int i;
++
++ ga_init2(&join_ga, (int)sizeof(join_T), l->lv_len);
++ retval = list_join_inner(gap, l, sep, echo_style, copyID, &join_ga);
++
++ /* Dispose each item in join_ga. */
++ if (join_ga.ga_data != NULL)
++ {
++ p = (join_T *)join_ga.ga_data;
++ for (i = 0; i < join_ga.ga_len; ++i)
++ {
++ vim_free(p->tofree);
++ ++p;
++ }
++ ga_clear(&join_ga);
++ }
++
++ return retval;
++ }
++
++ /*
+ * Garbage collection for lists and dictionaries.
+ *
+ * We use reference counts to be able to free most items right away when they
+***************
+*** 13406,13412 ****
+ char_u *rhs;
+ int mode;
+ int abbr = FALSE;
+! int get_dict = FALSE;
+ mapblock_T *mp;
+ int buffer_local;
+
+--- 13479,13485 ----
+ char_u *rhs;
+ int mode;
+ int abbr = FALSE;
+! int get_dict = FALSE;
+ mapblock_T *mp;
+ int buffer_local;
+
+*** ../vim-7.3.433/src/version.c 2012-02-05 23:10:25.000000000 +0100
+--- src/version.c 2012-02-06 00:10:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 434,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+30. Even though you died last week, you've managed to retain OPS on your
+ favorite IRC channel.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.435
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.435
+Problem: Compiler warning for unused variable.
+Solution: Move the variable inside #ifdef.
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.434/src/ex_cmds2.c 2012-02-05 23:10:25.000000000 +0100
+--- src/ex_cmds2.c 2012-02-06 06:16:28.000000000 +0100
+***************
+*** 3400,3406 ****
+ {
+ struct source_cookie *sp = (struct source_cookie *)cookie;
+ char_u *line;
+! char_u *p, *s;
+
+ #ifdef FEAT_EVAL
+ /* If breakpoints have been added/deleted need to check for it. */
+--- 3400,3406 ----
+ {
+ struct source_cookie *sp = (struct source_cookie *)cookie;
+ char_u *line;
+! char_u *p;
+
+ #ifdef FEAT_EVAL
+ /* If breakpoints have been added/deleted need to check for it. */
+***************
+*** 3471,3476 ****
+--- 3471,3478 ----
+ #ifdef FEAT_MBYTE
+ if (line != NULL && sp->conv.vc_type != CONV_NONE)
+ {
++ char_u *s;
++
+ /* Convert the encoding of the script line. */
+ s = string_convert(&sp->conv, line, NULL);
+ if (s != NULL)
+*** ../vim-7.3.434/src/version.c 2012-02-06 00:13:16.000000000 +0100
+--- src/version.c 2012-02-11 20:38:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 435,
+ /**/
+
+--
+Light travels faster than sound. This is why some people
+appear bright until you hear them speak
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.436
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.436
+Problem: Compiler warnings for types on Windows.
+Solution: Add type casts. (Mike Williams)
+Files: src/eval.c
+
+
+*** ../vim-7.3.435/src/eval.c 2012-02-06 00:13:16.000000000 +0100
+--- src/eval.c 2012-02-11 20:38:16.000000000 +0100
+***************
+*** 14462,14468 ****
+ --prevlen;
+ }
+ if (prevlen == 0)
+! s = vim_strnsave(start, len);
+ else
+ {
+ /* Change "prev" buffer to be the right size. This way
+--- 14462,14468 ----
+ --prevlen;
+ }
+ if (prevlen == 0)
+! s = vim_strnsave(start, (int)len);
+ else
+ {
+ /* Change "prev" buffer to be the right size. This way
+***************
+*** 14529,14535 ****
+
+ if (dest < buf)
+ {
+! adjust_prevlen = buf - dest; /* must be 1 or 2 */
+ dest = buf;
+ }
+ if (readlen > p - buf + 1)
+--- 14529,14535 ----
+
+ if (dest < buf)
+ {
+! adjust_prevlen = (int)(buf - dest); /* must be 1 or 2 */
+ dest = buf;
+ }
+ if (readlen > p - buf + 1)
+***************
+*** 14558,14568 ****
+ * small, to avoid repeatedly 'allocing' large and
+ * 'reallocing' small. */
+ if (prevsize == 0)
+! prevsize = p - start;
+ else
+ {
+ long grow50pc = (prevsize * 3) / 2;
+! long growmin = (p - start) * 2 + prevlen;
+ prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+ if ((newprev = vim_realloc(prev, prevsize)) == NULL)
+--- 14558,14568 ----
+ * small, to avoid repeatedly 'allocing' large and
+ * 'reallocing' small. */
+ if (prevsize == 0)
+! prevsize = (long)(p - start);
+ else
+ {
+ long grow50pc = (prevsize * 3) / 2;
+! long growmin = (long)((p - start) * 2 + prevlen);
+ prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+ if ((newprev = vim_realloc(prev, prevsize)) == NULL)
+***************
+*** 14575,14581 ****
+ }
+ /* Add the line part to end of "prev". */
+ mch_memmove(prev + prevlen, start, p - start);
+! prevlen += p - start;
+ }
+ } /* while */
+
+--- 14575,14581 ----
+ }
+ /* Add the line part to end of "prev". */
+ mch_memmove(prev + prevlen, start, p - start);
+! prevlen += (long)(p - start);
+ }
+ } /* while */
+
+*** ../vim-7.3.435/src/version.c 2012-02-11 20:40:49.000000000 +0100
+--- src/version.c 2012-02-11 20:43:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 436,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+39. You move into a new house and decide to Netscape before you landscape.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.437
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.437
+Problem: Continue looping inside FOR_ALL_TAB_WINDOWS even when already done.
+Solution: Use goto instead of break. (Hirohito Higashi)
+Files: src/fileio.c, src/globals.h
+
+
+*** ../vim-7.3.436/src/fileio.c 2011-09-02 11:56:15.000000000 +0200
+--- src/fileio.c 2012-02-11 23:40:23.000000000 +0100
+***************
+*** 8898,8907 ****
+ if (tp != curtab)
+ goto_tabpage_tp(tp);
+ win_goto(aucmd_win);
+! break;
+ }
+ }
+ }
+
+ /* Remove the window and frame from the tree of frames. */
+ (void)winframe_remove(curwin, &dummy, NULL);
+--- 8898,8908 ----
+ if (tp != curtab)
+ goto_tabpage_tp(tp);
+ win_goto(aucmd_win);
+! goto win_found;
+ }
+ }
+ }
++ win_found:
+
+ /* Remove the window and frame from the tree of frames. */
+ (void)winframe_remove(curwin, &dummy, NULL);
+*** ../vim-7.3.436/src/globals.h 2012-02-04 23:34:57.000000000 +0100
+--- src/globals.h 2012-02-11 23:43:45.000000000 +0100
+***************
+*** 535,540 ****
+--- 535,544 ----
+ EXTERN win_T *prevwin INIT(= NULL); /* previous window */
+ # define W_NEXT(wp) ((wp)->w_next)
+ # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
++ /*
++ * When using this macro "break" only breaks out of the inner loop. Use "goto"
++ * to break out of the tabpage loop.
++ */
+ # define FOR_ALL_TAB_WINDOWS(tp, wp) \
+ for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \
+ for ((wp) = ((tp) == curtab) \
+*** ../vim-7.3.436/src/version.c 2012-02-11 20:44:01.000000000 +0100
+--- src/version.c 2012-02-11 23:40:47.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 437,
+ /**/
+
+--
+The future isn't what it used to be.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.438
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.438
+Problem: There is no way to avoid ":doautoall" reading modelines.
+Solution: Add the <nomodeline> argument. Adjust documentation.
+Files: src/fileio.c, runtime/doc/autocmd.txt
+
+
+*** ../vim-7.3.437/src/fileio.c 2012-02-11 23:45:30.000000000 +0100
+--- src/fileio.c 2012-02-12 00:08:17.000000000 +0100
+***************
+*** 8739,8744 ****
+--- 8739,8752 ----
+ int retval;
+ aco_save_T aco;
+ buf_T *buf;
++ char_u *arg = eap->arg;
++ int call_do_modelines = TRUE;
++
++ if (STRNCMP(arg, "<nomodeline>", 12) == 0)
++ {
++ call_do_modelines = FALSE;
++ arg = skipwhite(arg + 12);
++ }
+
+ /*
+ * This is a bit tricky: For some commands curwin->w_buffer needs to be
+***************
+*** 8755,8765 ****
+ aucmd_prepbuf(&aco, buf);
+
+ /* execute the autocommands for this buffer */
+! retval = do_doautocmd(eap->arg, FALSE);
+
+! /* Execute the modeline settings, but don't set window-local
+! * options if we are using the current window for another buffer. */
+! do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
+
+ /* restore the current window */
+ aucmd_restbuf(&aco);
+--- 8763,8777 ----
+ aucmd_prepbuf(&aco, buf);
+
+ /* execute the autocommands for this buffer */
+! retval = do_doautocmd(arg, FALSE);
+
+! if (call_do_modelines)
+! {
+! /* Execute the modeline settings, but don't set window-local
+! * options if we are using the current window for another
+! * buffer. */
+! do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
+! }
+
+ /* restore the current window */
+ aucmd_restbuf(&aco);
+*** ../vim-7.3.437/runtime/doc/autocmd.txt 2011-05-19 17:25:36.000000000 +0200
+--- runtime/doc/autocmd.txt 2012-02-12 00:03:45.000000000 +0100
+***************
+*** 1065,1077 ****
+ autocommands for that group. Note: if you use an
+ undefined group name, Vim gives you an error message.
+
+- After applying the autocommands the modelines are
+- processed, so that their settings overrule the
+- settings from autocommands, like what happens when
+- editing a file.
+-
+ *:doautoa* *:doautoall*
+! :doautoa[ll] [group] {event} [fname]
+ Like ":doautocmd", but apply the autocommands to each
+ loaded buffer. Note that [fname] is used to select
+ the autocommands, not the buffers to which they are
+--- 1073,1080 ----
+ autocommands for that group. Note: if you use an
+ undefined group name, Vim gives you an error message.
+
+ *:doautoa* *:doautoall*
+! :doautoa[ll] [<nomodeline>] [group] {event} [fname]
+ Like ":doautocmd", but apply the autocommands to each
+ loaded buffer. Note that [fname] is used to select
+ the autocommands, not the buffers to which they are
+***************
+*** 1082,1087 ****
+--- 1085,1096 ----
+ This command is intended for autocommands that set
+ options, change highlighting, and things like that.
+
++ After applying the autocommands the modelines are
++ processed, so that their settings overrule the
++ settings from autocommands, like what happens when
++ editing a file. This is skipped when the <nomodeline>
++ argument is present.
++
+ ==============================================================================
+ 10. Using autocommands *autocmd-use*
+
+*** ../vim-7.3.437/src/version.c 2012-02-11 23:45:30.000000000 +0100
+--- src/version.c 2012-02-12 00:16:04.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 438,
+ /**/
+
+--
+"Oh, no! NOT the Spanish Inquisition!"
+"NOBODY expects the Spanish Inquisition!!!"
+ -- Monty Python sketch --
+"Oh, no! NOT another option!"
+"EVERYBODY expects another option!!!"
+ -- Discussion in vim-dev mailing list --
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.439
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.439
+Problem: Compiler warnings to size casts in Perl interface.
+Solution: Use XS macros. (James McCoy)
+Files: src/if_perl.xs, src/typemap
+
+
+*** ../vim-7.3.438/src/if_perl.xs 2011-09-07 18:47:19.000000000 +0200
+--- src/if_perl.xs 2012-02-12 00:28:52.000000000 +0100
+***************
+*** 611,617 ****
+ if (ptr->w_perl_private == NULL)
+ {
+ ptr->w_perl_private = newSV(0);
+! sv_setiv(ptr->w_perl_private, (IV)ptr);
+ }
+ else
+ SvREFCNT_inc(ptr->w_perl_private);
+--- 611,617 ----
+ if (ptr->w_perl_private == NULL)
+ {
+ ptr->w_perl_private = newSV(0);
+! sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
+ }
+ else
+ SvREFCNT_inc(ptr->w_perl_private);
+***************
+*** 629,635 ****
+ if (ptr->b_perl_private == NULL)
+ {
+ ptr->b_perl_private = newSV(0);
+! sv_setiv(ptr->b_perl_private, (IV)ptr);
+ }
+ else
+ SvREFCNT_inc(ptr->b_perl_private);
+--- 629,635 ----
+ if (ptr->b_perl_private == NULL)
+ {
+ ptr->b_perl_private = newSV(0);
+! sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
+ }
+ else
+ SvREFCNT_inc(ptr->b_perl_private);
+*** ../vim-7.3.438/src/typemap 2010-08-15 21:57:29.000000000 +0200
+--- src/typemap 2012-02-12 00:28:52.000000000 +0100
+***************
+*** 6,12 ****
+ T_VIOBJNOMUNGE
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+! $var = ($type) tmp;
+ if (!tmp)
+ croak(\"$ntype no longer exists\");
+ }
+--- 6,12 ----
+ T_VIOBJNOMUNGE
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+! $var = INT2PTR($type, tmp);
+ if (!tmp)
+ croak(\"$ntype no longer exists\");
+ }
+*** ../vim-7.3.438/src/version.c 2012-02-12 00:18:54.000000000 +0100
+--- src/version.c 2012-02-12 00:31:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 439,
+ /**/
+
+--
+Microsoft is to software what McDonalds is to gourmet cooking
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.440
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.440
+Problem: Vim does not support UTF8_STRING for the X selection.
+Solution: Add UTF8_STRING atom support. (Alex Efros) Use it only when
+ 'encoding' is set to Unicode.
+Files: src/ui.c
+
+
+*** ../vim-7.3.439/src/ui.c 2012-02-04 21:57:44.000000000 +0100
+--- src/ui.c 2012-02-12 01:28:30.000000000 +0100
+***************
+*** 1917,1922 ****
+--- 1917,1923 ----
+ static Atom vim_atom; /* Vim's own special selection format */
+ #ifdef FEAT_MBYTE
+ static Atom vimenc_atom; /* Vim's extended selection format */
++ static Atom utf8_atom;
+ #endif
+ static Atom compound_text_atom;
+ static Atom text_atom;
+***************
+*** 1930,1935 ****
+--- 1931,1937 ----
+ vim_atom = XInternAtom(dpy, VIM_ATOM_NAME, False);
+ #ifdef FEAT_MBYTE
+ vimenc_atom = XInternAtom(dpy, VIMENC_ATOM_NAME,False);
++ utf8_atom = XInternAtom(dpy, "UTF8_STRING", False);
+ #endif
+ compound_text_atom = XInternAtom(dpy, "COMPOUND_TEXT", False);
+ text_atom = XInternAtom(dpy, "TEXT", False);
+***************
+*** 2074,2080 ****
+ }
+ #endif
+
+! else if (*type == compound_text_atom || (
+ #ifdef FEAT_MBYTE
+ enc_dbcs != 0 &&
+ #endif
+--- 2076,2086 ----
+ }
+ #endif
+
+! else if (*type == compound_text_atom
+! #ifdef FEAT_MBYTE
+! || *type == utf8_atom
+! #endif
+! || (
+ #ifdef FEAT_MBYTE
+ enc_dbcs != 0 &&
+ #endif
+***************
+*** 2128,2134 ****
+ #else
+ 1
+ #endif
+! ; i < 5; i++)
+ {
+ switch (i)
+ {
+--- 2134,2140 ----
+ #else
+ 1
+ #endif
+! ; i < 6; i++)
+ {
+ switch (i)
+ {
+***************
+*** 2136,2145 ****
+ case 0: type = vimenc_atom; break;
+ #endif
+ case 1: type = vim_atom; break;
+! case 2: type = compound_text_atom; break;
+! case 3: type = text_atom; break;
+ default: type = XA_STRING;
+ }
+ success = MAYBE;
+ XtGetSelectionValue(myShell, cbd->sel_atom, type,
+ clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
+--- 2142,2159 ----
+ case 0: type = vimenc_atom; break;
+ #endif
+ case 1: type = vim_atom; break;
+! #ifdef FEAT_MBYTE
+! case 2: type = utf8_atom; break;
+! #endif
+! case 3: type = compound_text_atom; break;
+! case 4: type = text_atom; break;
+ default: type = XA_STRING;
+ }
++ #ifdef FEAT_MBYTE
++ if (type == utf8_atom && !enc_utf8)
++ /* Only request utf-8 when 'encoding' is utf8. */
++ continue;
++ #endif
+ success = MAYBE;
+ XtGetSelectionValue(myShell, cbd->sel_atom, type,
+ clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
+***************
+*** 2230,2247 ****
+ {
+ Atom *array;
+
+! if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 6))) == NULL)
+ return False;
+ *value = (XtPointer)array;
+ i = 0;
+- array[i++] = XA_STRING;
+ array[i++] = targets_atom;
+ #ifdef FEAT_MBYTE
+ array[i++] = vimenc_atom;
+ #endif
+ array[i++] = vim_atom;
+ array[i++] = text_atom;
+ array[i++] = compound_text_atom;
+ *type = XA_ATOM;
+ /* This used to be: *format = sizeof(Atom) * 8; but that caused
+ * crashes on 64 bit machines. (Peter Derr) */
+--- 2244,2266 ----
+ {
+ Atom *array;
+
+! if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 7))) == NULL)
+ return False;
+ *value = (XtPointer)array;
+ i = 0;
+ array[i++] = targets_atom;
+ #ifdef FEAT_MBYTE
+ array[i++] = vimenc_atom;
+ #endif
+ array[i++] = vim_atom;
++ #ifdef FEAT_MBYTE
++ if (enc_utf8)
++ array[i++] = utf8_atom;
++ #endif
++ array[i++] = XA_STRING;
+ array[i++] = text_atom;
+ array[i++] = compound_text_atom;
++
+ *type = XA_ATOM;
+ /* This used to be: *format = sizeof(Atom) * 8; but that caused
+ * crashes on 64 bit machines. (Peter Derr) */
+***************
+*** 2253,2258 ****
+--- 2272,2278 ----
+ if ( *target != XA_STRING
+ #ifdef FEAT_MBYTE
+ && *target != vimenc_atom
++ && *target != utf8_atom
+ #endif
+ && *target != vim_atom
+ && *target != text_atom
+***************
+*** 2282,2294 ****
+ return False;
+ }
+
+! if (*target == XA_STRING)
+ {
+ mch_memmove(result, string, (size_t)(*length));
+! *type = XA_STRING;
+ }
+! else if (*target == compound_text_atom
+! || *target == text_atom)
+ {
+ XTextProperty text_prop;
+ char *string_nt = (char *)alloc((unsigned)*length + 1);
+--- 2302,2317 ----
+ return False;
+ }
+
+! if (*target == XA_STRING
+! #ifdef FEAT_MBYTE
+! || (*target == utf8_atom && enc_utf8)
+! #endif
+! )
+ {
+ mch_memmove(result, string, (size_t)(*length));
+! *type = *target;
+ }
+! else if (*target == compound_text_atom || *target == text_atom)
+ {
+ XTextProperty text_prop;
+ char *string_nt = (char *)alloc((unsigned)*length + 1);
+*** ../vim-7.3.439/src/version.c 2012-02-12 00:31:47.000000000 +0100
+--- src/version.c 2012-02-12 01:34:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 440,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+42. Your virtual girlfriend finds a new net sweetheart with a larger bandwidth.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.441
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.441
+Problem: Newer versions of MzScheme (Racket) require earlier (trampolined)
+ initialisation.
+Solution: Call mzscheme_main() early in main(). (Sergey Khorev)
+Files: src/Make_mvc.mak, src/if_mzsch.c, src/main.c,
+ src/proto/if_mzsch.pro
+
+
+*** ../vim-7.3.440/src/Make_mvc.mak 2011-09-14 19:01:38.000000000 +0200
+--- src/Make_mvc.mak 2012-02-12 01:46:05.000000000 +0100
+***************
+*** 740,745 ****
+--- 740,747 ----
+ !endif
+ !endif
+ MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
++ # increase stack size
++ MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
+ !endif
+
+ # Perl interface
+*** ../vim-7.3.440/src/if_mzsch.c 2010-11-03 21:59:23.000000000 +0100
+--- src/if_mzsch.c 2012-02-12 01:47:31.000000000 +0100
+***************
+*** 31,38 ****
+ * depend". */
+ #if defined(FEAT_MZSCHEME) || defined(PROTO)
+
+- #include <assert.h>
+-
+ /* Base data structures */
+ #define SCHEME_VIMBUFFERP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type)
+ #define SCHEME_VIMWINDOWP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_window_type)
+--- 31,36 ----
+***************
+*** 559,575 ****
+ hMzSch = vimLoadLib(sch_dll);
+ hMzGC = vimLoadLib(gc_dll);
+
+! if (!hMzSch)
+ {
+ if (verbose)
+! EMSG2(_(e_loadlib), sch_dll);
+ return FAIL;
+ }
+
+! if (!hMzGC)
+ {
+ if (verbose)
+! EMSG2(_(e_loadlib), gc_dll);
+ return FAIL;
+ }
+
+--- 557,573 ----
+ hMzSch = vimLoadLib(sch_dll);
+ hMzGC = vimLoadLib(gc_dll);
+
+! if (!hMzGC)
+ {
+ if (verbose)
+! EMSG2(_(e_loadlib), gc_dll);
+ return FAIL;
+ }
+
+! if (!hMzSch)
+ {
+ if (verbose)
+! EMSG2(_(e_loadlib), sch_dll);
+ return FAIL;
+ }
+
+***************
+*** 798,862 ****
+ static __declspec(thread) void *tls_space;
+ #endif
+
+! void
+! mzscheme_main(void)
+ {
+ #if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
+ scheme_register_tls_space(&tls_space, 0);
+ #endif
+! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
+! /* use trampoline for precise GC in MzScheme >= 4.x */
+! scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
+ #else
+! mzscheme_env_main(NULL, 0, NULL);
+ #endif
+ }
+
+ static int
+! mzscheme_env_main(Scheme_Env *env, int argc UNUSED, char **argv UNUSED)
+ {
+! /* neither argument nor return values are used */
+! #ifdef MZ_PRECISE_GC
+! # if MZSCHEME_VERSION_MAJOR < 400
+! /*
+! * Starting from version 4.x, embedding applications must use
+! * scheme_main_setup/scheme_main_stack_setup trampolines
+! * rather than setting stack base directly with scheme_set_stack_base
+! */
+ Scheme_Object *dummy = NULL;
+ MZ_GC_DECL_REG(1);
+ MZ_GC_VAR_IN_REG(0, dummy);
+
+ stack_base = &__gc_var_stack__;
+ # else
+- /* environment has been created by us by Scheme */
+- environment = env;
+- # endif
+- /*
+- * In 4.x, all activities must be performed inside trampoline
+- * so we are forced to initialise GC immediately
+- * This can be postponed in 3.x but I see no point in implementing
+- * a feature which will work in older versions only.
+- * One would better use conservative GC if he needs dynamic MzScheme
+- */
+- mzscheme_init();
+- #else
+ int dummy = 0;
+ stack_base = (void *)&dummy;
+ #endif
+! main_loop(FALSE, FALSE);
+! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400
+ /* releasing dummy */
+ MZ_GC_REG();
+ MZ_GC_UNREG();
+ #endif
+! return 0;
+ }
+
+ static void
+ startup_mzscheme(void)
+ {
+! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
+ scheme_set_stack_base(stack_base, 1);
+ #endif
+
+--- 796,863 ----
+ static __declspec(thread) void *tls_space;
+ #endif
+
+! /*
+! * Since version 4.x precise GC requires trampolined startup.
+! * Futures and places in version 5.x need it too.
+! */
+! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 \
+! || MZSCHEME_VERSION_MAJOR >= 500 && (defined(MZ_USE_FUTURES) || defined(MZ_USE_PLACES))
+! # ifdef DYNAMIC_MZSCHEME
+! # error Precise GC v.4+ or Racket with futures/places do not support dynamic MzScheme
+! # endif
+! # define TRAMPOLINED_MZVIM_STARTUP
+! #endif
+!
+! int
+! mzscheme_main(int argc, char** argv)
+ {
+ #if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
+ scheme_register_tls_space(&tls_space, 0);
+ #endif
+! #ifdef TRAMPOLINED_MZVIM_STARTUP
+! return scheme_main_setup(TRUE, mzscheme_env_main, argc, argv);
+ #else
+! return mzscheme_env_main(NULL, argc, argv);
+ #endif
+ }
+
+ static int
+! mzscheme_env_main(Scheme_Env *env, int argc, char **argv)
+ {
+! int vim_main_result;
+! #ifdef TRAMPOLINED_MZVIM_STARTUP
+! /* Scheme has created the environment for us */
+! environment = env;
+! #else
+! # ifdef MZ_PRECISE_GC
+ Scheme_Object *dummy = NULL;
+ MZ_GC_DECL_REG(1);
+ MZ_GC_VAR_IN_REG(0, dummy);
+
+ stack_base = &__gc_var_stack__;
+ # else
+ int dummy = 0;
+ stack_base = (void *)&dummy;
++ # endif
+ #endif
+!
+! /* mzscheme_main is called as a trampoline from main.
+! * We trampoline into vim_main2
+! * Passing argc, argv through from mzscheme_main
+! */
+! vim_main_result = vim_main2(argc, argv);
+! #if !defined(TRAMPOLINED_MZVIM_STARTUP) && defined(MZ_PRECISE_GC)
+ /* releasing dummy */
+ MZ_GC_REG();
+ MZ_GC_UNREG();
+ #endif
+! return vim_main_result;
+ }
+
+ static void
+ startup_mzscheme(void)
+ {
+! #ifndef TRAMPOLINED_MZVIM_STARTUP
+ scheme_set_stack_base(stack_base, 1);
+ #endif
+
+***************
+*** 868,874 ****
+ MZ_REGISTER_STATIC(exn_message);
+ MZ_REGISTER_STATIC(vim_exn);
+
+! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
+ /* in newer versions of precise GC the initial env has been created */
+ environment = scheme_basic_env();
+ #endif
+--- 869,875 ----
+ MZ_REGISTER_STATIC(exn_message);
+ MZ_REGISTER_STATIC(vim_exn);
+
+! #ifndef TRAMPOLINED_MZVIM_STARTUP
+ /* in newer versions of precise GC the initial env has been created */
+ environment = scheme_basic_env();
+ #endif
+***************
+*** 3013,3019 ****
+ MZ_GC_REG();
+
+ tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc);
+- assert(nc <= 5);
+ mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *));
+ MZ_GC_CHECK();
+
+--- 3014,3019 ----
+*** ../vim-7.3.440/src/main.c 2011-12-08 15:57:54.000000000 +0100
+--- src/main.c 2012-02-12 01:49:50.000000000 +0100
+***************
+*** 554,559 ****
+--- 554,584 ----
+ debug_break_level = params.use_debug_break_level;
+ #endif
+
++ #ifdef FEAT_MZSCHEME
++ /*
++ * Newer version of MzScheme (Racket) require earlier (trampolined)
++ * initialisation via scheme_main_setup.
++ * Implement this by initialising it as early as possible
++ * and splitting off remaining Vim main into vim_main2
++ */
++ {
++ /* Pack up preprocessed command line arguments.
++ * It is safe because Scheme does not access argc/argv. */
++ char *args[2];
++ args[0] = (char *)fname;
++ args[1] = (char *)¶ms;
++ return mzscheme_main(2, args);
++ }
++ }
++
++ int vim_main2(int argc, char **argv)
++ {
++ char_u *fname = (char_u *)argv[0];
++ mparm_T params;
++
++ memcpy(¶ms, argv[1], sizeof(params));
++ #endif
++
+ /* Execute --cmd arguments. */
+ exe_pre_commands(¶ms);
+
+***************
+*** 957,970 ****
+
+ /*
+ * Call the main command loop. This never returns.
+! * For embedded MzScheme the main_loop will be called by Scheme
+! * for proper stack tracking
+! */
+! #ifndef FEAT_MZSCHEME
+ main_loop(FALSE, FALSE);
+- #else
+- mzscheme_main();
+- #endif
+
+ return 0;
+ }
+--- 982,989 ----
+
+ /*
+ * Call the main command loop. This never returns.
+! */
+ main_loop(FALSE, FALSE);
+
+ return 0;
+ }
+*** ../vim-7.3.440/src/proto/if_mzsch.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/if_mzsch.pro 2012-02-12 01:50:57.000000000 +0100
+***************
+*** 14,19 ****
+ void mzvim_reset_timer __ARGS((void));
+ void *mzvim_eval_string __ARGS((char_u *str));
+ int mzthreads_allowed __ARGS((void));
+! void mzscheme_main __ARGS((void));
+ void do_mzeval __ARGS((char_u *str, typval_T *rettv));
+ /* vim: set ft=c : */
+--- 14,20 ----
+ void mzvim_reset_timer __ARGS((void));
+ void *mzvim_eval_string __ARGS((char_u *str));
+ int mzthreads_allowed __ARGS((void));
+! int mzscheme_main __ARGS((int argc, char **argv));
+ void do_mzeval __ARGS((char_u *str, typval_T *rettv));
++ int vim_main2 __ARGS((int argc, char **argv));
+ /* vim: set ft=c : */
+*** ../vim-7.3.440/src/version.c 2012-02-12 01:35:06.000000000 +0100
+--- src/version.c 2012-02-12 01:54:14.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 441,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+43. You tell the kids they can't use the computer because "Daddy's got work to
+ do" and you don't even have a job.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.442
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.442 (after 7.3.438)
+Problem: Still read modelines for ":doautocmd".
+Solution: Move check for <nomodeline> to separate function.
+Files: src/fileio.c, src/ex_docmd.c, src/proto/fileio.pro,
+ runtime/doc/autocmd.txt
+
+
+*** ../vim-7.3.441/src/fileio.c 2012-02-12 00:18:54.000000000 +0100
+--- src/fileio.c 2012-02-12 20:05:35.000000000 +0100
+***************
+*** 8740,8752 ****
+ aco_save_T aco;
+ buf_T *buf;
+ char_u *arg = eap->arg;
+! int call_do_modelines = TRUE;
+!
+! if (STRNCMP(arg, "<nomodeline>", 12) == 0)
+! {
+! call_do_modelines = FALSE;
+! arg = skipwhite(arg + 12);
+! }
+
+ /*
+ * This is a bit tricky: For some commands curwin->w_buffer needs to be
+--- 8740,8746 ----
+ aco_save_T aco;
+ buf_T *buf;
+ char_u *arg = eap->arg;
+! int call_do_modelines = check_nomodeline(&arg);
+
+ /*
+ * This is a bit tricky: For some commands curwin->w_buffer needs to be
+***************
+*** 8786,8791 ****
+--- 8780,8802 ----
+ }
+
+ /*
++ * Check *argp for <nomodeline>. When it is present return FALSE, otherwise
++ * return TRUE and advance *argp to after it.
++ * Thus return TRUE when do_modelines() should be called.
++ */
++ int
++ check_nomodeline(argp)
++ char_u **argp;
++ {
++ if (STRNCMP(*argp, "<nomodeline>", 12) == 0)
++ {
++ *argp = skipwhite(*argp + 12);
++ return FALSE;
++ }
++ return TRUE;
++ }
++
++ /*
+ * Prepare for executing autocommands for (hidden) buffer "buf".
+ * Search for a visible window containing the current buffer. If there isn't
+ * one then use "aucmd_win".
+*** ../vim-7.3.441/src/ex_docmd.c 2012-01-26 20:41:22.000000000 +0100
+--- src/ex_docmd.c 2012-02-12 20:05:18.000000000 +0100
+***************
+*** 4955,4961 ****
+ map_clear(eap->cmd, eap->arg, TRUE, TRUE);
+ }
+
+! #ifdef FEAT_AUTOCMD
+ static void
+ ex_autocmd(eap)
+ exarg_T *eap;
+--- 4955,4961 ----
+ map_clear(eap->cmd, eap->arg, TRUE, TRUE);
+ }
+
+! #if defined(FEAT_AUTOCMD) || defined(PROTO)
+ static void
+ ex_autocmd(eap)
+ exarg_T *eap;
+***************
+*** 4982,4989 ****
+ ex_doautocmd(eap)
+ exarg_T *eap;
+ {
+! (void)do_doautocmd(eap->arg, TRUE);
+! do_modelines(0);
+ }
+ #endif
+
+--- 4982,4993 ----
+ ex_doautocmd(eap)
+ exarg_T *eap;
+ {
+! char_u *arg = eap->arg;
+! int call_do_modelines = check_nomodeline(&arg);
+!
+! (void)do_doautocmd(arg, TRUE);
+! if (call_do_modelines) /* Only when there is no <nomodeline>. */
+! do_modelines(0);
+ }
+ #endif
+
+*** ../vim-7.3.441/src/proto/fileio.pro 2010-12-17 16:27:10.000000000 +0100
+--- src/proto/fileio.pro 2012-02-12 20:05:26.000000000 +0100
+***************
+*** 35,40 ****
+--- 35,41 ----
+ void do_autocmd __ARGS((char_u *arg, int forceit));
+ int do_doautocmd __ARGS((char_u *arg, int do_msg));
+ void ex_doautoall __ARGS((exarg_T *eap));
++ int check_nomodeline __ARGS((char_u **argp));
+ void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
+ void aucmd_restbuf __ARGS((aco_save_T *aco));
+ int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));
+*** ../vim-7.3.441/runtime/doc/autocmd.txt 2012-02-12 00:18:54.000000000 +0100
+--- runtime/doc/autocmd.txt 2012-02-12 20:11:05.000000000 +0100
+***************
+*** 1064,1069 ****
+--- 1072,1085 ----
+ argument is included, Vim executes only the matching
+ autocommands for that group. Note: if you use an
+ undefined group name, Vim gives you an error message.
++ *<nomodeline>*
++ After applying the autocommands the modelines are
++ processed, so that their settings overrule the
++ settings from autocommands, like what happens when
++ editing a file. This is skipped when the <nomodeline>
++ argument is present. You probably want to use
++ <nomodeline> for events that are not used when loading
++ a buffer, such as |User|.
+
+ *:doautoa* *:doautoall*
+ :doautoa[ll] [<nomodeline>] [group] {event} [fname]
+***************
+*** 1077,1088 ****
+ This command is intended for autocommands that set
+ options, change highlighting, and things like that.
+
+- After applying the autocommands the modelines are
+- processed, so that their settings overrule the
+- settings from autocommands, like what happens when
+- editing a file. This is skipped when the <nomodeline>
+- argument is present.
+-
+ ==============================================================================
+ 10. Using autocommands *autocmd-use*
+
+--- 1093,1098 ----
+*** ../vim-7.3.441/src/version.c 2012-02-12 01:55:50.000000000 +0100
+--- src/version.c 2012-02-12 20:11:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 442,
+ /**/
+
+--
+The real
+trick is
+this: to
+keep the
+lines as
+short as
+possible
+and keep
+the size
+the same
+yet free
+from the
+need for
+hyphena-
+Dammit!! (Matthew Winn)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.443
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.443
+Problem: MS-Windows: 'shcf' and 'shellxquote' defaults are not very good.
+Solution: Make a better guess when 'shell' is set to "cmd.exe". (Ben Fritz)
+Files: src/option.c, runtime/doc/options.txt
+
+
+*** ../vim-7.3.442/src/option.c 2012-01-28 18:03:30.000000000 +0100
+--- src/option.c 2012-02-12 23:17:55.000000000 +0100
+***************
+*** 3883,3889 ****
+
+ #if defined(MSDOS) || defined(WIN3264) || defined(OS2)
+ /*
+! * Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
+ * This is done after other initializations, where 'shell' might have been
+ * set, but only if they have not been set before. Default for p_shcf is
+ * "/c", for p_shq is "". For "sh" like shells it is changed here to
+--- 3883,3890 ----
+
+ #if defined(MSDOS) || defined(WIN3264) || defined(OS2)
+ /*
+! * Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
+! * 'shell' option.
+ * This is done after other initializations, where 'shell' might have been
+ * set, but only if they have not been set before. Default for p_shcf is
+ * "/c", for p_shq is "". For "sh" like shells it is changed here to
+***************
+*** 3920,3925 ****
+--- 3921,3962 ----
+ # endif
+ # endif
+ }
++ else if (strstr((char *)gettail(p_sh), "cmd.exe") != NULL)
++ {
++ int idx3;
++
++ /*
++ * cmd.exe on Windows will strip the first and last double quote given
++ * on the command line, e.g. most of the time things like:
++ * cmd /c "my path/to/echo" "my args to echo"
++ * become:
++ * my path/to/echo" "my args to echo
++ * when executed.
++ *
++ * To avoid this, use the /s argument in addition to /c to force the
++ * stripping behavior, and also set shellxquote to automatically
++ * surround the entire command in quotes (which get stripped as
++ * noted).
++ */
++
++ /* Set shellxquote default to add the quotes to be stripped. */
++ idx3 = findoption((char_u *)"sxq");
++ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
++ {
++ p_sxq = (char_u *)"\"";
++ options[idx3].def_val[VI_DEFAULT] = p_sxq;
++ }
++
++ /* Set shellcmdflag default to always strip the quotes, note the order
++ * between /s and /c is important or cmd.exe will treat the /s as part
++ * of the command to be executed. */
++ idx3 = findoption((char_u *)"shcf");
++ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
++ {
++ p_shcf = (char_u *)"/s /c";
++ options[idx3].def_val[VI_DEFAULT] = p_shcf;
++ }
++ }
+ #endif
+
+ #ifdef FEAT_TITLE
+*** ../vim-7.3.442/runtime/doc/options.txt 2011-06-26 05:36:07.000000000 +0200
+--- runtime/doc/options.txt 2012-02-12 23:21:59.000000000 +0100
+***************
+*** 5880,5895 ****
+ security reasons.
+
+ *'shellcmdflag'* *'shcf'*
+! 'shellcmdflag' 'shcf' string (default: "-c", MS-DOS and Win32, when 'shell'
+! does not contain "sh" somewhere: "/c")
+ global
+ {not in Vi}
+ Flag passed to the shell to execute "!" and ":!" commands; e.g.,
+ "bash.exe -c ls" or "command.com /c dir". For the MS-DOS-like
+ systems, the default is set according to the value of 'shell', to
+ reduce the need to set this option by the user. It's not used for
+! OS/2 (EMX figures this out itself). See |option-backslash| about
+! including spaces and backslashes. See |dos-shell|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+--- 5899,5919 ----
+ security reasons.
+
+ *'shellcmdflag'* *'shcf'*
+! 'shellcmdflag' 'shcf' string (default: "-c";
+! Win32, when 'shell' is cmd.exe: "/s /c";
+! MS-DOS and Win32, when 'shell' neither is
+! cmd.exe nor contains "sh" somewhere: "/c")
+ global
+ {not in Vi}
+ Flag passed to the shell to execute "!" and ":!" commands; e.g.,
+ "bash.exe -c ls" or "command.com /c dir". For the MS-DOS-like
+ systems, the default is set according to the value of 'shell', to
+ reduce the need to set this option by the user. It's not used for
+! OS/2 (EMX figures this out itself).
+! On Unix it can have more than one flag. Each white space separated
+! part is passed as an argument to the shell command.
+! See |option-backslash| about including spaces and backslashes.
+! Also see |dos-shell| for MS-DOS and MS-Windows.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+***************
+*** 5910,5918 ****
+ For Unix the default it "| tee". The stdout of the compiler is saved
+ in a file and echoed to the screen. If the 'shell' option is "csh" or
+ "tcsh" after initializations, the default becomes "|& tee". If the
+! 'shell' option is "sh", "ksh", "zsh" or "bash" the default becomes
+! "2>&1| tee". This means that stderr is also included. Before using
+! the 'shell' option a path is removed, thus "/bin/sh" uses "sh".
+ The initialization of this option is done after reading the ".vimrc"
+ and the other initializations, so that when the 'shell' option is set
+ there, the 'shellpipe' option changes automatically, unless it was
+--- 5934,5943 ----
+ For Unix the default it "| tee". The stdout of the compiler is saved
+ in a file and echoed to the screen. If the 'shell' option is "csh" or
+ "tcsh" after initializations, the default becomes "|& tee". If the
+! 'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh" or "bash" the
+! default becomes "2>&1| tee". This means that stderr is also included.
+! Before using the 'shell' option a path is removed, thus "/bin/sh" uses
+! "sh".
+ The initialization of this option is done after reading the ".vimrc"
+ and the other initializations, so that when the 'shell' option is set
+ there, the 'shellpipe' option changes automatically, unless it was
+***************
+*** 6017,6024 ****
+
+ *'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq' string (default: "";
+! for Win32, when 'shell' contains "sh"
+! somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+--- 6043,6050 ----
+
+ *'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq' string (default: "";
+! for Win32, when 'shell' is cmd.exe or
+! contains "sh" somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+***************
+*** 6026,6036 ****
+ the "!" and ":!" commands. Includes the redirection. See
+ 'shellquote' to exclude the redirection. It's probably not useful
+ to set both options.
+! This is an empty string by default. Known to be useful for
+! third-party shells when using the Win32 version, such as the MKS Korn
+! Shell or bash, where it should be "\"". The default is adjusted
+! according the value of 'shell', to reduce the need to set this option
+! by the user. See |dos-shell|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+--- 6052,6063 ----
+ the "!" and ":!" commands. Includes the redirection. See
+ 'shellquote' to exclude the redirection. It's probably not useful
+ to set both options.
+! This is an empty string by default on most systems, but is known to be
+! useful for on Win32 version, either for cmd.exe which automatically
+! strips off the first and last quote on a command, or 3rd-party shells
+! such as the MKS Korn Shell or bash, where it should be "\"". The
+! default is adjusted according the value of 'shell', to reduce the need
+! to set this option by the user. See |dos-shell|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+*** ../vim-7.3.442/src/version.c 2012-02-12 20:13:55.000000000 +0100
+--- src/version.c 2012-02-12 23:18:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 443,
+ /**/
+
+--
+CVS sux, men don't like commitment
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.444
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.444
+Problem: ":all!" and ":sall!" give error E477, even though the
+ documentation says these are valid commands.
+Solution: Support the exclamation mark. (Hirohito Higashi)
+Files: src/ex_cmds.h, src/testdir/test31.in, src/testdir/test31.ok
+
+
+*** ../vim-7.3.443/src/ex_cmds.h 2011-06-20 05:02:53.000000000 +0200
+--- src/ex_cmds.h 2012-02-12 23:53:31.000000000 +0100
+***************
+*** 102,108 ****
+ EX(CMD_aboveleft, "aboveleft", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_all, "all", ex_all,
+! RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_amenu, "amenu", ex_menu,
+ RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+ EX(CMD_anoremenu, "anoremenu", ex_menu,
+--- 102,108 ----
+ EX(CMD_aboveleft, "aboveleft", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_all, "all", ex_all,
+! BANG|RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_amenu, "amenu", ex_menu,
+ RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+ EX(CMD_anoremenu, "anoremenu", ex_menu,
+***************
+*** 798,804 ****
+ EX(CMD_sargument, "sargument", ex_argument,
+ BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
+ EX(CMD_sall, "sall", ex_all,
+! RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_sandbox, "sandbox", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_saveas, "saveas", ex_write,
+--- 798,804 ----
+ EX(CMD_sargument, "sargument", ex_argument,
+ BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
+ EX(CMD_sall, "sall", ex_all,
+! BANG|RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_sandbox, "sandbox", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_saveas, "saveas", ex_write,
+*** ../vim-7.3.443/src/testdir/test31.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test31.in 2012-02-12 23:57:42.000000000 +0100
+***************
+*** 63,68 ****
+--- 63,74 ----
+ :" write "testtext 1"
+ A 3\e:close!
+ :w >>test.out
++ :set nohidden
++ :" test ":all!" hides changed buffer; write "testtext 2 2 2"
++ :sp Xtest4
++ GA 4\e:all!
++ :1wincmd w
++ :w >>test.out
+ :qa!
+ ENDTEST
+
+*** ../vim-7.3.443/src/testdir/test31.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test31.ok 2012-02-13 00:00:13.000000000 +0100
+***************
+*** 9,11 ****
+--- 9,12 ----
+ testtext 1
+ testtext 3 3 3
+ testtext 1
++ testtext 2 2 2
+*** ../vim-7.3.443/src/version.c 2012-02-12 23:23:25.000000000 +0100
+--- src/version.c 2012-02-12 23:52:47.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 444,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+50. The last girl you picked up was only a jpeg.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.445
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.445 (after 7.3.443)
+Problem: Can't properly escape commands for cmd.exe.
+Solution: Default 'shellxquote' to '('. Append ')' to make '(command)'.
+ No need to use "/s" for 'shellcmdflag'.
+Files: src/misc2.c, src/option.c, src/os_win32.c
+
+
+*** ../vim-7.3.444/src/misc2.c 2012-01-20 17:15:47.000000000 +0100
+--- src/misc2.c 2012-02-16 05:34:37.000000000 +0100
+***************
+*** 3230,3236 ****
+ {
+ STRCPY(ncmd, p_sxq);
+ STRCAT(ncmd, cmd);
+! STRCAT(ncmd, p_sxq);
+ retval = mch_call_shell(ncmd, opt);
+ vim_free(ncmd);
+ }
+--- 3230,3240 ----
+ {
+ STRCPY(ncmd, p_sxq);
+ STRCAT(ncmd, cmd);
+! /* When 'shellxquote' is ( append ).
+! * When 'shellxquote' is "( append )". */
+! STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
+! : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""
+! : p_sxq);
+ retval = mch_call_shell(ncmd, opt);
+ vim_free(ncmd);
+ }
+*** ../vim-7.3.444/src/option.c 2012-02-12 23:23:25.000000000 +0100
+--- src/option.c 2012-02-19 18:08:48.000000000 +0100
+***************
+*** 3933,3959 ****
+ * my path/to/echo" "my args to echo
+ * when executed.
+ *
+! * To avoid this, use the /s argument in addition to /c to force the
+! * stripping behavior, and also set shellxquote to automatically
+! * surround the entire command in quotes (which get stripped as
+! * noted).
+ */
+-
+- /* Set shellxquote default to add the quotes to be stripped. */
+ idx3 = findoption((char_u *)"sxq");
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+ {
+! p_sxq = (char_u *)"\"";
+ options[idx3].def_val[VI_DEFAULT] = p_sxq;
+ }
+
+- /* Set shellcmdflag default to always strip the quotes, note the order
+- * between /s and /c is important or cmd.exe will treat the /s as part
+- * of the command to be executed. */
+ idx3 = findoption((char_u *)"shcf");
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+ {
+! p_shcf = (char_u *)"/s /c";
+ options[idx3].def_val[VI_DEFAULT] = p_shcf;
+ }
+ }
+--- 3933,3954 ----
+ * my path/to/echo" "my args to echo
+ * when executed.
+ *
+! * To avoid this, set shellxquote to surround the command in
+! * parenthesis. This appears to make most commands work, without
+! * breaking commands that worked previously, such as
+! * '"path with spaces/cmd" "a&b"'.
+ */
+ idx3 = findoption((char_u *)"sxq");
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+ {
+! p_sxq = (char_u *)"(";
+ options[idx3].def_val[VI_DEFAULT] = p_sxq;
+ }
+
+ idx3 = findoption((char_u *)"shcf");
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+ {
+! p_shcf = (char_u *)"/c";
+ options[idx3].def_val[VI_DEFAULT] = p_shcf;
+ }
+ }
+*** ../vim-7.3.444/src/os_win32.c 2011-08-27 15:10:00.000000000 +0200
+--- src/os_win32.c 2012-02-19 18:11:23.000000000 +0100
+***************
+*** 3908,3915 ****
+ newcmd = lalloc(cmdlen, TRUE);
+ if (newcmd != NULL)
+ {
+! char_u *cmdbase = (*cmd == '"' ? cmd + 1 : cmd);
+
+ if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+ {
+ STARTUPINFO si;
+--- 3908,3920 ----
+ newcmd = lalloc(cmdlen, TRUE);
+ if (newcmd != NULL)
+ {
+! char_u *cmdbase = cmd;
+
++ /* Skip a leading ", ( and "(. */
++ if (*cmdbase == '"' )
++ ++cmdbase;
++ if (*cmdbase == '(')
++ ++cmdbase;
+ if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+ {
+ STARTUPINFO si;
+***************
+*** 3953,3968 ****
+ * empty, keep the double quotes around the command.
+ * Otherwise remove the double quotes, they aren't needed
+ * here, because we don't use a shell to run the command. */
+! if (*cmd == '"' && *p_sxq == NUL)
+ {
+! newcmd[0] = '"';
+! STRCPY(newcmd + 1, cmdbase);
+! }
+! else
+! {
+! STRCPY(newcmd, cmdbase);
+! if (*cmd == '"' && *newcmd != NUL)
+! newcmd[STRLEN(newcmd) - 1] = NUL;
+ }
+
+ /*
+--- 3958,3983 ----
+ * empty, keep the double quotes around the command.
+ * Otherwise remove the double quotes, they aren't needed
+ * here, because we don't use a shell to run the command. */
+! if (cmdbase > cmd)
+ {
+! if (STRNCMP(cmd, p_sxq, cmd - cmdbase) != 0)
+! {
+! STRCPY(newcmd, cmd);
+! }
+! else
+! {
+! char_u *p;
+!
+! STRCPY(newcmd, cmdbase);
+! /* Remove a trailing ", ) and )" if they have a match
+! * at the start of the command. */
+! p = newcmd + STRLEN(newcmd);
+! if (p > newcmd && p[-1] == '"' && *cmd == '"')
+! *--p = NUL;
+! if (p > newcmd && p[-1] == ')'
+! && (*cmd =='(' || cmd[1] == '('))
+! *--p = NUL;
+! }
+ }
+
+ /*
+***************
+*** 3970,3976 ****
+ * inherit our handles which causes unpleasant dangling swap
+ * files if we exit before the spawned process
+ */
+! if (CreateProcess (NULL, // Executable name
+ newcmd, // Command to execute
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+--- 3985,3991 ----
+ * inherit our handles which causes unpleasant dangling swap
+ * files if we exit before the spawned process
+ */
+! if (CreateProcess(NULL, // Executable name
+ newcmd, // Command to execute
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+*** ../vim-7.3.444/src/version.c 2012-02-13 00:01:38.000000000 +0100
+--- src/version.c 2012-02-19 18:01:46.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 445,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.446
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.446 (after 7.3.445)
+Problem: Win32: External commands with special characters don't work.
+Solution: Add the 'shellxescape' option.
+Files: src/misc2.c, src/option.c, src/option.h, runtime/doc/options.txt
+
+
+*** ../vim-7.3.445/src/misc2.c 2012-02-19 18:19:24.000000000 +0100
+--- src/misc2.c 2012-02-20 22:05:22.000000000 +0100
+***************
+*** 3225,3235 ****
+ retval = mch_call_shell(cmd, opt);
+ else
+ {
+! ncmd = alloc((unsigned)(STRLEN(cmd) + STRLEN(p_sxq) * 2 + 1));
+ if (ncmd != NULL)
+ {
+ STRCPY(ncmd, p_sxq);
+! STRCAT(ncmd, cmd);
+ /* When 'shellxquote' is ( append ).
+ * When 'shellxquote' is "( append )". */
+ STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
+--- 3225,3243 ----
+ retval = mch_call_shell(cmd, opt);
+ else
+ {
+! char_u *ecmd = cmd;
+!
+! if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0)
+! {
+! ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
+! if (ecmd == NULL)
+! ecmd = cmd;
+! }
+! ncmd = alloc((unsigned)(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1));
+ if (ncmd != NULL)
+ {
+ STRCPY(ncmd, p_sxq);
+! STRCAT(ncmd, ecmd);
+ /* When 'shellxquote' is ( append ).
+ * When 'shellxquote' is "( append )". */
+ STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
+***************
+*** 3240,3245 ****
+--- 3248,3255 ----
+ }
+ else
+ retval = -1;
++ if (ecmd != cmd)
++ vim_free(ecmd);
+ }
+ #ifdef FEAT_GUI
+ --hold_gui_events;
+*** ../vim-7.3.445/src/option.c 2012-02-19 18:19:24.000000000 +0100
+--- src/option.c 2012-02-20 22:01:07.000000000 +0100
+***************
+*** 2273,2278 ****
+--- 2273,2287 ----
+ (char_u *)"",
+ #endif
+ (char_u *)0L} SCRIPTID_INIT},
++ {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
++ (char_u *)&p_sxe, PV_NONE,
++ {
++ #if defined(MSDOS) || defined(WIN16) || defined(WIN3264)
++ (char_u *)"\"&|<>()@^",
++ #else
++ (char_u *)"",
++ #endif
++ (char_u *)0L} SCRIPTID_INIT},
+ {"shiftround", "sr", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_sr, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+*** ../vim-7.3.445/src/option.h 2011-10-20 21:09:25.000000000 +0200
+--- src/option.h 2012-02-20 21:45:31.000000000 +0100
+***************
+*** 712,717 ****
+--- 712,718 ----
+ #endif
+ EXTERN char_u *p_shq; /* 'shellquote' */
+ EXTERN char_u *p_sxq; /* 'shellxquote' */
++ EXTERN char_u *p_sxe; /* 'shellxescape' */
+ EXTERN char_u *p_srr; /* 'shellredir' */
+ #ifdef AMIGA
+ EXTERN long p_st; /* 'shelltype' */
+*** ../vim-7.3.445/runtime/doc/options.txt 2012-02-12 23:23:25.000000000 +0100
+--- runtime/doc/options.txt 2012-02-20 22:09:19.000000000 +0100
+***************
+*** 6023,6030 ****
+
+ *'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq' string (default: "";
+! for Win32, when 'shell' is cmd.exe or
+! contains "sh" somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+--- 6042,6050 ----
+
+ *'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq' string (default: "";
+! for Win32, when 'shell' is cmd.exe: "("
+! for Win32, when 'shell' contains "sh"
+! somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+***************
+*** 6032,6037 ****
+--- 6052,6060 ----
+ the "!" and ":!" commands. Includes the redirection. See
+ 'shellquote' to exclude the redirection. It's probably not useful
+ to set both options.
++ When the value is '(' then ')' is appended. When the value is '"('
++ then ')"' is appended.
++ When the value is '(' then also see 'shellxescape'.
+ This is an empty string by default on most systems, but is known to be
+ useful for on Win32 version, either for cmd.exe which automatically
+ strips off the first and last quote on a command, or 3rd-party shells
+***************
+*** 6041,6046 ****
+--- 6064,6079 ----
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
++ *'shellxescape'* *'sxe'*
++ 'shellxescape' 'sxe' string (default: "";
++ for MS-DOS and MS-Windows: "\"&|<>()@^")
++ global
++ {not in Vi}
++ When 'shellxquote' is set to "(" then the characters listed in this
++ option will be escaped with a '^' character. This makes it possible
++ to execute most external commands with cmd.exe.
++
++
+ *'shiftround'* *'sr'* *'noshiftround'* *'nosr'*
+ 'shiftround' 'sr' boolean (default off)
+ global
+*** ../vim-7.3.445/src/version.c 2012-02-19 18:19:24.000000000 +0100
+--- src/version.c 2012-02-20 22:12:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 446,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+86. E-mail Deficiency Depression (EDD) forces you to e-mail yourself.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.447
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.447 (after 7.3.446)
+Problem: Win32: External commands with "start" do not work.
+Solution: Unescape part of the command. (Yasuhiro Matsumoto)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.446/src/os_win32.c 2012-02-19 18:19:24.000000000 +0100
+--- src/os_win32.c 2012-02-21 20:56:51.000000000 +0100
+***************
+*** 259,264 ****
+--- 259,287 ----
+ }
+
+ /*
++ * Unescape characters in "p" that appear in "escaped".
++ */
++ static void
++ unescape_shellxquote(char_u *p, char_u *escaped)
++ {
++ int l = STRLEN(p);
++ int n;
++
++ while (*p != NUL)
++ {
++ if (*p == '^' && vim_strchr(escaped, p[1]) != NULL)
++ mch_memmove(p, p + 1, l--);
++ #ifdef FEAT_MBYTE
++ n = (*mb_ptr2len)(p);
++ #else
++ n = 1;
++ #endif
++ p += n;
++ l -= n;
++ }
++ }
++
++ /*
+ * Load library "name".
+ */
+ HINSTANCE
+***************
+*** 3559,3564 ****
+--- 3582,3588 ----
+ garray_T ga;
+ int delay = 1;
+ DWORD buffer_off = 0; /* valid bytes in buffer[] */
++ char *p = NULL;
+
+ SECURITY_ATTRIBUTES saAttr;
+
+***************
+*** 3599,3607 ****
+ if (options & SHELL_READ)
+ ga_init2(&ga, 1, BUFLEN);
+
+ /* Now, run the command */
+ CreateProcess(NULL, /* Executable name */
+! cmd, /* Command to execute */
+ NULL, /* Process security attributes */
+ NULL, /* Thread security attributes */
+
+--- 3623,3640 ----
+ if (options & SHELL_READ)
+ ga_init2(&ga, 1, BUFLEN);
+
++ if (cmd != NULL)
++ {
++ p = (char *)vim_strsave((char_u *)cmd);
++ if (p != NULL)
++ unescape_shellxquote((char_u *)p, p_sxe);
++ else
++ p = cmd;
++ }
++
+ /* Now, run the command */
+ CreateProcess(NULL, /* Executable name */
+! p, /* Command to execute */
+ NULL, /* Process security attributes */
+ NULL, /* Thread security attributes */
+
+***************
+*** 3616,3621 ****
+--- 3649,3656 ----
+ &si, /* Startup information */
+ &pi); /* Process information */
+
++ if (p != cmd)
++ vim_free(p);
+
+ /* Close our unused side of the pipes */
+ CloseHandle(g_hChildStd_IN_Rd);
+***************
+*** 3898,4018 ****
+ else
+ {
+ /* we use "command" or "cmd" to start the shell; slow but easy */
+! char_u *newcmd;
+! long_u cmdlen = (
+! #ifdef FEAT_GUI_W32
+! (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+! #endif
+! STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+!
+! newcmd = lalloc(cmdlen, TRUE);
+! if (newcmd != NULL)
+! {
+! char_u *cmdbase = cmd;
+!
+! /* Skip a leading ", ( and "(. */
+! if (*cmdbase == '"' )
+! ++cmdbase;
+! if (*cmdbase == '(')
+! ++cmdbase;
+! if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+! {
+! STARTUPINFO si;
+! PROCESS_INFORMATION pi;
+! DWORD flags = CREATE_NEW_CONSOLE;
+!
+! si.cb = sizeof(si);
+! si.lpReserved = NULL;
+! si.lpDesktop = NULL;
+! si.lpTitle = NULL;
+! si.dwFlags = 0;
+! si.cbReserved2 = 0;
+! si.lpReserved2 = NULL;
+!
+! cmdbase = skipwhite(cmdbase + 5);
+! if ((STRNICMP(cmdbase, "/min", 4) == 0)
+! && vim_iswhite(cmdbase[4]))
+! {
+! cmdbase = skipwhite(cmdbase + 4);
+! si.dwFlags = STARTF_USESHOWWINDOW;
+! si.wShowWindow = SW_SHOWMINNOACTIVE;
+! }
+! else if ((STRNICMP(cmdbase, "/b", 2) == 0)
+! && vim_iswhite(cmdbase[2]))
+! {
+! cmdbase = skipwhite(cmdbase + 2);
+! flags = CREATE_NO_WINDOW;
+! si.dwFlags = STARTF_USESTDHANDLES;
+! si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+! GENERIC_READ, // Access flags
+! 0, // Share flags
+! NULL, // Security att.
+! OPEN_EXISTING, // Open flags
+! FILE_ATTRIBUTE_NORMAL, // File att.
+! NULL); // Temp file
+! si.hStdOutput = si.hStdInput;
+! si.hStdError = si.hStdInput;
+! }
+
+! /* When the command is in double quotes, but 'shellxquote' is
+! * empty, keep the double quotes around the command.
+! * Otherwise remove the double quotes, they aren't needed
+! * here, because we don't use a shell to run the command. */
+! if (cmdbase > cmd)
+! {
+! if (STRNCMP(cmd, p_sxq, cmd - cmdbase) != 0)
+! {
+! STRCPY(newcmd, cmd);
+! }
+! else
+! {
+! char_u *p;
+
+! STRCPY(newcmd, cmdbase);
+! /* Remove a trailing ", ) and )" if they have a match
+! * at the start of the command. */
+! p = newcmd + STRLEN(newcmd);
+! if (p > newcmd && p[-1] == '"' && *cmd == '"')
+! *--p = NUL;
+! if (p > newcmd && p[-1] == ')'
+! && (*cmd =='(' || cmd[1] == '('))
+! *--p = NUL;
+! }
+! }
+
+! /*
+! * Now, start the command as a process, so that it doesn't
+! * inherit our handles which causes unpleasant dangling swap
+! * files if we exit before the spawned process
+! */
+! if (CreateProcess(NULL, // Executable name
+! newcmd, // Command to execute
+! NULL, // Process security attributes
+! NULL, // Thread security attributes
+! FALSE, // Inherit handles
+! flags, // Creation flags
+! NULL, // Environment
+! NULL, // Current directory
+! &si, // Startup information
+! &pi)) // Process information
+! x = 0;
+! else
+! {
+! x = -1;
+ #ifdef FEAT_GUI_W32
+! EMSG(_("E371: Command not found"));
+ #endif
+- }
+- if (si.hStdInput != NULL)
+- {
+- /* Close the handle to \\.\NUL */
+- CloseHandle(si.hStdInput);
+- }
+- /* Close the handles to the subprocess, so that it goes away */
+- CloseHandle(pi.hThread);
+- CloseHandle(pi.hProcess);
+ }
+! else
+ {
+ #if defined(FEAT_GUI_W32)
+ if (need_vimrun_warning)
+--- 3933,4048 ----
+ else
+ {
+ /* we use "command" or "cmd" to start the shell; slow but easy */
+! char_u *cmdbase = cmd;
+
+! /* Skip a leading ", ( and "(. */
+! if (*cmdbase == '"' )
+! ++cmdbase;
+! if (*cmdbase == '(')
+! ++cmdbase;
+!
+! if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+! {
+! STARTUPINFO si;
+! PROCESS_INFORMATION pi;
+! DWORD flags = CREATE_NEW_CONSOLE;
+! char_u *p;
+!
+! si.cb = sizeof(si);
+! si.lpReserved = NULL;
+! si.lpDesktop = NULL;
+! si.lpTitle = NULL;
+! si.dwFlags = 0;
+! si.cbReserved2 = 0;
+! si.lpReserved2 = NULL;
+!
+! cmdbase = skipwhite(cmdbase + 5);
+! if ((STRNICMP(cmdbase, "/min", 4) == 0)
+! && vim_iswhite(cmdbase[4]))
+! {
+! cmdbase = skipwhite(cmdbase + 4);
+! si.dwFlags = STARTF_USESHOWWINDOW;
+! si.wShowWindow = SW_SHOWMINNOACTIVE;
+! }
+! else if ((STRNICMP(cmdbase, "/b", 2) == 0)
+! && vim_iswhite(cmdbase[2]))
+! {
+! cmdbase = skipwhite(cmdbase + 2);
+! flags = CREATE_NO_WINDOW;
+! si.dwFlags = STARTF_USESTDHANDLES;
+! si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+! GENERIC_READ, // Access flags
+! 0, // Share flags
+! NULL, // Security att.
+! OPEN_EXISTING, // Open flags
+! FILE_ATTRIBUTE_NORMAL, // File att.
+! NULL); // Temp file
+! si.hStdOutput = si.hStdInput;
+! si.hStdError = si.hStdInput;
+! }
+!
+! /* Remove a trailing ", ) and )" if they have a match
+! * at the start of the command. */
+! if (cmdbase > cmd)
+! {
+! p = cmdbase + STRLEN(cmdbase);
+! if (p > cmdbase && p[-1] == '"' && *cmd == '"')
+! *--p = NUL;
+! if (p > cmdbase && p[-1] == ')'
+! && (*cmd =='(' || cmd[1] == '('))
+! *--p = NUL;
+! }
+
+! /*
+! * Unescape characters in shellxescape. This is workaround for
+! * /b option. Only redirect character should be unescaped.
+! */
+! unescape_shellxquote(cmdbase,
+! (flags & CREATE_NEW_CONSOLE) ? p_sxe : "<>");
+
+! /*
+! * Now, start the command as a process, so that it doesn't
+! * inherit our handles which causes unpleasant dangling swap
+! * files if we exit before the spawned process
+! */
+! if (CreateProcess(NULL, // Executable name
+! cmdbase, // Command to execute
+! NULL, // Process security attributes
+! NULL, // Thread security attributes
+! FALSE, // Inherit handles
+! flags, // Creation flags
+! NULL, // Environment
+! NULL, // Current directory
+! &si, // Startup information
+! &pi)) // Process information
+! x = 0;
+! else
+! {
+! x = -1;
+ #ifdef FEAT_GUI_W32
+! EMSG(_("E371: Command not found"));
+ #endif
+ }
+! if (si.hStdInput != NULL)
+! {
+! /* Close the handle to \\.\NUL */
+! CloseHandle(si.hStdInput);
+! }
+! /* Close the handles to the subprocess, so that it goes away */
+! CloseHandle(pi.hThread);
+! CloseHandle(pi.hProcess);
+! }
+! else
+! {
+! char_u *newcmd;
+! long_u cmdlen = (
+! #ifdef FEAT_GUI_W32
+! (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+! #endif
+! STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+!
+! newcmd = lalloc(cmdlen, TRUE);
+! if (newcmd != NULL)
+ {
+ #if defined(FEAT_GUI_W32)
+ if (need_vimrun_warning)
+***************
+*** 4038,4045 ****
+ vim_snprintf((char *)newcmd, cmdlen, "%s %s %s",
+ p_sh, p_shcf, cmd);
+ x = mch_system((char *)newcmd, options);
+ }
+- vim_free(newcmd);
+ }
+ }
+
+--- 4068,4075 ----
+ vim_snprintf((char *)newcmd, cmdlen, "%s %s %s",
+ p_sh, p_shcf, cmd);
+ x = mch_system((char *)newcmd, options);
++ vim_free(newcmd);
+ }
+ }
+ }
+
+*** ../vim-7.3.446/src/version.c 2012-02-20 22:18:23.000000000 +0100
+--- src/version.c 2012-02-21 21:20:05.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 447,
+ /**/
+
+--
+From "know your smileys":
+ :----} You lie like Pinocchio
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.448
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.448 (after 7.3.447)
+Problem: Win32: Still a problem with "!start /b".
+Solution: Escape only '|'. (Yasuhiro Matsumoto)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.447/src/os_win32.c 2012-02-21 21:22:40.000000000 +0100
+--- src/os_win32.c 2012-02-22 13:06:55.000000000 +0100
+***************
+*** 3933,3939 ****
+ else
+ {
+ /* we use "command" or "cmd" to start the shell; slow but easy */
+! char_u *cmdbase = cmd;
+
+ /* Skip a leading ", ( and "(. */
+ if (*cmdbase == '"' )
+--- 3933,3941 ----
+ else
+ {
+ /* we use "command" or "cmd" to start the shell; slow but easy */
+! char_u *newcmd = NULL;
+! char_u *cmdbase = cmd;
+! long_u cmdlen;
+
+ /* Skip a leading ", ( and "(. */
+ if (*cmdbase == '"' )
+***************
+*** 3971,3982 ****
+ flags = CREATE_NO_WINDOW;
+ si.dwFlags = STARTF_USESTDHANDLES;
+ si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+! GENERIC_READ, // Access flags
+ 0, // Share flags
+! NULL, // Security att.
+! OPEN_EXISTING, // Open flags
+! FILE_ATTRIBUTE_NORMAL, // File att.
+! NULL); // Temp file
+ si.hStdOutput = si.hStdInput;
+ si.hStdError = si.hStdInput;
+ }
+--- 3973,3984 ----
+ flags = CREATE_NO_WINDOW;
+ si.dwFlags = STARTF_USESTDHANDLES;
+ si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+! GENERIC_READ, // Access flags
+ 0, // Share flags
+! NULL, // Security att.
+! OPEN_EXISTING, // Open flags
+! FILE_ATTRIBUTE_NORMAL, // File att.
+! NULL); // Temp file
+ si.hStdOutput = si.hStdInput;
+ si.hStdError = si.hStdInput;
+ }
+***************
+*** 3993,4004 ****
+ *--p = NUL;
+ }
+
+ /*
+! * Unescape characters in shellxescape. This is workaround for
+! * /b option. Only redirect character should be unescaped.
+ */
+! unescape_shellxquote(cmdbase,
+! (flags & CREATE_NEW_CONSOLE) ? p_sxe : "<>");
+
+ /*
+ * Now, start the command as a process, so that it doesn't
+--- 3995,4030 ----
+ *--p = NUL;
+ }
+
++ newcmd = cmdbase;
++ unescape_shellxquote(cmdbase, p_sxe);
++
+ /*
+! * If creating new console, arguments are passed to the
+! * 'cmd.exe' as-is. If it's not, arguments are not treated
+! * correctly for current 'cmd.exe'. So unescape characters in
+! * shellxescape except '|' for avoiding to be treated as
+! * argument to them. Pass the arguments to sub-shell.
+ */
+! if (flags != CREATE_NEW_CONSOLE)
+! {
+! char_u *subcmd;
+! char_u *cmd_shell = default_shell();
+!
+! subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
+! if (subcmd != NULL)
+! {
+! /* make "cmd.exe /c arguments" */
+! cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
+! vim_free(subcmd);
+!
+! newcmd = lalloc(cmdlen, TRUE);
+! if (newcmd != NULL)
+! vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
+! default_shell, subcmd);
+! else
+! newcmd = cmdbase;
+! }
+! }
+
+ /*
+ * Now, start the command as a process, so that it doesn't
+***************
+*** 4006,4012 ****
+ * files if we exit before the spawned process
+ */
+ if (CreateProcess(NULL, // Executable name
+! cmdbase, // Command to execute
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+--- 4032,4038 ----
+ * files if we exit before the spawned process
+ */
+ if (CreateProcess(NULL, // Executable name
+! newcmd, // Command to execute
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+***************
+*** 4023,4028 ****
+--- 4049,4058 ----
+ EMSG(_("E371: Command not found"));
+ #endif
+ }
++
++ if (newcmd != cmdbase)
++ vim_free(newcmd);
++
+ if (si.hStdInput != NULL)
+ {
+ /* Close the handle to \\.\NUL */
+***************
+*** 4034,4041 ****
+ }
+ else
+ {
+! char_u *newcmd;
+! long_u cmdlen = (
+ #ifdef FEAT_GUI_W32
+ (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+ #endif
+--- 4064,4070 ----
+ }
+ else
+ {
+! cmdlen = (
+ #ifdef FEAT_GUI_W32
+ (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+ #endif
+*** ../vim-7.3.447/src/version.c 2012-02-21 21:22:40.000000000 +0100
+--- src/version.c 2012-02-22 13:02:15.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 448,
+ /**/
+
+--
+From "know your smileys":
+ ~#:-( I just washed my hair, and I can't do nuthin' with it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.449
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.449
+Problem: Crash when a BufWinLeave autocommand closes the only other window.
+ (Daniel Hunt)
+Solution: Abort closing a buffer when it becomes the only one.
+Files: src/buffer.c, src/proto/buffer.pro, src/ex_cmds.c, src/ex_getln.c,
+ src/misc2.c, src/quickfix.c, src/window.c, src/proto/window.pro
+
+
+*** ../vim-7.3.448/src/buffer.c 2012-01-20 20:44:38.000000000 +0100
+--- src/buffer.c 2012-02-22 14:50:42.000000000 +0100
+***************
+*** 64,69 ****
+--- 64,72 ----
+ static char *msg_loclist = N_("[Location List]");
+ static char *msg_qflist = N_("[Quickfix List]");
+ #endif
++ #ifdef FEAT_AUTOCMD
++ static char *e_auabort = N_("E855: Autocommands caused command to abort");
++ #endif
+
+ /*
+ * Open current buffer, that is: open the memfile and read the file into
+***************
+*** 96,102 ****
+ * There MUST be a memfile, otherwise we can't do anything
+ * If we can't create one for the current buffer, take another buffer
+ */
+! close_buffer(NULL, curbuf, 0);
+ for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
+ if (curbuf->b_ml.ml_mfp != NULL)
+ break;
+--- 99,105 ----
+ * There MUST be a memfile, otherwise we can't do anything
+ * If we can't create one for the current buffer, take another buffer
+ */
+! close_buffer(NULL, curbuf, 0, FALSE);
+ for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
+ if (curbuf->b_ml.ml_mfp != NULL)
+ break;
+***************
+*** 316,327 ****
+ * get a new buffer very soon!
+ *
+ * The 'bufhidden' option can force freeing and deleting.
+ */
+ void
+! close_buffer(win, buf, action)
+ win_T *win; /* if not NULL, set b_last_cursor */
+ buf_T *buf;
+ int action;
+ {
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf;
+--- 319,335 ----
+ * get a new buffer very soon!
+ *
+ * The 'bufhidden' option can force freeing and deleting.
++ *
++ * When "abort_if_last" is TRUE then do not close the buffer if autocommands
++ * cause there to be only one window with this buffer. e.g. when ":quit" is
++ * supposed to close the window but autocommands close all other windows.
+ */
+ void
+! close_buffer(win, buf, action, abort_if_last)
+ win_T *win; /* if not NULL, set b_last_cursor */
+ buf_T *buf;
+ int action;
++ int abort_if_last;
+ {
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf;
+***************
+*** 371,378 ****
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! if (!buf_valid(buf)) /* autocommands may delete the buffer */
+ return;
+
+ /* When the buffer becomes hidden, but is not unloaded, trigger
+ * BufHidden */
+--- 379,390 ----
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! /* Return if autocommands deleted the buffer or made it the only one. */
+! if (!buf_valid(buf) || (abort_if_last && one_window()))
+! {
+! EMSG(_(e_auabort));
+ return;
++ }
+
+ /* When the buffer becomes hidden, but is not unloaded, trigger
+ * BufHidden */
+***************
+*** 380,387 ****
+ {
+ apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! if (!buf_valid(buf)) /* autocmds may delete the buffer */
+ return;
+ }
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+--- 392,404 ----
+ {
+ apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! /* Return if autocommands deleted the buffer or made it the only
+! * one. */
+! if (!buf_valid(buf) || (abort_if_last && one_window()))
+! {
+! EMSG(_(e_auabort));
+ return;
++ }
+ }
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+***************
+*** 775,781 ****
+ * open a new, empty buffer. */
+ swap_exists_action = SEA_NONE; /* don't want it again */
+ swap_exists_did_quit = TRUE;
+! close_buffer(curwin, curbuf, DOBUF_UNLOAD);
+ if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
+ old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
+ if (old_curbuf != NULL)
+--- 792,798 ----
+ * open a new, empty buffer. */
+ swap_exists_action = SEA_NONE; /* don't want it again */
+ swap_exists_did_quit = TRUE;
+! close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
+ if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
+ old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
+ if (old_curbuf != NULL)
+***************
+*** 1122,1128 ****
+ * if the buffer still exists.
+ */
+ if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
+! close_buffer(NULL, buf, action);
+ return retval;
+ }
+
+--- 1139,1145 ----
+ * if the buffer still exists.
+ */
+ if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
+! close_buffer(NULL, buf, action, FALSE);
+ return retval;
+ }
+
+***************
+*** 1146,1152 ****
+ close_windows(buf, FALSE);
+ #endif
+ if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
+! close_buffer(NULL, buf, action);
+ return OK;
+ }
+
+--- 1163,1169 ----
+ close_windows(buf, FALSE);
+ #endif
+ if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
+! close_buffer(NULL, buf, action, FALSE);
+ return OK;
+ }
+
+***************
+*** 1378,1384 ****
+ close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
+ unload ? action : (action == DOBUF_GOTO
+ && !P_HID(prevbuf)
+! && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0);
+ }
+ }
+ #ifdef FEAT_AUTOCMD
+--- 1395,1401 ----
+ close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
+ unload ? action : (action == DOBUF_GOTO
+ && !P_HID(prevbuf)
+! && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
+ }
+ }
+ #ifdef FEAT_AUTOCMD
+***************
+*** 2708,2714 ****
+ vim_free(ffname);
+ return FAIL;
+ }
+! close_buffer(NULL, obuf, DOBUF_WIPE); /* delete from the list */
+ }
+ sfname = vim_strsave(sfname);
+ if (ffname == NULL || sfname == NULL)
+--- 2725,2732 ----
+ vim_free(ffname);
+ return FAIL;
+ }
+! /* delete from the list */
+! close_buffer(NULL, obuf, DOBUF_WIPE, FALSE);
+ }
+ sfname = vim_strsave(sfname);
+ if (ffname == NULL || sfname == NULL)
+***************
+*** 5638,5644 ****
+ if (!aucmd) /* Don't trigger BufDelete autocommands here. */
+ block_autocmds();
+ #endif
+! close_buffer(NULL, buf, DOBUF_WIPE);
+ #ifdef FEAT_AUTOCMD
+ if (!aucmd)
+ unblock_autocmds();
+--- 5656,5662 ----
+ if (!aucmd) /* Don't trigger BufDelete autocommands here. */
+ block_autocmds();
+ #endif
+! close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
+ #ifdef FEAT_AUTOCMD
+ if (!aucmd)
+ unblock_autocmds();
+*** ../vim-7.3.448/src/proto/buffer.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/buffer.pro 2012-02-22 14:04:26.000000000 +0100
+***************
+*** 1,7 ****
+ /* buffer.c */
+ int open_buffer __ARGS((int read_stdin, exarg_T *eap, int flags));
+ int buf_valid __ARGS((buf_T *buf));
+! void close_buffer __ARGS((win_T *win, buf_T *buf, int action));
+ void buf_clear_file __ARGS((buf_T *buf));
+ void buf_freeall __ARGS((buf_T *buf, int flags));
+ void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
+--- 1,7 ----
+ /* buffer.c */
+ int open_buffer __ARGS((int read_stdin, exarg_T *eap, int flags));
+ int buf_valid __ARGS((buf_T *buf));
+! void close_buffer __ARGS((win_T *win, buf_T *buf, int action, int abort_if_last));
+ void buf_clear_file __ARGS((buf_T *buf));
+ void buf_freeall __ARGS((buf_T *buf, int flags));
+ void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
+*** ../vim-7.3.448/src/ex_cmds.c 2011-12-30 15:01:55.000000000 +0100
+--- src/ex_cmds.c 2012-02-22 14:00:32.000000000 +0100
+***************
+*** 3387,3393 ****
+ /* close the link to the current buffer */
+ u_sync(FALSE);
+ close_buffer(oldwin, curbuf,
+! (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
+
+ #ifdef FEAT_AUTOCMD
+ /* Autocommands may open a new window and leave oldwin open
+--- 3387,3393 ----
+ /* close the link to the current buffer */
+ u_sync(FALSE);
+ close_buffer(oldwin, curbuf,
+! (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE);
+
+ #ifdef FEAT_AUTOCMD
+ /* Autocommands may open a new window and leave oldwin open
+*** ../vim-7.3.448/src/ex_getln.c 2012-02-04 22:44:27.000000000 +0100
+--- src/ex_getln.c 2012-02-22 14:01:56.000000000 +0100
+***************
+*** 6443,6449 ****
+ /* win_close() may have already wiped the buffer when 'bh' is
+ * set to 'wipe' */
+ if (buf_valid(bp))
+! close_buffer(NULL, bp, DOBUF_WIPE);
+
+ /* Restore window sizes. */
+ win_size_restore(&winsizes);
+--- 6443,6449 ----
+ /* win_close() may have already wiped the buffer when 'bh' is
+ * set to 'wipe' */
+ if (buf_valid(bp))
+! close_buffer(NULL, bp, DOBUF_WIPE, FALSE);
+
+ /* Restore window sizes. */
+ win_size_restore(&winsizes);
+*** ../vim-7.3.448/src/misc2.c 2012-02-20 22:18:22.000000000 +0100
+--- src/misc2.c 2012-02-22 14:02:12.000000000 +0100
+***************
+*** 1173,1179 ****
+ for (buf = firstbuf; buf != NULL; )
+ {
+ nextbuf = buf->b_next;
+! close_buffer(NULL, buf, DOBUF_WIPE);
+ if (buf_valid(buf))
+ buf = nextbuf; /* didn't work, try next one */
+ else
+--- 1173,1179 ----
+ for (buf = firstbuf; buf != NULL; )
+ {
+ nextbuf = buf->b_next;
+! close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
+ if (buf_valid(buf))
+ buf = nextbuf; /* didn't work, try next one */
+ else
+*** ../vim-7.3.448/src/quickfix.c 2012-01-20 13:39:03.000000000 +0100
+--- src/quickfix.c 2012-02-22 14:02:20.000000000 +0100
+***************
+*** 3565,3571 ****
+ buf_T *buf;
+ {
+ if (curbuf != buf) /* safety check */
+! close_buffer(NULL, buf, DOBUF_UNLOAD);
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 3565,3571 ----
+ buf_T *buf;
+ {
+ if (curbuf != buf) /* safety check */
+! close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+*** ../vim-7.3.448/src/window.c 2012-01-10 22:26:12.000000000 +0100
+--- src/window.c 2012-02-22 14:08:13.000000000 +0100
+***************
+*** 23,29 ****
+ static void win_totop __ARGS((int size, int flags));
+ static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
+ static int last_window __ARGS((void));
+- static int one_window __ARGS((void));
+ static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
+ static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
+ static tabpage_T *alt_tabpage __ARGS((void));
+--- 23,28 ----
+***************
+*** 2083,2089 ****
+ * Return TRUE if there is only one window other than "aucmd_win" in the
+ * current tab page.
+ */
+! static int
+ one_window()
+ {
+ #ifdef FEAT_AUTOCMD
+--- 2082,2088 ----
+ * Return TRUE if there is only one window other than "aucmd_win" in the
+ * current tab page.
+ */
+! int
+ one_window()
+ {
+ #ifdef FEAT_AUTOCMD
+***************
+*** 2109,2115 ****
+ * Close window "win". Only works for the current tab page.
+ * If "free_buf" is TRUE related buffer may be unloaded.
+ *
+! * called by :quit, :close, :xit, :wq and findtag()
+ */
+ void
+ win_close(win, free_buf)
+--- 2108,2114 ----
+ * Close window "win". Only works for the current tab page.
+ * If "free_buf" is TRUE related buffer may be unloaded.
+ *
+! * Called by :quit, :close, :xit, :wq and findtag().
+ */
+ void
+ win_close(win, free_buf)
+***************
+*** 2222,2228 ****
+ * Close the link to the buffer.
+ */
+ if (win->w_buffer != NULL)
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+--- 2221,2227 ----
+ * Close the link to the buffer.
+ */
+ if (win->w_buffer != NULL)
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+***************
+*** 2328,2334 ****
+ int free_tp = FALSE;
+
+ /* Close the link to the buffer. */
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+
+ /* Careful: Autocommands may have closed the tab page or made it the
+ * current tab page. */
+--- 2327,2333 ----
+ int free_tp = FALSE;
+
+ /* Close the link to the buffer. */
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+
+ /* Careful: Autocommands may have closed the tab page or made it the
+ * current tab page. */
+*** ../vim-7.3.448/src/proto/window.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/window.pro 2012-02-22 14:08:28.000000000 +0100
+***************
+*** 1,13 ****
+ /* window.c */
+ void do_window __ARGS((int nchar, long Prenum, int xchar));
+ int win_split __ARGS((int size, int flags));
+! int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
+ int win_valid __ARGS((win_T *win));
+ int win_count __ARGS((void));
+ int make_windows __ARGS((int count, int vertical));
+ void win_move_after __ARGS((win_T *win1, win_T *win2));
+ void win_equal __ARGS((win_T *next_curwin, int current, int dir));
+ void close_windows __ARGS((buf_T *buf, int keep_curwin));
+ void win_close __ARGS((win_T *win, int free_buf));
+ void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
+ void win_free_all __ARGS((void));
+--- 1,14 ----
+ /* window.c */
+ void do_window __ARGS((int nchar, long Prenum, int xchar));
+ int win_split __ARGS((int size, int flags));
+! int win_split_ins __ARGS((int size, int flags, win_T *new_wp, int dir));
+ int win_valid __ARGS((win_T *win));
+ int win_count __ARGS((void));
+ int make_windows __ARGS((int count, int vertical));
+ void win_move_after __ARGS((win_T *win1, win_T *win2));
+ void win_equal __ARGS((win_T *next_curwin, int current, int dir));
+ void close_windows __ARGS((buf_T *buf, int keep_curwin));
++ int one_window __ARGS((void));
+ void win_close __ARGS((win_T *win, int free_buf));
+ void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
+ void win_free_all __ARGS((void));
+*** ../vim-7.3.448/src/version.c 2012-02-22 13:07:02.000000000 +0100
+--- src/version.c 2012-02-22 14:55:21.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 449,
+ /**/
+
+--
+From "know your smileys":
+ :-)-O Smiling doctor with stethoscope
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.450
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.450 (after 7.3.448)
+Problem: Win32: Still a problem with "!start /b".
+Solution: Fix pointer use. (Yasuhiro Matsumoto)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.449/src/os_win32.c 2012-02-22 13:07:02.000000000 +0100
+--- src/os_win32.c 2012-02-22 15:29:56.000000000 +0100
+***************
+*** 4008,4028 ****
+ if (flags != CREATE_NEW_CONSOLE)
+ {
+ char_u *subcmd;
+! char_u *cmd_shell = default_shell();
+
+ subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
+ if (subcmd != NULL)
+ {
+ /* make "cmd.exe /c arguments" */
+ cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
+- vim_free(subcmd);
+-
+ newcmd = lalloc(cmdlen, TRUE);
+ if (newcmd != NULL)
+ vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
+! default_shell, subcmd);
+ else
+ newcmd = cmdbase;
+ }
+ }
+
+--- 4008,4030 ----
+ if (flags != CREATE_NEW_CONSOLE)
+ {
+ char_u *subcmd;
+! char_u *cmd_shell = mch_getenv("COMSPEC");
+!
+! if (cmd_shell == NULL || *cmd_shell == NUL)
+! cmd_shell = default_shell();
+
+ subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
+ if (subcmd != NULL)
+ {
+ /* make "cmd.exe /c arguments" */
+ cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
+ newcmd = lalloc(cmdlen, TRUE);
+ if (newcmd != NULL)
+ vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
+! cmd_shell, subcmd);
+ else
+ newcmd = cmdbase;
++ vim_free(subcmd);
+ }
+ }
+
+*** ../vim-7.3.449/src/version.c 2012-02-22 14:58:24.000000000 +0100
+--- src/version.c 2012-02-22 15:33:53.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 450,
+ /**/
+
+--
+You are only young once, but you can stay immature indefinitely.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.451
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.451
+Problem: Tcl doesn't work on 64 bit MS-Windows.
+Solution: Make it work. (Dave Bodenstab)
+Files: src/Make_mvc.mak, src/if_tcl.c
+
+
+*** ../vim-7.3.450/src/Make_mvc.mak 2012-02-12 01:55:50.000000000 +0100
+--- src/Make_mvc.mak 2012-02-22 15:43:01.000000000 +0100
+***************
+*** 616,622 ****
+ -DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+ TCL_INC = /I "$(TCL)\Include" /I "$(TCL)"
+! TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
+ !else
+ CFLAGS = $(CFLAGS) -DFEAT_TCL
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+--- 616,622 ----
+ -DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+ TCL_INC = /I "$(TCL)\Include" /I "$(TCL)"
+! TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
+ !else
+ CFLAGS = $(CFLAGS) -DFEAT_TCL
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+*** ../vim-7.3.450/src/if_tcl.c 2011-07-27 14:15:41.000000000 +0200
+--- src/if_tcl.c 2012-02-22 15:47:00.000000000 +0100
+***************
+*** 79,90 ****
+ typedef struct
+ {
+ Tcl_Interp *interp;
+ int range_start, range_end;
+ int lbase;
+ char *curbuf, *curwin;
+ } tcl_info;
+
+! static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
+
+ #define VAR_RANGE1 "::vim::range(start)"
+ #define VAR_RANGE2 "::vim::range(begin)"
+--- 79,91 ----
+ typedef struct
+ {
+ Tcl_Interp *interp;
++ int exitvalue;
+ int range_start, range_end;
+ int lbase;
+ char *curbuf, *curwin;
+ } tcl_info;
+
+! static tcl_info tclinfo = { NULL, 0, 0, 0, 0, NULL, NULL };
+
+ #define VAR_RANGE1 "::vim::range(start)"
+ #define VAR_RANGE2 "::vim::range(begin)"
+***************
+*** 279,294 ****
+ ****************************************************************************/
+
+ /*
+! * Replace standard "exit" and "catch" commands.
+ *
+! * This is a design flaw in Tcl - the standard "exit" command just calls
+! * exit() and kills the application. It should return TCL_EXIT to the
+! * app, which then decides if it wants to terminate or not. In our case,
+! * we just delete the Tcl interpreter (and create a new one with the next
+! * :tcl command).
+ */
+- #define TCL_EXIT 5
+-
+ static int
+ exitcmd(dummy, interp, objc, objv)
+ ClientData dummy UNUSED;
+--- 280,298 ----
+ ****************************************************************************/
+
+ /*
+! * Replace standard "exit" command.
+ *
+! * Delete the Tcl interpreter; a new one will be created with the next
+! * :tcl command). The exit code is saved (and retrieved in tclexit()).
+! * Since Tcl's exit is never expected to return and this replacement
+! * does, then (except for a trivial case) additional Tcl commands will
+! * be run. Since the interpreter is now marked as deleted, an error
+! * will be returned -- typically "attempt to call eval in deleted
+! * interpreter". Hopefully, at this point, checks for TCL_ERROR take
+! * place and control percolates back up to Vim -- but with this new error
+! * string in the interpreter's result value. Therefore it would be
+! * useless for this routine to return the exit code via Tcl_SetResult().
+ */
+ static int
+ exitcmd(dummy, interp, objc, objv)
+ ClientData dummy UNUSED;
+***************
+*** 305,351 ****
+ break;
+ /* FALLTHROUGH */
+ case 1:
+! Tcl_SetObjResult(interp, Tcl_NewIntObj(value));
+! return TCL_EXIT;
+! default:
+! Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
+! }
+! return TCL_ERROR;
+! }
+
+! static int
+! catchcmd(dummy, interp, objc, objv)
+! ClientData dummy UNUSED;
+! Tcl_Interp *interp;
+! int objc;
+! Tcl_Obj *CONST objv[];
+! {
+! char *varname = NULL;
+! int result;
+!
+! switch (objc)
+! {
+! case 3:
+! varname = Tcl_GetStringFromObj(objv[2], NULL);
+! /* fallthrough */
+! case 2:
+! Tcl_ResetResult(interp);
+! Tcl_AllowExceptions(interp);
+! result = Tcl_EvalObj(interp, objv[1]);
+! if (result == TCL_EXIT)
+! return result;
+! if (varname)
+! {
+! if (Tcl_SetVar(interp, varname, Tcl_GetStringResult(interp), 0) == NULL)
+! {
+! Tcl_SetResult(interp, "couldn't save command result in variable", TCL_STATIC);
+! return TCL_ERROR;
+! }
+! }
+! Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
+! return TCL_OK;
+ default:
+! Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
+ }
+ return TCL_ERROR;
+ }
+--- 309,320 ----
+ break;
+ /* FALLTHROUGH */
+ case 1:
+! tclinfo.exitvalue = value;
+
+! Tcl_DeleteInterp(interp);
+! break;
+ default:
+! Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
+ }
+ return TCL_ERROR;
+ }
+***************
+*** 372,377 ****
+--- 341,347 ----
+ /*
+ * "::vim::buffer list" - create a list of buffer commands.
+ * "::vim::buffer {N}" - create buffer command for buffer N.
++ * "::vim::buffer exists {N}" - test if buffer N exists.
+ * "::vim::buffer new" - create a new buffer (not implemented)
+ */
+ static int
+***************
+*** 1663,1669 ****
+ static Tcl_ChannelType channel_type =
+ {
+ "vimmessage", /* typeName */
+! NULL, /* version */
+ channel_close, /* closeProc */
+ channel_input, /* inputProc */
+ channel_output, /* outputProc */
+--- 1633,1639 ----
+ static Tcl_ChannelType channel_type =
+ {
+ "vimmessage", /* typeName */
+! TCL_CHANNEL_VERSION_2, /* version */
+ channel_close, /* closeProc */
+ channel_input, /* inputProc */
+ channel_output, /* outputProc */
+***************
+*** 1678,1683 ****
+--- 1648,1655 ----
+ NULL, /* flushProc */
+ NULL, /* handlerProc */
+ #endif
++ /* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
++ * set above */
+ #ifdef TCL_CHANNEL_VERSION_3
+ NULL, /* wideSeekProc */
+ #endif
+***************
+*** 1741,1747 ****
+ Tcl_Interp *interp;
+ static Tcl_Channel ch1, ch2;
+
+! /* replace stdout and stderr */
+ ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
+ ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
+ Tcl_SetStdChannel(ch1, TCL_STDOUT);
+--- 1713,1721 ----
+ Tcl_Interp *interp;
+ static Tcl_Channel ch1, ch2;
+
+! /* Create replacement channels for stdout and stderr; this has to be
+! * done each time an interpreter is created since the channels are closed
+! * when the interpreter is deleted */
+ ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
+ ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
+ Tcl_SetStdChannel(ch1, TCL_STDOUT);
+***************
+*** 1761,1775 ****
+ #endif
+
+ Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
+ Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
+
+! /* replace some standard Tcl commands */
+ Tcl_DeleteCommand(interp, "exit");
+ Tcl_CreateObjCommand(interp, "exit", exitcmd,
+ (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+- Tcl_DeleteCommand(interp, "catch");
+- Tcl_CreateObjCommand(interp, "catch", catchcmd,
+- (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+
+ /* new commands, in ::vim namespace */
+ Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
+--- 1735,1752 ----
+ #endif
+
+ Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
++ #ifdef WIN3264
++ Tcl_SetChannelOption(interp, ch1, "-translation", "lf");
++ #endif
+ Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
++ #ifdef WIN3264
++ Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
++ #endif
+
+! /* replace standard Tcl exit command */
+ Tcl_DeleteCommand(interp, "exit");
+ Tcl_CreateObjCommand(interp, "exit", exitcmd,
+ (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+
+ /* new commands, in ::vim namespace */
+ Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
+***************
+*** 1821,1826 ****
+--- 1798,1805 ----
+ tclinfo.range_end = row2tcl(eap->line2);
+ tclupdatevars();
+ }
++
++ tclinfo.exitvalue = 0;
+ return OK;
+ }
+
+***************
+*** 1884,1913 ****
+ {
+ int newerr = OK;
+
+! if (error == TCL_EXIT)
+ {
+- int retval;
+ char buf[50];
+- Tcl_Obj *robj;
+
+! robj = Tcl_GetObjResult(tclinfo.interp);
+! if (Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK)
+ {
+! EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
+! newerr = FAIL;
+ }
+ else
+! {
+! sprintf(buf, _("E572: exit code %d"), retval);
+! tclerrmsg(buf);
+! if (retval == 0)
+! {
+! did_emsg = 0;
+! newerr = OK;
+! }
+! else
+! newerr = FAIL;
+! }
+
+ tcldelthisinterp();
+ }
+--- 1863,1885 ----
+ {
+ int newerr = OK;
+
+! if (Tcl_InterpDeleted(tclinfo.interp) /* True if we intercepted Tcl's exit command */
+! #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+! || Tcl_LimitExceeded(tclinfo.interp) /* True if the interpreter cannot continue */
+! #endif
+! )
+ {
+ char buf[50];
+
+! sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
+! tclerrmsg(buf);
+! if (tclinfo.exitvalue == 0)
+ {
+! did_emsg = 0;
+! newerr = OK;
+ }
+ else
+! newerr = FAIL;
+
+ tcldelthisinterp();
+ }
+***************
+*** 2021,2027 ****
+ Tcl_SetVar(tclinfo.interp, var_line, line, 0);
+ Tcl_AllowExceptions(tclinfo.interp);
+ err = Tcl_Eval(tclinfo.interp, script);
+! if (err != TCL_OK)
+ break;
+ line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
+ if (line)
+--- 1993,2004 ----
+ Tcl_SetVar(tclinfo.interp, var_line, line, 0);
+ Tcl_AllowExceptions(tclinfo.interp);
+ err = Tcl_Eval(tclinfo.interp, script);
+! if (err != TCL_OK
+! || Tcl_InterpDeleted(tclinfo.interp)
+! #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+! || Tcl_LimitExceeded(tclinfo.interp)
+! #endif
+! )
+ break;
+ line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
+ if (line)
+*** ../vim-7.3.450/src/version.c 2012-02-22 15:34:05.000000000 +0100
+--- src/version.c 2012-02-22 16:00:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 451,
+ /**/
+
+--
+Where do you want to crash today?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.452
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.452
+Problem: Undo broken when pasting close to the last line. (Andrey Radev)
+Solution: Use a flag to remember if the deleted included the last line.
+ (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.451/src/ops.c 2012-01-10 13:46:18.000000000 +0100
+--- src/ops.c 2012-02-22 17:32:40.000000000 +0100
+***************
+*** 1943,1954 ****
+--- 1943,1956 ----
+ else /* delete characters between lines */
+ {
+ pos_T curpos;
++ int delete_last_line;
+
+ /* save deleted and changed lines for undo */
+ if (u_save((linenr_T)(curwin->w_cursor.lnum - 1),
+ (linenr_T)(curwin->w_cursor.lnum + oap->line_count)) == FAIL)
+ return FAIL;
+
++ delete_last_line = (oap->end.lnum == curbuf->b_ml.ml_line_count);
+ truncate_line(TRUE); /* delete from cursor to end of line */
+
+ curpos = curwin->w_cursor; /* remember curwin->w_cursor */
+***************
+*** 1956,1962 ****
+ del_lines((long)(oap->line_count - 2), FALSE);
+
+ n = (oap->end.col + 1 - !oap->inclusive);
+! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+ {
+ /* Special case: gH<Del> deletes the last line. */
+--- 1958,1964 ----
+ del_lines((long)(oap->line_count - 2), FALSE);
+
+ n = (oap->end.col + 1 - !oap->inclusive);
+! if (oap->inclusive && delete_last_line
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+ {
+ /* Special case: gH<Del> deletes the last line. */
+*** ../vim-7.3.451/src/version.c 2012-02-22 16:01:53.000000000 +0100
+--- src/version.c 2012-02-22 17:37:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 452,
+ /**/
+
+--
+From "know your smileys":
+ =):-) Uncle Sam
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.453
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.453
+Problem: Pasting in the command line is slow.
+Solution: Don't redraw if there is another character to read. (Dominique
+ Pelle)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.452/src/ex_getln.c 2012-02-22 14:58:24.000000000 +0100
+--- src/ex_getln.c 2012-02-22 17:53:32.000000000 +0100
+***************
+*** 1852,1859 ****
+ # endif
+ )
+ /* Always redraw the whole command line to fix shaping and
+! * right-left typing. Not efficient, but it works. */
+! redrawcmd();
+ #endif
+ }
+
+--- 1852,1862 ----
+ # endif
+ )
+ /* Always redraw the whole command line to fix shaping and
+! * right-left typing. Not efficient, but it works.
+! * Do it only when there are no characters left to read
+! * to avoid useless intermediate redraws. */
+! if (vpeekc() == NUL)
+! redrawcmd();
+ #endif
+ }
+
+*** ../vim-7.3.452/src/version.c 2012-02-22 17:37:55.000000000 +0100
+--- src/version.c 2012-02-22 17:56:59.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 453,
+ /**/
+
+--
+From "know your smileys":
+ <<<:-{ Worf (Never smiles anyways, so he's a bad smiley)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.454
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.454
+Problem: Re-allocating memory slows Vim down.
+Solution: Use realloc() in ga_grow(). (Dominique Pelle)
+Files: src/misc2.c
+
+
+*** ../vim-7.3.453/src/misc2.c 2012-02-22 14:58:24.000000000 +0100
+--- src/misc2.c 2012-02-22 18:07:45.000000000 +0100
+***************
+*** 2064,2087 ****
+ garray_T *gap;
+ int n;
+ {
+! size_t len;
+ char_u *pp;
+
+ if (gap->ga_maxlen - gap->ga_len < n)
+ {
+ if (n < gap->ga_growsize)
+ n = gap->ga_growsize;
+! len = gap->ga_itemsize * (gap->ga_len + n);
+! pp = alloc_clear((unsigned)len);
+ if (pp == NULL)
+ return FAIL;
+ gap->ga_maxlen = gap->ga_len + n;
+- if (gap->ga_data != NULL)
+- {
+- mch_memmove(pp, gap->ga_data,
+- (size_t)(gap->ga_itemsize * gap->ga_len));
+- vim_free(gap->ga_data);
+- }
+ gap->ga_data = pp;
+ }
+ return OK;
+--- 2064,2085 ----
+ garray_T *gap;
+ int n;
+ {
+! size_t old_len;
+! size_t new_len;
+ char_u *pp;
+
+ if (gap->ga_maxlen - gap->ga_len < n)
+ {
+ if (n < gap->ga_growsize)
+ n = gap->ga_growsize;
+! new_len = gap->ga_itemsize * (gap->ga_len + n);
+! pp = (gap->ga_data == NULL)
+! ? alloc(new_len) : vim_realloc(gap->ga_data, new_len);
+ if (pp == NULL)
+ return FAIL;
++ old_len = gap->ga_itemsize * gap->ga_maxlen;
++ vim_memset(pp + old_len, 0, new_len - old_len);
+ gap->ga_maxlen = gap->ga_len + n;
+ gap->ga_data = pp;
+ }
+ return OK;
+*** ../vim-7.3.453/src/version.c 2012-02-22 17:58:00.000000000 +0100
+--- src/version.c 2012-02-22 18:09:42.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 454,
+ /**/
+
+--
+From "know your smileys":
+ (X0||) Double hamburger with lettuce and tomato
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.455
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.455
+Problem: Using many continuation lines can be slow.
+Solution: Adjust the reallocation size to the current length.
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.454/src/ex_cmds2.c 2012-02-11 20:40:49.000000000 +0100
+--- src/ex_cmds2.c 2012-02-22 18:24:11.000000000 +0100
+***************
+*** 3448,3454 ****
+ {
+ garray_T ga;
+
+! ga_init2(&ga, (int)sizeof(char_u), 200);
+ ga_concat(&ga, line);
+ ga_concat(&ga, p + 1);
+ for (;;)
+--- 3448,3454 ----
+ {
+ garray_T ga;
+
+! ga_init2(&ga, (int)sizeof(char_u), 400);
+ ga_concat(&ga, line);
+ ga_concat(&ga, p + 1);
+ for (;;)
+***************
+*** 3460,3465 ****
+--- 3460,3474 ----
+ p = skipwhite(sp->nextline);
+ if (*p != '\\')
+ break;
++ /* Adjust the growsize to the current length to speed up
++ * concatenating many lines. */
++ if (ga.ga_len > 400)
++ {
++ if (ga.ga_len > 8000)
++ ga.ga_growsize = 8000;
++ else
++ ga.ga_growsize = ga.ga_len;
++ }
+ ga_concat(&ga, p + 1);
+ }
+ ga_append(&ga, NUL);
+*** ../vim-7.3.454/src/version.c 2012-02-22 18:12:29.000000000 +0100
+--- src/version.c 2012-02-22 18:24:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 455,
+ /**/
+
+--
+From "know your smileys":
+ :-X My lips are sealed
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.456
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.456
+Problem: ":tab drop file" has several problems, including moving the
+ current window and opening a new tab for a file that already has a
+ window.
+Solution: Refactor ":tab drop" handling. (Hirohito Higashi)
+Files: src/buffer.c, src/testdir/test62.in, src/testdir/test62.ok
+
+
+*** ../vim-7.3.455/src/buffer.c 2012-02-22 14:58:24.000000000 +0100
+--- src/buffer.c 2012-02-22 19:08:34.000000000 +0100
+***************
+*** 4405,4411 ****
+ {
+ int i;
+ win_T *wp, *wpnext;
+! char_u *opened; /* array of flags for which args are open */
+ int opened_len; /* length of opened[] */
+ int use_firstwin = FALSE; /* use first window for arglist */
+ int split_ret = OK;
+--- 4405,4416 ----
+ {
+ int i;
+ win_T *wp, *wpnext;
+! char_u *opened; /* Array of weight for which args are open:
+! * 0: not opened
+! * 1: opened in other tab
+! * 2: opened in curtab
+! * 3: opened in curtab and curwin
+! */
+ int opened_len; /* length of opened[] */
+ int use_firstwin = FALSE; /* use first window for arglist */
+ int split_ret = OK;
+***************
+*** 4414,4419 ****
+--- 4419,4426 ----
+ buf_T *buf;
+ tabpage_T *tpnext;
+ int had_tab = cmdmod.tab;
++ win_T *old_curwin, *last_curwin;
++ tabpage_T *old_curtab, *last_curtab;
+ win_T *new_curwin = NULL;
+ tabpage_T *new_curtab = NULL;
+
+***************
+*** 4430,4435 ****
+--- 4437,4451 ----
+ if (opened == NULL)
+ return;
+
++ /* Autocommands may do anything to the argument list. Make sure it's not
++ * freed while we are working here by "locking" it. We still have to
++ * watch out for its size to be changed. */
++ alist = curwin->w_alist;
++ ++alist->al_refcount;
++
++ old_curwin = curwin;
++ old_curtab = curtab;
++
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+***************
+*** 4451,4486 ****
+ wpnext = wp->w_next;
+ buf = wp->w_buffer;
+ if (buf->b_ffname == NULL
+! || buf->b_nwindows > 1
+ #ifdef FEAT_VERTSPLIT
+ || wp->w_width != Columns
+ #endif
+ )
+! i = ARGCOUNT;
+ else
+ {
+ /* check if the buffer in this window is in the arglist */
+! for (i = 0; i < ARGCOUNT; ++i)
+ {
+! if (ARGLIST[i].ae_fnum == buf->b_fnum
+! || fullpathcmp(alist_name(&ARGLIST[i]),
+! buf->b_ffname, TRUE) & FPC_SAME)
+ {
+! if (i < opened_len)
+ {
+! opened[i] = TRUE;
+ if (i == 0)
+ {
+ new_curwin = wp;
+ new_curtab = curtab;
+ }
+ }
+! if (wp->w_alist != curwin->w_alist)
+ {
+ /* Use the current argument list for all windows
+ * containing a file from it. */
+ alist_unlink(wp->w_alist);
+! wp->w_alist = curwin->w_alist;
+ ++wp->w_alist->al_refcount;
+ }
+ break;
+--- 4467,4517 ----
+ wpnext = wp->w_next;
+ buf = wp->w_buffer;
+ if (buf->b_ffname == NULL
+! || (!keep_tabs && buf->b_nwindows > 1)
+ #ifdef FEAT_VERTSPLIT
+ || wp->w_width != Columns
+ #endif
+ )
+! i = opened_len;
+ else
+ {
+ /* check if the buffer in this window is in the arglist */
+! for (i = 0; i < opened_len; ++i)
+ {
+! if (i < alist->al_ga.ga_len
+! && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
+! || fullpathcmp(alist_name(&AARGLIST(alist)[i]),
+! buf->b_ffname, TRUE) & FPC_SAME))
+ {
+! int weight = 1;
+!
+! if (old_curtab == curtab)
+! {
+! ++weight;
+! if (old_curwin == wp)
+! ++weight;
+! }
+!
+! if (weight > (int)opened[i])
+ {
+! opened[i] = (char_u)weight;
+ if (i == 0)
+ {
++ if (new_curwin != NULL)
++ new_curwin->w_arg_idx = opened_len;
+ new_curwin = wp;
+ new_curtab = curtab;
+ }
+ }
+! else if (keep_tabs)
+! i = opened_len;
+!
+! if (wp->w_alist != alist)
+ {
+ /* Use the current argument list for all windows
+ * containing a file from it. */
+ alist_unlink(wp->w_alist);
+! wp->w_alist = alist;
+ ++wp->w_alist->al_refcount;
+ }
+ break;
+***************
+*** 4489,4495 ****
+ }
+ wp->w_arg_idx = i;
+
+! if (i == ARGCOUNT && !keep_tabs) /* close this window */
+ {
+ if (P_HID(buf) || forceit || buf->b_nwindows > 1
+ || !bufIsChanged(buf))
+--- 4520,4526 ----
+ }
+ wp->w_arg_idx = i;
+
+! if (i == opened_len && !keep_tabs)/* close this window */
+ {
+ if (P_HID(buf) || forceit || buf->b_nwindows > 1
+ || !bufIsChanged(buf))
+***************
+*** 4511,4517 ****
+ }
+ #ifdef FEAT_WINDOWS
+ /* don't close last window */
+! if (firstwin == lastwin && first_tabpage->tp_next == NULL)
+ #endif
+ use_firstwin = TRUE;
+ #ifdef FEAT_WINDOWS
+--- 4542,4549 ----
+ }
+ #ifdef FEAT_WINDOWS
+ /* don't close last window */
+! if (firstwin == lastwin
+! && (first_tabpage->tp_next == NULL || !had_tab))
+ #endif
+ use_firstwin = TRUE;
+ #ifdef FEAT_WINDOWS
+***************
+*** 4545,4564 ****
+ * Open a window for files in the argument list that don't have one.
+ * ARGCOUNT may change while doing this, because of autocommands.
+ */
+! if (count > ARGCOUNT || count <= 0)
+! count = ARGCOUNT;
+!
+! /* Autocommands may do anything to the argument list. Make sure it's not
+! * freed while we are working here by "locking" it. We still have to
+! * watch out for its size to be changed. */
+! alist = curwin->w_alist;
+! ++alist->al_refcount;
+
+ #ifdef FEAT_AUTOCMD
+ /* Don't execute Win/Buf Enter/Leave autocommands here. */
+ ++autocmd_no_enter;
+ ++autocmd_no_leave;
+ #endif
+ win_enter(lastwin, FALSE);
+ #ifdef FEAT_WINDOWS
+ /* ":drop all" should re-use an empty window to avoid "--remote-tab"
+--- 4577,4592 ----
+ * Open a window for files in the argument list that don't have one.
+ * ARGCOUNT may change while doing this, because of autocommands.
+ */
+! if (count > opened_len || count <= 0)
+! count = opened_len;
+
+ #ifdef FEAT_AUTOCMD
+ /* Don't execute Win/Buf Enter/Leave autocommands here. */
+ ++autocmd_no_enter;
+ ++autocmd_no_leave;
+ #endif
++ last_curwin = curwin;
++ last_curtab = curtab;
+ win_enter(lastwin, FALSE);
+ #ifdef FEAT_WINDOWS
+ /* ":drop all" should re-use an empty window to avoid "--remote-tab"
+***************
+*** 4568,4578 ****
+ use_firstwin = TRUE;
+ #endif
+
+! for (i = 0; i < count && i < alist->al_ga.ga_len && !got_int; ++i)
+ {
+ if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
+ arg_had_last = TRUE;
+! if (i < opened_len && opened[i])
+ {
+ /* Move the already present window to below the current window */
+ if (curwin->w_arg_idx != i)
+--- 4596,4606 ----
+ use_firstwin = TRUE;
+ #endif
+
+! for (i = 0; i < count && i < opened_len && !got_int; ++i)
+ {
+ if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
+ arg_had_last = TRUE;
+! if (opened[i] > 0)
+ {
+ /* Move the already present window to below the current window */
+ if (curwin->w_arg_idx != i)
+***************
+*** 4581,4587 ****
+ {
+ if (wpnext->w_arg_idx == i)
+ {
+! win_move_after(wpnext, curwin);
+ break;
+ }
+ }
+--- 4609,4621 ----
+ {
+ if (wpnext->w_arg_idx == i)
+ {
+! if (keep_tabs)
+! {
+! new_curwin = wpnext;
+! new_curtab = curtab;
+! }
+! else
+! win_move_after(wpnext, curwin);
+ break;
+ }
+ }
+***************
+*** 4636,4641 ****
+--- 4670,4683 ----
+ #ifdef FEAT_AUTOCMD
+ --autocmd_no_enter;
+ #endif
++ /* restore last referenced tabpage's curwin */
++ if (last_curtab != new_curtab)
++ {
++ if (valid_tabpage(last_curtab))
++ goto_tabpage_tp(last_curtab);
++ if (win_valid(last_curwin))
++ win_enter(last_curwin, FALSE);
++ }
+ /* to window with first arg */
+ if (valid_tabpage(new_curtab))
+ goto_tabpage_tp(new_curtab);
+*** ../vim-7.3.455/src/testdir/test62.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test62.in 2012-02-22 18:45:10.000000000 +0100
+***************
+*** 50,55 ****
+--- 50,92 ----
+ :call append(line('$'), test_status)
+ :"
+ :"
++ :" Test for ":tab drop exist-file" to keep current window.
++ :sp test1
++ :tab drop test1
++ :let test_status = 'tab drop 1: fail'
++ :if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1
++ : let test_status = 'tab drop 1: pass'
++ :endif
++ :close
++ :call append(line('$'), test_status)
++ :"
++ :"
++ :" Test for ":tab drop new-file" to keep current window of tabpage 1.
++ :split
++ :tab drop newfile
++ :let test_status = 'tab drop 2: fail'
++ :if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1
++ : let test_status = 'tab drop 2: pass'
++ :endif
++ :tabclose
++ :q
++ :call append(line('$'), test_status)
++ :"
++ :"
++ :" Test for ":tab drop multi-opend-file" to keep current tabpage and window.
++ :new test1
++ :tabnew
++ :new test1
++ :tab drop test1
++ :let test_status = 'tab drop 3: fail'
++ :if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1
++ : let test_status = 'tab drop 3: pass'
++ :endif
++ :tabclose
++ :q
++ :call append(line('$'), test_status)
++ :"
++ :"
+ :/^Results/,$w! test.out
+ :qa!
+ ENDTEST
+*** ../vim-7.3.455/src/testdir/test62.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test62.ok 2012-02-22 18:45:10.000000000 +0100
+***************
+*** 5,7 ****
+--- 5,10 ----
+ this is tab page 4
+ gettabvar: pass
+ settabvar: pass
++ tab drop 1: pass
++ tab drop 2: pass
++ tab drop 3: pass
+*** ../vim-7.3.455/src/version.c 2012-02-22 18:29:29.000000000 +0100
+--- src/version.c 2012-02-22 19:11:52.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 456,
+ /**/
+
+--
+% cat /usr/include/life.h
+void life(void);
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.457
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.457
+Problem: When setting $VIMRUNTIME later the directory for fetching
+ translated messages is not adjusted.
+Solution: Put bindtextdomain() in vim_setenv().
+Files: src/misc1.c
+
+
+*** ../vim-7.3.456/src/misc1.c 2012-02-05 22:05:44.000000000 +0100
+--- src/misc1.c 2012-02-26 13:27:28.000000000 +0100
+***************
+*** 4133,4149 ****
+ {
+ vim_setenv((char_u *)"VIMRUNTIME", p);
+ didset_vimruntime = TRUE;
+- #ifdef FEAT_GETTEXT
+- {
+- char_u *buf = concat_str(p, (char_u *)"/lang");
+-
+- if (buf != NULL)
+- {
+- bindtextdomain(VIMPACKAGE, (char *)buf);
+- vim_free(buf);
+- }
+- }
+- #endif
+ }
+ else
+ {
+--- 4133,4138 ----
+***************
+*** 4221,4226 ****
+--- 4210,4231 ----
+ putenv((char *)envbuf);
+ }
+ #endif
++ #ifdef FEAT_GETTEXT
++ /*
++ * When setting $VIMRUNTIME adjust the directory to find message
++ * translations to $VIMRUNTIME/lang.
++ */
++ if (*val != NUL && STRICMP(name, "VIMRUNTIME") == 0)
++ {
++ char_u *buf = concat_str(val, (char_u *)"/lang");
++
++ if (buf != NULL)
++ {
++ bindtextdomain(VIMPACKAGE, (char *)buf);
++ vim_free(buf);
++ }
++ }
++ #endif
+ }
+
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+*** ../vim-7.3.456/src/version.c 2012-02-22 19:13:00.000000000 +0100
+--- src/version.c 2012-02-29 13:47:09.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 457,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+118. You are on a first-name basis with your ISP's staff.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.458
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.458
+Problem: Crash when calling smsg() during startup.
+Solution: Don't use 'shortmess' when it is not set yet.
+Files: src/option.c
+
+
+*** ../vim-7.3.457/src/option.c 2012-02-20 22:18:22.000000000 +0100
+--- src/option.c 2012-02-26 13:14:48.000000000 +0100
+***************
+*** 10984,10990 ****
+ shortmess(x)
+ int x;
+ {
+! return ( vim_strchr(p_shm, x) != NULL
+ || (vim_strchr(p_shm, 'a') != NULL
+ && vim_strchr((char_u *)SHM_A, x) != NULL));
+ }
+--- 10984,10991 ----
+ shortmess(x)
+ int x;
+ {
+! return p_shm != NULL &&
+! ( vim_strchr(p_shm, x) != NULL
+ || (vim_strchr(p_shm, 'a') != NULL
+ && vim_strchr((char_u *)SHM_A, x) != NULL));
+ }
+*** ../vim-7.3.457/src/version.c 2012-02-29 13:49:03.000000000 +0100
+--- src/version.c 2012-02-29 13:50:52.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 458,
+ /**/
+
+--
+Support your right to bare arms! Wear short sleeves!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.459
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.459
+Problem: Win32: Warnings for type conversion.
+Solution: Add type casts. (Mike Williams)
+Files: src/misc2.c, src/os_win32.c
+
+
+*** ../vim-7.3.458/src/misc2.c 2012-02-22 18:12:29.000000000 +0100
+--- src/misc2.c 2012-02-29 13:44:17.000000000 +0100
+***************
+*** 2074,2080 ****
+ n = gap->ga_growsize;
+ new_len = gap->ga_itemsize * (gap->ga_len + n);
+ pp = (gap->ga_data == NULL)
+! ? alloc(new_len) : vim_realloc(gap->ga_data, new_len);
+ if (pp == NULL)
+ return FAIL;
+ old_len = gap->ga_itemsize * gap->ga_maxlen;
+--- 2074,2080 ----
+ n = gap->ga_growsize;
+ new_len = gap->ga_itemsize * (gap->ga_len + n);
+ pp = (gap->ga_data == NULL)
+! ? alloc((unsigned)new_len) : vim_realloc(gap->ga_data, new_len);
+ if (pp == NULL)
+ return FAIL;
+ old_len = gap->ga_itemsize * gap->ga_maxlen;
+*** ../vim-7.3.458/src/os_win32.c 2012-02-22 15:34:05.000000000 +0100
+--- src/os_win32.c 2012-02-29 13:43:39.000000000 +0100
+***************
+*** 264,270 ****
+ static void
+ unescape_shellxquote(char_u *p, char_u *escaped)
+ {
+! int l = STRLEN(p);
+ int n;
+
+ while (*p != NUL)
+--- 264,270 ----
+ static void
+ unescape_shellxquote(char_u *p, char_u *escaped)
+ {
+! int l = (int)STRLEN(p);
+ int n;
+
+ while (*p != NUL)
+*** ../vim-7.3.458/src/version.c 2012-02-29 13:51:32.000000000 +0100
+--- src/version.c 2012-02-29 13:58:08.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 459,
+ /**/
+
+--
+"A clear conscience is usually the sign of a bad memory."
+ -- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.460
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.460
+Problem: Win32: UPX does not compress 64 bit binaries.
+Solution: Mention and add the alternative: mpress. (Dave Bodenstab)
+Files: src/INSTALLpc.txt, src/Make_ming.mak
+
+
+*** ../vim-7.3.459/src/INSTALLpc.txt 2011-07-15 13:51:57.000000000 +0200
+--- src/INSTALLpc.txt 2012-02-29 14:01:34.000000000 +0100
+***************
+*** 239,244 ****
+--- 239,250 ----
+ found at
+ http://www.upx.org/
+
++ As of 2011, UPX still does not support compressing 64-bit EXE's; if you have
++ built a 64-bit vim then an alternative to UPX is 'MPRESS'. MPRESS can be found
++ at:
++ http://www.matcode.com/mpress.htm
++
++
+ ADDITION: NLS support with MinGW
+
+ (by Eduardo F. Amatria <eferna1@platea.pntic.mec.es>)
+*** ../vim-7.3.459/src/Make_ming.mak 2011-10-12 14:11:43.000000000 +0200
+--- src/Make_ming.mak 2012-02-29 16:54:09.000000000 +0100
+***************
+*** 14,22 ****
+ # it's just run out of memory or something. Run again, and it will continue
+ # with 'xxd'.
+ #
+! # "make upx" makes *compressed* versions of the GUI and console EXEs, using the
+! # excellent UPX compressor:
+ # http://upx.sourceforge.net/
+ #
+ # Maintained by Ron Aaron <ronaharon@yahoo.com>
+ # updated 2003 Jan 20
+--- 14,24 ----
+ # it's just run out of memory or something. Run again, and it will continue
+ # with 'xxd'.
+ #
+! # "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
+! # using the excellent UPX compressor:
+ # http://upx.sourceforge.net/
++ # "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
++ # http://www.matcode.com/mpress.htm
+ #
+ # Maintained by Ron Aaron <ronaharon@yahoo.com>
+ # updated 2003 Jan 20
+***************
+*** 640,645 ****
+--- 642,651 ----
+ upx gvim.exe
+ upx vim.exe
+
++ mpress: exes
++ mpress gvim.exe
++ mpress vim.exe
++
+ xxd/xxd.exe: xxd/xxd.c
+ $(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
+
+*** ../vim-7.3.459/src/version.c 2012-02-29 13:58:43.000000000 +0100
+--- src/version.c 2012-02-29 16:54:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 460,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+119. You are reading a book and look for the scroll bar to get to
+ the next page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.461
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.461
+Problem: The InsertCharPre autocommand event is not triggered during
+ completion and when typing several characters quickly.
+Solution: Also trigger InsertCharPre during completion. Do not read ahead
+ when an InsertCharPre autocommand is defined. (Yasuhiro Matsumoto)
+Files: src/edit.c, src/fileio.c, src/proto/fileio.pro
+
+
+*** ../vim-7.3.460/src/edit.c 2012-02-04 23:34:57.000000000 +0100
+--- src/edit.c 2012-02-29 18:17:31.000000000 +0100
+***************
+*** 259,264 ****
+--- 259,267 ----
+ static void ins_try_si __ARGS((int c));
+ #endif
+ static colnr_T get_nolist_virtcol __ARGS((void));
++ #ifdef FEAT_AUTOCMD
++ static char_u *do_insert_char_pre __ARGS((int c));
++ #endif
+
+ static colnr_T Insstart_textlen; /* length of line when insert started */
+ static colnr_T Insstart_blank_vcol; /* vcol for first inserted blank */
+***************
+*** 784,790 ****
+ * completion: Add to "compl_leader". */
+ if (ins_compl_accept_char(c))
+ {
+! ins_compl_addleader(c);
+ continue;
+ }
+
+--- 787,806 ----
+ * completion: Add to "compl_leader". */
+ if (ins_compl_accept_char(c))
+ {
+! #ifdef FEAT_AUTOCMD
+! /* Trigger InsertCharPre. */
+! char_u *str = do_insert_char_pre(c);
+! char_u *p;
+!
+! if (str != NULL)
+! {
+! for (p = str; *p != NUL; mb_ptr_adv(p))
+! ins_compl_addleader(PTR2CHAR(p));
+! vim_free(str);
+! }
+! else
+! #endif
+! ins_compl_addleader(c);
+ continue;
+ }
+
+***************
+*** 1393,1426 ****
+ #ifdef FEAT_AUTOCMD
+ if (!p_paste)
+ {
+! /* Trigger the InsertCharPre event. Lock the text to avoid
+! * weird things from happening. */
+! set_vim_var_char(c);
+! ++textlock;
+! if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL,
+! FALSE, curbuf))
+! {
+! /* Get the new value of v:char. If it is more than one
+! * character insert it literally. */
+! char_u *s = get_vim_var_str(VV_CHAR);
+! if (MB_CHARLEN(s) > 1)
+ {
+! if (stop_arrow() != FAIL)
+ {
+! ins_str(s);
+! AppendToRedobuffLit(s, -1);
+ }
+! c = NUL;
+ }
+! else
+! c = PTR2CHAR(s);
+ }
+
+! set_vim_var_string(VV_CHAR, NULL, -1);
+! --textlock;
+!
+! /* If the new value is an empty string then don't insert a
+! * char. */
+ if (c == NUL)
+ break;
+ }
+--- 1409,1439 ----
+ #ifdef FEAT_AUTOCMD
+ if (!p_paste)
+ {
+! /* Trigger InsertCharPre. */
+! char_u *str = do_insert_char_pre(c);
+! char_u *p;
+!
+! if (str != NULL)
+! {
+! if (*str != NUL && stop_arrow() != FAIL)
+ {
+! /* Insert the new value of v:char literally. */
+! for (p = str; *p != NUL; mb_ptr_adv(p))
+ {
+! c = PTR2CHAR(p);
+! if (c == CAR || c == K_KENTER || c == NL)
+! ins_eol(c);
+! else
+! ins_char(c);
+ }
+! AppendToRedobuffLit(str, -1);
+ }
+! vim_free(str);
+! c = NUL;
+ }
+
+! /* If the new value is already inserted or an empty string
+! * then don't insert any character. */
+ if (c == NUL)
+ break;
+ }
+***************
+*** 5883,5888 ****
+--- 5896,5903 ----
+ * Don't do this when 'cindent' or 'indentexpr' is set, because we might
+ * need to re-indent at a ':', or any other character (but not what
+ * 'paste' is set)..
++ * Don't do this when there an InsertCharPre autocommand is defined,
++ * because we need to fire the event for every character.
+ */
+ #ifdef USE_ON_FLY_SCROLL
+ dont_scroll = FALSE; /* allow scrolling here */
+***************
+*** 5900,5905 ****
+--- 5915,5923 ----
+ #ifdef FEAT_RIGHTLEFT
+ && !p_ri
+ #endif
++ #ifdef FEAT_AUTOCMD
++ && !has_insertcharpre()
++ #endif
+ )
+ {
+ #define INPUT_BUFLEN 100
+***************
+*** 10068,10070 ****
+--- 10086,10123 ----
+ validate_virtcol();
+ return curwin->w_virtcol;
+ }
++
++ #ifdef FEAT_AUTOCMD
++ /*
++ * Handle the InsertCharPre autocommand.
++ * "c" is the character that was typed.
++ * Return a pointer to allocated memory with the replacement string.
++ * Return NULL to continue inserting "c".
++ */
++ static char_u *
++ do_insert_char_pre(c)
++ int c;
++ {
++ char_u *res;
++
++ /* Return quickly when there is nothing to do. */
++ if (!has_insertcharpre())
++ return NULL;
++
++ /* Lock the text to avoid weird things from happening. */
++ ++textlock;
++ set_vim_var_char(c); /* set v:char */
++
++ if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
++ /* Get the new value of v:char. It may be empty or more than one
++ * character. */
++ res = vim_strsave(get_vim_var_str(VV_CHAR));
++ else
++ res = NULL;
++
++ set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
++ --textlock;
++
++ return res;
++ }
++ #endif
+*** ../vim-7.3.460/src/fileio.c 2012-02-12 20:13:55.000000000 +0100
+--- src/fileio.c 2012-02-29 17:50:32.000000000 +0100
+***************
+*** 9116,9121 ****
+--- 9116,9130 ----
+ return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
+ }
+
++ /*
++ * Return TRUE when there is an InsertCharPre autocommand defined.
++ */
++ int
++ has_insertcharpre()
++ {
++ return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL);
++ }
++
+ static int
+ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
+ event_T event;
+*** ../vim-7.3.460/src/proto/fileio.pro 2012-02-12 20:13:55.000000000 +0100
+--- src/proto/fileio.pro 2012-02-29 17:50:38.000000000 +0100
+***************
+*** 44,49 ****
+--- 44,50 ----
+ int trigger_cursorhold __ARGS((void));
+ int has_cursormoved __ARGS((void));
+ int has_cursormovedI __ARGS((void));
++ int has_insertcharpre __ARGS((void));
+ void block_autocmds __ARGS((void));
+ void unblock_autocmds __ARGS((void));
+ int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
+*** ../vim-7.3.460/src/version.c 2012-02-29 16:56:35.000000000 +0100
+--- src/version.c 2012-02-29 18:15:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 461,
+ /**/
+
+--
+"Computers in the future may weigh no more than 1.5 tons."
+ Popular Mechanics, 1949
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.462
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.462
+Problem: When using ":loadview" folds may be closed unexpectedly.
+Solution: Take into account foldlevel. (Xavier de Gaye)
+Files: src/fold.c
+
+
+*** ../vim-7.3.461/src/fold.c 2012-01-10 22:26:12.000000000 +0100
+--- src/fold.c 2012-02-29 19:18:07.000000000 +0100
+***************
+*** 3292,3298 ****
+ /* put_folds() {{{2 */
+ #if defined(FEAT_SESSION) || defined(PROTO)
+ static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+! static int put_foldopen_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+
+ /*
+ * Write commands to "fd" to restore the manual folds in window "wp".
+--- 3292,3299 ----
+ /* put_folds() {{{2 */
+ #if defined(FEAT_SESSION) || defined(PROTO)
+ static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+! static int put_foldopen_recurse __ARGS((FILE *fd, win_T *wp, garray_T *gap, linenr_T off));
+! static int put_fold_open_close __ARGS((FILE *fd, fold_T *fp, linenr_T off));
+
+ /*
+ * Write commands to "fd" to restore the manual folds in window "wp".
+***************
+*** 3312,3318 ****
+
+ /* If some folds are manually opened/closed, need to restore that. */
+ if (wp->w_fold_manual)
+! return put_foldopen_recurse(fd, &wp->w_folds, (linenr_T)0);
+
+ return OK;
+ }
+--- 3313,3319 ----
+
+ /* If some folds are manually opened/closed, need to restore that. */
+ if (wp->w_fold_manual)
+! return put_foldopen_recurse(fd, wp, &wp->w_folds, (linenr_T)0);
+
+ return OK;
+ }
+***************
+*** 3352,3363 ****
+ * Returns FAIL when writing failed.
+ */
+ static int
+! put_foldopen_recurse(fd, gap, off)
+ FILE *fd;
+ garray_T *gap;
+ linenr_T off;
+ {
+ int i;
+ fold_T *fp;
+
+ fp = (fold_T *)gap->ga_data;
+--- 3353,3366 ----
+ * Returns FAIL when writing failed.
+ */
+ static int
+! put_foldopen_recurse(fd, wp, gap, off)
+ FILE *fd;
++ win_T *wp;
+ garray_T *gap;
+ linenr_T off;
+ {
+ int i;
++ int level;
+ fold_T *fp;
+
+ fp = (fold_T *)gap->ga_data;
+***************
+*** 3367,3393 ****
+ {
+ if (fp->fd_nested.ga_len > 0)
+ {
+! /* open/close nested folds while this fold is open */
+ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ || put_eol(fd) == FAIL
+ || put_line(fd, "normal zo") == FAIL)
+ return FAIL;
+! if (put_foldopen_recurse(fd, &fp->fd_nested, off + fp->fd_top)
+ == FAIL)
+ return FAIL;
+ }
+- if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+- || put_eol(fd) == FAIL
+- || fprintf(fd, "normal z%c",
+- fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+- || put_eol(fd) == FAIL)
+- return FAIL;
+ }
+ ++fp;
+ }
+
+ return OK;
+ }
+ #endif /* FEAT_SESSION */
+
+ /* }}}1 */
+--- 3370,3429 ----
+ {
+ if (fp->fd_nested.ga_len > 0)
+ {
+! /* open nested folds while this fold is open */
+ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ || put_eol(fd) == FAIL
+ || put_line(fd, "normal zo") == FAIL)
+ return FAIL;
+! if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
+! off + fp->fd_top)
+ == FAIL)
+ return FAIL;
++ /* close the parent when needed */
++ if (fp->fd_flags == FD_CLOSED)
++ {
++ if (put_fold_open_close(fd, fp, off) == FAIL)
++ return FAIL;
++ }
++ }
++ else
++ {
++ /* Open or close the leaf according to the window foldlevel.
++ * Do not close a leaf that is already closed, as it will close
++ * the parent. */
++ level = foldLevelWin(wp, off + fp->fd_top);
++ if ((fp->fd_flags == FD_CLOSED && wp->w_p_fdl >= level)
++ || (fp->fd_flags != FD_CLOSED && wp->w_p_fdl < level))
++ if (put_fold_open_close(fd, fp, off) == FAIL)
++ return FAIL;
+ }
+ }
+ ++fp;
+ }
+
+ return OK;
+ }
++
++ /* put_fold_open_close() {{{2 */
++ /*
++ * Write the open or close command to "fd".
++ * Returns FAIL when writing failed.
++ */
++ static int
++ put_fold_open_close(fd, fp, off)
++ FILE *fd;
++ fold_T *fp;
++ linenr_T off;
++ {
++ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
++ || put_eol(fd) == FAIL
++ || fprintf(fd, "normal z%c",
++ fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
++ || put_eol(fd) == FAIL)
++ return FAIL;
++
++ return OK;
++ }
+ #endif /* FEAT_SESSION */
+
+ /* }}}1 */
+*** ../vim-7.3.461/src/version.c 2012-02-29 18:22:03.000000000 +0100
+--- src/version.c 2012-02-29 18:40:43.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 462,
+ /**/
+
+--
+~
+~
+~
+".signature" 4 lines, 50 characters written
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.463
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.463
+Problem: When using ":s///c" the cursor is moved away from the match.
+ (Lawman)
+Solution: Don't move the cursor when do_ask is set. (Christian Brabandt)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.462/src/ex_cmds.c 2012-02-22 14:58:24.000000000 +0100
+--- src/ex_cmds.c 2012-03-07 14:54:21.000000000 +0100
+***************
+*** 5151,5160 ****
+
+ if (!global_busy)
+ {
+! if (endcolumn)
+! coladvance((colnr_T)MAXCOL);
+! else
+! beginline(BL_WHITE | BL_FIX);
+ if (!do_sub_msg(do_count) && do_ask)
+ MSG("");
+ }
+--- 5151,5163 ----
+
+ if (!global_busy)
+ {
+! if (!do_ask) /* when interactive leave cursor on the match */
+! {
+! if (endcolumn)
+! coladvance((colnr_T)MAXCOL);
+! else
+! beginline(BL_WHITE | BL_FIX);
+! }
+ if (!do_sub_msg(do_count) && do_ask)
+ MSG("");
+ }
+*** ../vim-7.3.462/src/version.c 2012-02-29 19:19:57.000000000 +0100
+--- src/version.c 2012-03-07 14:55:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 463,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+151. You find yourself engaged to someone you've never actually met,
+ except through e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.464
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.464
+Problem: Compiler warning for sprintf.
+Solution: Put the length in a variable. (Dominique Pelle)
+Files: src/version.c
+
+
+*** ../vim-7.3.463/src/version.c 2012-03-07 14:57:50.000000000 +0100
+--- src/version.c 2012-03-07 17:58:41.000000000 +0100
+***************
+*** 2187,2198 ****
+ /* Check for 9.9x or 9.9xx, alpha/beta version */
+ if (isalpha((int)vers[3]))
+ {
+! if (isalpha((int)vers[4]))
+! sprintf((char *)vers + 5, ".%d%s", highest_patch(),
+! mediumVersion + 5);
+! else
+! sprintf((char *)vers + 4, ".%d%s", highest_patch(),
+! mediumVersion + 4);
+ }
+ else
+ sprintf((char *)vers + 3, ".%d", highest_patch());
+--- 2189,2197 ----
+ /* Check for 9.9x or 9.9xx, alpha/beta version */
+ if (isalpha((int)vers[3]))
+ {
+! int len = (isalpha((int)vers[4])) ? 5 : 4;
+! sprintf((char *)vers + len, ".%d%s", highest_patch(),
+! mediumVersion + len);
+ }
+ else
+ sprintf((char *)vers + 3, ".%d", highest_patch());
+*** ../vim-7.3.463/src/version.c 2012-03-07 14:57:50.000000000 +0100
+--- src/version.c 2012-03-07 17:58:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 464,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+152. You find yourself falling for someone you've never seen or hardly
+ know, but, boy can he/she TYPE!!!!!!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.465
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.465
+Problem: Cannot get file name with newline from glob().
+Solution: Add argument to glob() and expand() to indicate they must return a
+ list. (Christian Brabandt)
+Files: runtime/doc/eval.txt, src/eval.c, src/ex_getln.c, src/vim.h
+
+
+*** ../vim-7.3.464/runtime/doc/eval.txt 2011-12-14 15:32:44.000000000 +0100
+--- runtime/doc/eval.txt 2012-03-07 18:49:26.000000000 +0100
+***************
+*** 1738,1744 ****
+ extend( {expr1}, {expr2} [, {expr3}])
+ List/Dict insert items of {expr2} into {expr1}
+ exp( {expr}) Float exponential of {expr}
+! expand( {expr} [, {flag}]) String expand special keywords in {expr}
+ feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer
+ filereadable( {file}) Number TRUE if {file} is a readable file
+ filewritable( {file}) Number TRUE if {file} is a writable file
+--- 1746,1753 ----
+ extend( {expr1}, {expr2} [, {expr3}])
+ List/Dict insert items of {expr2} into {expr1}
+ exp( {expr}) Float exponential of {expr}
+! expand( {expr} [, {nosuf} [, {list}]])
+! any expand special keywords in {expr}
+ feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer
+ filereadable( {file}) Number TRUE if {file} is a readable file
+ filewritable( {file}) Number TRUE if {file} is a writable file
+***************
+*** 1792,1798 ****
+ getwinposx() Number X coord in pixels of GUI Vim window
+ getwinposy() Number Y coord in pixels of GUI Vim window
+ getwinvar( {nr}, {varname}) any variable {varname} in window {nr}
+! glob( {expr} [, {flag}]) String expand file wildcards in {expr}
+ globpath( {path}, {expr} [, {flag}])
+ String do glob({expr}) for all dirs in {path}
+ has( {feature}) Number TRUE if feature {feature} supported
+--- 1801,1808 ----
+ getwinposx() Number X coord in pixels of GUI Vim window
+ getwinposy() Number Y coord in pixels of GUI Vim window
+ getwinvar( {nr}, {varname}) any variable {varname} in window {nr}
+! glob( {expr} [, {nosuf} [, {list}]])
+! any expand file wildcards in {expr}
+ globpath( {path}, {expr} [, {flag}])
+ String do glob({expr}) for all dirs in {path}
+ has( {feature}) Number TRUE if feature {feature} supported
+***************
+*** 2731,2743 ****
+ {only available when compiled with the |+float| feature}
+
+
+! expand({expr} [, {flag}]) *expand()*
+ Expand wildcards and the following special keywords in {expr}.
+! The result is a String.
+
+! When there are several matches, they are separated by <NL>
+! characters. [Note: in version 5.0 a space was used, which
+! caused problems when a file name contains a space]
+
+ If the expansion fails, the result is an empty string. A name
+ for a non-existing file is not included.
+--- 2744,2758 ----
+ {only available when compiled with the |+float| feature}
+
+
+! expand({expr} [, {nosuf} [, {list}]]) *expand()*
+ Expand wildcards and the following special keywords in {expr}.
+! 'wildignorecase' applies.
+
+! If {list} is given and it is non-zero, a List will be returned.
+! Otherwise the result is a String and when there are several
+! matches, they are separated by <NL> characters. [Note: in
+! version 5.0 a space was used, which caused problems when a
+! file name contains a space]
+
+ If the expansion fails, the result is an empty string. A name
+ for a non-existing file is not included.
+***************
+*** 2754,2759 ****
+--- 2769,2775 ----
+ <abuf> autocmd buffer number (as a String!)
+ <amatch> autocmd matched name
+ <sfile> sourced script file name
++ <slnum> sourced script file line number
+ <cword> word under the cursor
+ <cWORD> WORD under the cursor
+ <client> the {clientid} of the last received
+***************
+*** 2790,2799 ****
+ When {expr} does not start with '%', '#' or '<', it is
+ expanded like a file name is expanded on the command line.
+ 'suffixes' and 'wildignore' are used, unless the optional
+! {flag} argument is given and it is non-zero. Names for
+! non-existing files are included. The "**" item can be used to
+! search in a directory tree. For example, to find all "README"
+! files in the current directory and below: >
+ :echo expand("**/README")
+ <
+ Expand() can also be used to expand variables and environment
+--- 2806,2815 ----
+ When {expr} does not start with '%', '#' or '<', it is
+ expanded like a file name is expanded on the command line.
+ 'suffixes' and 'wildignore' are used, unless the optional
+! {nosuf} argument is given and it is non-zero.
+! Names for non-existing files are included. The "**" item can
+! be used to search in a directory tree. For example, to find
+! all "README" files in the current directory and below: >
+ :echo expand("**/README")
+ <
+ Expand() can also be used to expand variables and environment
+***************
+*** 3437,3453 ****
+ :let list_is_on = getwinvar(2, '&list')
+ :echo "myvar = " . getwinvar(1, 'myvar')
+ <
+! glob({expr} [, {flag}]) *glob()*
+ Expand the file wildcards in {expr}. See |wildcards| for the
+ use of special characters.
+! The result is a String.
+! When there are several matches, they are separated by <NL>
+! characters.
+! Unless the optional {flag} argument is given and is non-zero,
+ the 'suffixes' and 'wildignore' options apply: Names matching
+ one of the patterns in 'wildignore' will be skipped and
+ 'suffixes' affect the ordering of matches.
+! If the expansion fails, the result is an empty string.
+ A name for a non-existing file is not included.
+
+ For most systems backticks can be used to get files names from
+--- 3456,3478 ----
+ :let list_is_on = getwinvar(2, '&list')
+ :echo "myvar = " . getwinvar(1, 'myvar')
+ <
+! glob({expr} [, {nosuf} [, {list}]]) *glob()*
+ Expand the file wildcards in {expr}. See |wildcards| for the
+ use of special characters.
+!
+! Unless the optional {nosuf} argument is given and is non-zero,
+ the 'suffixes' and 'wildignore' options apply: Names matching
+ one of the patterns in 'wildignore' will be skipped and
+ 'suffixes' affect the ordering of matches.
+! 'wildignorecase' always applies.
+!
+! When {list} is present and it is non-zero the result is a List
+! with all matching files. The advantage of using a List is,
+! you also get filenames containing newlines correctly.
+! Otherwise the result is a String and when there are several
+! matches, they are separated by <NL> characters.
+!
+! If the expansion fails, the result is an empty String or List.
+ A name for a non-existing file is not included.
+
+ For most systems backticks can be used to get files names from
+*** ../vim-7.3.464/src/eval.c 2012-02-11 20:44:01.000000000 +0100
+--- src/eval.c 2012-03-07 19:08:36.000000000 +0100
+***************
+*** 7852,7858 ****
+ #ifdef FEAT_FLOAT
+ {"exp", 1, 1, f_exp},
+ #endif
+! {"expand", 1, 2, f_expand},
+ {"extend", 2, 3, f_extend},
+ {"feedkeys", 1, 2, f_feedkeys},
+ {"file_readable", 1, 1, f_filereadable}, /* obsolete */
+--- 7852,7858 ----
+ #ifdef FEAT_FLOAT
+ {"exp", 1, 1, f_exp},
+ #endif
+! {"expand", 1, 3, f_expand},
+ {"extend", 2, 3, f_extend},
+ {"feedkeys", 1, 2, f_feedkeys},
+ {"file_readable", 1, 1, f_filereadable}, /* obsolete */
+***************
+*** 7903,7909 ****
+ {"getwinposx", 0, 0, f_getwinposx},
+ {"getwinposy", 0, 0, f_getwinposy},
+ {"getwinvar", 2, 2, f_getwinvar},
+! {"glob", 1, 2, f_glob},
+ {"globpath", 2, 3, f_globpath},
+ {"has", 1, 1, f_has},
+ {"has_key", 2, 2, f_has_key},
+--- 7903,7909 ----
+ {"getwinposx", 0, 0, f_getwinposx},
+ {"getwinposy", 0, 0, f_getwinposy},
+ {"getwinvar", 2, 2, f_getwinvar},
+! {"glob", 1, 3, f_glob},
+ {"globpath", 2, 3, f_globpath},
+ {"has", 1, 1, f_has},
+ {"has_key", 2, 2, f_has_key},
+***************
+*** 10019,10032 ****
+ int options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
+ expand_T xpc;
+ int error = FALSE;
+
+ rettv->v_type = VAR_STRING;
+ s = get_tv_string(&argvars[0]);
+ if (*s == '%' || *s == '#' || *s == '<')
+ {
+ ++emsg_off;
+! rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL);
+ --emsg_off;
+ }
+ else
+ {
+--- 10019,10051 ----
+ int options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
+ expand_T xpc;
+ int error = FALSE;
++ char_u *result;
+
+ rettv->v_type = VAR_STRING;
++ if (argvars[1].v_type != VAR_UNKNOWN
++ && argvars[2].v_type != VAR_UNKNOWN
++ && get_tv_number_chk(&argvars[2], &error)
++ && !error)
++ {
++ rettv->v_type = VAR_LIST;
++ rettv->vval.v_list = NULL;
++ }
++
+ s = get_tv_string(&argvars[0]);
+ if (*s == '%' || *s == '#' || *s == '<')
+ {
+ ++emsg_off;
+! result = eval_vars(s, s, &len, NULL, &errormsg, NULL);
+ --emsg_off;
++ if (rettv->v_type == VAR_LIST)
++ {
++ if (rettv_list_alloc(rettv) != FAIL && result != NULL)
++ list_append_string(rettv->vval.v_list, result, -1);
++ else
++ vim_free(result);
++ }
++ else
++ rettv->vval.v_string = result;
+ }
+ else
+ {
+***************
+*** 10041,10047 ****
+ xpc.xp_context = EXPAND_FILES;
+ if (p_wic)
+ options += WILD_ICASE;
+! rettv->vval.v_string = ExpandOne(&xpc, s, NULL, options, WILD_ALL);
+ }
+ else
+ rettv->vval.v_string = NULL;
+--- 10060,10077 ----
+ xpc.xp_context = EXPAND_FILES;
+ if (p_wic)
+ options += WILD_ICASE;
+! if (rettv->v_type == VAR_STRING)
+! rettv->vval.v_string = ExpandOne(&xpc, s, NULL,
+! options, WILD_ALL);
+! else if (rettv_list_alloc(rettv) != FAIL)
+! {
+! int i;
+!
+! ExpandOne(&xpc, s, NULL, options, WILD_ALL_KEEP);
+! for (i = 0; i < xpc.xp_numfiles; i++)
+! list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
+! ExpandCleanup(&xpc);
+! }
+ }
+ else
+ rettv->vval.v_string = NULL;
+***************
+*** 11833,11851 ****
+ int error = FALSE;
+
+ /* When the optional second argument is non-zero, don't remove matches
+! * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+! if (argvars[1].v_type != VAR_UNKNOWN
+! && get_tv_number_chk(&argvars[1], &error))
+! options |= WILD_KEEP_ALL;
+ rettv->v_type = VAR_STRING;
+ if (!error)
+ {
+ ExpandInit(&xpc);
+ xpc.xp_context = EXPAND_FILES;
+ if (p_wic)
+ options += WILD_ICASE;
+! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+ NULL, options, WILD_ALL);
+ }
+ else
+ rettv->vval.v_string = NULL;
+--- 11863,11901 ----
+ int error = FALSE;
+
+ /* When the optional second argument is non-zero, don't remove matches
+! * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+ rettv->v_type = VAR_STRING;
++ if (argvars[1].v_type != VAR_UNKNOWN)
++ {
++ if (get_tv_number_chk(&argvars[1], &error))
++ options |= WILD_KEEP_ALL;
++ if (argvars[2].v_type != VAR_UNKNOWN
++ && get_tv_number_chk(&argvars[2], &error))
++ {
++ rettv->v_type = VAR_LIST;
++ rettv->vval.v_list = NULL;
++ }
++ }
+ if (!error)
+ {
+ ExpandInit(&xpc);
+ xpc.xp_context = EXPAND_FILES;
+ if (p_wic)
+ options += WILD_ICASE;
+! if (rettv->v_type == VAR_STRING)
+! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+ NULL, options, WILD_ALL);
++ else if (rettv_list_alloc(rettv) != FAIL)
++ {
++ int i;
++
++ ExpandOne(&xpc, get_tv_string(&argvars[0]),
++ NULL, options, WILD_ALL_KEEP);
++ for (i = 0; i < xpc.xp_numfiles; i++)
++ list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
++
++ ExpandCleanup(&xpc);
++ }
+ }
+ else
+ rettv->vval.v_string = NULL;
+*** ../vim-7.3.464/src/ex_getln.c 2012-02-22 17:58:00.000000000 +0100
+--- src/ex_getln.c 2012-03-07 19:07:01.000000000 +0100
+***************
+*** 3461,3466 ****
+--- 3461,3467 ----
+ * mode = WILD_PREV: use previous match in multiple match, wrap to first
+ * mode = WILD_ALL: return all matches concatenated
+ * mode = WILD_LONGEST: return longest matched part
++ * mode = WILD_ALL_KEEP: get all matches, keep matches
+ *
+ * options = WILD_LIST_NOTFOUND: list entries without a match
+ * options = WILD_HOME_REPLACE: do home_replace() for buffer names
+***************
+*** 3584,3590 ****
+ /*
+ * Check for matching suffixes in file names.
+ */
+! if (mode != WILD_ALL && mode != WILD_LONGEST)
+ {
+ if (xp->xp_numfiles)
+ non_suf_match = xp->xp_numfiles;
+--- 3585,3592 ----
+ /*
+ * Check for matching suffixes in file names.
+ */
+! if (mode != WILD_ALL && mode != WILD_ALL_KEEP
+! && mode != WILD_LONGEST)
+ {
+ if (xp->xp_numfiles)
+ non_suf_match = xp->xp_numfiles;
+*** ../vim-7.3.464/src/vim.h 2011-07-27 17:31:42.000000000 +0200
+--- src/vim.h 2012-03-07 19:03:43.000000000 +0100
+***************
+*** 794,799 ****
+--- 794,800 ----
+ #define WILD_PREV 5
+ #define WILD_ALL 6
+ #define WILD_LONGEST 7
++ #define WILD_ALL_KEEP 8
+
+ #define WILD_LIST_NOTFOUND 1
+ #define WILD_HOME_REPLACE 2
+*** ../vim-7.3.464/src/version.c 2012-03-07 18:04:00.000000000 +0100
+--- src/version.c 2012-03-07 19:14:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 465,
+ /**/
+
+--
+Although the scythe isn't pre-eminent among the weapons of war, anyone who
+has been on the wrong end of, say, a peasants' revolt will know that in
+skilled hands it is fearsome.
+ -- (Terry Pratchett, Mort)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.466
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.466
+Problem: Get ml_get error when ":behave mswin" was used and selecting
+ several lines. (A. Sinan Unur)
+Solution: Adjust the end of the operation. (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.465/src/ops.c 2012-02-22 17:37:55.000000000 +0100
+--- src/ops.c 2012-03-07 19:27:08.000000000 +0100
+***************
+*** 1957,1962 ****
+--- 1957,1965 ----
+ ++curwin->w_cursor.lnum;
+ del_lines((long)(oap->line_count - 2), FALSE);
+
++ if (delete_last_line)
++ oap->end.lnum = curbuf->b_ml.ml_line_count;
++
+ n = (oap->end.col + 1 - !oap->inclusive);
+ if (oap->inclusive && delete_last_line
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+*** ../vim-7.3.465/src/version.c 2012-03-07 19:16:49.000000000 +0100
+--- src/version.c 2012-03-07 19:29:52.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 466,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+153. You find yourself staring at your "inbox" waiting for new e-mail
+ to arrive.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.467
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.467
+Problem: Cursor positioned wrong at the command line when regaining focus
+ and using some input method.
+Solution: Do not position the cursor in command line mode.
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.466/src/mbyte.c 2011-12-08 15:09:46.000000000 +0100
+--- src/mbyte.c 2012-03-07 19:36:44.000000000 +0100
+***************
+*** 4504,4510 ****
+ vgetc_busy = TRUE;
+ showmode();
+ vgetc_busy = old_vgetc_busy;
+! setcursor();
+ out_flush();
+ }
+
+--- 4504,4511 ----
+ vgetc_busy = TRUE;
+ showmode();
+ vgetc_busy = old_vgetc_busy;
+! if ((State & NORMAL) || (State & INSERT))
+! setcursor();
+ out_flush();
+ }
+
+*** ../vim-7.3.466/src/version.c 2012-03-07 19:30:32.000000000 +0100
+--- src/version.c 2012-03-07 19:38:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 467,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+154. You fondle your mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.468
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.468
+Problem: For some compilers the error file is not easily readable.
+Solution: Use QuickFixCmdPre for more commands. (Marcin Szamotulski)
+Files: runtime/doc/autocmd.txt, src/quickfix.c
+
+
+*** ../vim-7.3.467/runtime/doc/autocmd.txt 2012-02-12 20:13:55.000000000 +0100
+--- runtime/doc/autocmd.txt 2012-03-07 20:07:23.000000000 +0100
+***************
+*** 695,701 ****
+ QuickFixCmdPre Before a quickfix command is run (|:make|,
+ |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
+ |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
+! |:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
+ The pattern is matched against the command
+ being run. When |:grep| is used but 'grepprg'
+ is set to "internal" it still matches "grep".
+--- 699,708 ----
+ QuickFixCmdPre Before a quickfix command is run (|:make|,
+ |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
+ |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
+! |:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
+! |:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
+! |:lgetfile|, |:laddfile|, |:helpgrep|,
+! |:lhelpgrep|).
+ The pattern is matched against the command
+ being run. When |:grep| is used but 'grepprg'
+ is set to "internal" it still matches "grep".
+***************
+*** 706,712 ****
+ *QuickFixCmdPost*
+ QuickFixCmdPost Like QuickFixCmdPre, but after a quickfix
+ command is run, before jumping to the first
+! location. See |QuickFixCmdPost-example|.
+ *RemoteReply*
+ RemoteReply When a reply from a Vim that functions as
+ server was received |server2client()|. The
+--- 713,722 ----
+ *QuickFixCmdPost*
+ QuickFixCmdPost Like QuickFixCmdPre, but after a quickfix
+ command is run, before jumping to the first
+! location. For |:cfile| and |:lfile| commands
+! it is run after error file is read and before
+! moving to the first error.
+! See |QuickFixCmdPost-example|.
+ *RemoteReply*
+ RemoteReply When a reply from a Vim that functions as
+ server was received |server2client()|. The
+*** ../vim-7.3.467/src/quickfix.c 2012-02-22 14:58:24.000000000 +0100
+--- src/quickfix.c 2012-03-07 20:10:07.000000000 +0100
+***************
+*** 2995,3005 ****
+ {
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
+
+ if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
+! || eap->cmdidx == CMD_laddfile)
+ wp = curwin;
+
+ #ifdef FEAT_BROWSE
+ if (cmdmod.browse)
+ {
+--- 2995,3022 ----
+ {
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
++ #ifdef FEAT_AUTOCMD
++ char_u *au_name = NULL;
++ #endif
+
+ if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
+! || eap->cmdidx == CMD_laddfile)
+ wp = curwin;
+
++ #ifdef FEAT_AUTOCMD
++ switch (eap->cmdidx)
++ {
++ case CMD_cfile: au_name = (char_u *)"cfile"; break;
++ case CMD_cgetfile: au_name = (char_u *)"cgetfile"; break;
++ case CMD_caddfile: au_name = (char_u *)"caddfile"; break;
++ case CMD_lfile: au_name = (char_u *)"lfile"; break;
++ case CMD_lgetfile: au_name = (char_u *)"lgetfile"; break;
++ case CMD_laddfile: au_name = (char_u *)"laddfile"; break;
++ default: break;
++ }
++ if (au_name != NULL)
++ apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf);
++ #endif
+ #ifdef FEAT_BROWSE
+ if (cmdmod.browse)
+ {
+***************
+*** 3031,3040 ****
+--- 3048,3069 ----
+ && (eap->cmdidx == CMD_cfile
+ || eap->cmdidx == CMD_lfile))
+ {
++ #ifdef FEAT_AUTOCMD
++ if (au_name != NULL)
++ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
++ #endif
+ if (wp != NULL)
+ qi = GET_LOC_LIST(wp);
+ qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+ }
++
++ else
++ {
++ #ifdef FEAT_AUTOCMD
++ if (au_name != NULL)
++ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
++ #endif
++ }
+ }
+
+ /*
+*** ../vim-7.3.467/src/version.c 2012-03-07 19:38:52.000000000 +0100
+--- src/version.c 2012-03-07 20:11:54.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 468,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+155. You forget to eat because you're too busy surfing the net.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.469
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.469
+Problem: Compiler warning for unused argument without some features.
+Solution: Add UNUSED.
+Files: src/buffer.c
+
+
+*** ../vim-7.3.468/src/buffer.c 2012-02-22 19:13:00.000000000 +0100
+--- src/buffer.c 2012-03-07 22:30:56.000000000 +0100
+***************
+*** 329,335 ****
+ win_T *win; /* if not NULL, set b_last_cursor */
+ buf_T *buf;
+ int action;
+! int abort_if_last;
+ {
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf;
+--- 329,335 ----
+ win_T *win; /* if not NULL, set b_last_cursor */
+ buf_T *buf;
+ int action;
+! int abort_if_last UNUSED;
+ {
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf;
+*** ../vim-7.3.468/src/version.c 2012-03-07 20:13:44.000000000 +0100
+--- src/version.c 2012-03-07 22:51:54.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 469,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+157. You fum through a magazine, you first check to see if it has a web
+ address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.470
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.470
+Problem: Test 62 fails when compiled without GUI and X11.
+Solution: Don't test :drop when it is not supported.
+Files: src/testdir/test62.in
+
+
+*** ../vim-7.3.469/src/testdir/test62.in 2012-02-22 19:13:00.000000000 +0100
+--- src/testdir/test62.in 2012-03-07 22:46:17.000000000 +0100
+***************
+*** 49,55 ****
+ :tabclose
+ :call append(line('$'), test_status)
+ :"
+! :"
+ :" Test for ":tab drop exist-file" to keep current window.
+ :sp test1
+ :tab drop test1
+--- 49,55 ----
+ :tabclose
+ :call append(line('$'), test_status)
+ :"
+! :if has('gui') || has('clientserver')
+ :" Test for ":tab drop exist-file" to keep current window.
+ :sp test1
+ :tab drop test1
+***************
+*** 85,90 ****
+--- 85,96 ----
+ :tabclose
+ :q
+ :call append(line('$'), test_status)
++ :else
++ :" :drop not supported
++ :call append(line('$'), 'tab drop 1: pass')
++ :call append(line('$'), 'tab drop 2: pass')
++ :call append(line('$'), 'tab drop 3: pass')
++ :endif
+ :"
+ :"
+ :/^Results/,$w! test.out
+*** ../vim-7.3.469/src/version.c 2012-03-07 22:52:30.000000000 +0100
+--- src/version.c 2012-03-07 22:53:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 470,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+158. You get a tuner card so you can watch TV while surfing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.471
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.471
+Problem: Can't abort listing placed signs.
+Solution: Check "got_int". (Christian Brabandt)
+Files: src/buffer.c, src/ex_cmds.c
+
+
+*** ../vim-7.3.470/src/buffer.c 2012-03-07 22:52:30.000000000 +0100
+--- src/buffer.c 2012-03-16 13:54:48.000000000 +0100
+***************
+*** 5557,5563 ****
+ buf = firstbuf;
+ else
+ buf = rbuf;
+! while (buf != NULL)
+ {
+ if (buf->b_signlist != NULL)
+ {
+--- 5557,5563 ----
+ buf = firstbuf;
+ else
+ buf = rbuf;
+! while (buf != NULL && !got_int)
+ {
+ if (buf->b_signlist != NULL)
+ {
+***************
+*** 5565,5571 ****
+ MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
+ msg_putchar('\n');
+ }
+! for (p = buf->b_signlist; p != NULL; p = p->next)
+ {
+ vim_snprintf(lbuf, BUFSIZ, _(" line=%ld id=%d name=%s"),
+ (long)p->lnum, p->id, sign_typenr2name(p->typenr));
+--- 5565,5571 ----
+ MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
+ msg_putchar('\n');
+ }
+! for (p = buf->b_signlist; p != NULL && !got_int; p = p->next)
+ {
+ vim_snprintf(lbuf, BUFSIZ, _(" line=%ld id=%d name=%s"),
+ (long)p->lnum, p->id, sign_typenr2name(p->typenr));
+*** ../vim-7.3.470/src/ex_cmds.c 2012-03-07 14:57:50.000000000 +0100
+--- src/ex_cmds.c 2012-03-16 13:58:50.000000000 +0100
+***************
+*** 6729,6735 ****
+ if (idx == SIGNCMD_LIST && *arg == NUL)
+ {
+ /* ":sign list": list all defined signs */
+! for (sp = first_sign; sp != NULL; sp = sp->sn_next)
+ sign_list_defined(sp);
+ }
+ else if (*arg == NUL)
+--- 6729,6735 ----
+ if (idx == SIGNCMD_LIST && *arg == NUL)
+ {
+ /* ":sign list": list all defined signs */
+! for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
+ sign_list_defined(sp);
+ }
+ else if (*arg == NUL)
+*** ../vim-7.3.470/src/version.c 2012-03-07 22:55:17.000000000 +0100
+--- src/version.c 2012-03-16 13:55:28.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 471,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ EMEMORY Memory error caused by..., eh...
+ ELICENSE Your license has expired, give us more money!
+ EMOUSE Mouse moved, reinstall Windows
+ EILLEGAL Illegal error, you are not allowed to see this
+ EVIRUS Undetectable virus found
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.472
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.472
+Problem: Crash when using ":redraw" in a BufEnter autocommand and
+ switching to another tab. (驼峰)
+Solution: Move triggering the the autocommands to after correcting the
+ option values. Also check the row value to be out of bounds.
+ (Christian Brabandt, Sergey Khorev)
+Files: src/screen.c, src/window.c
+
+
+*** ../vim-7.3.471/src/screen.c 2012-02-04 23:34:57.000000000 +0100
+--- src/screen.c 2012-03-16 18:59:20.000000000 +0100
+***************
+*** 5371,5376 ****
+--- 5371,5382 ----
+ # define CHAR_CELLS 1
+ #endif
+
++ /* Check for illegal row and col, just in case. */
++ if (row >= Rows)
++ row = Rows - 1;
++ if (endcol > Columns)
++ endcol = Columns;
++
+ # ifdef FEAT_CLIPBOARD
+ clip_may_clear_selection(row, row);
+ # endif
+*** ../vim-7.3.471/src/window.c 2012-02-22 14:58:24.000000000 +0100
+--- src/window.c 2012-03-16 18:43:01.000000000 +0100
+***************
+*** 3676,3688 ****
+ win_enter_ext(tp->tp_curwin, FALSE, TRUE);
+ prevwin = next_prevwin;
+
+- #ifdef FEAT_AUTOCMD
+- apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+-
+- if (old_curbuf != curbuf)
+- apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+- #endif
+-
+ last_status(FALSE); /* status line may appear or disappear */
+ (void)win_comp_pos(); /* recompute w_winrow for all windows */
+ must_redraw = CLEAR; /* need to redraw everything */
+--- 3676,3681 ----
+***************
+*** 3712,3717 ****
+--- 3705,3718 ----
+ gui_may_update_scrollbars();
+ #endif
+
++ #ifdef FEAT_AUTOCMD
++ /* Apply autocommands after updating the display, when 'rows' and
++ * 'columns' have been set correctly. */
++ apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
++ if (old_curbuf != curbuf)
++ apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
++ #endif
++
+ redraw_all_later(CLEAR);
+ }
+
+*** ../vim-7.3.471/src/version.c 2012-03-16 14:32:10.000000000 +0100
+--- src/version.c 2012-03-16 19:02:53.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 472,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+200. You really believe in the concept of a "paperless" office.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.473
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.473
+Problem: 'cursorbind' does not work correctly in combination with
+ 'virtualedit' set to "all".
+Solution: Copy coladd. (Gary Johnson)
+Files: src/move.c
+
+
+*** ../vim-7.3.472/src/move.c 2012-02-04 23:34:57.000000000 +0100
+--- src/move.c 2012-03-16 19:20:57.000000000 +0100
+***************
+*** 2843,2849 ****
+ do_check_cursorbind()
+ {
+ linenr_T line = curwin->w_cursor.lnum;
+! colnr_T col = curwin->w_cursor.col;
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
+ int restart_edit_save;
+--- 2843,2852 ----
+ do_check_cursorbind()
+ {
+ linenr_T line = curwin->w_cursor.lnum;
+! colnr_T col = curwin->w_cursor.col;
+! # ifdef FEAT_VIRTUALEDIT
+! colnr_T coladd = curwin->w_cursor.coladd;
+! # endif
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
+ int restart_edit_save;
+***************
+*** 2875,2880 ****
+--- 2878,2886 ----
+ # endif
+ curwin->w_cursor.lnum = line;
+ curwin->w_cursor.col = col;
++ # ifdef FEAT_VIRTUALEDIT
++ curwin->w_cursor.coladd = coladd;
++ # endif
+
+ /* Make sure the cursor is in a valid position. Temporarily set
+ * "restart_edit" to allow the cursor to be beyond the EOL. */
+*** ../vim-7.3.472/src/version.c 2012-03-16 19:07:54.000000000 +0100
+--- src/version.c 2012-03-16 19:24:06.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 473,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+201. When somebody asks you where you are, you tell them in which chat room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.474
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.474
+Problem: Perl build with gcc 4 fails.
+Solution: Remove XS() statements. (Yasuhiro Matsumoto)
+Files: src/if_perl.xs
+
+
+*** ../vim-7.3.473/src/if_perl.xs 2012-02-12 00:31:47.000000000 +0100
+--- src/if_perl.xs 2012-03-16 19:33:23.000000000 +0100
+***************
+*** 913,936 ****
+ win_T *win_find_nr(int n) { return curwin; }
+ #endif
+
+- XS(XS_VIM_Msg);
+- XS(XS_VIM_SetOption);
+- XS(XS_VIM_DoCommand);
+- XS(XS_VIM_Eval);
+- XS(XS_VIM_Buffers);
+- XS(XS_VIM_Windows);
+- XS(XS_VIWIN_DESTROY);
+- XS(XS_VIWIN_Buffer);
+- XS(XS_VIWIN_SetHeight);
+- XS(XS_VIWIN_Cursor);
+- XS(XS_VIBUF_DESTROY);
+- XS(XS_VIBUF_Name);
+- XS(XS_VIBUF_Number);
+- XS(XS_VIBUF_Count);
+- XS(XS_VIBUF_Get);
+- XS(XS_VIBUF_Set);
+- XS(XS_VIBUF_Delete);
+- XS(XS_VIBUF_Append);
+ XS(boot_VIM);
+
+ static void
+--- 913,918 ----
+*** ../vim-7.3.473/src/version.c 2012-03-16 19:24:21.000000000 +0100
+--- src/version.c 2012-03-16 19:28:03.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 474,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+202. You're amazed to find out Spam is a food.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.475
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.475
+Problem: In a terminal with few colors the omnicomplete menu may be hard to
+ see when using the default colors.
+Solution: Use more explicit colors. (suggested by Alex Henrie)
+Files: src/syntax.c
+
+
+*** ../vim-7.3.474/src/syntax.c 2012-01-10 22:26:12.000000000 +0100
+--- src/syntax.c 2012-03-16 20:14:22.000000000 +0100
+***************
+*** 6516,6523 ****
+ "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+- CENT("PmenuThumb cterm=reverse",
+- "PmenuThumb cterm=reverse gui=reverse"),
+ CENT("PmenuSbar ctermbg=Grey",
+ "PmenuSbar ctermbg=Grey guibg=Grey"),
+ #endif
+--- 6516,6521 ----
+***************
+*** 6557,6566 ****
+ "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+! CENT("Pmenu ctermbg=LightMagenta",
+! "Pmenu ctermbg=LightMagenta guibg=LightMagenta"),
+! CENT("PmenuSel ctermbg=LightGrey",
+! "PmenuSel ctermbg=LightGrey guibg=Grey"),
+ #endif
+ CENT("SpecialKey term=bold ctermfg=DarkBlue",
+ "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
+--- 6555,6566 ----
+ "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+! CENT("PmenuThumb ctermbg=Black",
+! "PmenuThumb ctermbg=Black guibg=Black"),
+! CENT("Pmenu ctermbg=LightMagenta ctermfg=Black",
+! "Pmenu ctermbg=LightMagenta ctermfg=Black guibg=LightMagenta"),
+! CENT("PmenuSel ctermbg=LightGrey ctermfg=Black",
+! "PmenuSel ctermbg=LightGrey ctermfg=Black guibg=Grey"),
+ #endif
+ CENT("SpecialKey term=bold ctermfg=DarkBlue",
+ "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
+***************
+*** 6645,6654 ****
+ "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+! CENT("Pmenu ctermbg=Magenta",
+! "Pmenu ctermbg=Magenta guibg=Magenta"),
+! CENT("PmenuSel ctermbg=DarkGrey",
+! "PmenuSel ctermbg=DarkGrey guibg=DarkGrey"),
+ #endif
+ CENT("Title term=bold ctermfg=LightMagenta",
+ "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+--- 6645,6656 ----
+ "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+! CENT("PmenuThumb ctermbg=White",
+! "PmenuThumb ctermbg=White guibg=White"),
+! CENT("Pmenu ctermbg=Magenta ctermfg=Black",
+! "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
+! CENT("PmenuSel ctermbg=DarkGrey ctermfg=Black",
+! "PmenuSel ctermbg=DarkGrey ctermfg=Black guibg=DarkGrey"),
+ #endif
+ CENT("Title term=bold ctermfg=LightMagenta",
+ "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+*** ../vim-7.3.474/src/version.c 2012-03-16 19:34:43.000000000 +0100
+--- src/version.c 2012-03-16 20:05:35.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 475,
+ /**/
+
+--
+Spam seems to be something useful to novices. Later you realize that
+it's a bunch of indigestable junk that only clogs your system.
+Applies to both the food and the e-mail!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.476
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.476
+Problem: When selecting a block, using "$" to include the end of each line
+ and using "A" and typing a backspace strange things happen.
+ (Yuangchen Xie)
+Solution: Avoid using a negative length. (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.475/src/ops.c 2012-03-07 19:30:32.000000000 +0100
+--- src/ops.c 2012-03-23 12:22:36.000000000 +0100
+***************
+*** 2602,2608 ****
+ firstline = ml_get(oap->start.lnum) + bd.textcol;
+ if (oap->op_type == OP_APPEND)
+ firstline += bd.textlen;
+! if ((ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
+ {
+ ins_text = vim_strnsave(firstline, (int)ins_len);
+ if (ins_text != NULL)
+--- 2602,2609 ----
+ firstline = ml_get(oap->start.lnum) + bd.textcol;
+ if (oap->op_type == OP_APPEND)
+ firstline += bd.textlen;
+! if (pre_textlen >= 0
+! && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
+ {
+ ins_text = vim_strnsave(firstline, (int)ins_len);
+ if (ins_text != NULL)
+*** ../vim-7.3.475/src/version.c 2012-03-16 20:16:42.000000000 +0100
+--- src/version.c 2012-03-23 14:14:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 476,
+ /**/
+
+--
+"Marriage is a wonderful institution...
+but who wants to live in an institution?"
+ - Groucho Marx
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.477
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.477
+Problem: Using ":echo" to output enough lines to scroll, then using "j" and
+ "k" at the more prompt, displays the command on top of the output.
+ (Marcin Szamotulski)
+Solution: Put the output below the command. (Christian Brabandt)
+Files: src/eval.c
+
+
+*** ../vim-7.3.476/src/eval.c 2012-03-07 19:16:49.000000000 +0100
+--- src/eval.c 2012-03-23 15:11:30.000000000 +0100
+***************
+*** 20492,20498 ****
+--- 20492,20503 ----
+ /* Call msg_start() after eval1(), evaluating the expression
+ * may cause a message to appear. */
+ if (eap->cmdidx == CMD_echo)
++ {
++ /* Put the output below the command, makes scrolling back
++ * at more prompt work. */
++ msg_didout = TRUE;
+ msg_start();
++ }
+ }
+ else if (eap->cmdidx == CMD_echo)
+ msg_puts_attr((char_u *)" ", echo_attr);
+*** ../vim-7.3.476/src/version.c 2012-03-23 14:16:19.000000000 +0100
+--- src/version.c 2012-03-23 15:13:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 477,
+ /**/
+
+--
+"Marriage is when a man and woman become as one; the trouble starts
+when they try to decide which one"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.478
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.478
+Problem: Memory leak using the ':rv!' command when reading dictionary or
+ list global variables i.e. with 'viminfo' containing !.
+Solution: Free the typeval. (Dominique Pelle)
+Files: src/eval.c
+
+
+*** ../vim-7.3.477/src/eval.c 2012-03-23 15:18:20.000000000 +0100
+--- src/eval.c 2012-03-23 15:28:42.000000000 +0100
+***************
+*** 22976,22981 ****
+--- 22976,22982 ----
+ {
+ vim_free(tv.vval.v_string);
+ tv = *etv;
++ vim_free(etv);
+ }
+ }
+
+*** ../vim-7.3.477/src/version.c 2012-03-23 15:18:20.000000000 +0100
+--- src/version.c 2012-03-23 15:29:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 478,
+ /**/
+
+--
+"Marriage is the process of finding out what kind of man your wife
+would have preferred"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.479
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.479
+Problem: When 'cursorline' is set the line number highlighting can't be set
+ separately.
+Solution: Add "CursorLineNr". (Howard Buchholz)
+Files: src/option.c, src/screen.c, src/syntax.c, src/vim.h
+
+
+*** ../vim-7.3.478/src/option.c 2012-02-29 13:51:32.000000000 +0100
+--- src/option.c 2012-03-23 15:44:57.000000000 +0100
+***************
+*** 460,468 ****
+ #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
+ || defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
+ || defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
+! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
+ #else
+! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
+ #endif
+
+ /*
+--- 460,468 ----
+ #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
+ || defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
+ || defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
+! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
+ #else
+! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
+ #endif
+
+ /*
+*** ../vim-7.3.478/src/screen.c 2012-03-16 19:07:54.000000000 +0100
+--- src/screen.c 2012-03-23 16:09:15.000000000 +0100
+***************
+*** 3501,3509 ****
+ char_attr = hl_attr(HLF_N);
+ #ifdef FEAT_SYN_HL
+ /* When 'cursorline' is set highlight the line number of
+! * the current line differently. */
+ if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+! char_attr = hl_combine_attr(hl_attr(HLF_CUL), char_attr);
+ #endif
+ }
+ }
+--- 3501,3511 ----
+ char_attr = hl_attr(HLF_N);
+ #ifdef FEAT_SYN_HL
+ /* When 'cursorline' is set highlight the line number of
+! * the current line differently.
+! * TODO: Can we use CursorLine instead of CursorLineNr
+! * when CursorLineNr isn't set? */
+ if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+! char_attr = hl_attr(HLF_CLN);
+ #endif
+ }
+ }
+*** ../vim-7.3.478/src/syntax.c 2012-03-16 20:16:42.000000000 +0100
+--- src/syntax.c 2012-03-23 16:23:57.000000000 +0100
+***************
+*** 6538,6543 ****
+--- 6538,6545 ----
+ "Directory term=bold ctermfg=DarkBlue guifg=Blue"),
+ CENT("LineNr term=underline ctermfg=Brown",
+ "LineNr term=underline ctermfg=Brown guifg=Brown"),
++ CENT("CursorLineNr term=bold ctermfg=Brown",
++ "CursorLineNr term=bold ctermfg=Brown gui=bold guifg=Brown"),
+ CENT("MoreMsg term=bold ctermfg=DarkGreen",
+ "MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
+ CENT("Question term=standout ctermfg=DarkGreen",
+***************
+*** 6626,6631 ****
+--- 6628,6635 ----
+ "Directory term=bold ctermfg=LightCyan guifg=Cyan"),
+ CENT("LineNr term=underline ctermfg=Yellow",
+ "LineNr term=underline ctermfg=Yellow guifg=Yellow"),
++ CENT("CursorLineNr term=bold ctermfg=Yellow",
++ "CursorLineNr term=bold ctermfg=Yellow gui=bold guifg=Yellow"),
+ CENT("MoreMsg term=bold ctermfg=LightGreen",
+ "MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen"),
+ CENT("Question term=standout ctermfg=LightGreen",
+*** ../vim-7.3.478/src/vim.h 2012-03-07 19:16:49.000000000 +0100
+--- src/vim.h 2012-03-23 15:44:57.000000000 +0100
+***************
+*** 1318,1323 ****
+--- 1318,1324 ----
+ , HLF_M /* "--More--" message */
+ , HLF_CM /* Mode (e.g., "-- INSERT --") */
+ , HLF_N /* line number for ":number" and ":#" commands */
++ , HLF_CLN /* current line number */
+ , HLF_R /* return to continue message and yes/no questions */
+ , HLF_S /* status lines */
+ , HLF_SNC /* status lines of not-current windows */
+***************
+*** 1355,1361 ****
+ /* The HL_FLAGS must be in the same order as the HLF_ enums!
+ * When changing this also adjust the default for 'highlight'. */
+ #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
+! 'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+ 'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
+ 'B', 'P', 'R', 'L', \
+ '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
+--- 1356,1362 ----
+ /* The HL_FLAGS must be in the same order as the HLF_ enums!
+ * When changing this also adjust the default for 'highlight'. */
+ #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
+! 'n', 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+ 'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
+ 'B', 'P', 'R', 'L', \
+ '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
+*** ../vim-7.3.478/src/version.c 2012-03-23 15:36:57.000000000 +0100
+--- src/version.c 2012-03-23 16:16:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 479,
+ /**/
+
+--
+If you're sending someone Styrofoam, what do you pack it in?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.480
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.480
+Problem: When using ":qa" and there is a changed buffer picking the buffer
+ to jump to is not very good.
+Solution: Consider current and other tab pages. (Hirohito Higashi)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.479/src/ex_cmds2.c 2012-02-22 18:29:29.000000000 +0100
+--- src/ex_cmds2.c 2012-03-23 17:01:31.000000000 +0100
+***************
+*** 1569,1574 ****
+--- 1569,1594 ----
+ || forceit);
+ }
+
++ static void add_bufnum __ARGS((int *bufnrs, int *bufnump, int nr));
++
++ /*
++ * Add a buffer number to "bufnrs", unless it's already there.
++ */
++ static void
++ add_bufnum(bufnrs, bufnump, nr)
++ int *bufnrs;
++ int *bufnump;
++ int nr;
++ {
++ int i;
++
++ for (i = 0; i < *bufnump; ++i)
++ if (bufnrs[i] == nr)
++ return;
++ bufnrs[*bufnump] = nr;
++ *bufnump = *bufnump + 1;
++ }
++
+ /*
+ * Return TRUE if any buffer was changed and cannot be abandoned.
+ * That changed buffer becomes the current buffer.
+***************
+*** 1577,1608 ****
+ check_changed_any(hidden)
+ int hidden; /* Only check hidden buffers */
+ {
+ buf_T *buf;
+ int save;
+ #ifdef FEAT_WINDOWS
+ win_T *wp;
+ #endif
+
+! for (;;)
+ {
+! /* check curbuf first: if it was changed we can't abandon it */
+! if (!hidden && curbufIsChanged())
+! buf = curbuf;
+! else
+ {
+! for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+! if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
+! break;
+ }
+- if (buf == NULL) /* No buffers changed */
+- return FALSE;
+-
+- /* Try auto-writing the buffer. If this fails but the buffer no
+- * longer exists it's not changed, that's OK. */
+- if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+- break; /* didn't save - still changes */
+ }
+
+ exiting = FALSE;
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ /*
+--- 1597,1660 ----
+ check_changed_any(hidden)
+ int hidden; /* Only check hidden buffers */
+ {
++ int ret = FALSE;
+ buf_T *buf;
+ int save;
++ int i;
++ int bufnum = 0;
++ int bufcount = 0;
++ int *bufnrs;
+ #ifdef FEAT_WINDOWS
++ tabpage_T *tp;
+ win_T *wp;
+ #endif
+
+! for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+! ++bufcount;
+!
+! if (bufcount == 0)
+! return FALSE;
+!
+! bufnrs = (int *)alloc(sizeof(int) * bufcount);
+! if (bufnrs == NULL)
+! return FALSE;
+!
+! /* curbuf */
+! bufnrs[bufnum++] = curbuf->b_fnum;
+! #ifdef FEAT_WINDOWS
+! /* buf in curtab */
+! FOR_ALL_WINDOWS(wp)
+! if (wp->w_buffer != curbuf)
+! add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
+!
+! /* buf in other tab */
+! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! if (tp != curtab)
+! for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+! add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
+! #endif
+! /* any other buf */
+! for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+! add_bufnum(bufnrs, &bufnum, buf->b_fnum);
+!
+! for (i = 0; i < bufnum; ++i)
+ {
+! buf = buflist_findnr(bufnrs[i]);
+! if (buf == NULL)
+! continue;
+! if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
+ {
+! /* Try auto-writing the buffer. If this fails but the buffer no
+! * longer exists it's not changed, that's OK. */
+! if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+! break; /* didn't save - still changes */
+ }
+ }
+
++ if (i >= bufnum)
++ goto theend;
++
++ ret = TRUE;
+ exiting = FALSE;
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ /*
+***************
+*** 1635,1658 ****
+ #ifdef FEAT_WINDOWS
+ /* Try to find a window that contains the buffer. */
+ if (buf != curbuf)
+! for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ if (wp->w_buffer == buf)
+ {
+! win_goto(wp);
+ # ifdef FEAT_AUTOCMD
+ /* Paranoia: did autocms wipe out the buffer with changes? */
+ if (!buf_valid(buf))
+! return TRUE;
+ # endif
+! break;
+ }
+ #endif
+
+ /* Open the changed buffer in the current window. */
+ if (buf != curbuf)
+ set_curbuf(buf, DOBUF_GOTO);
+
+! return TRUE;
+ }
+
+ /*
+--- 1687,1715 ----
+ #ifdef FEAT_WINDOWS
+ /* Try to find a window that contains the buffer. */
+ if (buf != curbuf)
+! FOR_ALL_TAB_WINDOWS(tp, wp)
+ if (wp->w_buffer == buf)
+ {
+! goto_tabpage_win(tp, wp);
+ # ifdef FEAT_AUTOCMD
+ /* Paranoia: did autocms wipe out the buffer with changes? */
+ if (!buf_valid(buf))
+! {
+! goto theend;
+! }
+ # endif
+! goto buf_found;
+ }
++ buf_found:
+ #endif
+
+ /* Open the changed buffer in the current window. */
+ if (buf != curbuf)
+ set_curbuf(buf, DOBUF_GOTO);
+
+! theend:
+! vim_free(bufnrs);
+! return ret;
+ }
+
+ /*
+***************
+*** 3274,3280 ****
+ home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+ NameBuff, MAXPATHL, TRUE);
+ smsg((char_u *)"%3d: %s", i, NameBuff);
+! }
+ }
+
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+--- 3331,3337 ----
+ home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+ NameBuff, MAXPATHL, TRUE);
+ smsg((char_u *)"%3d: %s", i, NameBuff);
+! }
+ }
+
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+*** ../vim-7.3.479/src/version.c 2012-03-23 16:25:13.000000000 +0100
+--- src/version.c 2012-03-23 16:48:06.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 480,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+243. You unsuccessfully try to download a pizza from www.dominos.com.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.481
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.481
+Problem: Changing 'virtualedit' in an operator function to "all" does not
+ have the desired effect. (Aaron Bohannon)
+Solution: Save, reset and restore virtual_op when executing an operator
+ function.
+Files: src/normal.c
+
+
+*** ../vim-7.3.480/src/normal.c 2012-02-05 01:18:41.000000000 +0100
+--- src/normal.c 2012-03-28 12:59:46.000000000 +0200
+***************
+*** 2279,2284 ****
+--- 2279,2285 ----
+ {
+ #ifdef FEAT_EVAL
+ char_u *(argv[1]);
++ int save_virtual_op = virtual_op;
+
+ if (*p_opfunc == NUL)
+ EMSG(_("E774: 'operatorfunc' is empty"));
+***************
+*** 2297,2303 ****
+--- 2298,2311 ----
+ argv[0] = (char_u *)"line";
+ else
+ argv[0] = (char_u *)"char";
++
++ /* Reset virtual_op so that 'virtualedit' can be changed in the
++ * function. */
++ virtual_op = MAYBE;
++
+ (void)call_func_retnr(p_opfunc, 1, argv, FALSE);
++
++ virtual_op = save_virtual_op;
+ }
+ #else
+ EMSG(_("E775: Eval feature not available"));
+*** ../vim-7.3.480/src/version.c 2012-03-23 18:39:10.000000000 +0100
+--- src/version.c 2012-03-28 12:50:20.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 481,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+269. You wonder how you can make your dustbin produce Sesame Street's
+ Oscar's the Garbage Monster song when you empty it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.482
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.482
+Problem: With 'cursorbind' set moving up/down does not always keep the same
+ column.
+Solution: Set curswant appropriately. (Gary Johnson)
+Files: src/move.c
+
+
+*** ../vim-7.3.481/src/move.c 2012-03-16 19:24:21.000000000 +0100
+--- src/move.c 2012-03-28 14:16:02.000000000 +0200
+***************
+*** 2847,2852 ****
+--- 2847,2854 ----
+ # ifdef FEAT_VIRTUALEDIT
+ colnr_T coladd = curwin->w_cursor.coladd;
+ # endif
++ colnr_T curswant = curwin->w_curswant;
++ int set_curswant = curwin->w_set_curswant;
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
+ int restart_edit_save;
+***************
+*** 2881,2886 ****
+--- 2883,2890 ----
+ # ifdef FEAT_VIRTUALEDIT
+ curwin->w_cursor.coladd = coladd;
+ # endif
++ curwin->w_curswant = curswant;
++ curwin->w_set_curswant = set_curswant;
+
+ /* Make sure the cursor is in a valid position. Temporarily set
+ * "restart_edit" to allow the cursor to be beyond the EOL. */
+*** ../vim-7.3.481/src/version.c 2012-03-28 12:59:53.000000000 +0200
+--- src/version.c 2012-03-28 14:15:56.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 482,
+ /**/
+
+--
+Women are probably the main cause of free software starvation.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.483
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.483 (after 7.3.477)
+Problem: More prompt shows up too often.
+Solution: Instead of adding a line break, only start a new line in the
+ message history. (Christian Brabandt)
+Files: src/eval.c, src/message.c, src/proto/message.pro
+
+
+*** ../vim-7.3.482/src/eval.c 2012-03-23 15:36:57.000000000 +0100
+--- src/eval.c 2012-03-28 16:41:03.000000000 +0200
+***************
+*** 20493,20501 ****
+ * may cause a message to appear. */
+ if (eap->cmdidx == CMD_echo)
+ {
+! /* Put the output below the command, makes scrolling back
+! * at more prompt work. */
+! msg_didout = TRUE;
+ msg_start();
+ }
+ }
+--- 20493,20502 ----
+ * may cause a message to appear. */
+ if (eap->cmdidx == CMD_echo)
+ {
+! /* Mark the saved text as finishing the line, so that what
+! * follows is displayed on a new line when scrolling back
+! * at the more prompt. */
+! msg_sb_eol();
+ msg_start();
+ }
+ }
+*** ../vim-7.3.482/src/message.c 2012-01-26 13:01:54.000000000 +0100
+--- src/message.c 2012-03-28 16:35:26.000000000 +0200
+***************
+*** 2348,2353 ****
+--- 2348,2363 ----
+ }
+
+ /*
++ * Mark the last message chunk as finishing the line.
++ */
++ void
++ msg_sb_eol()
++ {
++ if (last_msgchunk != NULL)
++ last_msgchunk->sb_eol = TRUE;
++ }
++
++ /*
+ * Display a screen line from previously displayed text at row "row".
+ * Returns a pointer to the text for the next line (can be NULL).
+ */
+*** ../vim-7.3.482/src/proto/message.pro 2012-01-20 20:44:38.000000000 +0100
+--- src/proto/message.pro 2012-03-28 16:35:33.000000000 +0200
+***************
+*** 45,50 ****
+--- 45,51 ----
+ void may_clear_sb_text __ARGS((void));
+ void clear_sb_text __ARGS((void));
+ void show_sb_text __ARGS((void));
++ void msg_sb_eol __ARGS((void));
+ int msg_use_printf __ARGS((void));
+ void mch_errmsg __ARGS((char *str));
+ void mch_msg __ARGS((char *str));
+*** ../vim-7.3.482/src/version.c 2012-03-28 14:19:46.000000000 +0200
+--- src/version.c 2012-03-28 16:48:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 483,
+ /**/
+
+--
+ We're knights of the Round Table
+ Our shows are formidable
+ But many times
+ We're given rhymes
+ That are quite unsingable
+ We're opera mad in Camelot
+ We sing from the diaphragm a lot.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.484
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.484
+Problem: The -E and --echo-wid command line arguments are not mentioned in
+ "vim --help".
+Solution: Add the help lines. (Dominique Pelle)
+Files: src/main.c
+
+
+*** ../vim-7.3.483/src/main.c 2012-02-12 01:55:50.000000000 +0100
+--- src/main.c 2012-03-28 16:55:03.000000000 +0200
+***************
+*** 3181,3186 ****
+--- 3181,3187 ----
+ #endif
+ main_msg(_("-v\t\t\tVi mode (like \"vi\")"));
+ main_msg(_("-e\t\t\tEx mode (like \"ex\")"));
++ main_msg(_("-E\t\t\tImproved Ex mode"));
+ main_msg(_("-s\t\t\tSilent (batch) mode (only for \"ex\")"));
+ #ifdef FEAT_DIFF
+ main_msg(_("-d\t\t\tDiff mode (like \"vimdiff\")"));
+***************
+*** 3304,3309 ****
+--- 3305,3311 ----
+ main_msg(_("-display <display>\tRun vim on <display> (also: --display)"));
+ main_msg(_("--role <role>\tSet a unique role to identify the main window"));
+ main_msg(_("--socketid <xid>\tOpen Vim inside another GTK widget"));
++ main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
+ #endif
+ #ifdef FEAT_GUI_W32
+ main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
+*** ../vim-7.3.483/src/version.c 2012-03-28 16:49:25.000000000 +0200
+--- src/version.c 2012-03-28 17:10:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 484,
+ /**/
+
+--
+ In war we're tough and able.
+ Quite indefatigable
+ Between our quests
+ We sequin vests
+ And impersonate Clark Gable
+ It's a busy life in Camelot.
+ I have to push the pram a lot.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.485
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.485
+Problem: When building Vim LDFLAGS isn't passed on to building xxd.
+Solution: Pass the LDFLAGS value. (James McCoy)
+Files: src/Makefile
+
+
+*** ../vim-7.3.484/src/Makefile 2011-12-14 20:51:19.000000000 +0100
+--- src/Makefile 2012-03-28 17:16:06.000000000 +0200
+***************
+*** 1720,1726 ****
+ sh $(srcdir)/link.sh
+
+ xxd/xxd$(EXEEXT): xxd/xxd.c
+! cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
+ $(MAKE) -f Makefile
+
+ # Build the language specific files if they were unpacked.
+--- 1720,1726 ----
+ sh $(srcdir)/link.sh
+
+ xxd/xxd$(EXEEXT): xxd/xxd.c
+! cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
+ $(MAKE) -f Makefile
+
+ # Build the language specific files if they were unpacked.
+*** ../vim-7.3.484/src/version.c 2012-03-28 17:10:26.000000000 +0200
+--- src/version.c 2012-03-28 17:16:15.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 485,
+ /**/
+
+--
+GOD: That is your purpose Arthur ... the Quest for the Holy Grail ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.486
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.486
+Problem: Build error with mingw64 on Windows 7.
+Solution: Avoid the step of going through vimres.res. (Guopeng Wen)
+Files: src/Make_ming.mak
+
+
+*** ../vim-7.3.485/src/Make_ming.mak 2012-02-29 16:56:35.000000000 +0100
+--- src/Make_ming.mak 2012-03-28 17:41:55.000000000 +0200
+***************
+*** 681,691 ****
+ $(OUTDIR)/%.o : %.c $(INCL)
+ $(CC) -c $(CFLAGS) $< -o $@
+
+! $(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
+! $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
+!
+! $(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
+! $(WINDRES) $(WINDRES_FLAGS) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
+
+ $(OUTDIR):
+ $(MKDIR) $(OUTDIR)
+--- 681,689 ----
+ $(OUTDIR)/%.o : %.c $(INCL)
+ $(CC) -c $(CFLAGS) $< -o $@
+
+! $(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
+! $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
+! --input-format=rc --output-format=coff -i vim.rc -o $@
+
+ $(OUTDIR):
+ $(MKDIR) $(OUTDIR)
+*** ../vim-7.3.485/src/version.c 2012-03-28 17:17:45.000000000 +0200
+--- src/version.c 2012-03-28 17:42:25.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 486,
+ /**/
+
+--
+There is a fine line between courage and foolishness.
+Unfortunately, it's not a fence.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.487
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.487
+Problem: When setting 'timeoutlen' or 'ttimeoutlen' the column for vertical
+ movement is reset unnecessarily.
+Solution: Do not set w_set_curswant for every option. Add a test for this.
+ (Kana Natsuno) Add the P_CURSWANT flag for options.
+Files: src/option.c, src/testdir/test84.in, src/testdir/test84.ok,
+ src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms, src/testdir/Makefile
+
+
+*** ../vim-7.3.486/src/option.c 2012-03-23 16:25:13.000000000 +0100
+--- src/option.c 2012-03-28 19:57:46.000000000 +0200
+***************
+*** 433,449 ****
+ #define P_RCLR 0x7000 /* clear and redraw all */
+
+ #define P_COMMA 0x8000 /* comma separated list */
+! #define P_NODUP 0x10000L/* don't allow duplicate strings */
+! #define P_FLAGLIST 0x20000L/* list of single-char flags */
+
+! #define P_SECURE 0x40000L/* cannot change in modeline or secure mode */
+! #define P_GETTEXT 0x80000L/* expand default value with _() */
+! #define P_NOGLOB 0x100000L/* do not use local value for global vimrc */
+! #define P_NFNAME 0x200000L/* only normal file name chars allowed */
+! #define P_INSECURE 0x400000L/* option was set from a modeline */
+! #define P_PRI_MKRC 0x800000L/* priority for :mkvimrc (setting option has
+ side effects) */
+! #define P_NO_ML 0x1000000L/* not allowed in modeline */
+
+ #define ISK_LATIN1 (char_u *)"@,48-57,_,192-255"
+
+--- 433,451 ----
+ #define P_RCLR 0x7000 /* clear and redraw all */
+
+ #define P_COMMA 0x8000 /* comma separated list */
+! #define P_NODUP 0x10000L /* don't allow duplicate strings */
+! #define P_FLAGLIST 0x20000L /* list of single-char flags */
+
+! #define P_SECURE 0x40000L /* cannot change in modeline or secure mode */
+! #define P_GETTEXT 0x80000L /* expand default value with _() */
+! #define P_NOGLOB 0x100000L /* do not use local value for global vimrc */
+! #define P_NFNAME 0x200000L /* only normal file name chars allowed */
+! #define P_INSECURE 0x400000L /* option was set from a modeline */
+! #define P_PRI_MKRC 0x800000L /* priority for :mkvimrc (setting option has
+ side effects) */
+! #define P_NO_ML 0x1000000L /* not allowed in modeline */
+! #define P_CURSWANT 0x2000000L /* update curswant required; not needed when
+! * there is a redraw flag */
+
+ #define ISK_LATIN1 (char_u *)"@,48-57,_,192-255"
+
+***************
+*** 479,485 ****
+ #endif
+ options[] =
+ {
+! {"aleph", "al", P_NUM|P_VI_DEF,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_aleph, PV_NONE,
+ #else
+--- 481,487 ----
+ #endif
+ options[] =
+ {
+! {"aleph", "al", P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_aleph, PV_NONE,
+ #else
+***************
+*** 501,507 ****
+ {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+ SCRIPTID_INIT},
+! {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_ARABIC
+ (char_u *)VAR_WIN, PV_ARAB,
+ #else
+--- 503,509 ----
+ {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+ SCRIPTID_INIT},
+! {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
+ #ifdef FEAT_ARABIC
+ (char_u *)VAR_WIN, PV_ARAB,
+ #else
+***************
+*** 778,784 ****
+ {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ (char_u *)&Columns, PV_NONE,
+ {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
+! {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
+ #ifdef FEAT_COMMENTS
+ (char_u *)&p_com, PV_COM,
+ {(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
+--- 780,786 ----
+ {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ (char_u *)&Columns, PV_NONE,
+ {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
+! {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
+ #ifdef FEAT_COMMENTS
+ (char_u *)&p_com, PV_COM,
+ {(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
+***************
+*** 788,794 ****
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_cms, PV_CMS,
+ {(char_u *)"/*%s*/", (char_u *)0L}
+--- 790,796 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_cms, PV_CMS,
+ {(char_u *)"/*%s*/", (char_u *)0L}
+***************
+*** 953,959 ****
+ {"debug", NULL, P_STRING|P_VI_DEF,
+ (char_u *)&p_debug, PV_NONE,
+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+! {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_FIND_ID
+ (char_u *)&p_def, PV_DEF,
+ {(char_u *)"^\\s*#\\s*define", (char_u *)0L}
+--- 955,961 ----
+ {"debug", NULL, P_STRING|P_VI_DEF,
+ (char_u *)&p_debug, PV_NONE,
+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+! {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FIND_ID
+ (char_u *)&p_def, PV_DEF,
+ {(char_u *)"^\\s*#\\s*define", (char_u *)0L}
+***************
+*** 983,989 ****
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+! {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ (char_u *)&p_dex, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+--- 985,991 ----
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+! {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ (char_u *)&p_dex, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+***************
+*** 1099,1105 ****
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC,
+ (char_u *)&p_ff, PV_FF,
+ {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
+ {"fileformats", "ffs", P_STRING|P_VIM|P_COMMA|P_NODUP,
+--- 1101,1107 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC|P_CURSWANT,
+ (char_u *)&p_ff, PV_FF,
+ {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
+ {"fileformats", "ffs", P_STRING|P_VIM|P_COMMA|P_NODUP,
+***************
+*** 1159,1165 ****
+ {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_FDL,
+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+! {"foldlevelstart","fdls", P_NUM|P_VI_DEF,
+ (char_u *)&p_fdls, PV_NONE,
+ {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
+ {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
+--- 1161,1167 ----
+ {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_FDL,
+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+! {"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
+ (char_u *)&p_fdls, PV_NONE,
+ {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
+ {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
+***************
+*** 1176,1182 ****
+ {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_FDN,
+ {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
+! {"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_fdo, PV_NONE,
+ {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
+ (char_u *)0L} SCRIPTID_INIT},
+--- 1178,1184 ----
+ {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_FDN,
+ {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
+! {"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
+ (char_u *)&p_fdo, PV_NONE,
+ {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
+ (char_u *)0L} SCRIPTID_INIT},
+***************
+*** 1741,1747 ****
+ {"matchtime", "mat", P_NUM|P_VI_DEF,
+ (char_u *)&p_mat, PV_NONE,
+ {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
+! {"maxcombine", "mco", P_NUM|P_VI_DEF,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_mco, PV_NONE,
+ #else
+--- 1743,1749 ----
+ {"matchtime", "mat", P_NUM|P_VI_DEF,
+ (char_u *)&p_mat, PV_NONE,
+ {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
+! {"maxcombine", "mco", P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_mco, PV_NONE,
+ #else
+***************
+*** 2710,2716 ****
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM,
+ #ifdef FEAT_VIRTUALEDIT
+ (char_u *)&p_ve, PV_NONE,
+ {(char_u *)"", (char_u *)""}
+--- 2712,2718 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM|P_CURSWANT,
+ #ifdef FEAT_VIRTUALEDIT
+ (char_u *)&p_ve, PV_NONE,
+ {(char_u *)"", (char_u *)""}
+***************
+*** 7064,7071 ****
+ }
+ #endif
+
+! if (curwin->w_curswant != MAXCOL)
+! curwin->w_set_curswant = TRUE; /* in case 'showbreak' changed */
+ #ifdef FEAT_GUI
+ /* check redraw when it's not a GUI option or the GUI is active. */
+ if (!redraw_gui_only || gui.in_use)
+--- 7066,7075 ----
+ }
+ #endif
+
+! if (curwin->w_curswant != MAXCOL
+! && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+! curwin->w_set_curswant = TRUE;
+!
+ #ifdef FEAT_GUI
+ /* check redraw when it's not a GUI option or the GUI is active. */
+ if (!redraw_gui_only || gui.in_use)
+***************
+*** 7587,7595 ****
+ || (int *)varp == &curwin->w_p_nu
+ || (int *)varp == &curwin->w_p_rnu)
+ {
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+-
+ /* If 'number' is set, reset 'relativenumber'. */
+ /* If 'relativenumber' is set, reset 'number'. */
+ if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
+--- 7591,7596 ----
+***************
+*** 7834,7841 ****
+ {
+ if (curwin->w_p_wrap)
+ curwin->w_leftcol = 0;
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+ }
+
+ #ifdef FEAT_WINDOWS
+--- 7835,7840 ----
+***************
+*** 8062,8092 ****
+ curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
+ # endif
+ }
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+ }
+
+- else if ((int *)varp == &p_arshape)
+- {
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+- }
+- #endif
+-
+- #ifdef FEAT_LINEBREAK
+- if ((int *)varp == &curwin->w_p_lbr)
+- {
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+- }
+- #endif
+-
+- #ifdef FEAT_RIGHTLEFT
+- if ((int *)varp == &curwin->w_p_rl)
+- {
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+- }
+ #endif
+
+ /*
+--- 8061,8068 ----
+***************
+*** 8096,8102 ****
+ options[opt_idx].flags |= P_WAS_SET;
+
+ comp_col(); /* in case 'ruler' or 'showcmd' changed */
+!
+ check_redraw(options[opt_idx].flags);
+
+ return NULL;
+--- 8072,8080 ----
+ options[opt_idx].flags |= P_WAS_SET;
+
+ comp_col(); /* in case 'ruler' or 'showcmd' changed */
+! if (curwin->w_curswant != MAXCOL
+! && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+! curwin->w_set_curswant = TRUE;
+ check_redraw(options[opt_idx].flags);
+
+ return NULL;
+***************
+*** 8611,8618 ****
+ options[opt_idx].flags |= P_WAS_SET;
+
+ comp_col(); /* in case 'columns' or 'ls' changed */
+! if (curwin->w_curswant != MAXCOL)
+! curwin->w_set_curswant = TRUE; /* in case 'tabstop' changed */
+ check_redraw(options[opt_idx].flags);
+
+ return errmsg;
+--- 8589,8597 ----
+ options[opt_idx].flags |= P_WAS_SET;
+
+ comp_col(); /* in case 'columns' or 'ls' changed */
+! if (curwin->w_curswant != MAXCOL
+! && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+! curwin->w_set_curswant = TRUE;
+ check_redraw(options[opt_idx].flags);
+
+ return errmsg;
+*** ../vim-7.3.486/src/testdir/test84.in 2012-03-28 19:55:12.000000000 +0200
+--- src/testdir/test84.in 2012-03-28 19:46:53.000000000 +0200
+***************
+*** 0 ****
+--- 1,35 ----
++ Tests for curswant not changing when setting an option
++
++ STARTTEST
++ :so small.vim
++ :/^start target options$/+1,/^end target options$/-1 yank
++ :let target_option_names = split(@0)
++ :function TestCurswant(option_name)
++ : normal! ggf8j
++ : let curswant_before = winsaveview().curswant
++ : execute 'let' '&'.a:option_name '=' '&'.a:option_name
++ : let curswant_after = winsaveview().curswant
++ : return [a:option_name, curswant_before, curswant_after]
++ :endfunction
++ :
++ :new
++ :put =['1234567890', '12345']
++ :1 delete _
++ :let result = []
++ :for option_name in target_option_names
++ : call add(result, TestCurswant(option_name))
++ :endfor
++ :
++ :new
++ :put =map(copy(result), 'join(v:val, '' '')')
++ :1 delete _
++ :write test.out
++ :
++ :qall!
++ ENDTEST
++
++ start target options
++ tabstop
++ timeoutlen
++ ttimeoutlen
++ end target options
+*** ../vim-7.3.486/src/testdir/test84.ok 2012-03-28 19:55:12.000000000 +0200
+--- src/testdir/test84.ok 2012-03-28 19:48:36.000000000 +0200
+***************
+*** 0 ****
+--- 1,3 ----
++ tabstop 7 4
++ timeoutlen 7 7
++ ttimeoutlen 7 7
+*** ../vim-7.3.486/src/testdir/Make_amiga.mak 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_amiga.mak 2012-03-28 18:14:08.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out test84.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 132,134 ****
+--- 132,135 ----
+ test81.out: test81.in
+ test82.out: test82.in
+ test83.out: test83.in
++ test84.out: test84.in
+*** ../vim-7.3.486/src/testdir/Make_dos.mak 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_dos.mak 2012-03-28 18:14:41.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,36 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.486/src/testdir/Make_ming.mak 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_ming.mak 2012-03-28 18:14:46.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,56 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.486/src/testdir/Make_os2.mak 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_os2.mak 2012-03-28 18:15:00.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out test84.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.486/src/testdir/Make_vms.mms 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_vms.mms 2012-03-28 18:15:15.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jul 15
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2012 Mar 28
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 76,82 ****
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out test83.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 76,82 ----
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out test83.out test84.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.486/src/testdir/Makefile 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Makefile 2012-03-28 18:15:29.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,33 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.486/src/version.c 2012-03-28 17:43:06.000000000 +0200
+--- src/version.c 2012-03-28 19:49:41.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 487,
+ /**/
+
+--
+"Time flies like an arrow". So I put an arrow on my desk, now
+awaiting one of these time flies showing up.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.488
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.488
+Problem: ":help!" in a help file does not work as document.
+Solution: When in a help file don't give an error message. (thinca)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.487/src/ex_cmds.c 2012-03-16 14:32:10.000000000 +0100
+--- src/ex_cmds.c 2012-04-01 14:25:35.000000000 +0200
+***************
+*** 5546,5552 ****
+ }
+ arg = eap->arg;
+
+! if (eap->forceit && *arg == NUL)
+ {
+ EMSG(_("E478: Don't panic!"));
+ return;
+--- 5546,5552 ----
+ }
+ arg = eap->arg;
+
+! if (eap->forceit && *arg == NUL && !curbuf->b_help)
+ {
+ EMSG(_("E478: Don't panic!"));
+ return;
+*** ../vim-7.3.487/src/version.c 2012-03-28 19:58:34.000000000 +0200
+--- src/version.c 2012-04-05 16:04:13.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 488,
+ /**/
+
+
+--
+I'd like to meet the man who invented sex and see what he's working on now.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.489
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.489
+Problem: CTRL-] in Insert mode does not expand abbreviation when used in a
+ mapping. (Yichao Zhou)
+Solution: Special case using CTRL-]. (Christian Brabandt)
+Files: src/getchar.c, src/edit.c
+
+
+*** ../vim-7.3.488/src/getchar.c 2012-02-05 22:05:44.000000000 +0100
+--- src/getchar.c 2012-04-05 15:54:00.000000000 +0200
+***************
+*** 4352,4359 ****
+
+ if (typebuf.tb_no_abbr_cnt) /* abbrev. are not recursive */
+ return FALSE;
+! if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0)
+! /* no remapping implies no abbreviation */
+ return FALSE;
+
+ /*
+--- 4352,4360 ----
+
+ if (typebuf.tb_no_abbr_cnt) /* abbrev. are not recursive */
+ return FALSE;
+!
+! /* no remapping implies no abbreviation, except for CTRL-] */
+! if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0 && c != Ctrl_RSB)
+ return FALSE;
+
+ /*
+*** ../vim-7.3.488/src/edit.c 2012-02-29 18:22:03.000000000 +0100
+--- src/edit.c 2012-04-05 15:57:46.000000000 +0200
+***************
+*** 1455,1467 ****
+ Insstart_blank_vcol = get_nolist_virtcol();
+ }
+
+! if (vim_iswordc(c) || !echeck_abbr(
+ #ifdef FEAT_MBYTE
+ /* Add ABBR_OFF for characters above 0x100, this is
+ * what check_abbr() expects. */
+ (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+ #endif
+! c))
+ {
+ insert_special(c, FALSE, FALSE);
+ #ifdef FEAT_RIGHTLEFT
+--- 1455,1470 ----
+ Insstart_blank_vcol = get_nolist_virtcol();
+ }
+
+! /* Insert a normal character and check for abbreviations on a
+! * special character. Let CTRL-] expand abbreviations without
+! * inserting it. */
+! if (vim_iswordc(c) || (!echeck_abbr(
+ #ifdef FEAT_MBYTE
+ /* Add ABBR_OFF for characters above 0x100, this is
+ * what check_abbr() expects. */
+ (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+ #endif
+! c) && c != Ctrl_RSB))
+ {
+ insert_special(c, FALSE, FALSE);
+ #ifdef FEAT_RIGHTLEFT
+*** ../vim-7.3.488/src/version.c 2012-04-05 16:04:58.000000000 +0200
+--- src/version.c 2012-04-05 16:06:12.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 489,
+ /**/
+
+--
+Just think of all the things we haven't thought of yet.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.490
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.490
+Problem: Member confusion in Lua interface.
+Solution: Fix it. Add luaeval(). (Taro Muraoka, Luis Carvalho)
+Files: runtime/doc/if_lua.txt, src/eval.c, src/if_lua.c,
+ src/proto/if_lua.pro
+
+
+*** ../vim-7.3.489/runtime/doc/if_lua.txt 2010-08-15 21:57:14.000000000 +0200
+--- runtime/doc/if_lua.txt 2012-04-05 16:41:35.000000000 +0200
+***************
+*** 1,4 ****
+! *if_lua.txt* For Vim version 7.3. Last change: 2010 Jul 22
+
+
+ VIM REFERENCE MANUAL by Luis Carvalho
+--- 1,4 ----
+! *if_lua.txt* For Vim version 7.3. Last change: 2012 Jan 16
+
+
+ VIM REFERENCE MANUAL by Luis Carvalho
+***************
+*** 8,15 ****
+
+ 1. Commands |lua-commands|
+ 2. The vim module |lua-vim|
+! 3. Buffer userdata |lua-buffer|
+! 4. Window userdata |lua-window|
+
+ {Vi does not have any of these commands}
+
+--- 8,18 ----
+
+ 1. Commands |lua-commands|
+ 2. The vim module |lua-vim|
+! 3. List userdata |lua-list|
+! 4. Dict userdata |lua-dict|
+! 5. Buffer userdata |lua-buffer|
+! 6. Window userdata |lua-window|
+! 7. The luaeval function |lua-luaeval|
+
+ {Vi does not have any of these commands}
+
+***************
+*** 88,98 ****
+ All these commands execute a Lua chunk from either the command line (:lua and
+ :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
+ interpreter, each chunk has its own scope and so only global variables are
+! shared between command calls. Lua default libraries "table", "string", "math",
+! and "package" are available, "io" and "debug" are not, and "os" is restricted
+! to functions "date", "clock", "time", "difftime", and "getenv". In addition,
+! Lua "print" function has its output redirected to the Vim message area, with
+! arguments separated by a white space instead of a tab.
+
+ Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
+ and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
+--- 91,99 ----
+ All these commands execute a Lua chunk from either the command line (:lua and
+ :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
+ interpreter, each chunk has its own scope and so only global variables are
+! shared between command calls. All Lua default libraries are available. In
+! addition, Lua "print" function has its output redirected to the Vim message
+! area, with arguments separated by a white space instead of a tab.
+
+ Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
+ and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
+***************
+*** 108,116 ****
+ module also includes routines for buffer, window, and current line queries,
+ Vim evaluation and command execution, and others.
+
+! vim.isbuffer(value) Returns 'true' (boolean, not string) if
+! "value" is a buffer userdata and 'false'
+! otherwise (see |lua-buffer|).
+
+ vim.buffer([arg]) If "arg" is a number, returns buffer with
+ number "arg" in the buffer list or, if "arg"
+--- 109,117 ----
+ module also includes routines for buffer, window, and current line queries,
+ Vim evaluation and command execution, and others.
+
+! vim.list() Returns an empty list (see |List|).
+!
+! vim.dict() Returns an empty dictionary (see |Dictionary|).
+
+ vim.buffer([arg]) If "arg" is a number, returns buffer with
+ number "arg" in the buffer list or, if "arg"
+***************
+*** 121,136 ****
+ 'true' returns the first buffer in the buffer
+ list or else the current buffer.
+
+- vim.iswindow(value) Returns 'true' (boolean, not string) if
+- "value" is a window userdata and
+- 'false' otherwise (see |lua-window|).
+-
+ vim.window([arg]) If "arg" is a number, returns window with
+ number "arg" or 'nil' (nil value, not string)
+ if not found. Otherwise, if "toboolean(arg)"
+ is 'true' returns the first window or else the
+ current window.
+
+ vim.command({cmd}) Executes the vim (ex-mode) command {cmd}.
+ Examples: >
+ :lua vim.command"set tw=60"
+--- 122,142 ----
+ 'true' returns the first buffer in the buffer
+ list or else the current buffer.
+
+ vim.window([arg]) If "arg" is a number, returns window with
+ number "arg" or 'nil' (nil value, not string)
+ if not found. Otherwise, if "toboolean(arg)"
+ is 'true' returns the first window or else the
+ current window.
+
++ vim.type({arg}) Returns the type of {arg}. It is equivalent to
++ Lua's "type" function, but returns "list",
++ "dict", "buffer", or "window" if {arg} is a
++ list, dictionary, buffer, or window,
++ respectively. Examples: >
++ :lua l = vim.list()
++ :lua print(type(l), vim.type(l))
++ :" userdata list
++ <
+ vim.command({cmd}) Executes the vim (ex-mode) command {cmd}.
+ Examples: >
+ :lua vim.command"set tw=60"
+***************
+*** 141,147 ****
+ Vim strings and numbers are directly converted
+ to Lua strings and numbers respectively. Vim
+ lists and dictionaries are converted to Lua
+! tables (lists become integer-keyed tables).
+ Examples: >
+ :lua tw = vim.eval"&tw"
+ :lua print(vim.eval"{'a': 'one'}".a)
+--- 147,153 ----
+ Vim strings and numbers are directly converted
+ to Lua strings and numbers respectively. Vim
+ lists and dictionaries are converted to Lua
+! userdata (see |lua-list| and |lua-dict|).
+ Examples: >
+ :lua tw = vim.eval"&tw"
+ :lua print(vim.eval"{'a': 'one'}".a)
+***************
+*** 157,163 ****
+
+
+ ==============================================================================
+! 3. Buffer userdata *lua-buffer*
+
+ Buffer userdata represent vim buffers. A buffer userdata "b" has the following
+ properties and methods:
+--- 163,234 ----
+
+
+ ==============================================================================
+! 3. List userdata *lua-list*
+!
+! List userdata represent vim lists, and the interface tries to follow closely
+! Vim's syntax for lists. Since lists are objects, changes in list references in
+! Lua are reflected in Vim and vice-versa. A list "l" has the following
+! properties and methods:
+!
+! Properties
+! ----------
+! o "#l" is the number of items in list "l", equivalent to "len(l)"
+! in Vim.
+! o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
+! To modify the k-th item, simply do "l[k] = newitem"; in
+! particular, "l[k] = nil" removes the k-th item from "l".
+! o "l()" returns an iterator for "l".
+!
+! Methods
+! -------
+! o "l:add(item)" appends "item" to the end of "l".
+! o "l:insert(item[, pos])" inserts "item" at (optional)
+! position "pos" in the list. The default value for "pos" is 0.
+!
+! Examples:
+! >
+! :let l = [1, 'item']
+! :lua l = vim.eval('l') -- same 'l'
+! :lua l:add(vim.list())
+! :lua l[0] = math.pi
+! :echo l[0] " 3.141593
+! :lua l[0] = nil -- remove first item
+! :lua l:insert(true, 1)
+! :lua print(l, #l, l[0], l[1], l[-1])
+! :lua for item in l() do print(item) end
+! <
+!
+! ==============================================================================
+! 4. Dict userdata *lua-dict*
+!
+! Similarly to list userdata, dict userdata represent vim dictionaries; since
+! dictionaries are also objects, references are kept between Lua and Vim. A dict
+! "d" has the following properties:
+!
+! Properties
+! ----------
+! o "#d" is the number of items in dict "d", equivalent to "len(d)"
+! in Vim.
+! o "d.key" or "d['key']" returns the value at entry "key" in "d".
+! To modify the entry at this key, simply do "d.key = newvalue"; in
+! particular, "d.key = nil" removes the entry from "d".
+! o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
+! Vim.
+!
+! Examples:
+! >
+! :let d = {'n':10}
+! :lua d = vim.eval('d') -- same 'd'
+! :lua print(d, d.n, #d)
+! :let d.self = d
+! :lua for k, v in d() do print(d, k, v) end
+! :lua d.x = math.pi
+! :lua d.self = nil -- remove entry
+! :echo d
+! <
+!
+! ==============================================================================
+! 5. Buffer userdata *lua-buffer*
+
+ Buffer userdata represent vim buffers. A buffer userdata "b" has the following
+ properties and methods:
+***************
+*** 209,215 ****
+ <
+
+ ==============================================================================
+! 4. Window userdata *lua-window*
+
+ Window objects represent vim windows. A window userdata "w" has the following
+ properties and methods:
+--- 280,286 ----
+ <
+
+ ==============================================================================
+! 6. Window userdata *lua-window*
+
+ Window objects represent vim windows. A window userdata "w" has the following
+ properties and methods:
+***************
+*** 241,244 ****
+ <
+
+ ==============================================================================
+! vim:tw=78:ts=8:ft=help:norl:
+--- 312,340 ----
+ <
+
+ ==============================================================================
+! 7. The luaeval function *lua-luaeval*
+!
+! The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
+! "luaeval". "luaeval" takes an expression string and an optional argument and
+! returns the result of the expression. It is semantically equivalent in Lua to:
+! >
+! local chunkheader = "local _A = select(1, ...) return "
+! function luaeval (expstr, arg)
+! local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
+! return chunk(arg) -- return typval
+! end
+! <
+! Note that "_A" receives the argument to "luaeval". Examples: >
+!
+! :echo luaeval('math.pi')
+! :lua a = vim.list():add('newlist')
+! :let a = luaeval('a')
+! :echo a[0] " 'newlist'
+! :function Rand(x,y) " random uniform between x and y
+! : return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
+! : endfunction
+! :echo Rand(1,10)
+!
+!
+! ==============================================================================
+! vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-7.3.489/src/eval.c 2012-03-28 16:49:25.000000000 +0200
+--- src/eval.c 2012-04-05 16:41:35.000000000 +0200
+***************
+*** 622,627 ****
+--- 622,630 ----
+ static void f_log __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_log10 __ARGS((typval_T *argvars, typval_T *rettv));
+ #endif
++ #ifdef FEAT_LUA
++ static void f_luaeval __ARGS((typval_T *argvars, typval_T *rettv));
++ #endif
+ static void f_map __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 6777,6782 ****
+--- 6780,6789 ----
+ /* v: vars */
+ set_ref_in_ht(&vimvarht, copyID);
+
++ #ifdef FEAT_LUA
++ set_ref_in_lua(copyID);
++ #endif
++
+ /*
+ * 2. Free lists and dictionaries that are not referenced.
+ */
+***************
+*** 7946,7951 ****
+--- 7953,7961 ----
+ {"log", 1, 1, f_log},
+ {"log10", 1, 1, f_log10},
+ #endif
++ #ifdef FEAT_LUA
++ {"luaeval", 1, 2, f_luaeval},
++ #endif
+ {"map", 2, 2, f_map},
+ {"maparg", 1, 4, f_maparg},
+ {"mapcheck", 1, 3, f_mapcheck},
+***************
+*** 13626,13631 ****
+--- 13636,13658 ----
+ }
+ #endif
+
++ #ifdef FEAT_LUA
++ /*
++ * "luaeval()" function
++ */
++ static void
++ f_luaeval(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ char_u *str;
++ char_u buf[NUMBUFLEN];
++
++ str = get_tv_string_buf(&argvars[0], buf);
++ do_luaeval(str, argvars + 1, rettv);
++ }
++ #endif
++
+ /*
+ * "map()" function
+ */
+*** ../vim-7.3.489/src/if_lua.c 2011-12-08 16:00:12.000000000 +0100
+--- src/if_lua.c 2012-04-05 16:41:35.000000000 +0200
+***************
+*** 1,4 ****
+! /* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+--- 1,4 ----
+! /* vi:set ts=8 sts=4 sw=4 noet:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+***************
+*** 21,35 ****
+--- 21,53 ----
+
+ #define LUAVIM_CHUNKNAME "vim chunk"
+ #define LUAVIM_NAME "vim"
++ #define LUAVIM_EVALNAME "luaeval"
++ #define LUAVIM_EVALHEADER "local _A=select(1,...) return "
+
+ typedef buf_T *luaV_Buffer;
+ typedef win_T *luaV_Window;
++ typedef dict_T *luaV_Dict;
++ typedef list_T *luaV_List;
+ typedef void (*msgfunc_T)(char_u *);
+
++ static const char LUAVIM_DICT[] = "dict";
++ static const char LUAVIM_LIST[] = "list";
+ static const char LUAVIM_BUFFER[] = "buffer";
+ static const char LUAVIM_WINDOW[] = "window";
+ static const char LUAVIM_FREE[] = "luaV_free";
++ static const char LUAVIM_LUAEVAL[] = "luaV_luaeval";
++ static const char LUAVIM_SETREF[] = "luaV_setref";
+
++ /* most functions are closures with a cache table as first upvalue;
++ * get/setudata manage references to vim userdata in cache table through
++ * object pointers (light userdata) */
++ #define luaV_getudata(L, v) \
++ lua_pushlightuserdata((L), (void *) (v)); \
++ lua_rawget((L), lua_upvalueindex(1))
++ #define luaV_setudata(L, v) \
++ lua_pushlightuserdata((L), (void *) (v)); \
++ lua_pushvalue((L), -2); \
++ lua_rawset((L), lua_upvalueindex(1))
+ #define luaV_getfield(L, s) \
+ lua_pushlightuserdata((L), (void *)(s)); \
+ lua_rawget((L), LUA_REGISTRYINDEX)
+***************
+*** 38,43 ****
+--- 56,70 ----
+ #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg)
+ #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg)
+
++ static luaV_List *luaV_pushlist (lua_State *L, list_T *lis);
++ static luaV_Dict *luaV_pushdict (lua_State *L, dict_T *dic);
++
++ #if LUA_VERSION_NUM <= 501
++ #define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n)
++ #define luaL_typeerror luaL_typerror
++ #else
++ #define luaV_openlib luaL_setfuncs
++ #endif
+
+ #ifdef DYNAMIC_LUA
+
+***************
+*** 54,85 ****
+ #endif
+
+ /* lauxlib */
+ #define luaL_register dll_luaL_register
+ #define luaL_typerror dll_luaL_typerror
+ #define luaL_checklstring dll_luaL_checklstring
+ #define luaL_checkinteger dll_luaL_checkinteger
+ #define luaL_optinteger dll_luaL_optinteger
+ #define luaL_checktype dll_luaL_checktype
+ #define luaL_error dll_luaL_error
+- #define luaL_loadfile dll_luaL_loadfile
+- #define luaL_loadbuffer dll_luaL_loadbuffer
+ #define luaL_newstate dll_luaL_newstate
+ #define luaL_buffinit dll_luaL_buffinit
+- #define luaL_prepbuffer dll_luaL_prepbuffer
+ #define luaL_addlstring dll_luaL_addlstring
+ #define luaL_pushresult dll_luaL_pushresult
+ /* lua */
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+ #define lua_pushvalue dll_lua_pushvalue
+ #define lua_replace dll_lua_replace
+ #define lua_isnumber dll_lua_isnumber
+ #define lua_isstring dll_lua_isstring
+ #define lua_type dll_lua_type
+ #define lua_rawequal dll_lua_rawequal
+- #define lua_tonumber dll_lua_tonumber
+- #define lua_tointeger dll_lua_tointeger
+ #define lua_toboolean dll_lua_toboolean
+ #define lua_tolstring dll_lua_tolstring
+ #define lua_touserdata dll_lua_touserdata
+--- 81,134 ----
+ #endif
+
+ /* lauxlib */
++ #if LUA_VERSION_NUM <= 501
+ #define luaL_register dll_luaL_register
++ #define luaL_prepbuffer dll_luaL_prepbuffer
++ #define luaL_openlib dll_luaL_openlib
+ #define luaL_typerror dll_luaL_typerror
++ #define luaL_loadfile dll_luaL_loadfile
++ #define luaL_loadbuffer dll_luaL_loadbuffer
++ #else
++ #define luaL_prepbuffsize dll_luaL_prepbuffsize
++ #define luaL_setfuncs dll_luaL_setfuncs
++ #define luaL_loadfilex dll_luaL_loadfilex
++ #define luaL_loadbufferx dll_luaL_loadbufferx
++ #define luaL_argerror dll_luaL_argerror
++ #endif
+ #define luaL_checklstring dll_luaL_checklstring
+ #define luaL_checkinteger dll_luaL_checkinteger
+ #define luaL_optinteger dll_luaL_optinteger
+ #define luaL_checktype dll_luaL_checktype
+ #define luaL_error dll_luaL_error
+ #define luaL_newstate dll_luaL_newstate
+ #define luaL_buffinit dll_luaL_buffinit
+ #define luaL_addlstring dll_luaL_addlstring
+ #define luaL_pushresult dll_luaL_pushresult
+ /* lua */
++ #if LUA_VERSION_NUM <= 501
++ #define lua_tonumber dll_lua_tonumber
++ #define lua_tointeger dll_lua_tointeger
++ #define lua_call dll_lua_call
++ #define lua_pcall dll_lua_pcall
++ #else
++ #define lua_tonumberx dll_lua_tonumberx
++ #define lua_tointegerx dll_lua_tointegerx
++ #define lua_callk dll_lua_callk
++ #define lua_pcallk dll_lua_pcallk
++ #define lua_getglobal dll_lua_getglobal
++ #define lua_setglobal dll_lua_setglobal
++ #define lua_typename dll_lua_typename
++ #endif
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+ #define lua_pushvalue dll_lua_pushvalue
+ #define lua_replace dll_lua_replace
++ #define lua_remove dll_lua_remove
+ #define lua_isnumber dll_lua_isnumber
+ #define lua_isstring dll_lua_isstring
+ #define lua_type dll_lua_type
+ #define lua_rawequal dll_lua_rawequal
+ #define lua_toboolean dll_lua_toboolean
+ #define lua_tolstring dll_lua_tolstring
+ #define lua_touserdata dll_lua_touserdata
+***************
+*** 94,109 ****
+ #define lua_pushlightuserdata dll_lua_pushlightuserdata
+ #define lua_getfield dll_lua_getfield
+ #define lua_rawget dll_lua_rawget
+ #define lua_createtable dll_lua_createtable
+ #define lua_newuserdata dll_lua_newuserdata
+ #define lua_getmetatable dll_lua_getmetatable
+ #define lua_setfield dll_lua_setfield
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
+- #define lua_remove dll_lua_remove
+ #define lua_setmetatable dll_lua_setmetatable
+- #define lua_call dll_lua_call
+- #define lua_pcall dll_lua_pcall
+ /* libs */
+ #define luaopen_base dll_luaopen_base
+ #define luaopen_table dll_luaopen_table
+--- 143,156 ----
+ #define lua_pushlightuserdata dll_lua_pushlightuserdata
+ #define lua_getfield dll_lua_getfield
+ #define lua_rawget dll_lua_rawget
++ #define lua_rawgeti dll_lua_rawgeti
+ #define lua_createtable dll_lua_createtable
+ #define lua_newuserdata dll_lua_newuserdata
+ #define lua_getmetatable dll_lua_getmetatable
+ #define lua_setfield dll_lua_setfield
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
+ #define lua_setmetatable dll_lua_setmetatable
+ /* libs */
+ #define luaopen_base dll_luaopen_base
+ #define luaopen_table dll_luaopen_table
+***************
+*** 116,147 ****
+ #define luaL_openlibs dll_luaL_openlibs
+
+ /* lauxlib */
+ void (*dll_luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l);
+ int (*dll_luaL_typerror) (lua_State *L, int narg, const char *tname);
+ const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
+ lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
+ lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
+ void (*dll_luaL_checktype) (lua_State *L, int narg, int t);
+ int (*dll_luaL_error) (lua_State *L, const char *fmt, ...);
+- int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
+- int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
+ lua_State *(*dll_luaL_newstate) (void);
+ void (*dll_luaL_buffinit) (lua_State *L, luaL_Buffer *B);
+- char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
+ void (*dll_luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
+ void (*dll_luaL_pushresult) (luaL_Buffer *B);
+ /* lua */
+ void (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+ void (*dll_lua_pushvalue) (lua_State *L, int idx);
+ void (*dll_lua_replace) (lua_State *L, int idx);
+ int (*dll_lua_isnumber) (lua_State *L, int idx);
+ int (*dll_lua_isstring) (lua_State *L, int idx);
+ int (*dll_lua_type) (lua_State *L, int idx);
+ int (*dll_lua_rawequal) (lua_State *L, int idx1, int idx2);
+- lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
+- lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
+ int (*dll_lua_toboolean) (lua_State *L, int idx);
+ const char *(*dll_lua_tolstring) (lua_State *L, int idx, size_t *len);
+ void *(*dll_lua_touserdata) (lua_State *L, int idx);
+--- 163,218 ----
+ #define luaL_openlibs dll_luaL_openlibs
+
+ /* lauxlib */
++ #if LUA_VERSION_NUM <= 501
+ void (*dll_luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l);
++ char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
++ void (*dll_luaL_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup);
+ int (*dll_luaL_typerror) (lua_State *L, int narg, const char *tname);
++ int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
++ int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
++ #else
++ char *(*dll_luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
++ void (*dll_luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
++ int (*dll_luaL_loadfilex) (lua_State *L, const char *filename, const char *mode);
++ int (*dll_luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
++ int (*dll_luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
++ #endif
+ const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
+ lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
+ lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
+ void (*dll_luaL_checktype) (lua_State *L, int narg, int t);
+ int (*dll_luaL_error) (lua_State *L, const char *fmt, ...);
+ lua_State *(*dll_luaL_newstate) (void);
+ void (*dll_luaL_buffinit) (lua_State *L, luaL_Buffer *B);
+ void (*dll_luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
+ void (*dll_luaL_pushresult) (luaL_Buffer *B);
+ /* lua */
++ #if LUA_VERSION_NUM <= 501
++ lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
++ lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
++ void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
++ int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
++ #else
++ lua_Number (*dll_lua_tonumberx) (lua_State *L, int idx, int *isnum);
++ lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
++ void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
++ lua_CFunction k);
++ int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
++ int ctx, lua_CFunction k);
++ void (*dll_lua_getglobal) (lua_State *L, const char *var);
++ void (*dll_lua_setglobal) (lua_State *L, const char *var);
++ const char *(*dll_lua_typename) (lua_State *L, int tp);
++ #endif
+ void (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+ void (*dll_lua_pushvalue) (lua_State *L, int idx);
+ void (*dll_lua_replace) (lua_State *L, int idx);
++ void (*dll_lua_remove) (lua_State *L, int idx);
+ int (*dll_lua_isnumber) (lua_State *L, int idx);
+ int (*dll_lua_isstring) (lua_State *L, int idx);
+ int (*dll_lua_type) (lua_State *L, int idx);
+ int (*dll_lua_rawequal) (lua_State *L, int idx1, int idx2);
+ int (*dll_lua_toboolean) (lua_State *L, int idx);
+ const char *(*dll_lua_tolstring) (lua_State *L, int idx, size_t *len);
+ void *(*dll_lua_touserdata) (lua_State *L, int idx);
+***************
+*** 156,171 ****
+ void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
+ void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawget) (lua_State *L, int idx);
+ void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
+ void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
+ int (*dll_lua_getmetatable) (lua_State *L, int objindex);
+ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
+- void (*dll_lua_remove) (lua_State *L, int idx);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
+- void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
+- int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
+ /* libs */
+ int (*dll_luaopen_base) (lua_State *L);
+ int (*dll_luaopen_table) (lua_State *L);
+--- 227,240 ----
+ void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
+ void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawget) (lua_State *L, int idx);
++ void (*dll_lua_rawgeti) (lua_State *L, int idx, int n);
+ void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
+ void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
+ int (*dll_lua_getmetatable) (lua_State *L, int objindex);
+ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
+ /* libs */
+ int (*dll_luaopen_base) (lua_State *L);
+ int (*dll_luaopen_table) (lua_State *L);
+***************
+*** 185,216 ****
+
+ static const luaV_Reg luaV_dll[] = {
+ /* lauxlib */
+ {"luaL_register", (luaV_function) &dll_luaL_register},
+ {"luaL_typerror", (luaV_function) &dll_luaL_typerror},
+ {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
+ {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
+ {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
+ {"luaL_checktype", (luaV_function) &dll_luaL_checktype},
+ {"luaL_error", (luaV_function) &dll_luaL_error},
+- {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
+- {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
+ {"luaL_newstate", (luaV_function) &dll_luaL_newstate},
+ {"luaL_buffinit", (luaV_function) &dll_luaL_buffinit},
+- {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
+ {"luaL_addlstring", (luaV_function) &dll_luaL_addlstring},
+ {"luaL_pushresult", (luaV_function) &dll_luaL_pushresult},
+ /* lua */
+ {"lua_close", (luaV_function) &dll_lua_close},
+ {"lua_gettop", (luaV_function) &dll_lua_gettop},
+ {"lua_settop", (luaV_function) &dll_lua_settop},
+ {"lua_pushvalue", (luaV_function) &dll_lua_pushvalue},
+ {"lua_replace", (luaV_function) &dll_lua_replace},
+ {"lua_isnumber", (luaV_function) &dll_lua_isnumber},
+ {"lua_isstring", (luaV_function) &dll_lua_isstring},
+ {"lua_type", (luaV_function) &dll_lua_type},
+ {"lua_rawequal", (luaV_function) &dll_lua_rawequal},
+- {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
+- {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
+ {"lua_toboolean", (luaV_function) &dll_lua_toboolean},
+ {"lua_tolstring", (luaV_function) &dll_lua_tolstring},
+ {"lua_touserdata", (luaV_function) &dll_lua_touserdata},
+--- 254,307 ----
+
+ static const luaV_Reg luaV_dll[] = {
+ /* lauxlib */
++ #if LUA_VERSION_NUM <= 501
+ {"luaL_register", (luaV_function) &dll_luaL_register},
++ {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
++ {"luaL_openlib", (luaV_function) &dll_luaL_openlib},
+ {"luaL_typerror", (luaV_function) &dll_luaL_typerror},
++ {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
++ {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
++ #else
++ {"luaL_prepbuffsize", (luaV_function) &dll_luaL_prepbuffsize},
++ {"luaL_setfuncs", (luaV_function) &dll_luaL_setfuncs},
++ {"luaL_loadfilex", (luaV_function) &dll_luaL_loadfilex},
++ {"luaL_loadbufferx", (luaV_function) &dll_luaL_loadbufferx},
++ {"luaL_argerror", (luaV_function) &dll_luaL_argerror},
++ #endif
+ {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
+ {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
+ {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
+ {"luaL_checktype", (luaV_function) &dll_luaL_checktype},
+ {"luaL_error", (luaV_function) &dll_luaL_error},
+ {"luaL_newstate", (luaV_function) &dll_luaL_newstate},
+ {"luaL_buffinit", (luaV_function) &dll_luaL_buffinit},
+ {"luaL_addlstring", (luaV_function) &dll_luaL_addlstring},
+ {"luaL_pushresult", (luaV_function) &dll_luaL_pushresult},
+ /* lua */
++ #if LUA_VERSION_NUM <= 501
++ {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
++ {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
++ {"lua_call", (luaV_function) &dll_lua_call},
++ {"lua_pcall", (luaV_function) &dll_lua_pcall},
++ #else
++ {"lua_tonumberx", (luaV_function) &dll_lua_tonumberx},
++ {"lua_tointegerx", (luaV_function) &dll_lua_tointegerx},
++ {"lua_callk", (luaV_function) &dll_lua_callk},
++ {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
++ {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
++ {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
++ {"lua_typename", (luaV_function) &dll_lua_typename},
++ #endif
+ {"lua_close", (luaV_function) &dll_lua_close},
+ {"lua_gettop", (luaV_function) &dll_lua_gettop},
+ {"lua_settop", (luaV_function) &dll_lua_settop},
+ {"lua_pushvalue", (luaV_function) &dll_lua_pushvalue},
+ {"lua_replace", (luaV_function) &dll_lua_replace},
++ {"lua_remove", (luaV_function) &dll_lua_remove},
+ {"lua_isnumber", (luaV_function) &dll_lua_isnumber},
+ {"lua_isstring", (luaV_function) &dll_lua_isstring},
+ {"lua_type", (luaV_function) &dll_lua_type},
+ {"lua_rawequal", (luaV_function) &dll_lua_rawequal},
+ {"lua_toboolean", (luaV_function) &dll_lua_toboolean},
+ {"lua_tolstring", (luaV_function) &dll_lua_tolstring},
+ {"lua_touserdata", (luaV_function) &dll_lua_touserdata},
+***************
+*** 225,240 ****
+ {"lua_pushlightuserdata", (luaV_function) &dll_lua_pushlightuserdata},
+ {"lua_getfield", (luaV_function) &dll_lua_getfield},
+ {"lua_rawget", (luaV_function) &dll_lua_rawget},
+ {"lua_createtable", (luaV_function) &dll_lua_createtable},
+ {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
+ {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
+ {"lua_setfield", (luaV_function) &dll_lua_setfield},
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+ {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
+- {"lua_remove", (luaV_function) &dll_lua_remove},
+ {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
+- {"lua_call", (luaV_function) &dll_lua_call},
+- {"lua_pcall", (luaV_function) &dll_lua_pcall},
+ /* libs */
+ {"luaopen_base", (luaV_function) &dll_luaopen_base},
+ {"luaopen_table", (luaV_function) &dll_luaopen_table},
+--- 316,329 ----
+ {"lua_pushlightuserdata", (luaV_function) &dll_lua_pushlightuserdata},
+ {"lua_getfield", (luaV_function) &dll_lua_getfield},
+ {"lua_rawget", (luaV_function) &dll_lua_rawget},
++ {"lua_rawgeti", (luaV_function) &dll_lua_rawgeti},
+ {"lua_createtable", (luaV_function) &dll_lua_createtable},
+ {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
+ {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
+ {"lua_setfield", (luaV_function) &dll_lua_setfield},
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+ {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
+ {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
+ /* libs */
+ {"luaopen_base", (luaV_function) &dll_luaopen_base},
+ {"luaopen_table", (luaV_function) &dll_luaopen_table},
+***************
+*** 294,299 ****
+--- 383,398 ----
+
+ #endif /* DYNAMIC_LUA */
+
++ #if LUA_VERSION_NUM > 501
++ static int
++ luaL_typeerror (lua_State *L, int narg, const char *tname)
++ {
++ const char *msg = lua_pushfstring(L, "%s expected, got %s",
++ tname, luaL_typename(L, narg));
++ return luaL_argerror(L, narg, msg);
++ }
++ #endif
++
+
+ /* ======= Internal ======= */
+
+***************
+*** 327,343 ****
+ }
+
+ static void *
+ luaV_checkudata(lua_State *L, int ud, const char *tname)
+ {
+ void *p = luaV_toudata(L, ud, tname);
+! if (p == NULL) luaL_typerror(L, ud, tname);
+ return p;
+ }
+
+ static void
+ luaV_pushtypval(lua_State *L, typval_T *tv)
+ {
+! if (tv == NULL) luaL_error(L, "null type");
+ switch (tv->v_type)
+ {
+ case VAR_STRING:
+--- 426,460 ----
+ }
+
+ static void *
++ luaV_checkcache(lua_State *L, void *p)
++ {
++ luaV_getudata(L, p);
++ if (lua_isnil(L, -1)) luaL_error(L, "invalid object");
++ lua_pop(L, 1);
++ return p;
++ }
++
++ #define luaV_unbox(L,luatyp,ud) (*((luatyp *) lua_touserdata((L),(ud))))
++
++ #define luaV_checkvalid(L,luatyp,ud) \
++ luaV_checkcache((L), (void *) luaV_unbox((L),luatyp,(ud)))
++
++ static void *
+ luaV_checkudata(lua_State *L, int ud, const char *tname)
+ {
+ void *p = luaV_toudata(L, ud, tname);
+! if (p == NULL) luaL_typeerror(L, ud, tname);
+ return p;
+ }
+
+ static void
+ luaV_pushtypval(lua_State *L, typval_T *tv)
+ {
+! if (tv == NULL)
+! {
+! lua_pushnil(L);
+! return;
+! }
+ switch (tv->v_type)
+ {
+ case VAR_STRING:
+***************
+*** 351,418 ****
+ lua_pushnumber(L, (lua_Number) tv->vval.v_float);
+ break;
+ #endif
+! case VAR_LIST: {
+! list_T *l = tv->vval.v_list;
+
+! if (l != NULL)
+ {
+! /* check cache */
+! lua_pushlightuserdata(L, (void *) l);
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (lua_isnil(L, -1)) /* not interned? */
+ {
+! listitem_T *li;
+! int n = 0;
+! lua_pop(L, 1); /* nil */
+! lua_newtable(L);
+! lua_pushlightuserdata(L, (void *) l);
+! lua_pushvalue(L, -2);
+! lua_rawset(L, LUA_ENVIRONINDEX);
+! for (li = l->lv_first; li != NULL; li = li->li_next)
+! {
+! luaV_pushtypval(L, &li->li_tv);
+! lua_rawseti(L, -2, ++n);
+! }
+ }
+! }
+! else lua_pushnil(L);
+! break;
+! }
+! case VAR_DICT: {
+! dict_T *d = tv->vval.v_dict;
+!
+! if (d != NULL)
+! {
+! /* check cache */
+! lua_pushlightuserdata(L, (void *) d);
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (lua_isnil(L, -1)) /* not interned? */
+ {
+! hashtab_T *ht = &d->dv_hashtab;
+! hashitem_T *hi;
+! int n = ht->ht_used; /* remaining items */
+! lua_pop(L, 1); /* nil */
+! lua_newtable(L);
+! lua_pushlightuserdata(L, (void *) d);
+! lua_pushvalue(L, -2);
+! lua_rawset(L, LUA_ENVIRONINDEX);
+! for (hi = ht->ht_array; n > 0; hi++)
+! {
+! if (!HASHITEM_EMPTY(hi))
+! {
+! dictitem_T *di = dict_lookup(hi);
+! luaV_pushtypval(L, &di->di_tv);
+! lua_setfield(L, -2, (char *) hi->hi_key);
+! n--;
+! }
+! }
+ }
+ }
+- else lua_pushnil(L);
+ break;
+ }
+ default:
+! luaL_error(L, "invalid type");
+ }
+ }
+
+--- 468,537 ----
+ lua_pushnumber(L, (lua_Number) tv->vval.v_float);
+ break;
+ #endif
+! case VAR_LIST:
+! luaV_pushlist(L, tv->vval.v_list);
+! break;
+! case VAR_DICT:
+! luaV_pushdict(L, tv->vval.v_dict);
+! break;
+! default:
+! lua_pushnil(L);
+! }
+! }
+
+! /* converts lua value at 'pos' to typval 'tv' */
+! static void
+! luaV_totypval (lua_State *L, int pos, typval_T *tv)
+! {
+! switch(lua_type(L, pos)) {
+! case LUA_TBOOLEAN:
+! tv->v_type = VAR_NUMBER;
+! tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos);
+! break;
+! case LUA_TSTRING:
+! tv->v_type = VAR_STRING;
+! tv->vval.v_string = vim_strsave((char_u *) lua_tostring(L, pos));
+! break;
+! case LUA_TNUMBER:
+! #ifdef FEAT_FLOAT
+! tv->v_type = VAR_FLOAT;
+! tv->vval.v_float = (float_T) lua_tonumber(L, pos);
+! #else
+! tv->v_type = VAR_NUMBER;
+! tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos);
+! #endif
+! break;
+! case LUA_TUSERDATA: {
+! void *p = lua_touserdata(L, pos);
+! if (lua_getmetatable(L, pos)) /* has metatable? */
+ {
+! /* check list */
+! luaV_getfield(L, LUAVIM_LIST);
+! if (lua_rawequal(L, -1, -2))
+ {
+! tv->v_type = VAR_LIST;
+! tv->vval.v_list = *((luaV_List *) p);
+! ++tv->vval.v_list->lv_refcount;
+! lua_pop(L, 2); /* MTs */
+! return;
+ }
+! /* check dict */
+! luaV_getfield(L, LUAVIM_DICT);
+! if (lua_rawequal(L, -1, -3))
+ {
+! tv->v_type = VAR_DICT;
+! tv->vval.v_dict = *((luaV_Dict *) p);
+! ++tv->vval.v_dict->dv_refcount;
+! lua_pop(L, 3); /* MTs */
+! return;
+ }
++ lua_pop(L, 3); /* MTs */
+ }
+ break;
+ }
+ default:
+! tv->v_type = VAR_NUMBER;
+! tv->vval.v_number = 0;
+ }
+ }
+
+***************
+*** 481,569 ****
+ lua_pop(L, 2); /* original and modified strings */
+ }
+
+
+! /* ======= Buffer type ======= */
+
+! static luaV_Buffer *
+! luaV_newbuffer(lua_State *L, buf_T *buf)
+ {
+! luaV_Buffer *b = (luaV_Buffer *) lua_newuserdata(L, sizeof(luaV_Buffer));
+! *b = buf;
+! lua_pushlightuserdata(L, (void *) buf);
+! lua_pushvalue(L, -2);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[buf] = udata */
+! /* to avoid GC, store as key in env */
+! lua_pushvalue(L, -1);
+! lua_pushboolean(L, 1);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
+! /* set metatable */
+! luaV_getfield(L, LUAVIM_BUFFER);
+ lua_setmetatable(L, -2);
+! return b;
+ }
+
+! static luaV_Buffer *
+! luaV_pushbuffer (lua_State *L, buf_T *buf)
+ {
+! luaV_Buffer *b = NULL;
+! if (buf == NULL)
+! lua_pushnil(L);
+! else {
+! lua_pushlightuserdata(L, (void *) buf);
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (lua_isnil(L, -1)) /* not interned? */
+ {
+! lua_pop(L, 1);
+! b = luaV_newbuffer(L, buf);
+ }
+ else
+! b = (luaV_Buffer *) lua_touserdata(L, -1);
+ }
+! return b;
+ }
+
+! /* Buffer metamethods */
+
+ static int
+! luaV_buffer_tostring(lua_State *L)
+ {
+! lua_pushfstring(L, "%s: %p", LUAVIM_BUFFER, lua_touserdata(L, 1));
+ return 1;
+ }
+
+ static int
+ luaV_buffer_len(lua_State *L)
+ {
+! luaV_Buffer *b = lua_touserdata(L, 1);
+! lua_pushinteger(L, (*b)->b_ml.ml_line_count);
+ return 1;
+ }
+
+ static int
+ luaV_buffer_call(lua_State *L)
+ {
+! luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+ lua_settop(L, 1);
+! set_curbuf(*b, DOBUF_SPLIT);
+ return 1;
+ }
+
+ static int
+ luaV_buffer_index(lua_State *L)
+ {
+! luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+ linenr_T n = (linenr_T) lua_tointeger(L, 2);
+! if (n > 0 && n <= (*b)->b_ml.ml_line_count)
+! luaV_pushline(L, *b, n);
+ else if (lua_isstring(L, 2))
+ {
+ const char *s = lua_tostring(L, 2);
+ if (strncmp(s, "name", 4) == 0)
+! lua_pushstring(L, (char *) (*b)->b_sfname);
+ else if (strncmp(s, "fname", 5) == 0)
+! lua_pushstring(L, (char *) (*b)->b_ffname);
+ else if (strncmp(s, "number", 6) == 0)
+! lua_pushinteger(L, (*b)->b_fnum);
+ /* methods */
+ else if (strncmp(s, "insert", 6) == 0
+ || strncmp(s, "next", 4) == 0
+--- 600,1107 ----
+ lua_pop(L, 2); /* original and modified strings */
+ }
+
++ #define luaV_newtype(typ,tname,luatyp,luatname) \
++ static luatyp * \
++ luaV_new##tname (lua_State *L, typ *obj) \
++ { \
++ luatyp *o = (luatyp *) lua_newuserdata(L, sizeof(luatyp)); \
++ *o = obj; \
++ luaV_setudata(L, obj); /* cache[obj] = udata */ \
++ luaV_getfield(L, luatname); \
++ lua_setmetatable(L, -2); \
++ return o; \
++ }
++
++ #define luaV_pushtype(typ,tname,luatyp) \
++ static luatyp * \
++ luaV_push##tname (lua_State *L, typ *obj) \
++ { \
++ luatyp *o = NULL; \
++ if (obj == NULL) \
++ lua_pushnil(L); \
++ else { \
++ luaV_getudata(L, obj); \
++ if (lua_isnil(L, -1)) /* not interned? */ \
++ { \
++ lua_pop(L, 1); \
++ o = luaV_new##tname(L, obj); \
++ } \
++ else \
++ o = (luatyp *) lua_touserdata(L, -1); \
++ } \
++ return o; \
++ }
++
++ #define luaV_type_tostring(tname,luatname) \
++ static int \
++ luaV_##tname##_tostring (lua_State *L) \
++ { \
++ lua_pushfstring(L, "%s: %p", luatname, lua_touserdata(L, 1)); \
++ return 1; \
++ }
++
+
+! /* adapted from eval.c */
+!
+! #define listitem_alloc() (listitem_T *)alloc(sizeof(listitem_T))
+!
+! static listitem_T *
+! list_find (list_T *l, long n)
+! {
+! listitem_T *li;
+! if (l == NULL || n < -l->lv_len || n >= l->lv_len)
+! return NULL;
+! if (n < 0) /* search backward? */
+! for (li = l->lv_last; n < -1; li = li->li_prev)
+! n++;
+! else /* search forward */
+! for (li = l->lv_first; n > 0; li = li->li_next)
+! n--;
+! return li;
+! }
+
+! static void
+! list_remove (list_T *l, listitem_T *li)
+ {
+! listwatch_T *lw;
+! --l->lv_len;
+! /* fix watchers */
+! for (lw = l->lv_watch; lw != NULL; lw = lw->lw_next)
+! if (lw->lw_item == li)
+! lw->lw_item = li->li_next;
+! /* fix list pointers */
+! if (li->li_next == NULL) /* last? */
+! l->lv_last = li->li_prev;
+! else
+! li->li_next->li_prev = li->li_prev;
+! if (li->li_prev == NULL) /* first? */
+! l->lv_first = li->li_next;
+! else
+! li->li_prev->li_next = li->li_next;
+! l->lv_idx_item = NULL;
+! }
+!
+! static void
+! list_append(list_T *l, listitem_T *item)
+! {
+! if (l->lv_last == NULL) /* empty list? */
+! l->lv_first = item;
+! else
+! l->lv_last->li_next = item;
+! item->li_prev = l->lv_last;
+! item->li_next = NULL;
+! l->lv_last = item;
+! ++l->lv_len;
+! }
+!
+! static int
+! list_insert_tv(list_T *l, typval_T *tv, listitem_T *item)
+! {
+! listitem_T *ni = listitem_alloc();
+!
+! if (ni == NULL)
+! return FAIL;
+! copy_tv(tv, &ni->li_tv);
+! if (item == NULL)
+! list_append(l, ni);
+! else
+! {
+! ni->li_prev = item->li_prev;
+! ni->li_next = item;
+! if (item->li_prev == NULL)
+! {
+! l->lv_first = ni;
+! ++l->lv_idx;
+! }
+! else
+! {
+! item->li_prev->li_next = ni;
+! l->lv_idx_item = NULL;
+! }
+! item->li_prev = ni;
+! ++l->lv_len;
+! }
+! return OK;
+! }
+!
+! /* set references */
+!
+! static void set_ref_in_tv (typval_T *tv, int copyID);
+!
+! static void
+! set_ref_in_dict(dict_T *d, int copyID)
+! {
+! hashtab_T *ht = &d->dv_hashtab;
+! int n = ht->ht_used;
+! hashitem_T *hi;
+! for (hi = ht->ht_array; n > 0; ++hi)
+! if (!HASHITEM_EMPTY(hi))
+! {
+! dictitem_T *di = dict_lookup(hi);
+! set_ref_in_tv(&di->di_tv, copyID);
+! --n;
+! }
+! }
+!
+! static void
+! set_ref_in_list(list_T *l, int copyID)
+! {
+! listitem_T *li;
+! for (li = l->lv_first; li != NULL; li = li->li_next)
+! set_ref_in_tv(&li->li_tv, copyID);
+! }
+!
+! static void
+! set_ref_in_tv(typval_T *tv, int copyID)
+! {
+! if (tv->v_type == VAR_LIST)
+! {
+! list_T *l = tv->vval.v_list;
+! if (l != NULL && l->lv_copyID != copyID)
+! {
+! l->lv_copyID = copyID;
+! set_ref_in_list(l, copyID);
+! }
+! }
+! else if (tv->v_type == VAR_DICT)
+! {
+! dict_T *d = tv->vval.v_dict;
+! if (d != NULL && d->dv_copyID != copyID)
+! {
+! d->dv_copyID = copyID;
+! set_ref_in_dict(d, copyID);
+! }
+! }
+! }
+!
+!
+! /* ======= List type ======= */
+!
+! static luaV_List *
+! luaV_newlist (lua_State *L, list_T *lis)
+! {
+! luaV_List *l = (luaV_List *) lua_newuserdata(L, sizeof(luaV_List));
+! *l = lis;
+! lis->lv_refcount++; /* reference in Lua */
+! luaV_setudata(L, lis); /* cache[lis] = udata */
+! luaV_getfield(L, LUAVIM_LIST);
+ lua_setmetatable(L, -2);
+! return l;
+ }
+
+! luaV_pushtype(list_T, list, luaV_List)
+! luaV_type_tostring(list, LUAVIM_LIST)
+!
+! static int
+! luaV_list_gc (lua_State *L)
+ {
+! list_unref(luaV_unbox(L, luaV_List, 1));
+! return 0;
+! }
+!
+! static int
+! luaV_list_len (lua_State *L)
+! {
+! list_T *l = luaV_unbox(L, luaV_List, 1);
+! lua_pushinteger(L, (l == NULL) ? 0 : (int) l->lv_len);
+! return 1;
+! }
+!
+! static int
+! luaV_list_iter (lua_State *L)
+! {
+! listitem_T *li = (listitem_T *) lua_touserdata(L, lua_upvalueindex(2));
+! if (li == NULL) return 0;
+! luaV_pushtypval(L, &li->li_tv);
+! lua_pushlightuserdata(L, (void *) li->li_next);
+! lua_replace(L, lua_upvalueindex(2));
+! return 1;
+! }
+!
+! static int
+! luaV_list_call (lua_State *L)
+! {
+! list_T *l = luaV_unbox(L, luaV_List, 1);
+! lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
+! lua_pushlightuserdata(L, (void *) l->lv_first);
+! lua_pushcclosure(L, luaV_list_iter, 2);
+! return 1;
+! }
+!
+! static int
+! luaV_list_index (lua_State *L)
+! {
+! list_T *l = luaV_unbox(L, luaV_List, 1);
+! if (lua_isnumber(L, 2)) /* list item? */
+! {
+! listitem_T *li = list_find(l, (long) luaL_checkinteger(L, 2));
+! if (li == NULL)
+! lua_pushnil(L);
+! else
+! luaV_pushtypval(L, &li->li_tv);
+! }
+! else if (lua_isstring(L, 2)) /* method? */
+! {
+! const char *s = lua_tostring(L, 2);
+! if (strncmp(s, "add", 3) == 0
+! || strncmp(s, "insert", 6) == 0
+! || strncmp(s, "extend", 6) == 0)
+ {
+! lua_getmetatable(L, 1);
+! lua_getfield(L, -1, s);
+ }
+ else
+! lua_pushnil(L);
+ }
+! else
+! lua_pushnil(L);
+! return 1;
+ }
+
+! static int
+! luaV_list_newindex (lua_State *L)
+! {
+! list_T *l = luaV_unbox(L, luaV_List, 1);
+! long n = (long) luaL_checkinteger(L, 2);
+! listitem_T *li;
+! if (l->lv_lock)
+! luaL_error(L, "list is locked");
+! li = list_find(l, n);
+! if (li == NULL) return 0;
+! if (lua_isnil(L, 3)) /* remove? */
+! {
+! list_remove(l, li);
+! clear_tv(&li->li_tv);
+! vim_free(li);
+! }
+! else
+! {
+! typval_T v;
+! luaV_totypval(L, 3, &v);
+! clear_tv(&li->li_tv);
+! copy_tv(&v, &li->li_tv);
+! }
+! return 0;
+! }
+
+ static int
+! luaV_list_add (lua_State *L)
+ {
+! luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
+! list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
+! listitem_T *li;
+! if (l->lv_lock)
+! luaL_error(L, "list is locked");
+! li = listitem_alloc();
+! if (li != NULL)
+! {
+! typval_T v;
+! lua_settop(L, 2);
+! luaV_totypval(L, 2, &v);
+! copy_tv(&v, &li->li_tv);
+! list_append(l, li);
+! }
+! lua_settop(L, 1);
+ return 1;
+ }
+
+ static int
++ luaV_list_insert (lua_State *L)
++ {
++ luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
++ list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
++ long pos = luaL_optlong(L, 3, 0);
++ listitem_T *li = NULL;
++ typval_T v;
++ if (l->lv_lock)
++ luaL_error(L, "list is locked");
++ if (pos < l->lv_len)
++ {
++ li = list_find(l, pos);
++ if (li == NULL)
++ luaL_error(L, "invalid position");
++ }
++ lua_settop(L, 2);
++ luaV_totypval(L, 2, &v);
++ list_insert_tv(l, &v, li);
++ lua_settop(L, 1);
++ return 1;
++ }
++
++ static const luaL_Reg luaV_List_mt[] = {
++ {"__tostring", luaV_list_tostring},
++ {"__gc", luaV_list_gc},
++ {"__len", luaV_list_len},
++ {"__call", luaV_list_call},
++ {"__index", luaV_list_index},
++ {"__newindex", luaV_list_newindex},
++ {"add", luaV_list_add},
++ {"insert", luaV_list_insert},
++ {NULL, NULL}
++ };
++
++
++ /* ======= Dict type ======= */
++
++ static luaV_Dict *
++ luaV_newdict (lua_State *L, dict_T *dic)
++ {
++ luaV_Dict *d = (luaV_Dict *) lua_newuserdata(L, sizeof(luaV_Dict));
++ *d = dic;
++ dic->dv_refcount++; /* reference in Lua */
++ luaV_setudata(L, dic); /* cache[dic] = udata */
++ luaV_getfield(L, LUAVIM_DICT);
++ lua_setmetatable(L, -2);
++ return d;
++ }
++
++ luaV_pushtype(dict_T, dict, luaV_Dict)
++ luaV_type_tostring(dict, LUAVIM_DICT)
++
++ static int
++ luaV_dict_gc (lua_State *L)
++ {
++ dict_unref(luaV_unbox(L, luaV_Dict, 1));
++ return 0;
++ }
++
++ static int
++ luaV_dict_len (lua_State *L)
++ {
++ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++ lua_pushinteger(L, (d == NULL) ? 0 : (int) d->dv_hashtab.ht_used);
++ return 1;
++ }
++
++ static int
++ luaV_dict_iter (lua_State *L)
++ {
++ hashitem_T *hi = (hashitem_T *) lua_touserdata(L, lua_upvalueindex(2));
++ int n = lua_tointeger(L, lua_upvalueindex(3));
++ dictitem_T *di;
++ if (n <= 0) return 0;
++ while (HASHITEM_EMPTY(hi)) hi++;
++ di = dict_lookup(hi);
++ lua_pushstring(L, (char *) hi->hi_key);
++ luaV_pushtypval(L, &di->di_tv);
++ lua_pushlightuserdata(L, (void *) (hi + 1));
++ lua_replace(L, lua_upvalueindex(2));
++ lua_pushinteger(L, n - 1);
++ lua_replace(L, lua_upvalueindex(3));
++ return 2;
++ }
++
++ static int
++ luaV_dict_call (lua_State *L)
++ {
++ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++ hashtab_T *ht = &d->dv_hashtab;
++ lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
++ lua_pushlightuserdata(L, (void *) ht->ht_array);
++ lua_pushinteger(L, ht->ht_used); /* # remaining items */
++ lua_pushcclosure(L, luaV_dict_iter, 3);
++ return 1;
++ }
++
++ static int
++ luaV_dict_index (lua_State *L)
++ {
++ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++ char_u *key = (char_u *) luaL_checkstring(L, 2);
++ dictitem_T *di = dict_find(d, key, -1);
++ if (di == NULL)
++ lua_pushnil(L);
++ else
++ luaV_pushtypval(L, &di->di_tv);
++ return 1;
++ }
++
++ static int
++ luaV_dict_newindex (lua_State *L)
++ {
++ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++ char_u *key = (char_u *) luaL_checkstring(L, 2);
++ dictitem_T *di;
++ if (d->dv_lock)
++ luaL_error(L, "dict is locked");
++ di = dict_find(d, key, -1);
++ if (di == NULL) /* non-existing key? */
++ {
++ if (lua_isnil(L, 3)) return 0;
++ di = dictitem_alloc(key);
++ if (di == NULL) return 0;
++ if (dict_add(d, di) == FAIL)
++ {
++ vim_free(di);
++ return 0;
++ }
++ }
++ else
++ clear_tv(&di->di_tv);
++ if (lua_isnil(L, 3)) /* remove? */
++ {
++ hashitem_T *hi = hash_find(&d->dv_hashtab, di->di_key);
++ hash_remove(&d->dv_hashtab, hi);
++ dictitem_free(di);
++ }
++ else {
++ typval_T v;
++ luaV_totypval(L, 3, &v);
++ copy_tv(&v, &di->di_tv);
++ }
++ return 0;
++ }
++
++ static const luaL_Reg luaV_Dict_mt[] = {
++ {"__tostring", luaV_dict_tostring},
++ {"__gc", luaV_dict_gc},
++ {"__len", luaV_dict_len},
++ {"__call", luaV_dict_call},
++ {"__index", luaV_dict_index},
++ {"__newindex", luaV_dict_newindex},
++ {NULL, NULL}
++ };
++
++
++ /* ======= Buffer type ======= */
++
++ luaV_newtype(buf_T, buffer, luaV_Buffer, LUAVIM_BUFFER)
++ luaV_pushtype(buf_T, buffer, luaV_Buffer)
++ luaV_type_tostring(buffer, LUAVIM_BUFFER)
++
++ static int
+ luaV_buffer_len(lua_State *L)
+ {
+! buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+! lua_pushinteger(L, b->b_ml.ml_line_count);
+ return 1;
+ }
+
+ static int
+ luaV_buffer_call(lua_State *L)
+ {
+! buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+ lua_settop(L, 1);
+! set_curbuf(b, DOBUF_SPLIT);
+ return 1;
+ }
+
+ static int
+ luaV_buffer_index(lua_State *L)
+ {
+! buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+ linenr_T n = (linenr_T) lua_tointeger(L, 2);
+! if (n > 0 && n <= b->b_ml.ml_line_count)
+! luaV_pushline(L, b, n);
+ else if (lua_isstring(L, 2))
+ {
+ const char *s = lua_tostring(L, 2);
+ if (strncmp(s, "name", 4) == 0)
+! lua_pushstring(L, (char *) b->b_sfname);
+ else if (strncmp(s, "fname", 5) == 0)
+! lua_pushstring(L, (char *) b->b_ffname);
+ else if (strncmp(s, "number", 6) == 0)
+! lua_pushinteger(L, b->b_fnum);
+ /* methods */
+ else if (strncmp(s, "insert", 6) == 0
+ || strncmp(s, "next", 4) == 0
+***************
+*** 584,600 ****
+ static int
+ luaV_buffer_newindex(lua_State *L)
+ {
+! luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+ linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! if (n < 1 || n > (*b)->b_ml.ml_line_count)
+ luaL_error(L, "invalid line number");
+ if (lua_isnil(L, 3)) /* delete line */
+ {
+ buf_T *buf = curbuf;
+! curbuf = *b;
+ if (u_savedel(n, 1L) == FAIL)
+ {
+ curbuf = buf;
+--- 1122,1138 ----
+ static int
+ luaV_buffer_newindex(lua_State *L)
+ {
+! buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+ linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! if (n < 1 || n > b->b_ml.ml_line_count)
+ luaL_error(L, "invalid line number");
+ if (lua_isnil(L, 3)) /* delete line */
+ {
+ buf_T *buf = curbuf;
+! curbuf = b;
+ if (u_savedel(n, 1L) == FAIL)
+ {
+ curbuf = buf;
+***************
+*** 607,613 ****
+ }
+ else {
+ deleted_lines_mark(n, 1L);
+! if (*b == curwin->w_buffer) /* fix cursor in current window? */
+ {
+ if (curwin->w_cursor.lnum >= n)
+ {
+--- 1145,1151 ----
+ }
+ else {
+ deleted_lines_mark(n, 1L);
+! if (b == curwin->w_buffer) /* fix cursor in current window? */
+ {
+ if (curwin->w_cursor.lnum >= n)
+ {
+***************
+*** 627,633 ****
+ else if (lua_isstring(L, 3)) /* update line */
+ {
+ buf_T *buf = curbuf;
+! curbuf = *b;
+ if (u_savesub(n) == FAIL)
+ {
+ curbuf = buf;
+--- 1165,1171 ----
+ else if (lua_isstring(L, 3)) /* update line */
+ {
+ buf_T *buf = curbuf;
+! curbuf = b;
+ if (u_savesub(n) == FAIL)
+ {
+ curbuf = buf;
+***************
+*** 640,646 ****
+ }
+ else changed_bytes(n, 0);
+ curbuf = buf;
+! if (*b == curwin->w_buffer)
+ check_cursor_col();
+ }
+ else
+--- 1178,1184 ----
+ }
+ else changed_bytes(n, 0);
+ curbuf = buf;
+! if (b == curwin->w_buffer)
+ check_cursor_col();
+ }
+ else
+***************
+*** 651,658 ****
+ static int
+ luaV_buffer_insert(lua_State *L)
+ {
+! luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! linenr_T last = (*b)->b_ml.ml_line_count;
+ linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
+ buf_T *buf;
+ luaL_checktype(L, 2, LUA_TSTRING);
+--- 1189,1197 ----
+ static int
+ luaV_buffer_insert(lua_State *L)
+ {
+! luaV_Buffer *lb = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! buf_T *b = (buf_T *) luaV_checkcache(L, (void *) *lb);
+! linenr_T last = b->b_ml.ml_line_count;
+ linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
+ buf_T *buf;
+ luaL_checktype(L, 2, LUA_TSTRING);
+***************
+*** 664,670 ****
+ if (n > last) n = last;
+ /* insert */
+ buf = curbuf;
+! curbuf = *b;
+ if (u_save(n, n + 1) == FAIL)
+ {
+ curbuf = buf;
+--- 1203,1209 ----
+ if (n > last) n = last;
+ /* insert */
+ buf = curbuf;
+! curbuf = b;
+ if (u_save(n, n + 1) == FAIL)
+ {
+ curbuf = buf;
+***************
+*** 686,692 ****
+ luaV_buffer_next(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! luaV_pushbuffer(L, (*b)->b_next);
+ return 1;
+ }
+
+--- 1225,1232 ----
+ luaV_buffer_next(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
+! luaV_pushbuffer(L, buf->b_next);
+ return 1;
+ }
+
+***************
+*** 694,700 ****
+ luaV_buffer_previous(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! luaV_pushbuffer(L, (*b)->b_prev);
+ return 1;
+ }
+
+--- 1234,1241 ----
+ luaV_buffer_previous(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
+! luaV_pushbuffer(L, buf->b_prev);
+ return 1;
+ }
+
+***************
+*** 702,709 ****
+ luaV_buffer_isvalid(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! lua_pushlightuserdata(L, (void *) (*b));
+! lua_rawget(L, LUA_ENVIRONINDEX);
+ lua_pushboolean(L, !lua_isnil(L, -1));
+ return 1;
+ }
+--- 1243,1249 ----
+ luaV_buffer_isvalid(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! luaV_getudata(L, *b);
+ lua_pushboolean(L, !lua_isnil(L, -1));
+ return 1;
+ }
+***************
+*** 724,801 ****
+
+ /* ======= Window type ======= */
+
+! static luaV_Window *
+! luaV_newwindow(lua_State *L, win_T *win)
+! {
+! luaV_Window *w = (luaV_Window *) lua_newuserdata(L, sizeof(luaV_Window));
+! *w = win;
+! lua_pushlightuserdata(L, (void *) win);
+! lua_pushvalue(L, -2);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[win] = udata */
+! /* to avoid GC, store as key in env */
+! lua_pushvalue(L, -1);
+! lua_pushboolean(L, 1);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
+! /* set metatable */
+! luaV_getfield(L, LUAVIM_WINDOW);
+! lua_setmetatable(L, -2);
+! return w;
+! }
+!
+! static luaV_Window *
+! luaV_pushwindow(lua_State *L, win_T *win)
+! {
+! luaV_Window *w = NULL;
+! if (win == NULL)
+! lua_pushnil(L);
+! else {
+! lua_pushlightuserdata(L, (void *) win);
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (lua_isnil(L, -1)) /* not interned? */
+! {
+! lua_pop(L, 1);
+! w = luaV_newwindow(L, win);
+! }
+! else w = (luaV_Window *) lua_touserdata(L, -1);
+! }
+! return w;
+! }
+!
+! /* Window metamethods */
+!
+! static int
+! luaV_window_tostring(lua_State *L)
+! {
+! lua_pushfstring(L, "%s: %p", LUAVIM_WINDOW, lua_touserdata(L, 1));
+! return 1;
+! }
+
+ static int
+ luaV_window_call(lua_State *L)
+ {
+! luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+ lua_settop(L, 1);
+! win_goto(*w);
+ return 1;
+ }
+
+ static int
+ luaV_window_index(lua_State *L)
+ {
+! luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+ const char *s = luaL_checkstring(L, 2);
+ if (strncmp(s, "buffer", 6) == 0)
+! luaV_pushbuffer(L, (*w)->w_buffer);
+ else if (strncmp(s, "line", 4) == 0)
+! lua_pushinteger(L, (*w)->w_cursor.lnum);
+ else if (strncmp(s, "col", 3) == 0)
+! lua_pushinteger(L, (*w)->w_cursor.col + 1);
+ #ifdef FEAT_VERTSPLIT
+ else if (strncmp(s, "width", 5) == 0)
+! lua_pushinteger(L, W_WIDTH((*w)));
+ #endif
+ else if (strncmp(s, "height", 6) == 0)
+! lua_pushinteger(L, (*w)->w_height);
+ /* methods */
+ else if (strncmp(s, "next", 4) == 0
+ || strncmp(s, "previous", 8) == 0
+--- 1264,1299 ----
+
+ /* ======= Window type ======= */
+
+! luaV_newtype(win_T, window, luaV_Window, LUAVIM_WINDOW)
+! luaV_pushtype(win_T, window, luaV_Window)
+! luaV_type_tostring(window, LUAVIM_WINDOW)
+
+ static int
+ luaV_window_call(lua_State *L)
+ {
+! win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+ lua_settop(L, 1);
+! win_goto(w);
+ return 1;
+ }
+
+ static int
+ luaV_window_index(lua_State *L)
+ {
+! win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+ const char *s = luaL_checkstring(L, 2);
+ if (strncmp(s, "buffer", 6) == 0)
+! luaV_pushbuffer(L, w->w_buffer);
+ else if (strncmp(s, "line", 4) == 0)
+! lua_pushinteger(L, w->w_cursor.lnum);
+ else if (strncmp(s, "col", 3) == 0)
+! lua_pushinteger(L, w->w_cursor.col + 1);
+ #ifdef FEAT_VERTSPLIT
+ else if (strncmp(s, "width", 5) == 0)
+! lua_pushinteger(L, W_WIDTH(w));
+ #endif
+ else if (strncmp(s, "height", 6) == 0)
+! lua_pushinteger(L, w->w_height);
+ /* methods */
+ else if (strncmp(s, "next", 4) == 0
+ || strncmp(s, "previous", 8) == 0
+***************
+*** 812,818 ****
+ static int
+ luaV_window_newindex (lua_State *L)
+ {
+! luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+ const char *s = luaL_checkstring(L, 2);
+ int v = luaL_checkinteger(L, 3);
+ if (strncmp(s, "line", 4) == 0)
+--- 1310,1316 ----
+ static int
+ luaV_window_newindex (lua_State *L)
+ {
+! win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+ const char *s = luaL_checkstring(L, 2);
+ int v = luaL_checkinteger(L, 3);
+ if (strncmp(s, "line", 4) == 0)
+***************
+*** 820,828 ****
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! if (v < 1 || v > (*w)->w_buffer->b_ml.ml_line_count)
+ luaL_error(L, "line out of range");
+! (*w)->w_cursor.lnum = v;
+ update_screen(VALID);
+ }
+ else if (strncmp(s, "col", 3) == 0)
+--- 1318,1326 ----
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! if (v < 1 || v > w->w_buffer->b_ml.ml_line_count)
+ luaL_error(L, "line out of range");
+! w->w_cursor.lnum = v;
+ update_screen(VALID);
+ }
+ else if (strncmp(s, "col", 3) == 0)
+***************
+*** 830,836 ****
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! (*w)->w_cursor.col = v - 1;
+ update_screen(VALID);
+ }
+ #ifdef FEAT_VERTSPLIT
+--- 1328,1334 ----
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! w->w_cursor.col = v - 1;
+ update_screen(VALID);
+ }
+ #ifdef FEAT_VERTSPLIT
+***************
+*** 840,846 ****
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+! curwin = *w;
+ win_setwidth(v);
+ curwin = win;
+ }
+--- 1338,1344 ----
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+! curwin = w;
+ win_setwidth(v);
+ curwin = win;
+ }
+***************
+*** 851,857 ****
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+! curwin = *w;
+ win_setheight(v);
+ curwin = win;
+ }
+--- 1349,1355 ----
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+! curwin = w;
+ win_setheight(v);
+ curwin = win;
+ }
+***************
+*** 864,870 ****
+ luaV_window_next(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! luaV_pushwindow(L, (*w)->w_next);
+ return 1;
+ }
+
+--- 1362,1369 ----
+ luaV_window_next(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
+! luaV_pushwindow(L, win->w_next);
+ return 1;
+ }
+
+***************
+*** 872,878 ****
+ luaV_window_previous(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! luaV_pushwindow(L, (*w)->w_prev);
+ return 1;
+ }
+
+--- 1371,1378 ----
+ luaV_window_previous(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
+! luaV_pushwindow(L, win->w_prev);
+ return 1;
+ }
+
+***************
+*** 880,887 ****
+ luaV_window_isvalid(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! lua_pushlightuserdata(L, (void *) (*w));
+! lua_rawget(L, LUA_ENVIRONINDEX);
+ lua_pushboolean(L, !lua_isnil(L, -1));
+ return 1;
+ }
+--- 1380,1386 ----
+ luaV_window_isvalid(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! luaV_getudata(L, *w);
+ lua_pushboolean(L, !lua_isnil(L, -1));
+ return 1;
+ }
+***************
+*** 983,988 ****
+--- 1482,1509 ----
+ }
+
+ static int
++ luaV_list(lua_State *L)
++ {
++ list_T *l = list_alloc();
++ if (l == NULL)
++ lua_pushnil(L);
++ else
++ luaV_newlist(L, l);
++ return 1;
++ }
++
++ static int
++ luaV_dict(lua_State *L)
++ {
++ dict_T *d = dict_alloc();
++ if (d == NULL)
++ lua_pushnil(L);
++ else
++ luaV_newdict(L, d);
++ return 1;
++ }
++
++ static int
+ luaV_buffer(lua_State *L)
+ {
+ buf_T *buf;
+***************
+*** 1008,1022 ****
+ break;
+ }
+ }
+- if (buf == NULL) /* not found? */
+- lua_pushnil(L);
+- else
+- luaV_pushbuffer(L, buf);
+ }
+! else {
+ buf = (lua_toboolean(L, 1)) ? firstbuf : curbuf; /* first buffer? */
+! luaV_pushbuffer(L, buf);
+! }
+ return 1;
+ }
+
+--- 1529,1538 ----
+ break;
+ }
+ }
+ }
+! else
+ buf = (lua_toboolean(L, 1)) ? firstbuf : curbuf; /* first buffer? */
+! luaV_pushbuffer(L, buf);
+ return 1;
+ }
+
+***************
+*** 1029,1043 ****
+ int n = lua_tointeger(L, 1);
+ for (win = firstwin; win != NULL; win = win->w_next, n--)
+ if (n == 1) break;
+- if (win == NULL) /* not found? */
+- lua_pushnil(L);
+- else
+- luaV_pushwindow(L, win);
+ }
+! else {
+ win = (lua_toboolean(L, 1)) ? firstwin : curwin; /* first window? */
+! luaV_pushwindow(L, win);
+! }
+ return 1;
+ }
+
+--- 1545,1554 ----
+ int n = lua_tointeger(L, 1);
+ for (win = firstwin; win != NULL; win = win->w_next, n--)
+ if (n == 1) break;
+ }
+! else
+ win = (lua_toboolean(L, 1)) ? firstwin : curwin; /* first window? */
+! luaV_pushwindow(L, win);
+ return 1;
+ }
+
+***************
+*** 1054,1086 ****
+ }
+
+ static int
+! luaV_isbuffer(lua_State *L)
+! {
+! lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_BUFFER) != NULL);
+! return 1;
+! }
+!
+! static int
+! luaV_iswindow(lua_State *L)
+ {
+! lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_WINDOW) != NULL);
+! return 1;
+! }
+!
+! /* for freeing buffer and window objects; lightuserdata as arg */
+! static int
+! luaV_free(lua_State *L)
+! {
+! lua_pushvalue(L, 1); /* lightudata */
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (!lua_isnil(L, -1))
+ {
+! lua_pushnil(L);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = nil */
+! lua_pushnil(L);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[lightudata] = nil */
+ }
+! return 0;
+ }
+
+ static const luaL_Reg luaV_module[] = {
+--- 1565,1606 ----
+ }
+
+ static int
+! luaV_type(lua_State *L)
+ {
+! luaL_checkany(L, 1);
+! if (lua_type(L, 1) == LUA_TUSERDATA) /* check vim udata? */
+ {
+! lua_settop(L, 1);
+! if (lua_getmetatable(L, 1))
+! {
+! luaV_getfield(L, LUAVIM_LIST);
+! if (lua_rawequal(L, -1, 2))
+! {
+! lua_pushstring(L, "list");
+! return 1;
+! }
+! luaV_getfield(L, LUAVIM_DICT);
+! if (lua_rawequal(L, -1, 2))
+! {
+! lua_pushstring(L, "dict");
+! return 1;
+! }
+! luaV_getfield(L, LUAVIM_BUFFER);
+! if (lua_rawequal(L, -1, 2))
+! {
+! lua_pushstring(L, "buffer");
+! return 1;
+! }
+! luaV_getfield(L, LUAVIM_WINDOW);
+! if (lua_rawequal(L, -1, 2))
+! {
+! lua_pushstring(L, "window");
+! return 1;
+! }
+! }
+ }
+! lua_pushstring(L, luaL_typename(L, 1)); /* fallback */
+! return 1;
+ }
+
+ static const luaL_Reg luaV_module[] = {
+***************
+*** 1088,1111 ****
+ {"eval", luaV_eval},
+ {"beep", luaV_beep},
+ {"line", luaV_line},
+ {"buffer", luaV_buffer},
+ {"window", luaV_window},
+ {"open", luaV_open},
+! {"isbuffer", luaV_isbuffer},
+! {"iswindow", luaV_iswindow},
+ {NULL, NULL}
+ };
+
+ static int
+ luaopen_vim(lua_State *L)
+ {
+! /* set environment */
+ lua_newtable(L);
+ lua_newtable(L);
+! lua_pushliteral(L, "v");
+ lua_setfield(L, -2, "__mode");
+! lua_setmetatable(L, -2);
+! lua_replace(L, LUA_ENVIRONINDEX);
+ /* print */
+ lua_pushcfunction(L, luaV_print);
+ lua_setglobal(L, "print");
+--- 1608,1695 ----
+ {"eval", luaV_eval},
+ {"beep", luaV_beep},
+ {"line", luaV_line},
++ {"list", luaV_list},
++ {"dict", luaV_dict},
+ {"buffer", luaV_buffer},
+ {"window", luaV_window},
+ {"open", luaV_open},
+! {"type", luaV_type},
+ {NULL, NULL}
+ };
+
++ /* for freeing list, dict, buffer and window objects; lightuserdata as arg */
++ static int
++ luaV_free(lua_State *L)
++ {
++ lua_pushnil(L);
++ luaV_setudata(L, lua_touserdata(L, 1));
++ return 0;
++ }
++
++ static int
++ luaV_luaeval (lua_State *L)
++ {
++ luaL_Buffer b;
++ size_t l;
++ const char *str = lua_tolstring(L, 1, &l);
++ typval_T *arg = (typval_T *) lua_touserdata(L, 2);
++ typval_T *rettv = (typval_T *) lua_touserdata(L, 3);
++ luaL_buffinit(L, &b);
++ luaL_addlstring(&b, LUAVIM_EVALHEADER, sizeof(LUAVIM_EVALHEADER) - 1);
++ luaL_addlstring(&b, str, l);
++ luaL_pushresult(&b);
++ str = lua_tolstring(L, -1, &l);
++ if (luaL_loadbuffer(L, str, l, LUAVIM_EVALNAME)) /* compile error? */
++ {
++ luaV_emsg(L);
++ return 0;
++ }
++ luaV_pushtypval(L, arg);
++ if (lua_pcall(L, 1, 1, 0)) /* running error? */
++ {
++ luaV_emsg(L);
++ return 0;
++ }
++ luaV_totypval(L, -1, rettv);
++ return 0;
++ }
++
++ static int
++ luaV_setref (lua_State *L)
++ {
++ int copyID = lua_tointeger(L, 1);
++ typval_T tv;
++ luaV_getfield(L, LUAVIM_LIST);
++ luaV_getfield(L, LUAVIM_DICT);
++ lua_pushnil(L);
++ while (lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
++ {
++ lua_getmetatable(L, -1);
++ if (lua_rawequal(L, -1, 2)) /* list? */
++ {
++ tv.v_type = VAR_LIST;
++ tv.vval.v_list = (list_T *) lua_touserdata(L, 4); /* key */
++ }
++ else if (lua_rawequal(L, -1, 3)) /* dict? */
++ {
++ tv.v_type = VAR_DICT;
++ tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
++ }
++ lua_pop(L, 2); /* metatable and value */
++ set_ref_in_tv(&tv, copyID);
++ }
++ return 0;
++ }
++
+ static int
+ luaopen_vim(lua_State *L)
+ {
+! /* set cache table */
+ lua_newtable(L);
+ lua_newtable(L);
+! lua_pushstring(L, "v");
+ lua_setfield(L, -2, "__mode");
+! lua_setmetatable(L, -2); /* cache is weak-valued */
+ /* print */
+ lua_pushcfunction(L, luaV_print);
+ lua_setglobal(L, "print");
+***************
+*** 1116,1129 ****
+ lua_pop(L, 1);
+ /* free */
+ lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
+! lua_pushcfunction(L, luaV_free);
+ lua_rawset(L, LUA_REGISTRYINDEX);
+ /* register */
+ luaV_newmetatable(L, LUAVIM_BUFFER);
+! luaL_register(L, NULL, luaV_Buffer_mt);
+ luaV_newmetatable(L, LUAVIM_WINDOW);
+! luaL_register(L, NULL, luaV_Window_mt);
+! luaL_register(L, LUAVIM_NAME, luaV_module);
+ return 0;
+ }
+
+--- 1700,1735 ----
+ lua_pop(L, 1);
+ /* free */
+ lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
+! lua_pushvalue(L, 1); /* cache table */
+! lua_pushcclosure(L, luaV_free, 1);
+! lua_rawset(L, LUA_REGISTRYINDEX);
+! /* luaeval */
+! lua_pushlightuserdata(L, (void *) LUAVIM_LUAEVAL);
+! lua_pushvalue(L, 1); /* cache table */
+! lua_pushcclosure(L, luaV_luaeval, 1);
+! lua_rawset(L, LUA_REGISTRYINDEX);
+! /* setref */
+! lua_pushlightuserdata(L, (void *) LUAVIM_SETREF);
+! lua_pushvalue(L, 1); /* cache table */
+! lua_pushcclosure(L, luaV_setref, 1);
+ lua_rawset(L, LUA_REGISTRYINDEX);
+ /* register */
++ luaV_newmetatable(L, LUAVIM_LIST);
++ lua_pushvalue(L, 1);
++ luaV_openlib(L, luaV_List_mt, 1);
++ luaV_newmetatable(L, LUAVIM_DICT);
++ lua_pushvalue(L, 1);
++ luaV_openlib(L, luaV_Dict_mt, 1);
+ luaV_newmetatable(L, LUAVIM_BUFFER);
+! lua_pushvalue(L, 1); /* cache table */
+! luaV_openlib(L, luaV_Buffer_mt, 1);
+ luaV_newmetatable(L, LUAVIM_WINDOW);
+! lua_pushvalue(L, 1); /* cache table */
+! luaV_openlib(L, luaV_Window_mt, 1);
+! lua_newtable(L); /* vim table */
+! lua_pushvalue(L, 1); /* cache table */
+! luaV_openlib(L, luaV_module, 1);
+! lua_setglobal(L, LUAVIM_NAME);
+ return 0;
+ }
+
+***************
+*** 1154,1160 ****
+ static lua_State *L = NULL;
+
+ static int
+! lua_is_open(void)
+ {
+ return L != NULL;
+ }
+--- 1760,1766 ----
+ static lua_State *L = NULL;
+
+ static int
+! lua_isopen(void)
+ {
+ return L != NULL;
+ }
+***************
+*** 1162,1168 ****
+ static int
+ lua_init(void)
+ {
+! if (L == NULL)
+ {
+ #ifdef DYNAMIC_LUA
+ if (!lua_enabled(TRUE))
+--- 1768,1774 ----
+ static int
+ lua_init(void)
+ {
+! if (!lua_isopen())
+ {
+ #ifdef DYNAMIC_LUA
+ if (!lua_enabled(TRUE))
+***************
+*** 1179,1185 ****
+ void
+ lua_end(void)
+ {
+! if (L != NULL)
+ {
+ lua_close(L);
+ L = NULL;
+--- 1785,1791 ----
+ void
+ lua_end(void)
+ {
+! if (lua_isopen())
+ {
+ lua_close(L);
+ L = NULL;
+***************
+*** 1273,1295 ****
+ }
+ }
+
+! /* buffer */
+ void
+! lua_buffer_free(buf_T *buf)
+ {
+! if (!lua_is_open()) return;
+! luaV_getfield(L, LUAVIM_FREE);
+! lua_pushlightuserdata(L, (void *) buf);
+! lua_call(L, 1, 0);
+ }
+
+- /* window */
+ void
+! lua_window_free(win_T *win)
+ {
+! if (!lua_is_open()) return;
+! luaV_getfield(L, LUAVIM_FREE);
+! lua_pushlightuserdata(L, (void *) win);
+ lua_call(L, 1, 0);
+ }
+
+--- 1879,1914 ----
+ }
+ }
+
+! #define luaV_freetype(typ,tname) \
+! void \
+! lua_##tname##_free(typ *o) \
+! { \
+! if (!lua_isopen()) return; \
+! luaV_getfield(L, LUAVIM_FREE); \
+! lua_pushlightuserdata(L, (void *) o); \
+! lua_call(L, 1, 0); \
+! }
+!
+! luaV_freetype(buf_T, buffer)
+! luaV_freetype(win_T, window)
+!
+ void
+! do_luaeval (char_u *str, typval_T *arg, typval_T *rettv)
+ {
+! lua_init();
+! luaV_getfield(L, LUAVIM_LUAEVAL);
+! lua_pushstring(L, (char *) str);
+! lua_pushlightuserdata(L, (void *) arg);
+! lua_pushlightuserdata(L, (void *) rettv);
+! lua_call(L, 3, 0);
+ }
+
+ void
+! set_ref_in_lua (int copyID)
+ {
+! if (!lua_isopen()) return;
+! luaV_getfield(L, LUAVIM_SETREF);
+! lua_pushinteger(L, copyID);
+ lua_call(L, 1, 0);
+ }
+
+*** ../vim-7.3.489/src/proto/if_lua.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/if_lua.pro 2012-04-05 16:41:35.000000000 +0200
+***************
+*** 6,9 ****
+--- 6,11 ----
+ void ex_luafile __ARGS((exarg_T *eap));
+ void lua_buffer_free __ARGS((buf_T *buf));
+ void lua_window_free __ARGS((win_T *win));
++ void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
++ void set_ref_in_lua __ARGS((int copyID));
+ /* vim: set ft=c : */
+*** ../vim-7.3.489/src/version.c 2012-04-05 16:07:01.000000000 +0200
+--- src/version.c 2012-04-05 16:52:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 490,
+ /**/
+
+--
+Even got a Datapoint 3600(?) with a DD50 connector instead of the
+usual DB25... what a nightmare trying to figure out the pinout
+for *that* with no spex...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.491
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.491
+Problem: No tests for Lua.
+Solution: Add some simple tests for Lua. (Luis Carvalho)
+Files: src/testdir/test1.in, src/testdir/test85.in, src/testdir/test85.ok
+ src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms, src/testdir/Makefile
+
+
+*** ../vim-7.3.490/src/testdir/test1.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test1.in 2012-04-05 16:37:37.000000000 +0200
+***************
+*** 15,20 ****
+--- 15,21 ----
+ be set like small.vim above. mbyte.vim is sourced by tests that require the
+ +multi_byte feature.
+ Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
++ Similar logic is applied to the +lua feature, using lua.vim.
+
+ STARTTEST
+ :" Write a single line to test.out to check if testing works at all.
+***************
+*** 28,37 ****
+--- 29,45 ----
+ qa!
+ \e:w! mbyte.vim
+ :w! mzscheme.vim
++ :w! lua.vim
++ :"
+ :" If +multi_byte feature supported, make mbyte.vim empty.
+ :if has("multi_byte") | sp another | w! mbyte.vim | q | endif
++ :"
+ :" If +mzscheme feature supported, make mzscheme.vim empty.
+ :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
++ :"
++ :" If +lua feature supported, make lua.vim empty.
++ :if has("lua") | sp another | w! lua.vim | q | endif
++ :"
+ :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
+ :" Otherwise write small.vim to skip the test.
+ :if 1 | q! | endif
+*** ../vim-7.3.490/src/testdir/test85.in 2012-04-05 16:56:12.000000000 +0200
+--- src/testdir/test85.in 2012-04-05 16:44:00.000000000 +0200
+***************
+*** 0 ****
+--- 1,42 ----
++ Test for Lua interface and luaeval() function
++
++ STARTTEST
++ :so small.vim
++ :so lua.vim
++ :set nocompatible viminfo+=nviminfo
++ :lua l = vim.list():add"item0":add"dictionary with list OK":add"item2"
++ :lua h = vim.dict(); h.list = l
++ :call garbagecollect()
++ /^1
++ :" change buffer contents
++ :lua curbuf = vim.buffer()
++ :lua curline = vim.eval"line('.')"
++ :lua curbuf[curline] = "1 changed line 1"
++ :" scalar test
++ :let tmp_string = luaeval('"string"')
++ :let tmp_1000 = luaeval('1000')
++ :if printf("%s%.0f", tmp_string, tmp_1000) == "string1000"
++ :let scalar_res = "OK"
++ :else
++ :let scalar_res = "FAILED"
++ :endif
++ :call append(search("^1"), "scalar test " . scalar_res)
++ :" dictionary containing a list
++ :let tmp = luaeval("h").list[1]
++ :/^2/put =tmp
++ :" circular list (at the same time test lists containing lists)
++ :lua l[2] = l
++ :let l2 = luaeval("h").list
++ :if l2[2] == l2
++ :let res = "OK"
++ :else
++ :let res = "FAILED"
++ :endif
++ :call setline(search("^3"), "circular test " . res)
++ :?^1?,$w! test.out
++ :qa!
++ ENDTEST
++
++ 1 line 1
++ 2 line 2
++ 3 line 3
+*** ../vim-7.3.490/src/testdir/test85.ok 2012-04-05 16:56:12.000000000 +0200
+--- src/testdir/test85.ok 2012-04-05 16:18:56.000000000 +0200
+***************
+*** 0 ****
+--- 1,5 ----
++ 1 changed line 1
++ scalar test OK
++ 2 line 2
++ dictionary with list OK
++ circular test OK
+*** ../vim-7.3.490/src/testdir/Make_amiga.mak 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_amiga.mak 2012-04-05 16:21:55.000000000 +0200
+***************
+*** 13,18 ****
+--- 13,19 ----
+ # test25 uses symbolic link
+ # test27 can't edit file with "*"
+ # test52 only for Win32
++ # test85 no Lua interface
+
+ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
+ test7.out test8.out test9.out \
+*** ../vim-7.3.490/src/testdir/Make_dos.mak 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_dos.mak 2012-04-05 16:22:16.000000000 +0200
+***************
+*** 30,36 ****
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 30,36 ----
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.490/src/testdir/Make_ming.mak 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_ming.mak 2012-04-05 16:22:25.000000000 +0200
+***************
+*** 50,56 ****
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 50,56 ----
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.490/src/testdir/Make_os2.mak 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_os2.mak 2012-04-05 16:22:38.000000000 +0200
+***************
+*** 13,18 ****
+--- 13,19 ----
+ # test25 uses symbolic link
+ # test27 can't edit file with "*" in file name
+ # test52 only for Win32
++ # test85 no Lua interface
+
+ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
+ test7.out test8.out test9.out \
+*** ../vim-7.3.490/src/testdir/Make_vms.mms 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_vms.mms 2012-04-05 16:23:08.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2012 Mar 28
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2012 Apr 05
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 89,94 ****
+--- 89,95 ----
+ # with too many dots).
+ #
+ # Test 72: unknown reason
++ # Test 85: no Lua interface
+
+ .IFDEF WANT_GUI
+ SCRIPT_GUI = test16.out
+*** ../vim-7.3.490/src/testdir/Makefile 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Makefile 2012-04-05 16:21:13.000000000 +0200
+***************
+*** 27,33 ****
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 27,33 ----
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.490/src/version.c 2012-04-05 16:53:56.000000000 +0200
+--- src/version.c 2012-04-05 16:55:27.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 491,
+ /**/
+
+--
+You had connectors? Eeee, when I were a lad we 'ad to carry the
+bits between the computer and the terminal with a spoon...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.492
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.492
+Problem: Can't indent conditions separately from function arguments.
+Solution: Add the 'k' flag in 'cino. (Lech Lorens)
+Files: runtime/doc/indent.txt, src/misc1.c, src/testdir/test3.in,
+ src/testdir/test3.ok
+
+
+*** ../vim-7.3.491/runtime/doc/indent.txt 2011-06-26 03:16:58.000000000 +0200
+--- runtime/doc/indent.txt 2012-04-05 17:12:14.000000000 +0200
+***************
+*** 459,464 ****
+--- 460,481 ----
+ a_short_line(argument, a_short_line(argument,
+ argument); argument);
+ <
++ *cino-k*
++ kN When in unclosed parentheses which follow "if", "for" or
++ "while" and N is non-zero, overrides the behaviour defined by
++ "(N": causes the indent to be N characters relative to the outer
++ context (i.e. the line where "if", "for" or "while" is). Has
++ no effect on deeper levels of nesting. Affects flags like "wN"
++ only for the "if", "for" and "while" conditions. If 0, defaults
++ to behaviour defined by the "(N" flag. (default: 0).
++
++ cino=(0 cino=(0,ks >
++ if (condition1 if (condition1
++ && condition2) && condition2)
++ action(); action();
++ function(argument1 function(argument1
++ && argument2); && argument2);
++ <
+ *cino-m*
+ mN When N is non-zero, line up a line starting with a closing
+ parentheses with the first character of the line with the
+***************
+*** 527,540 ****
+
+ *cino-#*
+ #N When N is non-zero recognize shell/Perl comments, starting with
+! '#'. Default N is zero: don't recognizes '#' comments. Note
+ that lines starting with # will still be seen as preprocessor
+ lines.
+
+
+ The defaults, spelled out in full, are:
+ cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+! c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
+
+ Vim puts a line in column 1 if:
+ - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
+--- 546,559 ----
+
+ *cino-#*
+ #N When N is non-zero recognize shell/Perl comments, starting with
+! '#'. Default N is zero: don't recognize '#' comments. Note
+ that lines starting with # will still be seen as preprocessor
+ lines.
+
+
+ The defaults, spelled out in full, are:
+ cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+! c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
+
+ Vim puts a line in column 1 if:
+ - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
+*** ../vim-7.3.491/src/misc1.c 2012-02-29 13:49:03.000000000 +0100
+--- src/misc1.c 2012-04-05 17:12:14.000000000 +0200
+***************
+*** 5771,5776 ****
+--- 5771,5822 ----
+ }
+
+ /*
++ * Check whether in "p" there is an "if", "for" or "while" before offset.
++ * Return 0 if there is none.
++ * Otherwise return !0 and update "*poffset" to point to the place where the
++ * string was found.
++ */
++ static int
++ cin_is_if_for_while_before_offset(line, offset, poffset)
++ char_u *line;
++ size_t offset;
++ int *poffset;
++ {
++
++ if (offset-- < 2)
++ return 0;
++ while (offset > 2 && vim_iswhite(line[offset]))
++ --offset;
++
++ offset -= 1;
++ if (!STRNCMP(line + offset, "if", 2))
++ goto probablyFound;
++
++ if (offset >= 1)
++ {
++ offset -= 1;
++ if (!STRNCMP(line + offset, "for", 3))
++ goto probablyFound;
++
++ if (offset >= 2)
++ {
++ offset -= 2;
++ if (!STRNCMP(line + offset, "while", 5))
++ goto probablyFound;
++ }
++ }
++
++ return 0;
++ probablyFound:
++ if (!offset || !vim_isIDc(line[offset - 1]))
++ {
++ *poffset = offset;
++ return 1;
++ }
++ return 0;
++ }
++
++ /*
+ * Return TRUE if we are at the end of a do-while.
+ * do
+ * nothing;
+***************
+*** 6124,6130 ****
+
+ /*
+ * Find the matching '(', failing if it is in a comment.
+! * Return NULL of no match found.
+ */
+ static pos_T *
+ find_match_paren(ind_maxparen, ind_maxcomment) /* XXX */
+--- 6170,6176 ----
+
+ /*
+ * Find the matching '(', failing if it is in a comment.
+! * Return NULL if no match found.
+ */
+ static pos_T *
+ find_match_paren(ind_maxparen, ind_maxcomment) /* XXX */
+***************
+*** 6393,6398 ****
+--- 6439,6450 ----
+ */
+ int ind_cpp_namespace = 0;
+
++ /*
++ * handle continuation lines containing conditions of if(), for() and
++ * while()
++ */
++ int ind_if_for_while = 0;
++
+ pos_T cur_curpos;
+ int amount;
+ int scope_amount;
+***************
+*** 6437,6442 ****
+--- 6489,6495 ----
+ int cont_amount = 0; /* amount for continuation line */
+ int original_line_islabel;
+ int added_to_amount = 0;
++ int is_if_for_while = 0;
+
+ for (options = curbuf->b_p_cino; *options; )
+ {
+***************
+*** 6509,6514 ****
+--- 6562,6568 ----
+ case 'l': ind_keep_case_label = n; break;
+ case '#': ind_hash_comment = n; break;
+ case 'N': ind_cpp_namespace = n; break;
++ case 'k': ind_if_for_while = n; break;
+ }
+ if (*options == ',')
+ ++options;
+***************
+*** 6812,6817 ****
+--- 6866,6900 ----
+ if (amount == -1)
+ {
+ int ignore_paren_col = 0;
++ int is_if_for_while = 0;
++
++ if (ind_if_for_while)
++ {
++ /* Look for the outermost opening parenthesis on this line
++ * and check whether it belongs to an "if", "for" or "while". */
++
++ pos_T cursor_save = curwin->w_cursor;
++ pos_T outermost;
++ char_u *line;
++ int look_col;
++
++ trypos = &our_paren_pos;
++ do {
++ outermost = *trypos;
++ curwin->w_cursor.lnum = outermost.lnum;
++ curwin->w_cursor.col = outermost.col;
++
++ trypos = find_match_paren(ind_maxparen, ind_maxcomment);
++ } while (trypos && trypos->lnum == outermost.lnum);
++
++ curwin->w_cursor = cursor_save;
++
++ line = ml_get(outermost.lnum);
++
++ is_if_for_while =
++ cin_is_if_for_while_before_offset(line, outermost.col,
++ &outermost.col);
++ }
+
+ amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+ look = skipwhite(look);
+***************
+*** 6836,6842 ****
+ curwin->w_cursor.lnum = save_lnum;
+ look = ml_get(our_paren_pos.lnum) + look_col;
+ }
+! if (theline[0] == ')' || ind_unclosed == 0
+ || (!ind_unclosed_noignore && *look == '('
+ && ignore_paren_col == 0))
+ {
+--- 6919,6925 ----
+ curwin->w_cursor.lnum = save_lnum;
+ look = ml_get(our_paren_pos.lnum) + look_col;
+ }
+! if (theline[0] == ')' || (ind_unclosed == 0 && is_if_for_while == 0)
+ || (!ind_unclosed_noignore && *look == '('
+ && ignore_paren_col == 0))
+ {
+***************
+*** 6907,6913 ****
+ {
+ /* Line up with the start of the matching paren line. */
+ }
+! else if (ind_unclosed == 0 || (!ind_unclosed_noignore
+ && *look == '(' && ignore_paren_col == 0))
+ {
+ if (cur_amount != MAXCOL)
+--- 6990,6997 ----
+ {
+ /* Line up with the start of the matching paren line. */
+ }
+! else if ((ind_unclosed == 0 && is_if_for_while == 0)
+! || (!ind_unclosed_noignore
+ && *look == '(' && ignore_paren_col == 0))
+ {
+ if (cur_amount != MAXCOL)
+***************
+*** 6943,6949 ****
+ if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
+ amount += ind_unclosed2;
+ else
+! amount += ind_unclosed;
+ }
+ /*
+ * For a line starting with ')' use the minimum of the two
+--- 7027,7038 ----
+ if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
+ amount += ind_unclosed2;
+ else
+! {
+! if (is_if_for_while)
+! amount += ind_if_for_while;
+! else
+! amount += ind_unclosed;
+! }
+ }
+ /*
+ * For a line starting with ')' use the minimum of the two
+*** ../vim-7.3.491/src/testdir/test3.in 2011-12-14 20:21:29.000000000 +0100
+--- src/testdir/test3.in 2012-04-05 17:12:14.000000000 +0200
+***************
+*** 1574,1579 ****
+--- 1574,1793 ----
+ }
+
+ STARTTEST
++ :set cino=k2s,(0
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++ STARTTEST
++ :set cino=k2s,(s
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++ STARTTEST
++ :set cino=k2s,(s,U1
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ c = c1 &&
++ (
++ c2 ||
++ c3
++ ) && c4;
++ }
++
++ STARTTEST
++ :set cino=k2s,(0,W4
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++
++ a_long_line(
++ argument,
++ argument);
++ a_short_line(argument,
++ argument);
++ }
++
++ STARTTEST
++ :set cino=k2s,u2
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++ }
++
++ STARTTEST
++ :set cino=k2s,(0,w1
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++ STARTTEST
++ :set cino=k2,(s
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ }
++
++ STARTTEST
+ :set cino=N-s
+ /^NAMESPACESTART
+ =/^NAMESPACEEND
+*** ../vim-7.3.491/src/testdir/test3.ok 2011-12-14 20:21:29.000000000 +0100
+--- src/testdir/test3.ok 2012-04-05 17:12:14.000000000 +0200
+***************
+*** 1411,1416 ****
+--- 1411,1602 ----
+ }
+
+
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ c = c1 &&
++ (
++ c2 ||
++ c3
++ ) && c4;
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++
++ a_long_line(
++ argument,
++ argument);
++ a_short_line(argument,
++ argument);
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ }
++
++
+ NAMESPACESTART
+ /* valid namespaces with normal indent */
+ namespace
+*** ../vim-7.3.491/src/version.c 2012-04-05 16:56:38.000000000 +0200
+--- src/version.c 2012-04-05 17:14:18.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 492,
+ /**/
+
+--
+You were lucky to have a LAKE! There were a hundred and sixty of
+us living in a small shoebox in the middle of the road.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.493
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.493 (after 7.3.492)
+Problem: Two unused variables.
+Solution: Remove them. (Hong Xu)
+Files: src/misc1.c
+
+
+*** ../vim-7.3.492/src/misc1.c 2012-04-05 17:17:38.000000000 +0200
+--- src/misc1.c 2012-04-06 13:49:39.000000000 +0200
+***************
+*** 6489,6495 ****
+ int cont_amount = 0; /* amount for continuation line */
+ int original_line_islabel;
+ int added_to_amount = 0;
+- int is_if_for_while = 0;
+
+ for (options = curbuf->b_p_cino; *options; )
+ {
+--- 6489,6494 ----
+***************
+*** 6876,6882 ****
+ pos_T cursor_save = curwin->w_cursor;
+ pos_T outermost;
+ char_u *line;
+- int look_col;
+
+ trypos = &our_paren_pos;
+ do {
+--- 6875,6880 ----
+*** ../vim-7.3.492/src/version.c 2012-04-05 17:17:38.000000000 +0200
+--- src/version.c 2012-04-06 13:50:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 493,
+ /**/
+
+--
+Not too long ago, compress was something you did to garbage...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.494
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.494 (after 7.3.491)
+Problem: Can't compile with Lua 9.1 or dynamic Lua.
+Solution: Fix dll_ methods. Fix luado(). (Muraoka Taro, Luis Carvalho)
+Files: src/if_lua.c
+
+
+*** ../vim-7.3.493/src/if_lua.c 2012-04-05 16:53:56.000000000 +0200
+--- src/if_lua.c 2012-04-06 14:24:06.000000000 +0200
+***************
+*** 95,100 ****
+--- 95,101 ----
+ #define luaL_loadbufferx dll_luaL_loadbufferx
+ #define luaL_argerror dll_luaL_argerror
+ #endif
++ #define luaL_checkany dll_luaL_checkany
+ #define luaL_checklstring dll_luaL_checklstring
+ #define luaL_checkinteger dll_luaL_checkinteger
+ #define luaL_optinteger dll_luaL_optinteger
+***************
+*** 117,124 ****
+ #define lua_pcallk dll_lua_pcallk
+ #define lua_getglobal dll_lua_getglobal
+ #define lua_setglobal dll_lua_setglobal
+- #define lua_typename dll_lua_typename
+ #endif
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+--- 118,125 ----
+ #define lua_pcallk dll_lua_pcallk
+ #define lua_getglobal dll_lua_getglobal
+ #define lua_setglobal dll_lua_setglobal
+ #endif
++ #define lua_typename dll_lua_typename
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+***************
+*** 151,156 ****
+--- 152,158 ----
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
+ #define lua_setmetatable dll_lua_setmetatable
++ #define lua_next dll_lua_next
+ /* libs */
+ #define luaopen_base dll_luaopen_base
+ #define luaopen_table dll_luaopen_table
+***************
+*** 177,182 ****
+--- 179,185 ----
+ int (*dll_luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
+ int (*dll_luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
+ #endif
++ void (*dll_luaL_checkany) (lua_State *L, int narg);
+ const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
+ lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
+ lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
+***************
+*** 201,208 ****
+ int ctx, lua_CFunction k);
+ void (*dll_lua_getglobal) (lua_State *L, const char *var);
+ void (*dll_lua_setglobal) (lua_State *L, const char *var);
+- const char *(*dll_lua_typename) (lua_State *L, int tp);
+ #endif
+ void (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+--- 204,211 ----
+ int ctx, lua_CFunction k);
+ void (*dll_lua_getglobal) (lua_State *L, const char *var);
+ void (*dll_lua_setglobal) (lua_State *L, const char *var);
+ #endif
++ const char *(*dll_lua_typename) (lua_State *L, int tp);
+ void (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+***************
+*** 235,240 ****
+--- 238,244 ----
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
++ int (*dll_lua_next) (lua_State *L, int idx);
+ /* libs */
+ int (*dll_luaopen_base) (lua_State *L);
+ int (*dll_luaopen_table) (lua_State *L);
+***************
+*** 268,273 ****
+--- 272,278 ----
+ {"luaL_loadbufferx", (luaV_function) &dll_luaL_loadbufferx},
+ {"luaL_argerror", (luaV_function) &dll_luaL_argerror},
+ #endif
++ {"luaL_checkany", (luaV_function) &dll_luaL_checkany},
+ {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
+ {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
+ {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
+***************
+*** 290,297 ****
+ {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
+ {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
+ {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
+- {"lua_typename", (luaV_function) &dll_lua_typename},
+ #endif
+ {"lua_close", (luaV_function) &dll_lua_close},
+ {"lua_gettop", (luaV_function) &dll_lua_gettop},
+ {"lua_settop", (luaV_function) &dll_lua_settop},
+--- 295,302 ----
+ {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
+ {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
+ {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
+ #endif
++ {"lua_typename", (luaV_function) &dll_lua_typename},
+ {"lua_close", (luaV_function) &dll_lua_close},
+ {"lua_gettop", (luaV_function) &dll_lua_gettop},
+ {"lua_settop", (luaV_function) &dll_lua_settop},
+***************
+*** 324,329 ****
+--- 329,335 ----
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+ {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
+ {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
++ {"lua_next", (luaV_function) &dll_lua_next},
+ /* libs */
+ {"luaopen_base", (luaV_function) &dll_luaopen_base},
+ {"luaopen_table", (luaV_function) &dll_luaopen_table},
+***************
+*** 1828,1834 ****
+ }
+ luaV_setrange(L, eap->line1, eap->line2);
+ luaL_buffinit(L, &b);
+! luaL_addlstring(&b, "return function(line) ", 22); /* header */
+ luaL_addlstring(&b, s, strlen(s));
+ luaL_addlstring(&b, " end", 4); /* footer */
+ luaL_pushresult(&b);
+--- 1834,1840 ----
+ }
+ luaV_setrange(L, eap->line1, eap->line2);
+ luaL_buffinit(L, &b);
+! luaL_addlstring(&b, "return function(line, linenr) ", 30); /* header */
+ luaL_addlstring(&b, s, strlen(s));
+ luaL_addlstring(&b, " end", 4); /* footer */
+ luaL_pushresult(&b);
+***************
+*** 1845,1851 ****
+ {
+ lua_pushvalue(L, -1); /* function */
+ luaV_pushline(L, curbuf, l); /* current line as arg */
+! if (lua_pcall(L, 1, 1, 0))
+ {
+ luaV_emsg(L);
+ break;
+--- 1851,1858 ----
+ {
+ lua_pushvalue(L, -1); /* function */
+ luaV_pushline(L, curbuf, l); /* current line as arg */
+! lua_pushinteger(L, l); /* current line number as arg */
+! if (lua_pcall(L, 2, 1, 0))
+ {
+ luaV_emsg(L);
+ break;
+*** ../vim-7.3.493/src/version.c 2012-04-06 13:56:00.000000000 +0200
+--- src/version.c 2012-04-06 14:25:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 494,
+ /**/
+
+--
+Why doesn't Tarzan have a beard?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.4
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.495 (after 7.3.492)
+Problem: Compiler warnings.
+Solution: Add function declaration. Remove "offset" argument.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.494/src/misc1.c 2012-04-06 13:56:00.000000000 +0200
+--- src/misc1.c 2012-04-09 20:25:58.000000000 +0200
+***************
+*** 4972,4977 ****
+--- 4972,4978 ----
+ static int cin_iselse __ARGS((char_u *));
+ static int cin_isdo __ARGS((char_u *));
+ static int cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
++ static int cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset));
+ static int cin_iswhileofdo_end __ARGS((int terminated, int ind_maxparen, int ind_maxcomment));
+ static int cin_isbreak __ARGS((char_u *));
+ static int cin_is_cpp_baseclass __ARGS((colnr_T *col));
+***************
+*** 5771,5787 ****
+ }
+
+ /*
+! * Check whether in "p" there is an "if", "for" or "while" before offset.
+ * Return 0 if there is none.
+ * Otherwise return !0 and update "*poffset" to point to the place where the
+ * string was found.
+ */
+ static int
+! cin_is_if_for_while_before_offset(line, offset, poffset)
+ char_u *line;
+- size_t offset;
+ int *poffset;
+ {
+
+ if (offset-- < 2)
+ return 0;
+--- 5772,5788 ----
+ }
+
+ /*
+! * Check whether in "p" there is an "if", "for" or "while" before "*poffset".
+ * Return 0 if there is none.
+ * Otherwise return !0 and update "*poffset" to point to the place where the
+ * string was found.
+ */
+ static int
+! cin_is_if_for_while_before_offset(line, poffset)
+ char_u *line;
+ int *poffset;
+ {
++ int offset = *poffset;
+
+ if (offset-- < 2)
+ return 0;
+***************
+*** 5805,5812 ****
+ goto probablyFound;
+ }
+ }
+-
+ return 0;
+ probablyFound:
+ if (!offset || !vim_isIDc(line[offset - 1]))
+ {
+--- 5806,5813 ----
+ goto probablyFound;
+ }
+ }
+ return 0;
++
+ probablyFound:
+ if (!offset || !vim_isIDc(line[offset - 1]))
+ {
+***************
+*** 6890,6897 ****
+ line = ml_get(outermost.lnum);
+
+ is_if_for_while =
+! cin_is_if_for_while_before_offset(line, outermost.col,
+! &outermost.col);
+ }
+
+ amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+--- 6891,6897 ----
+ line = ml_get(outermost.lnum);
+
+ is_if_for_while =
+! cin_is_if_for_while_before_offset(line, &outermost.col);
+ }
+
+ amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+*** ../vim-7.3.494/src/version.c 2012-04-06 14:30:55.000000000 +0200
+--- src/version.c 2012-04-09 20:41:44.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 495,
+ /**/
+
+--
+ [clop clop]
+GUARD #1: Halt! Who goes there?
+ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of
+ Camelot. King of the Britons, defeator of the Saxons, sovereign of
+ all England!
+GUARD #1: Pull the other one!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.496
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.496
+Problem: MS-DOS: When "diff" trips over difference in line separators some
+ tests fail.
+Solution: Make some .ok files use unix line separators. (David Pope)
+Files: src/testdir/Make_dos.mak, src/testdir/Make_ming.mak
+
+
+*** ../vim-7.3.495/src/testdir/Make_dos.mak 2012-04-05 16:56:38.000000000 +0200
+--- src/testdir/Make_dos.mak 2012-04-09 21:23:43.000000000 +0200
+***************
+*** 52,58 ****
+
+ fixff:
+ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+! -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q dotest.in
+
+ clean:
+ -del *.out
+--- 52,59 ----
+
+ fixff:
+ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+! -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
+! dotest.in test60.ok test71.ok test74.ok
+
+ clean:
+ -del *.out
+*** ../vim-7.3.495/src/testdir/Make_ming.mak 2012-04-05 16:56:38.000000000 +0200
+--- src/testdir/Make_ming.mak 2012-04-09 21:25:55.000000000 +0200
+***************
+*** 75,80 ****
+--- 75,82 ----
+
+ fixff:
+ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
++ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
++ dotest.in test60.ok test71.ok test74.ok
+
+ clean:
+ -$(DEL) *.out
+*** ../vim-7.3.495/src/version.c 2012-04-09 20:42:20.000000000 +0200
+--- src/version.c 2012-04-13 19:10:04.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 496,
+ /**/
+
+--
+There are 2 kinds of people in my world: those who know Unix, Perl, Vim, GNU,
+Linux, etc, and those who know COBOL. It gets very difficult for me at
+parties, not knowing which group to socialise with :-)
+ Sitaram Chamarty
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.497
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.497
+Problem: Crash when doing ":python print" and compiled with gcc and
+ the optimizer enabled.
+Solution: Avoid the crash, doesn't really fix the problem. (Christian
+ Brabandt)
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.496/src/if_py_both.h 2012-02-04 20:17:21.000000000 +0100
+--- src/if_py_both.h 2012-04-20 13:24:31.000000000 +0200
+***************
+*** 77,82 ****
+--- 77,87 ----
+ if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
+ return NULL;
+
++ /* TODO: This works around a gcc optimizer problem and avoids Vim
++ * from crashing. Should find a real solution. */
++ if (str == NULL)
++ return NULL;
++
+ Py_BEGIN_ALLOW_THREADS
+ Python_Lock_Vim();
+ writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+*** ../vim-7.3.496/src/version.c 2012-04-13 19:11:16.000000000 +0200
+--- src/version.c 2012-04-20 13:26:22.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 497,
+ /**/
+
+--
+There can't be a crisis today, my schedule is already full.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.498
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.498
+Problem: The behavior of the "- register changes depending on value of
+ the 'clipboard' option. (Szamotulski)
+Solution: Also set the "- register when the register is "*" or "+".
+ (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.497/src/ops.c 2012-03-23 14:16:19.000000000 +0100
+--- src/ops.c 2012-04-20 13:36:32.000000000 +0200
+***************
+*** 1720,1728 ****
+ did_yank = TRUE;
+ }
+
+! /* Yank into small delete register when no register specified and the
+! * delete is within one line. */
+! if (oap->regname == 0 && oap->motion_type != MLINE
+ && oap->line_count == 1)
+ {
+ oap->regname = '-';
+--- 1720,1733 ----
+ did_yank = TRUE;
+ }
+
+! /* Yank into small delete register when no named register specified
+! * and the delete is within one line. */
+! if ((
+! #ifdef FEAT_CLIPBOARD
+! ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
+! ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
+! #endif
+! oap->regname == 0) && oap->motion_type != MLINE
+ && oap->line_count == 1)
+ {
+ oap->regname = '-';
+*** ../vim-7.3.497/src/version.c 2012-04-20 13:31:16.000000000 +0200
+--- src/version.c 2012-04-20 13:45:26.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 498,
+ /**/
+
+--
+Did you ever stop to think... and forget to start again?
+ -- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.499
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.499
+Problem: When using any interface language when Vim is waiting for a child
+ process it gets confused by a child process started through the
+ interface.
+Solution: Always used waitpid() instead of wait(). (Yasuhiro Matsumoto)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.498/src/os_unix.c 2012-02-05 22:51:27.000000000 +0100
+--- src/os_unix.c 2012-04-20 15:47:17.000000000 +0200
+***************
+*** 3734,3757 ****
+
+ while (wait_pid != child)
+ {
+! # ifdef _THREAD_SAFE
+! /* Ugly hack: when compiled with Python threads are probably
+! * used, in which case wait() sometimes hangs for no obvious
+! * reason. Use waitpid() instead and loop (like the GUI). */
+! # ifdef __NeXT__
+ wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
+! # else
+ wait_pid = waitpid(child, status, WNOHANG);
+! # endif
+ if (wait_pid == 0)
+ {
+ /* Wait for 1/100 sec before trying again. */
+ mch_delay(10L, TRUE);
+ continue;
+ }
+- # else
+- wait_pid = wait(status);
+- # endif
+ if (wait_pid <= 0
+ # ifdef ECHILD
+ && errno == ECHILD
+--- 3734,3754 ----
+
+ while (wait_pid != child)
+ {
+! /* When compiled with Python threads are probably used, in which case
+! * wait() sometimes hangs for no obvious reason. Use waitpid()
+! * instead and loop (like the GUI). Also needed for other interfaces,
+! * they might call system(). */
+! # ifdef __NeXT__
+ wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
+! # else
+ wait_pid = waitpid(child, status, WNOHANG);
+! # endif
+ if (wait_pid == 0)
+ {
+ /* Wait for 1/100 sec before trying again. */
+ mch_delay(10L, TRUE);
+ continue;
+ }
+ if (wait_pid <= 0
+ # ifdef ECHILD
+ && errno == ECHILD
+*** ../vim-7.3.498/src/version.c 2012-04-20 13:46:02.000000000 +0200
+--- src/version.c 2012-04-20 15:54:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 499,
+ /**/
+
+--
+It's not hard to meet expenses, they're everywhere.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.500
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.500
+Problem: Ming makefile unconditionally sets WINVER.
+Solution: Only defined when not already defined. (Yasuhiro Matsumoto)
+Files: src/Make_ming.mak
+
+
+*** ../vim-7.3.499/src/Make_ming.mak 2012-03-28 17:43:06.000000000 +0200
+--- src/Make_ming.mak 2012-04-20 16:03:50.000000000 +0200
+***************
+*** 51,57 ****
+--- 51,59 ----
+ # set to yes to enable OLE support
+ OLE=no
+ # Set the default $(WINVER) to make it work with pre-Win2k
++ ifndef WINVER
+ WINVER = 0x0400
++ endif
+ # Set to yes to enable Cscope support
+ CSCOPE=yes
+ # Set to yes to enable Netbeans support
+*** ../vim-7.3.499/src/version.c 2012-04-20 15:55:10.000000000 +0200
+--- src/version.c 2012-04-20 16:12:34.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 500,
+ /**/
+
+--
+Life is a gift, living is an art. (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.501
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.501
+Problem: Error for "flush" not being defined when using Ruby command.
+Solution: Defined "flush" as a no-op method. (Kent Sibilev)
+Files: src/if_ruby.c
+
+
+*** ../vim-7.3.500/src/if_ruby.c 2011-08-04 19:34:55.000000000 +0200
+--- src/if_ruby.c 2012-04-20 16:18:56.000000000 +0200
+***************
+*** 1238,1243 ****
+--- 1238,1248 ----
+ return Qnil;
+ }
+
++ static VALUE f_nop(VALUE self)
++ {
++ return Qnil;
++ }
++
+ static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED)
+ {
+ int i;
+***************
+*** 1259,1264 ****
+--- 1264,1270 ----
+
+ rb_stdout = rb_obj_alloc(rb_cObject);
+ rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
++ rb_define_singleton_method(rb_stdout, "flush", f_nop, 0);
+ rb_define_global_function("p", f_p, -1);
+ }
+
+*** ../vim-7.3.500/src/version.c 2012-04-20 16:13:21.000000000 +0200
+--- src/version.c 2012-04-20 16:19:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 501,
+ /**/
+
+--
+Q: What do you call a fish without an eye?
+A: fsh!
+Q: What do you call a deer with no eyes?
+A: no eye deer.
+Q: What do you call a deer with no eyes and no legs?
+A: still no eye deer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.502
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.502
+Problem: Netbeans insert halfway a line actually appends to the line.
+Solution: Insert halfway the line. (Brian Victor)
+Files: src/netbeans.c
+
+
+*** ../vim-7.3.501/src/netbeans.c 2012-01-10 22:31:26.000000000 +0100
+--- src/netbeans.c 2012-04-20 19:44:31.000000000 +0200
+***************
+*** 1812,1825 ****
+ char_u *oldline = ml_get(lnum);
+ char_u *newline;
+
+! /* Insert halfway a line. For simplicity we assume we
+! * need to append to the line. */
+ newline = alloc_check(
+ (unsigned)(STRLEN(oldline) + len + 1));
+ if (newline != NULL)
+ {
+! STRCPY(newline, oldline);
+ STRCAT(newline, args);
+ ml_replace(lnum, newline, FALSE);
+ }
+ }
+--- 1812,1826 ----
+ char_u *oldline = ml_get(lnum);
+ char_u *newline;
+
+! /* Insert halfway a line. */
+ newline = alloc_check(
+ (unsigned)(STRLEN(oldline) + len + 1));
+ if (newline != NULL)
+ {
+! mch_memmove(newline, oldline, (size_t)pos->col);
+! newline[pos->col] = NUL;
+ STRCAT(newline, args);
++ STRCAT(newline, oldline + pos->col);
+ ml_replace(lnum, newline, FALSE);
+ }
+ }
+*** ../vim-7.3.501/src/version.c 2012-04-20 18:05:42.000000000 +0200
+--- src/version.c 2012-04-20 19:46:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 502,
+ /**/
+
+--
+Time flies like an arrow.
+Fruit flies like a banana.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.503
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.503 (after 7.3.501)
+Problem: Warning for unused argument.
+Solution: Add UNUSED.
+Files: src/if_ruby.c
+
+
+*** ../vim-7.3.502/src/if_ruby.c 2012-04-20 18:05:42.000000000 +0200
+--- src/if_ruby.c 2012-04-25 12:26:38.000000000 +0200
+***************
+*** 1238,1244 ****
+ return Qnil;
+ }
+
+! static VALUE f_nop(VALUE self)
+ {
+ return Qnil;
+ }
+--- 1238,1244 ----
+ return Qnil;
+ }
+
+! static VALUE f_nop(VALUE self UNUSED)
+ {
+ return Qnil;
+ }
+*** ../vim-7.3.502/src/version.c 2012-04-20 19:47:00.000000000 +0200
+--- src/version.c 2012-04-25 12:27:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 503,
+ /**/
+
+--
+Why isn't there mouse-flavored cat food?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.504
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.504
+Problem: Commands in help files are not highlighted.
+Solution: Allow for commands in backticks. Adjust CTRL-] to remove the
+ backticks.
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.503/src/ex_cmds.c 2012-04-05 16:04:58.000000000 +0200
+--- src/ex_cmds.c 2012-04-25 12:51:41.000000000 +0200
+***************
+*** 3421,3427 ****
+ * and re-attach to buffer, perhaps.
+ */
+ if (curwin->w_s == &(curwin->w_buffer->b_s))
+! curwin->w_s = &(buf->b_s);
+ #endif
+ curwin->w_buffer = buf;
+ curbuf = buf;
+--- 3421,3427 ----
+ * and re-attach to buffer, perhaps.
+ */
+ if (curwin->w_s == &(curwin->w_buffer->b_s))
+! curwin->w_s = &(buf->b_s);
+ #endif
+ curwin->w_buffer = buf;
+ curbuf = buf;
+***************
+*** 5965,5970 ****
+--- 5965,5993 ----
+ break;
+ }
+ *d = NUL;
++
++ if (*IObuff == '`')
++ {
++ if (d > IObuff + 2 && d[-1] == '`')
++ {
++ /* remove the backticks from `command` */
++ mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++ d[-2] = NUL;
++ }
++ else if (d > IObuff + 3 && d[-2] == '`' && d[-1] == ',')
++ {
++ /* remove the backticks and comma from `command`, */
++ mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++ d[-3] = NUL;
++ }
++ else if (d > IObuff + 4 && d[-3] == '`'
++ && d[-2] == '\\' && d[-1] == '.')
++ {
++ /* remove the backticks and dot from `command`\. */
++ mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++ d[-4] = NUL;
++ }
++ }
+ }
+ }
+
+*** ../vim-7.3.503/src/version.c 2012-04-25 12:28:05.000000000 +0200
+--- src/version.c 2012-04-25 12:46:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 504,
+ /**/
+
+--
+TIM: That is not an ordinary rabbit ... 'tis the most foul cruel and
+ bad-tempered thing you ever set eyes on.
+ROBIN: You tit. I soiled my armour I was so scared!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.505
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.505
+Problem: Test 11 fails on MS-Windows in some versions.
+Solution: Fix #ifdefs for whether filtering through a pipe is possible. Move
+ setting b_no_eol_lnum back to where it was before patch 7.3.124.
+ (David Pope)
+Files: src/feature.h, src/eval.c, src/ex_cmds.c, src/fileio.c
+
+
+*** ../vim-7.3.504/src/feature.h 2011-10-20 21:09:25.000000000 +0200
+--- src/feature.h 2012-04-25 16:44:26.000000000 +0200
+***************
+*** 1316,1318 ****
+--- 1316,1326 ----
+ #ifdef FEAT_NORMAL
+ # define FEAT_PERSISTENT_UNDO
+ #endif
++
++ /*
++ * +filterpipe
++ */
++ #if (defined(UNIX) && !defined(USE_SYSTEM)) \
++ || (defined(WIN3264) && defined(FEAT_GUI_W32))
++ # define FEAT_FILTERPIPE
++ #endif
+*** ../vim-7.3.504/src/eval.c 2012-04-05 16:53:55.000000000 +0200
+--- src/eval.c 2012-04-25 16:43:53.000000000 +0200
+***************
+*** 12090,12096 ****
+ #ifdef FEAT_SEARCHPATH
+ "file_in_path",
+ #endif
+! #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
+ "filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+--- 12090,12096 ----
+ #ifdef FEAT_SEARCHPATH
+ "file_in_path",
+ #endif
+! #ifdef FEAT_FILTERPIPE
+ "filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+*** ../vim-7.3.504/src/ex_cmds.c 2012-04-25 12:57:23.000000000 +0200
+--- src/ex_cmds.c 2012-04-25 16:46:02.000000000 +0200
+***************
+*** 1113,1119 ****
+ if (do_out)
+ shell_flags |= SHELL_DOOUT;
+
+! #if (!defined(USE_SYSTEM) && defined(UNIX)) || defined(WIN3264)
+ if (!do_in && do_out && !p_stmp)
+ {
+ /* Use a pipe to fetch stdout of the command, do not use a temp file. */
+--- 1113,1119 ----
+ if (do_out)
+ shell_flags |= SHELL_DOOUT;
+
+! #ifdef FEAT_FILTERPIPE
+ if (!do_in && do_out && !p_stmp)
+ {
+ /* Use a pipe to fetch stdout of the command, do not use a temp file. */
+*** ../vim-7.3.504/src/fileio.c 2012-02-29 18:22:03.000000000 +0100
+--- src/fileio.c 2012-04-25 16:40:37.000000000 +0200
+***************
+*** 2655,2664 ****
+ }
+ #endif
+
+- /* Reset now, following writes should not omit the EOL. Also, the line
+- * number will become invalid because of edits. */
+- curbuf->b_no_eol_lnum = 0;
+-
+ if (recoverymode && error)
+ return FAIL;
+ return OK;
+--- 2655,2660 ----
+***************
+*** 5098,5103 ****
+--- 5094,5101 ----
+ {
+ aco_save_T aco;
+
++ curbuf->b_no_eol_lnum = 0; /* in case it was set by the previous read */
++
+ /*
+ * Apply POST autocommands.
+ * Careful: The autocommands may call buf_write() recursively!
+*** ../vim-7.3.504/src/version.c 2012-04-25 12:57:23.000000000 +0200
+--- src/version.c 2012-04-25 16:49:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 505,
+ /**/
+
+--
+Lose weight, NEVER Diet again with
+ The "Invisible Weight Loss Patch"
+ (spam e-mail)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.506
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.506
+Problem: GTK gives an error when selecting a non-existent file.
+Solution: Add a handler to avoid the error. (Christian Brabandt)
+Files: src/gui_gtk.c
+
+
+*** ../vim-7.3.505/src/gui_gtk.c 2011-06-26 04:48:56.000000000 +0200
+--- src/gui_gtk.c 2012-04-25 17:08:58.000000000 +0200
+***************
+*** 90,95 ****
+--- 90,100 ----
+ static void entry_activate_cb(GtkWidget *widget, gpointer data);
+ static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
+ static void find_replace_cb(GtkWidget *widget, gpointer data);
++ static void recent_func_log_func(
++ const gchar *log_domain,
++ GLogLevelFlags log_level,
++ const gchar *message,
++ gpointer user_data);
+
+ #if defined(FEAT_TOOLBAR)
+ /*
+***************
+*** 839,844 ****
+--- 844,851 ----
+ GtkWidget *fc;
+ #endif
+ char_u dirbuf[MAXPATHL];
++ guint log_handler;
++ const gchar *domain = "Gtk";
+
+ title = CONVERT_TO_UTF8(title);
+
+***************
+*** 853,858 ****
+--- 860,870 ----
+ /* If our pointer is currently hidden, then we should show it. */
+ gui_mch_mousehide(FALSE);
+
++ /* Hack: The GTK file dialog warns when it can't access a new file, this
++ * makes it shut up. http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
++ log_handler = g_log_set_handler(domain, G_LOG_LEVEL_WARNING,
++ recent_func_log_func, NULL);
++
+ #ifdef USE_FILE_CHOOSER
+ /* We create the dialog each time, so that the button text can be "Open"
+ * or "Save" according to the action. */
+***************
+*** 916,921 ****
+--- 928,934 ----
+ gtk_widget_show(gui.filedlg);
+ gtk_main();
+ #endif
++ g_log_remove_handler(domain, log_handler);
+
+ CONVERT_TO_UTF8_FREE(title);
+ if (gui.browse_fname == NULL)
+***************
+*** 1882,1884 ****
+--- 1895,1908 ----
+ * backwards compatibility anyway. */
+ do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
+ }
++
++ static void
++ recent_func_log_func(const gchar *log_domain UNUSED,
++ GLogLevelFlags log_level UNUSED,
++ const gchar *message UNUSED,
++ gpointer user_data UNUSED)
++ {
++ /* We just want to suppress the warnings. */
++ /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
++ }
++
+*** ../vim-7.3.505/src/version.c 2012-04-25 16:50:44.000000000 +0200
+--- src/version.c 2012-04-25 17:08:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 506,
+ /**/
+
+--
+Compilation process failed successfully.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.507
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.507
+Problem: When exiting with unsaved changes, selecting an existing file in
+ the file dialog, there is no dialog to ask whether the existing
+ file should be overwritten. (Felipe G. Nievinski)
+Solution: Call check_overwrite() before writing. (Christian Brabandt)
+Files: src/ex_cmds.c, src/ex_cmds2.c, src/proto/ex_cmds.pro
+
+
+*** ../vim-7.3.506/src/ex_cmds.c 2012-04-25 16:50:44.000000000 +0200
+--- src/ex_cmds.c 2012-04-25 17:19:53.000000000 +0200
+***************
+*** 25,31 ****
+ static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
+ #endif
+
+- static int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
+ static int check_readonly __ARGS((int *forceit, buf_T *buf));
+ #ifdef FEAT_AUTOCMD
+ static void delbuf_msg __ARGS((char_u *name));
+--- 25,30 ----
+***************
+*** 2722,2728 ****
+ * May set eap->forceit if a dialog says it's OK to overwrite.
+ * Return OK if it's OK, FAIL if it is not.
+ */
+! static int
+ check_overwrite(eap, buf, fname, ffname, other)
+ exarg_T *eap;
+ buf_T *buf;
+--- 2721,2727 ----
+ * May set eap->forceit if a dialog says it's OK to overwrite.
+ * Return OK if it's OK, FAIL if it is not.
+ */
+! int
+ check_overwrite(eap, buf, fname, ffname, other)
+ exarg_T *eap;
+ buf_T *buf;
+*** ../vim-7.3.506/src/ex_cmds2.c 2012-03-23 18:39:10.000000000 +0100
+--- src/ex_cmds2.c 2012-04-25 17:24:37.000000000 +0200
+***************
+*** 1489,1494 ****
+--- 1489,1495 ----
+ char_u buff[DIALOG_MSG_SIZE];
+ int ret;
+ buf_T *buf2;
++ exarg_T ea;
+
+ dialog_msg(buff, _("Save changes to \"%s\"?"),
+ (buf->b_fname != NULL) ?
+***************
+*** 1498,1510 ****
+ else
+ ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
+
+ if (ret == VIM_YES)
+ {
+ #ifdef FEAT_BROWSE
+ /* May get file name, when there is none */
+ browse_save_fname(buf);
+ #endif
+! if (buf->b_fname != NULL) /* didn't hit Cancel */
+ (void)buf_write_all(buf, FALSE);
+ }
+ else if (ret == VIM_NO)
+--- 1499,1517 ----
+ else
+ ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
+
++ /* Init ea pseudo-structure, this is needed for the check_overwrite()
++ * function. */
++ ea.append = ea.forceit = FALSE;
++
+ if (ret == VIM_YES)
+ {
+ #ifdef FEAT_BROWSE
+ /* May get file name, when there is none */
+ browse_save_fname(buf);
+ #endif
+! if (buf->b_fname != NULL && check_overwrite(&ea, buf,
+! buf->b_fname, buf->b_ffname, FALSE) == OK)
+! /* didn't hit Cancel */
+ (void)buf_write_all(buf, FALSE);
+ }
+ else if (ret == VIM_NO)
+***************
+*** 1532,1538 ****
+ /* May get file name, when there is none */
+ browse_save_fname(buf2);
+ #endif
+! if (buf2->b_fname != NULL) /* didn't hit Cancel */
+ (void)buf_write_all(buf2, FALSE);
+ #ifdef FEAT_AUTOCMD
+ /* an autocommand may have deleted the buffer */
+--- 1539,1547 ----
+ /* May get file name, when there is none */
+ browse_save_fname(buf2);
+ #endif
+! if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
+! buf2->b_fname, buf2->b_ffname, FALSE) == OK)
+! /* didn't hit Cancel */
+ (void)buf_write_all(buf2, FALSE);
+ #ifdef FEAT_AUTOCMD
+ /* an autocommand may have deleted the buffer */
+*** ../vim-7.3.506/src/proto/ex_cmds.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/ex_cmds.pro 2012-04-25 17:25:47.000000000 +0200
+***************
+*** 23,28 ****
+--- 23,29 ----
+ void ex_update __ARGS((exarg_T *eap));
+ void ex_write __ARGS((exarg_T *eap));
+ int do_write __ARGS((exarg_T *eap));
++ int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
+ void ex_wnext __ARGS((exarg_T *eap));
+ void do_wqall __ARGS((exarg_T *eap));
+ int not_writing __ARGS((void));
+*** ../vim-7.3.506/src/version.c 2012-04-25 17:10:12.000000000 +0200
+--- src/version.c 2012-04-25 17:17:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 507,
+ /**/
+
+--
+BROTHER MAYNARD: Armaments Chapter Two Verses Nine to Twenty One.
+ANOTHER MONK: And St. Attila raised his hand grenade up on high saying "O
+ Lord bless this thy hand grenade that with it thou mayest
+ blow thine enemies to tiny bits, in thy mercy. "and the Lord
+ did grin and people did feast upon the lambs and sloths and
+ carp and anchovies and orang-utans and breakfast cereals and
+ fruit bats and...
+BROTHER MAYNARD: Skip a bit brother ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.508
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.508
+Problem: Default for v:register is not set.
+Solution: Init v:register in eval_init(). Correct for 'clipboard' before the
+ main loop. (Ingo Karkat)
+Files: src/eval.c, src/main.c
+
+
+*** ../vim-7.3.507/src/eval.c 2012-04-25 16:50:44.000000000 +0200
+--- src/eval.c 2012-04-25 17:56:41.000000000 +0200
+***************
+*** 880,885 ****
+--- 880,886 ----
+ hash_add(&compat_hashtab, p->vv_di.di_key);
+ }
+ set_vim_var_nr(VV_SEARCHFORWARD, 1L);
++ set_reg_var(0); /* default for v:register is not 0 but '"' */
+
+ #ifdef EBCDIC
+ /*
+*** ../vim-7.3.507/src/main.c 2012-03-28 17:10:26.000000000 +0200
+--- src/main.c 2012-04-25 18:01:28.000000000 +0200
+***************
+*** 928,933 ****
+--- 928,945 ----
+ TIME_MSG("VimEnter autocommands");
+ #endif
+
++ #if defined(FEAT_EVAL) && defined(FEAT_CLIPBOARD)
++ /* Adjust default register name for "unnamed" in 'clipboard'. Can only be
++ * done after the clipboard is available and all initial commands that may
++ * modify the 'clipboard' setting have run; i.e. just before entering the
++ * main loop. */
++ {
++ int default_regname = 0;
++ adjust_clip_reg(&default_regname);
++ set_reg_var(default_regname);
++ }
++ #endif
++
+ #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
+ /* When a startup script or session file setup for diff'ing and
+ * scrollbind, sync the scrollbind now. */
+***************
+*** 1357,1363 ****
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname,
+ buf->b_fname, FALSE, buf);
+! buf->b_changedtick = -1; /* note that we did it already */
+ /* start all over, autocommands may mess up the lists */
+ next_tp = first_tabpage;
+ break;
+--- 1369,1375 ----
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname,
+ buf->b_fname, FALSE, buf);
+! buf->b_changedtick = -1; /* note that we did it already */
+ /* start all over, autocommands may mess up the lists */
+ next_tp = first_tabpage;
+ break;
+*** ../vim-7.3.507/src/version.c 2012-04-25 17:32:14.000000000 +0200
+--- src/version.c 2012-04-25 18:00:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 508,
+ /**/
+
+--
+I wonder, do vegetarians eat fruit bats?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.509
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.509
+Problem: ":vimgrep" fails when 'autochdir' is set.
+Solution: A more generic solution for changing directory. (Ben Fritz)
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.508/src/quickfix.c 2012-03-07 20:13:44.000000000 +0100
+--- src/quickfix.c 2012-04-25 18:52:24.000000000 +0200
+***************
+*** 130,138 ****
+ static void qf_fill_buffer __ARGS((qf_info_T *qi));
+ #endif
+ static char_u *get_mef_name __ARGS((void));
+! static buf_T *load_dummy_buffer __ARGS((char_u *fname));
+! static void wipe_dummy_buffer __ARGS((buf_T *buf));
+! static void unload_dummy_buffer __ARGS((buf_T *buf));
+ static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
+
+ /* Quickfix window check helper macro */
+--- 130,139 ----
+ static void qf_fill_buffer __ARGS((qf_info_T *qi));
+ #endif
+ static char_u *get_mef_name __ARGS((void));
+! static void restore_start_dir __ARGS((char_u *dirname_start));
+! static buf_T *load_dummy_buffer __ARGS((char_u *fname, char_u *dirname_start, char_u *resulting_dir));
+! static void wipe_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
+! static void unload_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
+ static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
+
+ /* Quickfix window check helper macro */
+***************
+*** 3237,3255 ****
+
+ /* Load file into a buffer, so that 'fileencoding' is detected,
+ * autocommands applied, etc. */
+! buf = load_dummy_buffer(fname);
+!
+! /* When autocommands changed directory: go back. We assume it was
+! * ":lcd %:p:h". */
+! mch_dirname(dirname_now, MAXPATHL);
+! if (STRCMP(dirname_start, dirname_now) != 0)
+! {
+! exarg_T ea;
+!
+! ea.arg = dirname_start;
+! ea.cmdidx = CMD_lcd;
+! ex_cd(&ea);
+! }
+
+ p_mls = save_mls;
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+--- 3238,3244 ----
+
+ /* Load file into a buffer, so that 'fileencoding' is detected,
+ * autocommands applied, etc. */
+! buf = load_dummy_buffer(fname, dirname_start, dirname_now);
+
+ p_mls = save_mls;
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+***************
+*** 3320,3326 ****
+ {
+ /* Never keep a dummy buffer if there is another buffer
+ * with the same name. */
+! wipe_dummy_buffer(buf);
+ buf = NULL;
+ }
+ else if (!cmdmod.hide
+--- 3309,3315 ----
+ {
+ /* Never keep a dummy buffer if there is another buffer
+ * with the same name. */
+! wipe_dummy_buffer(buf, dirname_start);
+ buf = NULL;
+ }
+ else if (!cmdmod.hide
+***************
+*** 3336,3347 ****
+ * many swap files. */
+ if (!found_match)
+ {
+! wipe_dummy_buffer(buf);
+ buf = NULL;
+ }
+ else if (buf != first_match_buf || (flags & VGR_NOJUMP))
+ {
+! unload_dummy_buffer(buf);
+ buf = NULL;
+ }
+ }
+--- 3325,3336 ----
+ * many swap files. */
+ if (!found_match)
+ {
+! wipe_dummy_buffer(buf, dirname_start);
+ buf = NULL;
+ }
+ else if (buf != first_match_buf || (flags & VGR_NOJUMP))
+ {
+! unload_dummy_buffer(buf, dirname_start);
+ buf = NULL;
+ }
+ }
+***************
+*** 3487,3499 ****
+ }
+
+ /*
+! * Load file "fname" into a dummy buffer and return the buffer pointer.
+ * Returns NULL if it fails.
+- * Must call unload_dummy_buffer() or wipe_dummy_buffer() later!
+ */
+ static buf_T *
+! load_dummy_buffer(fname)
+ char_u *fname;
+ {
+ buf_T *newbuf;
+ buf_T *newbuf_to_wipe = NULL;
+--- 3476,3523 ----
+ }
+
+ /*
+! * Restore current working directory to "dirname_start" if they differ, taking
+! * into account whether it is set locally or globally.
+! */
+! static void
+! restore_start_dir(dirname_start)
+! char_u *dirname_start;
+! {
+! char_u *dirname_now = alloc(MAXPATHL);
+!
+! if (NULL != dirname_now)
+! {
+! mch_dirname(dirname_now, MAXPATHL);
+! if (STRCMP(dirname_start, dirname_now) != 0)
+! {
+! /* If the directory has changed, change it back by building up an
+! * appropriate ex command and executing it. */
+! exarg_T ea;
+!
+! ea.arg = dirname_start;
+! ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd;
+! ex_cd(&ea);
+! }
+! }
+! }
+!
+! /*
+! * Load file "fname" into a dummy buffer and return the buffer pointer,
+! * placing the directory resulting from the buffer load into the
+! * "resulting_dir" pointer. "resulting_dir" must be allocated by the caller
+! * prior to calling this function. Restores directory to "dirname_start" prior
+! * to returning, if autocmds or the 'autochdir' option have changed it.
+! *
+! * If creating the dummy buffer does not fail, must call unload_dummy_buffer()
+! * or wipe_dummy_buffer() later!
+! *
+ * Returns NULL if it fails.
+ */
+ static buf_T *
+! load_dummy_buffer(fname, dirname_start, resulting_dir)
+ char_u *fname;
++ char_u *dirname_start; /* in: old directory */
++ char_u *resulting_dir; /* out: new directory */
+ {
+ buf_T *newbuf;
+ buf_T *newbuf_to_wipe = NULL;
+***************
+*** 3548,3569 ****
+ wipe_buffer(newbuf_to_wipe, FALSE);
+ }
+
+ if (!buf_valid(newbuf))
+ return NULL;
+ if (failed)
+ {
+! wipe_dummy_buffer(newbuf);
+ return NULL;
+ }
+ return newbuf;
+ }
+
+ /*
+! * Wipe out the dummy buffer that load_dummy_buffer() created.
+ */
+ static void
+! wipe_dummy_buffer(buf)
+ buf_T *buf;
+ {
+ if (curbuf != buf) /* safety check */
+ {
+--- 3572,3604 ----
+ wipe_buffer(newbuf_to_wipe, FALSE);
+ }
+
++ /*
++ * When autocommands/'autochdir' option changed directory: go back.
++ * Let the caller know what the resulting dir was first, in case it is
++ * important.
++ */
++ mch_dirname(resulting_dir, MAXPATHL);
++ restore_start_dir(dirname_start);
++
+ if (!buf_valid(newbuf))
+ return NULL;
+ if (failed)
+ {
+! wipe_dummy_buffer(newbuf, dirname_start);
+ return NULL;
+ }
+ return newbuf;
+ }
+
+ /*
+! * Wipe out the dummy buffer that load_dummy_buffer() created. Restores
+! * directory to "dirname_start" prior to returning, if autocmds or the
+! * 'autochdir' option have changed it.
+ */
+ static void
+! wipe_dummy_buffer(buf, dirname_start)
+ buf_T *buf;
++ char_u *dirname_start;
+ {
+ if (curbuf != buf) /* safety check */
+ {
+***************
+*** 3583,3600 ****
+ * new aborting error, interrupt, or uncaught exception. */
+ leave_cleanup(&cs);
+ #endif
+ }
+ }
+
+ /*
+! * Unload the dummy buffer that load_dummy_buffer() created.
+ */
+ static void
+! unload_dummy_buffer(buf)
+ buf_T *buf;
+ {
+ if (curbuf != buf) /* safety check */
+ close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 3618,3645 ----
+ * new aborting error, interrupt, or uncaught exception. */
+ leave_cleanup(&cs);
+ #endif
++ /* When autocommands/'autochdir' option changed directory: go back. */
++ restore_start_dir(dirname_start);
+ }
+ }
+
+ /*
+! * Unload the dummy buffer that load_dummy_buffer() created. Restores
+! * directory to "dirname_start" prior to returning, if autocmds or the
+! * 'autochdir' option have changed it.
+ */
+ static void
+! unload_dummy_buffer(buf, dirname_start)
+ buf_T *buf;
++ char_u *dirname_start;
+ {
+ if (curbuf != buf) /* safety check */
++ {
+ close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
++
++ /* When autocommands/'autochdir' option changed directory: go back. */
++ restore_start_dir(dirname_start);
++ }
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+*** ../vim-7.3.508/src/version.c 2012-04-25 18:24:24.000000000 +0200
+--- src/version.c 2012-04-25 18:43:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 509,
+ /**/
+
+--
+ Arthur pulls Pin out. The MONK blesses the grenade as ...
+ARTHUR: (quietly) One, two, five ...
+GALAHAD: Three, sir!
+ARTHUR: Three.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.510
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.510
+Problem: Test 77 fails on Solaris 7. (Michael Soyka)
+Solution: Replace any tabs with spaces.
+Files: src/testdir/test77.in
+
+
+*** ../vim-7.3.509/src/testdir/test77.in 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/test77.in 2012-04-30 11:30:31.000000000 +0200
+***************
+*** 21,27 ****
+ :while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
+ ggdd
+ :w! Xtest
+! :!cksum Xtest > test.out
+ :qa!
+ ENDTEST
+
+--- 21,29 ----
+ :while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
+ ggdd
+ :w! Xtest
+! :r !cksum Xtest
+! :s/\s/ /g
+! :.w! test.out
+ :qa!
+ ENDTEST
+
+*** ../vim-7.3.509/src/version.c 2012-04-25 18:57:17.000000000 +0200
+--- src/version.c 2012-04-30 11:33:35.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 510,
+ /**/
+
+--
+SIGFUN -- signature too funny (core dumped)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.511
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.511
+Problem: Using a FileReadCmd autocommand that does ":e! {file}" may cause a
+ crash. (Christian Brabandt)
+Solution: Properly restore curwin->w_s.
+Files: src/fileio.c
+
+
+*** ../vim-7.3.510/src/fileio.c 2012-04-25 16:50:44.000000000 +0200
+--- src/fileio.c 2012-04-30 17:04:22.000000000 +0200
+***************
+*** 8982,8987 ****
+--- 8982,8991 ----
+ && buf_valid(aco->new_curbuf)
+ && aco->new_curbuf->b_ml.ml_mfp != NULL)
+ {
++ # if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
++ if (curwin->w_s == &curbuf->b_s)
++ curwin->w_s = &aco->new_curbuf->b_s;
++ # endif
+ --curbuf->b_nwindows;
+ curbuf = aco->new_curbuf;
+ curwin->w_buffer = curbuf;
+*** ../vim-7.3.510/src/version.c 2012-04-30 11:34:20.000000000 +0200
+--- src/version.c 2012-04-30 17:01:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 511,
+ /**/
+
+--
+There is no right or wrong, there is only your personal opinion.
+ (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.512
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.512
+Problem: undofile() returns a useless name when passed an empty string.
+Solution: Return an empty string. (Christian Brabandt)
+Files: src/eval.c
+
+
+*** ../vim-7.3.511/src/eval.c 2012-04-25 18:24:24.000000000 +0200
+--- src/eval.c 2012-04-30 17:23:26.000000000 +0200
+***************
+*** 18259,18269 ****
+ rettv->v_type = VAR_STRING;
+ #ifdef FEAT_PERSISTENT_UNDO
+ {
+! char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
+
+! if (ffname != NULL)
+! rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
+! vim_free(ffname);
+ }
+ #else
+ rettv->vval.v_string = NULL;
+--- 18259,18279 ----
+ rettv->v_type = VAR_STRING;
+ #ifdef FEAT_PERSISTENT_UNDO
+ {
+! char_u *fname = get_tv_string(&argvars[0]);
+
+! if (*fname == NUL)
+! {
+! /* If there is no file name there will be no undo file. */
+! rettv->vval.v_string = NULL;
+! }
+! else
+! {
+! char_u *ffname = FullName_save(fname, FALSE);
+!
+! if (ffname != NULL)
+! rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
+! vim_free(ffname);
+! }
+ }
+ #else
+ rettv->vval.v_string = NULL;
+*** ../vim-7.3.511/src/version.c 2012-04-30 17:04:47.000000000 +0200
+--- src/version.c 2012-04-30 17:24:42.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 512,
+ /**/
+
+--
+It is illegal for a driver to be blindfolded while operating a vehicle.
+ [real standing law in Alabama, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.513
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.513
+Problem: Cannot use CTRL-E and CTRL-Y with "r".
+Solution: Make CTRL-E and CTRL-Y work like in Insert mode. (Christian
+ Brabandt)
+Files: src/edit.c, src/normal.c, src/proto/edit.pro
+
+
+*** ../vim-7.3.512/src/edit.c 2012-04-05 16:07:01.000000000 +0200
+--- src/edit.c 2012-04-30 17:53:47.000000000 +0200
+***************
+*** 253,259 ****
+ #ifdef FEAT_DIGRAPHS
+ static int ins_digraph __ARGS((void));
+ #endif
+- static int ins_copychar __ARGS((linenr_T lnum));
+ static int ins_ctrl_ey __ARGS((int tc));
+ #ifdef FEAT_SMARTINDENT
+ static void ins_try_si __ARGS((int c));
+--- 253,258 ----
+***************
+*** 9899,9905 ****
+ * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
+ * Returns the char to be inserted, or NUL if none found.
+ */
+! static int
+ ins_copychar(lnum)
+ linenr_T lnum;
+ {
+--- 9898,9904 ----
+ * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
+ * Returns the char to be inserted, or NUL if none found.
+ */
+! int
+ ins_copychar(lnum)
+ linenr_T lnum;
+ {
+*** ../vim-7.3.512/src/normal.c 2012-03-28 12:59:53.000000000 +0200
+--- src/normal.c 2012-04-30 18:06:13.000000000 +0200
+***************
+*** 7070,7076 ****
+ for (n = cap->count1; n > 0; --n)
+ {
+ State = REPLACE;
+! ins_char(cap->nchar);
+ State = old_State;
+ if (cap->ncharC1 != 0)
+ ins_char(cap->ncharC1);
+--- 7070,7087 ----
+ for (n = cap->count1; n > 0; --n)
+ {
+ State = REPLACE;
+! if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
+! {
+! int c = ins_copychar(curwin->w_cursor.lnum
+! + (cap->nchar == Ctrl_Y ? -1 : 1));
+! if (c != NUL)
+! ins_char(c);
+! else
+! /* will be decremented further down */
+! ++curwin->w_cursor.col;
+! }
+! else
+! ins_char(cap->nchar);
+ State = old_State;
+ if (cap->ncharC1 != 0)
+ ins_char(cap->ncharC1);
+***************
+*** 7092,7098 ****
+ * line will be changed.
+ */
+ ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
+! ptr[curwin->w_cursor.col] = cap->nchar;
+ if (p_sm && msg_silent == 0)
+ showmatch(cap->nchar);
+ ++curwin->w_cursor.col;
+--- 7103,7117 ----
+ * line will be changed.
+ */
+ ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
+! if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
+! {
+! int c = ins_copychar(curwin->w_cursor.lnum
+! + (cap->nchar == Ctrl_Y ? -1 : 1));
+! if (c != NUL)
+! ptr[curwin->w_cursor.col] = c;
+! }
+! else
+! ptr[curwin->w_cursor.col] = cap->nchar;
+ if (p_sm && msg_silent == 0)
+ showmatch(cap->nchar);
+ ++curwin->w_cursor.col;
+*** ../vim-7.3.512/src/proto/edit.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/edit.pro 2012-04-30 17:54:41.000000000 +0200
+***************
+*** 39,42 ****
+--- 39,43 ----
+ int hkmap __ARGS((int c));
+ void ins_scroll __ARGS((void));
+ void ins_horscroll __ARGS((void));
++ int ins_copychar __ARGS((linenr_T lnum));
+ /* vim: set ft=c : */
+*** ../vim-7.3.512/src/version.c 2012-04-30 17:35:44.000000000 +0200
+--- src/version.c 2012-04-30 18:17:52.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 513,
+ /**/
+
+--
+It is illegal for anyone to try and stop a child from playfully jumping over
+puddles of water.
+ [real standing law in California, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.514
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.514
+Problem: No completion for :history command.
+Solution: Add the completion and update the docs. Also fix ":behave"
+ completion. (Dominique Pelle)
+Files: runtime/doc/cmdline.txt, runtime/doc/map.txt, src/ex_docmd.c,
+ src/ex_getln.c, src/vim.h
+
+
+*** ../vim-7.3.513/runtime/doc/cmdline.txt 2010-08-15 21:57:17.000000000 +0200
+--- runtime/doc/cmdline.txt 2012-04-30 18:30:00.000000000 +0200
+***************
+*** 330,341 ****
+
+ :his[tory] [{name}] [{first}][, [{last}]]
+ List the contents of history {name} which can be:
+! c[md] or : command-line history
+! s[earch] or / search string history
+! e[xpr] or = expression register history
+! i[nput] or @ input line history
+! d[ebug] or > debug command history
+! a[ll] all of the above
+ {not in Vi}
+
+ If the numbers {first} and/or {last} are given, the respective
+--- 330,341 ----
+
+ :his[tory] [{name}] [{first}][, [{last}]]
+ List the contents of history {name} which can be:
+! c[md] or : command-line history
+! s[earch] or / or ? search string history
+! e[xpr] or = expression register history
+! i[nput] or @ input line history
+! d[ebug] or > debug command history
+! a[ll] all of the above
+ {not in Vi}
+
+ If the numbers {first} and/or {last} are given, the respective
+*** ../vim-7.3.513/runtime/doc/map.txt 2011-07-20 16:36:35.000000000 +0200
+--- runtime/doc/map.txt 2012-04-30 18:30:00.000000000 +0200
+***************
+*** 1202,1207 ****
+--- 1219,1225 ----
+
+ -complete=augroup autocmd groups
+ -complete=buffer buffer names
++ -complete=behave :behave suboptions
+ -complete=color color schemes
+ -complete=command Ex command (and arguments)
+ -complete=compiler compilers
+***************
+*** 1216,1221 ****
+--- 1234,1240 ----
+ -complete=function function name
+ -complete=help help subjects
+ -complete=highlight highlight groups
++ -complete=history :history suboptions
+ -complete=locale locale names (as output of locale -a)
+ -complete=mapping mapping name
+ -complete=menu menus
+*** ../vim-7.3.513/src/ex_docmd.c 2012-02-12 20:13:55.000000000 +0100
+--- src/ex_docmd.c 2012-04-30 18:33:27.000000000 +0200
+***************
+*** 3920,3927 ****
+--- 3920,3935 ----
+ #endif
+ case CMD_behave:
+ xp->xp_context = EXPAND_BEHAVE;
++ xp->xp_pattern = arg;
+ break;
+
++ #if defined(FEAT_CMDHIST)
++ case CMD_history:
++ xp->xp_context = EXPAND_HISTORY;
++ xp->xp_pattern = arg;
++ break;
++ #endif
++
+ #endif /* FEAT_CMDL_COMPL */
+
+ default:
+***************
+*** 5329,5334 ****
+--- 5337,5343 ----
+ } command_complete[] =
+ {
+ {EXPAND_AUGROUP, "augroup"},
++ {EXPAND_BEHAVE, "behave"},
+ {EXPAND_BUFFERS, "buffer"},
+ {EXPAND_COLORS, "color"},
+ {EXPAND_COMMANDS, "command"},
+***************
+*** 5350,5357 ****
+ {EXPAND_FUNCTIONS, "function"},
+ {EXPAND_HELP, "help"},
+ {EXPAND_HIGHLIGHT, "highlight"},
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ {EXPAND_LOCALES, "locale"},
+ #endif
+ {EXPAND_MAPPINGS, "mapping"},
+--- 5359,5369 ----
+ {EXPAND_FUNCTIONS, "function"},
+ {EXPAND_HELP, "help"},
+ {EXPAND_HIGHLIGHT, "highlight"},
++ #if defined(FEAT_CMDHIST)
++ {EXPAND_HISTORY, "history"},
++ #endif
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ {EXPAND_LOCALES, "locale"},
+ #endif
+ {EXPAND_MAPPINGS, "mapping"},
+*** ../vim-7.3.513/src/ex_getln.c 2012-03-07 19:16:49.000000000 +0100
+--- src/ex_getln.c 2012-04-30 18:36:04.000000000 +0200
+***************
+*** 25,31 ****
+ int cmdlen; /* number of chars in command line */
+ int cmdpos; /* current cursor position */
+ int cmdspos; /* cursor column on screen */
+! int cmdfirstc; /* ':', '/', '?', '=' or NUL */
+ int cmdindent; /* number of spaces before cmdline */
+ char_u *cmdprompt; /* message in front of cmdline */
+ int cmdattr; /* attributes for prompt */
+--- 25,31 ----
+ int cmdlen; /* number of chars in command line */
+ int cmdpos; /* current cursor position */
+ int cmdspos; /* cursor column on screen */
+! int cmdfirstc; /* ':', '/', '?', '=', '>' or NUL */
+ int cmdindent; /* number of spaces before cmdline */
+ char_u *cmdprompt; /* message in front of cmdline */
+ int cmdattr; /* attributes for prompt */
+***************
+*** 111,116 ****
+--- 111,119 ----
+ #ifdef FEAT_CMDL_COMPL
+ static int expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
+ static int ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
++ # ifdef FEAT_CMDHIST
++ static char_u *get_history_arg __ARGS((expand_T *xp, int idx));
++ # endif
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ static int ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ static int ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
+***************
+*** 4628,4633 ****
+--- 4631,4639 ----
+ {
+ {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
+ {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
++ #ifdef FEAT_CMDHIST
++ {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
++ #endif
+ #ifdef FEAT_USR_CMDS
+ {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
+ {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
+***************
+*** 5245,5250 ****
+--- 5251,5284 ----
+ NULL
+ };
+
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++ /*
++ * Function given to ExpandGeneric() to obtain the possible first
++ * arguments of the ":history command.
++ */
++ static char_u *
++ get_history_arg(xp, idx)
++ expand_T *xp UNUSED;
++ int idx;
++ {
++ static char_u compl[2] = { NUL, NUL };
++ char *short_names = ":=@>?/";
++ int short_names_count = STRLEN(short_names);
++ int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
++
++ if (idx < short_names_count)
++ {
++ compl[0] = (char_u)short_names[idx];
++ return compl;
++ }
++ if (idx < short_names_count + history_name_count)
++ return (char_u *)history_names[idx - short_names_count];
++ if (idx == short_names_count + history_name_count)
++ return (char_u *)"all";
++ return NULL;
++ }
++ #endif
++
+ /*
+ * init_history() - Initialize the command line history.
+ * Also used to re-allocate the history when the size changes.
+*** ../vim-7.3.513/src/vim.h 2012-03-23 16:25:13.000000000 +0100
+--- src/vim.h 2012-04-30 18:30:00.000000000 +0200
+***************
+*** 781,786 ****
+--- 781,787 ----
+ #define EXPAND_FILES_IN_PATH 38
+ #define EXPAND_OWNSYNTAX 39
+ #define EXPAND_LOCALES 40
++ #define EXPAND_HISTORY 41
+
+ /* Values for exmode_active (0 is no exmode) */
+ #define EXMODE_NORMAL 1
+*** ../vim-7.3.513/src/version.c 2012-04-30 18:18:43.000000000 +0200
+--- src/version.c 2012-04-30 18:36:19.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 514,
+ /**/
+
+--
+You can be stopped by the police for biking over 65 miles per hour.
+You are not allowed to walk across a street on your hands.
+ [real standing laws in Connecticut, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.515
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.515
+Problem: 'wildignorecase' only applies to the last part of the path.
+Solution: Also ignore case for letters earlier in the path.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.514/src/misc1.c 2012-04-09 20:42:20.000000000 +0200
+--- src/misc1.c 2012-04-30 21:00:18.000000000 +0200
+***************
+*** 9461,9466 ****
+--- 9461,9467 ----
+
+ /*
+ * Find the first part in the path name that contains a wildcard.
++ * When EW_ICASE is set every letter is considered to be a wildcard.
+ * Copy it into "buf", including the preceding characters.
+ */
+ p = buf;
+***************
+*** 9480,9486 ****
+ s = p + 1;
+ }
+ else if (path_end >= path + wildoff
+! && vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
+ e = p;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+--- 9481,9492 ----
+ s = p + 1;
+ }
+ else if (path_end >= path + wildoff
+! && (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
+! #ifndef CASE_INSENSITIVE_FILENAME
+! || ((flags & EW_ICASE)
+! && isalpha(PTR2CHAR(path_end)))
+! #endif
+! ))
+ e = p;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+*** ../vim-7.3.514/src/version.c 2012-04-30 18:48:38.000000000 +0200
+--- src/version.c 2012-04-30 21:05:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 515,
+ /**/
+
+--
+If an elephant is left tied to a parking meter, the parking fee has to be paid
+just as it would for a vehicle.
+ [real standing law in Florida, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.516
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.516
+Problem: extend(o, o) may crash Vim.
+Solution: Fix crash and add test. (Thinca and Hirohito Higashi)
+Files: src/eval.c, src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.3.515/src/eval.c 2012-04-30 17:35:44.000000000 +0200
+--- src/eval.c 2012-05-18 12:02:44.000000000 +0200
+***************
+*** 10191,10197 ****
+ EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
+ break;
+ }
+! else if (*action == 'f')
+ {
+ clear_tv(&di1->di_tv);
+ copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
+--- 10191,10197 ----
+ EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
+ break;
+ }
+! else if (*action == 'f' && HI2DI(hi2) != di1)
+ {
+ clear_tv(&di1->di_tv);
+ copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
+*** ../vim-7.3.515/src/testdir/test55.in 2010-11-10 20:31:24.000000000 +0100
+--- src/testdir/test55.in 2012-05-18 11:57:23.000000000 +0200
+***************
+*** 352,357 ****
+--- 352,375 ----
+ :let dict4copy = deepcopy(dict4)
+ :$put =(l == lcopy)
+ :$put =(dict4 == dict4copy)
++ :"
++ :" Pass the same List to extend()
++ :let l = [1, 2, 3, 4, 5]
++ :call extend(l, l)
++ :$put =string(l)
++ :"
++ :" Pass the same Dict to extend()
++ :let d = { 'a': {'b': 'B'}}
++ :call extend(d, d)
++ :$put =string(d)
++ :"
++ :" Pass the same Dict to extend() with "error"
++ :try
++ : call extend(d, d, "error")
++ :catch
++ : $put =v:exception[:15] . v:exception[-1:-1]
++ :endtry
++ :$put =string(d)
+ :endfun
+ :"
+ :call Test(1, 2, [3, 4], {5: 6}) " This may take a while
+*** ../vim-7.3.515/src/testdir/test55.ok 2010-11-10 20:31:24.000000000 +0100
+--- src/testdir/test55.ok 2012-05-18 11:57:01.000000000 +0200
+***************
+*** 111,113 ****
+--- 111,117 ----
+ 0
+ 1
+ 1
++ [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
++ {'a': {'b': 'B'}}
++ Vim(call):E737: a
++ {'a': {'b': 'B'}}
+*** ../vim-7.3.515/src/version.c 2012-04-30 21:09:38.000000000 +0200
+--- src/version.c 2012-05-18 12:04:54.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 516,
+ /**/
+
+--
+I used to wonder about the meaning of life. But I looked it
+up in the dictionary under "L" and there it was - the meaning
+of life. It was less than I expected. - Dogbert
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.517
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.517
+Problem: Crash when using "vipvv". (Alexandre Provencio)
+Solution: Don't let the text length become negative.
+Files: src/ops.c
+
+
+*** ../vim-7.3.516/src/ops.c 2012-04-20 13:46:02.000000000 +0200
+--- src/ops.c 2012-05-18 12:28:09.000000000 +0200
+***************
+*** 3042,3047 ****
+--- 3042,3049 ----
+ }
+ #endif
+ }
++ if (endcol == MAXCOL)
++ endcol = (colnr_T)STRLEN(p);
+ if (startcol > endcol
+ #ifdef FEAT_VIRTUALEDIT
+ || is_oneChar
+***************
+*** 3050,3057 ****
+ bd.textlen = 0;
+ else
+ {
+- if (endcol == MAXCOL)
+- endcol = (colnr_T)STRLEN(p);
+ bd.textlen = endcol - startcol + oap->inclusive;
+ }
+ bd.textstart = p + startcol;
+--- 3052,3057 ----
+*** ../vim-7.3.516/src/version.c 2012-05-18 12:06:58.000000000 +0200
+--- src/version.c 2012-05-18 12:48:51.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 517,
+ /**/
+
+--
+BODY: I'm not dead!
+CART DRIVER: 'Ere. He says he's not dead.
+LARGE MAN: Yes he is.
+BODY: I'm not!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.518
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.518
+Problem: When 'encoding' is a double-byte encoding ":helptags" may not find
+ tags correctly.
+Solution: Use vim_strbyte() instead of vim_strchr(). (Yasuhiro Matsumoto)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.517/src/ex_cmds.c 2012-04-25 17:32:14.000000000 +0200
+--- src/ex_cmds.c 2012-05-18 16:20:20.000000000 +0200
+***************
+*** 6535,6541 ****
+ p1 = vim_strchr(IObuff, '*'); /* find first '*' */
+ while (p1 != NULL)
+ {
+! p2 = vim_strchr(p1 + 1, '*'); /* find second '*' */
+ if (p2 != NULL && p2 > p1 + 1) /* skip "*" and "**" */
+ {
+ for (s = p1 + 1; s < p2; ++s)
+--- 6535,6544 ----
+ p1 = vim_strchr(IObuff, '*'); /* find first '*' */
+ while (p1 != NULL)
+ {
+! /* Use vim_strbyte() instead of vim_strchr() so that when
+! * 'encoding' is dbcs it still works, don't find '*' in the
+! * second byte. */
+! p2 = vim_strbyte(p1 + 1, '*'); /* find second '*' */
+ if (p2 != NULL && p2 > p1 + 1) /* skip "*" and "**" */
+ {
+ for (s = p1 + 1; s < p2; ++s)
+*** ../vim-7.3.517/src/version.c 2012-05-18 12:49:33.000000000 +0200
+--- src/version.c 2012-05-18 16:23:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 518,
+ /**/
+
+--
+If all you have is a hammer, everything looks like a nail.
+When your hammer is C++, everything begins to look like a thumb.
+ -- Steve Hoflich, comp.lang.c++
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.519
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.519
+Problem: When completefunction returns it cannot indicate end of completion
+ mode.
+Solution: Recognize completefunction returning -3. (Mtsushita Shougo)
+Files: src/edit.c
+
+
+*** ../vim-7.3.518/src/edit.c 2012-04-30 18:18:43.000000000 +0200
+--- src/edit.c 2012-05-18 16:35:06.000000000 +0200
+***************
+*** 5205,5213 ****
+ }
+
+ /* Return value -2 means the user complete function wants to
+! * cancel the complete without an error. */
+ if (col == -2)
+ return FAIL;
+
+ /*
+ * Reset extended parameters of completion, when start new
+--- 5205,5221 ----
+ }
+
+ /* Return value -2 means the user complete function wants to
+! * cancel the complete without an error.
+! * Return value -3 does the same as -2 and leaves CTRL-X mode.*/
+ if (col == -2)
+ return FAIL;
++ if (col == -3)
++ {
++ ctrl_x_mode = 0;
++ edit_submode = NULL;
++ msg_clr_cmdline();
++ return FAIL;
++ }
+
+ /*
+ * Reset extended parameters of completion, when start new
+*** ../vim-7.3.518/src/version.c 2012-05-18 16:24:06.000000000 +0200
+--- src/version.c 2012-05-18 16:34:27.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 519,
+ /**/
+
+--
+Looking at Perl through Lisp glasses, Perl looks atrocious.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.520
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.520
+Problem: Gvim starts up slow on Unbuntu 12.04.
+Solution: Move the call to gui_mch_init_check() to after fork(). (Yasuhiro
+ Matsumoto) Do check $DISPLAY being set.
+Files: src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro
+
+
+*** ../vim-7.3.519/src/gui.c 2011-10-20 21:27:57.000000000 +0200
+--- src/gui.c 2012-05-18 16:53:14.000000000 +0200
+***************
+*** 270,275 ****
+--- 270,281 ----
+ }
+ /* Child */
+
++ #ifdef FEAT_GUI_GTK
++ /* Call gtk_init_check() here after fork(). See gui_init_check(). */
++ if (gui_mch_init_check() != OK)
++ exit(1);
++ #endif
++
+ # if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+ /*
+ * Change our process group. On some systems/shells a CTRL-C in the
+***************
+*** 430,436 ****
+--- 436,452 ----
+ #ifdef ALWAYS_USE_GUI
+ result = OK;
+ #else
++ # ifdef FEAT_GUI_GTK
++ /*
++ * Note: Don't call gtk_init_check() before fork, it will be called after
++ * the fork. When calling it before fork, it make vim hang for a while.
++ * See gui_do_fork().
++ * Use a simpler check if the GUI window can probably be opened.
++ */
++ result = gui.dofork ? gui_mch_early_init_check() : gui_mch_init_check();
++ # else
+ result = gui_mch_init_check();
++ # endif
+ #endif
+ return result;
+ }
+*** ../vim-7.3.519/src/gui_gtk_x11.c 2011-10-26 11:36:21.000000000 +0200
+--- src/gui_gtk_x11.c 2012-05-18 17:00:45.000000000 +0200
+***************
+*** 1414,1420 ****
+ }
+
+ /*
+! * Check if the GUI can be started. Called before gvimrc is sourced.
+ * Return OK or FAIL.
+ */
+ int
+--- 1414,1442 ----
+ }
+
+ /*
+! * Check if the GUI can be started. Called before gvimrc is sourced and
+! * before fork().
+! * Return OK or FAIL.
+! */
+! int
+! gui_mch_early_init_check(void)
+! {
+! char_u *p;
+!
+! /* Guess that when $DISPLAY isn't set the GUI can't start. */
+! p = mch_getenv((char_u *)"DISPLAY");
+! if (p == NULL || *p == NUL)
+! {
+! gui.dying = TRUE;
+! EMSG(_((char *)e_opendisp));
+! return FAIL;
+! }
+! return OK;
+! }
+!
+! /*
+! * Check if the GUI can be started. Called before gvimrc is sourced but after
+! * fork().
+ * Return OK or FAIL.
+ */
+ int
+***************
+*** 3050,3056 ****
+
+ for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
+ {
+! /* OpenOffice tries to use TARGET_HTML and fails when it doesn't
+ * return something, instead of trying another target. Therefore only
+ * offer TARGET_HTML when it works. */
+ if (!clip_html && selection_targets[i].info == TARGET_HTML)
+--- 3072,3078 ----
+
+ for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
+ {
+! /* OpenOffice tries to use TARGET_HTML and fails when we don't
+ * return something, instead of trying another target. Therefore only
+ * offer TARGET_HTML when it works. */
+ if (!clip_html && selection_targets[i].info == TARGET_HTML)
+*** ../vim-7.3.519/src/proto/gui_gtk_x11.pro 2011-08-10 17:44:41.000000000 +0200
+--- src/proto/gui_gtk_x11.pro 2012-05-18 16:54:28.000000000 +0200
+***************
+*** 4,9 ****
+--- 4,10 ----
+ void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+ void gui_mch_stop_blink __ARGS((void));
+ void gui_mch_start_blink __ARGS((void));
++ int gui_mch_early_init_check __ARGS((void));
+ int gui_mch_init_check __ARGS((void));
+ void gui_mch_show_tabline __ARGS((int showit));
+ int gui_mch_showing_tabline __ARGS((void));
+*** ../vim-7.3.519/src/version.c 2012-05-18 16:35:17.000000000 +0200
+--- src/version.c 2012-05-18 16:45:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 520,
+ /**/
+
+--
+Bad programs can be written in any language.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.521
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.521
+Problem: Using "z=" on a multi-byte character may cause a crash.
+Solution: Don't use strlen() on an int pointer.
+Files: src/spell.c
+
+
+*** ../vim-7.3.520/src/spell.c 2012-01-10 22:26:12.000000000 +0100
+--- src/spell.c 2012-05-18 18:01:58.000000000 +0200
+***************
+*** 14494,14506 ****
+ int p0 = -333;
+ int c0;
+ int did_white = FALSE;
+
+ /*
+ * Convert the multi-byte string to a wide-character string.
+ * Remove accents, if wanted. We actually remove all non-word characters.
+ * But keep white space.
+ */
+! n = 0;
+ for (s = inword; *s != NUL; )
+ {
+ t = s;
+--- 14494,14508 ----
+ int p0 = -333;
+ int c0;
+ int did_white = FALSE;
++ int wordlen;
++
+
+ /*
+ * Convert the multi-byte string to a wide-character string.
+ * Remove accents, if wanted. We actually remove all non-word characters.
+ * But keep white space.
+ */
+! wordlen = 0;
+ for (s = inword; *s != NUL; )
+ {
+ t = s;
+***************
+*** 14521,14532 ****
+ continue;
+ }
+ }
+! word[n++] = c;
+ }
+! word[n] = NUL;
+
+ /*
+! * This comes from Aspell phonet.cpp.
+ * Converted from C++ to C. Added support for multi-byte chars.
+ * Changed to keep spaces.
+ */
+--- 14523,14534 ----
+ continue;
+ }
+ }
+! word[wordlen++] = c;
+ }
+! word[wordlen] = NUL;
+
+ /*
+! * This algorithm comes from Aspell phonet.cpp.
+ * Converted from C++ to C. Added support for multi-byte chars.
+ * Changed to keep spaces.
+ */
+***************
+*** 14711,14717 ****
+ }
+ if (k > k0)
+ mch_memmove(word + i + k0, word + i + k,
+! sizeof(int) * (STRLEN(word + i + k) + 1));
+
+ /* new "actual letter" */
+ c = word[i];
+--- 14713,14719 ----
+ }
+ if (k > k0)
+ mch_memmove(word + i + k0, word + i + k,
+! sizeof(int) * (wordlen - (i + k) + 1));
+
+ /* new "actual letter" */
+ c = word[i];
+***************
+*** 14739,14745 ****
+ if (c != NUL)
+ wres[reslen++] = c;
+ mch_memmove(word, word + i + 1,
+! sizeof(int) * (STRLEN(word + i + 1) + 1));
+ i = 0;
+ z0 = 1;
+ }
+--- 14741,14747 ----
+ if (c != NUL)
+ wres[reslen++] = c;
+ mch_memmove(word, word + i + 1,
+! sizeof(int) * (wordlen - (i + 1) + 1));
+ i = 0;
+ z0 = 1;
+ }
+*** ../vim-7.3.520/src/version.c 2012-05-18 17:03:14.000000000 +0200
+--- src/version.c 2012-05-18 18:06:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 521,
+ /**/
+
+--
+OLD WOMAN: King of the WHO?
+ARTHUR: The Britons.
+OLD WOMAN: Who are the Britons?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.522
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.522
+Problem: Crash in vim_realloc() when using MEM_PROFILE.
+Solution: Avoid using a NULL argument. (Dominique Pelle)
+Files: src/eval.c
+
+
+*** ../vim-7.3.521/src/eval.c 2012-05-18 12:06:58.000000000 +0200
+--- src/eval.c 2012-05-18 18:19:25.000000000 +0200
+***************
+*** 14643,14649 ****
+ long growmin = (long)((p - start) * 2 + prevlen);
+ prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+! if ((newprev = vim_realloc(prev, prevsize)) == NULL)
+ {
+ do_outofmem_msg((long_u)prevsize);
+ failed = TRUE;
+--- 14643,14651 ----
+ long growmin = (long)((p - start) * 2 + prevlen);
+ prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+! newprev = prev == NULL ? alloc(prevsize)
+! : vim_realloc(prev, prevsize);
+! if (newprev == NULL)
+ {
+ do_outofmem_msg((long_u)prevsize);
+ failed = TRUE;
+*** ../vim-7.3.521/src/version.c 2012-05-18 18:07:57.000000000 +0200
+--- src/version.c 2012-05-18 18:33:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 522,
+ /**/
+
+--
+ARTHUR: ... and I am your king ....
+OLD WOMAN: Ooooh! I didn't know we had a king. I thought we were an
+ autonomous collective ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.523
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.523
+Problem: ":diffupdate" doesn't check for files changed elsewhere.
+Solution: Add the ! flag. (Christian Brabandt)
+Files: runtime/doc/diff.txt, src/diff.c, src/ex_cmds.h
+
+
+*** ../vim-7.3.522/runtime/doc/diff.txt 2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/diff.txt 2012-05-18 18:41:49.000000000 +0200
+***************
+*** 178,184 ****
+ nodiff" before hiding it.
+
+ *:diffu* *:diffupdate*
+! :diffu[pdate] Update the diff highlighting and folds.
+
+ Vim attempts to keep the differences updated when you make changes to the
+ text. This mostly takes care of inserted and deleted lines. Changes within a
+--- 178,184 ----
+ nodiff" before hiding it.
+
+ *:diffu* *:diffupdate*
+! :diffu[pdate][!] Update the diff highlighting and folds.
+
+ Vim attempts to keep the differences updated when you make changes to the
+ text. This mostly takes care of inserted and deleted lines. Changes within a
+***************
+*** 187,192 ****
+--- 187,195 ----
+
+ :diffupdate
+
++ If the ! is included Vim will check if the file was changed externally and
++ needs to be reloaded. It will prompt for each changed file, like `:checktime`
++ was used.
+
+ Vim will show filler lines for lines that are missing in one window but are
+ present in another. These lines were inserted in another file or deleted in
+*** ../vim-7.3.522/src/diff.c 2010-09-21 16:56:29.000000000 +0200
+--- src/diff.c 2012-05-18 18:45:09.000000000 +0200
+***************
+*** 783,788 ****
+--- 783,797 ----
+ goto theend;
+ }
+
++ /* :diffupdate! */
++ if (eap != NULL && eap->forceit)
++ for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
++ {
++ buf = curtab->tp_diffbuf[idx_new];
++ if (buf_valid(buf))
++ buf_check_timestamp(buf, FALSE);
++ }
++
+ /* Write the first buffer to a tempfile. */
+ buf = curtab->tp_diffbuf[idx_orig];
+ if (diff_write(buf, tmp_orig) == FAIL)
+*** ../vim-7.3.522/src/ex_cmds.h 2012-02-13 00:01:38.000000000 +0100
+--- src/ex_cmds.h 2012-05-18 18:37:56.000000000 +0200
+***************
+*** 304,310 ****
+ EX(CMD_display, "display", ex_display,
+ EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_diffupdate, "diffupdate", ex_diffupdate,
+! TRLBAR),
+ EX(CMD_diffget, "diffget", ex_diffgetput,
+ RANGE|EXTRA|TRLBAR|MODIFY),
+ EX(CMD_diffoff, "diffoff", ex_diffoff,
+--- 304,310 ----
+ EX(CMD_display, "display", ex_display,
+ EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_diffupdate, "diffupdate", ex_diffupdate,
+! BANG|TRLBAR),
+ EX(CMD_diffget, "diffget", ex_diffgetput,
+ RANGE|EXTRA|TRLBAR|MODIFY),
+ EX(CMD_diffoff, "diffoff", ex_diffoff,
+*** ../vim-7.3.522/src/version.c 2012-05-18 18:34:15.000000000 +0200
+--- src/version.c 2012-05-18 18:39:13.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 523
+ /**/
+
+--
+"The future's already arrived - it's just not evenly distributed yet."
+ -- William Gibson
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.524
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.524 (after 7.3.523)
+Problem: Missing comma.
+Solution: Add the comma.
+Files: src/version.c
+
+
+*** ../vim-7.3.523/src/version.c 2012-05-18 18:47:11.000000000 +0200
+--- src/version.c 2012-05-18 21:52:26.000000000 +0200
+***************
+*** 715,721 ****
+ static int included_patches[] =
+ { /* Add new patch number below this line */
+ /**/
+! 523
+ /**/
+ 522,
+ /**/
+--- 715,723 ----
+ static int included_patches[] =
+ { /* Add new patch number below this line */
+ /**/
+! 524,
+! /**/
+! 523,
+ /**/
+ 522,
+ /**/
+
+--
+DENNIS: You can't expect to wield supreme executive power just 'cause some
+ watery tart threw a sword at you!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.525
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.525
+Problem: Compiler warning on 64 bit MS-Windows.
+Solution: Add type cast. (Mike Williams)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.524/src/ex_getln.c 2012-04-30 18:48:38.000000000 +0200
+--- src/ex_getln.c 2012-05-23 20:33:16.000000000 +0200
+***************
+*** 5263,5269 ****
+ {
+ static char_u compl[2] = { NUL, NUL };
+ char *short_names = ":=@>?/";
+! int short_names_count = STRLEN(short_names);
+ int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
+
+ if (idx < short_names_count)
+--- 5263,5269 ----
+ {
+ static char_u compl[2] = { NUL, NUL };
+ char *short_names = ":=@>?/";
+! int short_names_count = (int)STRLEN(short_names);
+ int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
+
+ if (idx < short_names_count)
+*** ../vim-7.3.524/src/version.c 2012-05-18 21:53:29.000000000 +0200
+--- src/version.c 2012-05-25 11:01:51.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 525,
+ /**/
+
+--
+For humans, honesty is a matter of degree. Engineers are always honest in
+matters of technology and human relationships. That's why it's a good idea
+to keep engineers away from customers, romantic interests, and other people
+who can't handle the truth.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.526
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.526
+Problem: Confusing indenting for #ifdef.
+Solution: Remove and add indent. (Elias Diem)
+Files: src/normal.c
+
+
+*** ../vim-7.3.525/src/normal.c 2012-04-30 18:18:43.000000000 +0200
+--- src/normal.c 2012-05-23 20:35:13.000000000 +0200
+***************
+*** 29,37 ****
+ static void set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+ #endif
+ static int
+! # ifdef __BORLANDC__
+! _RTLENTRYF
+! # endif
+ nv_compare __ARGS((const void *s1, const void *s2));
+ static int find_command __ARGS((int cmdchar));
+ static void op_colon __ARGS((oparg_T *oap));
+--- 29,37 ----
+ static void set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+ #endif
+ static int
+! #ifdef __BORLANDC__
+! _RTLENTRYF
+! #endif
+ nv_compare __ARGS((const void *s1, const void *s2));
+ static int find_command __ARGS((int cmdchar));
+ static void op_colon __ARGS((oparg_T *oap));
+*** ../vim-7.3.525/src/version.c 2012-05-25 11:02:34.000000000 +0200
+--- src/version.c 2012-05-25 11:03:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 526,
+ /**/
+
+--
+While it's true that many normal people whould prefer not to _date_ an
+engineer, most normal people harbor an intense desire to _mate_ with them,
+thus producing engineerlike children who will have high-paying jobs long
+before losing their virginity.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.527
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=latin1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.527
+Problem: Clang complains about non-ASCII characters in a string.
+Solution: Change to \x88 form. (Dominique Pelle)
+Files: src/charset.c
+
+
+*** ../vim-7.3.526/src/charset.c 2012-01-26 13:40:04.000000000 +0100
+--- src/charset.c 2012-05-25 11:49:58.000000000 +0200
+***************
+*** 1602,1611 ****
+ #define LATIN1LOWER 'l'
+ #define LATIN1UPPER 'U'
+
+- /* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]%_'abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿ */
+ static char_u latin1flags[257] = " UUUUUUUUUUUUUUUUUUUUUUUUUU llllllllllllllllllllllllll UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
+! static char_u latin1upper[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\7f\80\81\82\83\84\85\86\87\88\89\8a\8b\8c\8d\8e\8f\90\91\92\93\94\95\96\97\98\99\9a\9b\9c\9d\9e\9f ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞßÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ÷ØÙÚÛÜÃÞÿ";
+! static char_u latin1lower[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\7f\80\81\82\83\84\85\86\87\88\89\8a\8b\8c\8d\8e\8f\90\91\92\93\94\95\96\97\98\99\9a\9b\9c\9d\9e\9f ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿à áâãäåæçèéêëìÃîïðñòóôõö×øùúûüýþßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿ";
+
+ int
+ vim_islower(c)
+--- 1602,1610 ----
+ #define LATIN1LOWER 'l'
+ #define LATIN1UPPER 'U'
+
+ static char_u latin1flags[257] = " UUUUUUUUUUUUUUUUUUUUUUUUUU llllllllllllllllllllllllll UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
+! static char_u latin1upper[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\xff";
+! static char_u latin1lower[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
+
+ int
+ vim_islower(c)
+*** ../vim-7.3.526/src/version.c 2012-05-25 11:04:34.000000000 +0200
+--- src/version.c 2012-05-25 11:52:06.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 527,
+ /**/
+
+--
+An alien life briefly visits earth. Just before departing it leaves a
+message in the dust on the back of a white van. The world is shocked
+and wants to know what it means. After months of studies the worlds
+best linguistic scientists are able to decipher the message: "Wash me!".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.528
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.528
+Problem: Crash when closing last window in a tab. (Alex Efros)
+Solution: Use common code in close_last_window_tabpage(). (Christian
+ Brabandt)
+Files: src/window.c
+
+
+*** ../vim-7.3.527/src/window.c 2012-03-16 19:07:54.000000000 +0100
+--- src/window.c 2012-05-25 12:25:16.000000000 +0200
+***************
+*** 23,28 ****
+--- 23,29 ----
+ static void win_totop __ARGS((int size, int flags));
+ static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
+ static int last_window __ARGS((void));
++ static int close_last_window_tabpage __ARGS((win_T *win, int free_buf, tabpage_T *prev_curtab));
+ static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
+ static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
+ static tabpage_T *alt_tabpage __ARGS((void));
+***************
+*** 2105,2110 ****
+--- 2106,2147 ----
+ }
+
+ /*
++ * Close the possibly last window in a tab page.
++ * Returns TRUE when the window was closed already.
++ */
++ static int
++ close_last_window_tabpage(win, free_buf, prev_curtab)
++ win_T *win;
++ int free_buf;
++ tabpage_T *prev_curtab;
++ {
++ if (firstwin == lastwin)
++ {
++ /*
++ * Closing the last window in a tab page. First go to another tab
++ * page and then close the window and the tab page. This avoids that
++ * curwin and curtab are invalid while we are freeing memory, they may
++ * be used in GUI events.
++ */
++ goto_tabpage_tp(alt_tabpage());
++ redraw_tabline = TRUE;
++
++ /* Safety check: Autocommands may have closed the window when jumping
++ * to the other tab page. */
++ if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
++ {
++ int h = tabline_height();
++
++ win_close_othertab(win, free_buf, prev_curtab);
++ if (h != tabline_height())
++ shell_new_rows();
++ }
++ return TRUE;
++ }
++ return FALSE;
++ }
++
++ /*
+ * Close window "win". Only works for the current tab page.
+ * If "free_buf" is TRUE related buffer may be unloaded.
+ *
+***************
+*** 2143,2171 ****
+ }
+ #endif
+
+! /*
+! * When closing the last window in a tab page first go to another tab
+! * page and then close the window and the tab page. This avoids that
+! * curwin and curtab are not invalid while we are freeing memory, they may
+! * be used in GUI events.
+! */
+! if (firstwin == lastwin)
+! {
+! goto_tabpage_tp(alt_tabpage());
+! redraw_tabline = TRUE;
+!
+! /* Safety check: Autocommands may have closed the window when jumping
+! * to the other tab page. */
+! if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
+! {
+! int h = tabline_height();
+!
+! win_close_othertab(win, free_buf, prev_curtab);
+! if (h != tabline_height())
+! shell_new_rows();
+! }
+! return;
+! }
+
+ /* When closing the help window, try restoring a snapshot after closing
+ * the window. Otherwise clear the snapshot, it's now invalid. */
+--- 2180,2190 ----
+ }
+ #endif
+
+! /* When closing the last window in a tab page first go to another tab page
+! * and then close the window and the tab page to avoid that curwin and
+! * curtab are invalid while we are freeing memory. */
+! if (close_last_window_tabpage(win, free_buf, prev_curtab))
+! return;
+
+ /* When closing the help window, try restoring a snapshot after closing
+ * the window. Otherwise clear the snapshot, it's now invalid. */
+***************
+*** 2225,2231 ****
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+! if (!win_valid(win) || last_window() || curtab != prev_curtab)
+ return;
+
+ /* Free the memory used for the window and get the window that received
+--- 2244,2251 ----
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+! if (!win_valid(win) || last_window() || curtab != prev_curtab
+! || close_last_window_tabpage(win, free_buf, prev_curtab))
+ return;
+
+ /* Free the memory used for the window and get the window that received
+***************
+*** 2310,2316 ****
+
+ /*
+ * Close window "win" in tab page "tp", which is not the current tab page.
+! * This may be the last window ih that tab page and result in closing the tab,
+ * thus "tp" may become invalid!
+ * Caller must check if buffer is hidden and whether the tabline needs to be
+ * updated.
+--- 2330,2336 ----
+
+ /*
+ * Close window "win" in tab page "tp", which is not the current tab page.
+! * This may be the last window in that tab page and result in closing the tab,
+ * thus "tp" may become invalid!
+ * Caller must check if buffer is hidden and whether the tabline needs to be
+ * updated.
+*** ../vim-7.3.527/src/version.c 2012-05-25 11:56:06.000000000 +0200
+--- src/version.c 2012-05-25 12:38:25.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 528,
+ /**/
+
+--
+For society, it's probably a good thing that engineers value function over
+appearance. For example, you wouldn't want engineers to build nuclear power
+plants that only _look_ like they would keep all the radiation inside.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.529
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.529
+Problem: Using a count before "v" and "V" does not work (Kikyous)
+Solution: Make the count select that many characters or lines. (Christian
+ Brabandt)
+Files: src/normal.c
+
+
+*** ../vim-7.3.528/src/normal.c 2012-05-25 11:04:34.000000000 +0200
+--- src/normal.c 2012-05-25 13:12:06.000000000 +0200
+***************
+*** 7660,7672 ****
+ else /* start Visual mode */
+ {
+ check_visual_highlight();
+! if (cap->count0) /* use previously selected part */
+ {
+! if (resel_VIsual_mode == NUL) /* there is none */
+! {
+! beep_flush();
+! return;
+! }
+ VIsual = curwin->w_cursor;
+
+ VIsual_active = TRUE;
+--- 7660,7668 ----
+ else /* start Visual mode */
+ {
+ check_visual_highlight();
+! if (cap->count0 > 0 && resel_VIsual_mode != NUL)
+ {
+! /* use previously selected part */
+ VIsual = curwin->w_cursor;
+
+ VIsual_active = TRUE;
+***************
+*** 7725,7730 ****
+--- 7721,7736 ----
+ /* start Select mode when 'selectmode' contains "cmd" */
+ may_start_select('c');
+ n_start_visual_mode(cap->cmdchar);
++ if (VIsual_mode != 'V' && *p_sel == 'e')
++ ++cap->count1; /* include one more char */
++ if (cap->count0 > 0 && --cap->count1 > 0)
++ {
++ /* With a count select that many characters or lines. */
++ if (VIsual_mode == 'v' || VIsual_mode == Ctrl_V)
++ nv_right(cap);
++ else if (VIsual_mode == 'V')
++ nv_down(cap);
++ }
+ }
+ }
+ }
+*** ../vim-7.3.528/src/version.c 2012-05-25 12:38:57.000000000 +0200
+--- src/version.c 2012-05-25 12:59:58.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 529,
+ /**/
+
+--
+Normal people believe that if it ain't broke, don't fix it. Engineers believe
+that if it ain't broke, it doesn't have enough features yet.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.530
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.530 (after 7.3.520)
+Problem: Gvim does not work when 'guioptions' includes "f". (Davido)
+Solution: Call gui_mch_init_check() when running GUI in the foreground.
+ (Yasuhiro Matsumoto)
+Files: src/gui.c
+
+
+*** ../vim-7.3.529/src/gui.c 2012-05-18 17:03:13.000000000 +0200
+--- src/gui.c 2012-05-25 14:01:26.000000000 +0200
+***************
+*** 102,107 ****
+--- 102,111 ----
+ else
+ #endif
+ {
++ /* If there is 'f' in 'guioptions' and specify -g argument,
++ * gui_mch_init_check() was not called yet. */
++ if (gui_mch_init_check() != OK)
++ exit(1);
+ gui_attempt_start();
+ }
+
+*** ../vim-7.3.529/src/version.c 2012-05-25 13:12:33.000000000 +0200
+--- src/version.c 2012-05-25 14:05:46.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 530,
+ /**/
+
+--
+I think that you'll agree that engineers are very effective in their social
+interactions. It's the "normal" people who are nuts.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.531
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.531 (after 7.3.530)
+Problem: GUI does not work on MS-Windows.
+Solution: Add the missing #ifdef. (Patrick Avery)
+Files: src/gui.c
+
+
+*** ../vim-7.3.530/src/gui.c 2012-05-25 14:06:18.000000000 +0200
+--- src/gui.c 2012-05-27 00:34:51.000000000 +0200
+***************
+*** 102,111 ****
+--- 102,113 ----
+ else
+ #endif
+ {
++ #ifdef FEAT_GUI_GTK
+ /* If there is 'f' in 'guioptions' and specify -g argument,
+ * gui_mch_init_check() was not called yet. */
+ if (gui_mch_init_check() != OK)
+ exit(1);
++ #endif
+ gui_attempt_start();
+ }
+
+*** ../vim-7.3.530/src/version.c 2012-05-25 14:06:18.000000000 +0200
+--- src/version.c 2012-05-27 00:37:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 531,
+ /**/
+
+--
+I learned the customs and mannerisms of engineers by observing them, much the
+way Jane Goodall learned about the great apes, but without the hassle of
+grooming.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.532
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.532
+Problem: Compiler warning from Clang.
+Solution: Use a different way to point inside a string. (Dominique Pelle)
+Files: src/syntax.c
+
+
+*** ../vim-7.3.531/src/syntax.c 2012-03-23 16:25:13.000000000 +0100
+--- src/syntax.c 2012-06-01 13:13:58.000000000 +0200
+***************
+*** 9476,9482 ****
+ int cnt;
+ int attr;
+ {
+! msg_puts_attr((char_u *)("N \bI \b! \b" + cnt / 11), attr);
+ msg_clr_eos();
+ out_flush();
+ ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
+--- 9476,9482 ----
+ int cnt;
+ int attr;
+ {
+! msg_puts_attr((char_u *)&("N \bI \b! \b"[cnt / 11]), attr);
+ msg_clr_eos();
+ out_flush();
+ ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
+*** ../vim-7.3.531/src/version.c 2012-05-27 00:37:45.000000000 +0200
+--- src/version.c 2012-06-01 13:14:51.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 532,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+8. You spend half of the plane trip with your laptop on your lap...and your
+ child in the overhead compartment.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.533
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.533
+Problem: Memory leak when writing undo file.
+Solution: Free the ACL. (Dominique Pelle)
+Files: src/undo.c
+
+
+*** ../vim-7.3.532/src/undo.c 2011-12-08 15:14:04.000000000 +0100
+--- src/undo.c 2012-06-01 13:38:42.000000000 +0200
+***************
+*** 1535,1540 ****
+--- 1535,1541 ----
+ /* For systems that support ACL: get the ACL from the original file. */
+ acl = mch_get_acl(buf->b_ffname);
+ mch_set_acl(file_name, acl);
++ mch_free_acl(acl);
+ }
+ #endif
+
+*** ../vim-7.3.532/src/version.c 2012-06-01 13:18:48.000000000 +0200
+--- src/version.c 2012-06-01 13:39:16.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 533,
+ /**/
+
+--
+"How is your new girlfriend?"
+"90-60-90 man!"
+"What, pale purple?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.534
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.534 (after 7.3.461)
+Problem: When using an InsertCharPre autocommand autoindent fails.
+Solution: Proper handling of v:char. (Alexey Radkov)
+Files: src/edit.c
+
+
+*** ../vim-7.3.533/src/edit.c 2012-05-18 16:35:17.000000000 +0200
+--- src/edit.c 2012-06-01 14:41:06.000000000 +0200
+***************
+*** 10108,10129 ****
+ do_insert_char_pre(c)
+ int c;
+ {
+! char_u *res;
+
+ /* Return quickly when there is nothing to do. */
+ if (!has_insertcharpre())
+ return NULL;
+
+ /* Lock the text to avoid weird things from happening. */
+ ++textlock;
+! set_vim_var_char(c); /* set v:char */
+
+ if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
+! /* Get the new value of v:char. It may be empty or more than one
+! * character. */
+! res = vim_strsave(get_vim_var_str(VV_CHAR));
+! else
+! res = NULL;
+
+ set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
+ --textlock;
+--- 10108,10147 ----
+ do_insert_char_pre(c)
+ int c;
+ {
+! char_u *res;
+! #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES + 1];
+! #else
+! char_u buf[2];
+! #endif
+
+ /* Return quickly when there is nothing to do. */
+ if (!has_insertcharpre())
+ return NULL;
+
++ #ifdef FEAT_MBYTE
++ if (has_mbyte)
++ buf[(*mb_char2bytes)(c, buf)] = NUL;
++ else
++ #endif
++ {
++ buf[0] = c;
++ buf[1] = NUL;
++ }
++
+ /* Lock the text to avoid weird things from happening. */
+ ++textlock;
+! set_vim_var_string(VV_CHAR, buf, -1); /* set v:char */
+
++ res = NULL;
+ if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
+! {
+! /* Get the value of v:char. It may be empty or more than one
+! * character. Only use it when changed, otherwise continue with the
+! * original character to avoid breaking autoindent. */
+! if (STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
+! res = vim_strsave(get_vim_var_str(VV_CHAR));
+! }
+
+ set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
+ --textlock;
+*** ../vim-7.3.533/src/version.c 2012-06-01 13:46:06.000000000 +0200
+--- src/version.c 2012-06-01 14:42:19.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 534,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+11. You find yourself typing "com" after every period when using a word
+ processor.com
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.535
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.535
+Problem: Many #ifdefs for MB_MAXBYTES.
+Solution: Also define MB_MAXBYTES without the +multi_byte feature. Fix
+ places where the buffer didn't include space for a NUL byte.
+Files: src/arabic.c, src/edit.c, src/eval.c, src/getchar.c, src/mbyte.c,
+ src/misc1.c, src/screen.c, src/spell.c, src/vim.h
+
+
+*** ../vim-7.3.534/src/arabic.c 2010-08-15 21:57:28.000000000 +0200
+--- src/arabic.c 2012-06-01 14:59:37.000000000 +0200
+***************
+*** 1066,1072 ****
+
+ if (curr_c != c && ccp != NULL)
+ {
+! char_u buf[MB_MAXBYTES];
+
+ /* Update the first byte of the character. */
+ (*mb_char2bytes)(curr_c, buf);
+--- 1066,1072 ----
+
+ if (curr_c != c && ccp != NULL)
+ {
+! char_u buf[MB_MAXBYTES + 1];
+
+ /* Update the first byte of the character. */
+ (*mb_char2bytes)(curr_c, buf);
+*** ../vim-7.3.534/src/edit.c 2012-06-01 14:57:47.000000000 +0200
+--- src/edit.c 2012-06-01 15:01:49.000000000 +0200
+***************
+*** 1648,1658 ****
+ #define PC_STATUS_RIGHT 1 /* right halve of double-wide char */
+ #define PC_STATUS_LEFT 2 /* left halve of double-wide char */
+ #define PC_STATUS_SET 3 /* pc_bytes was filled */
+- #ifdef FEAT_MBYTE
+ static char_u pc_bytes[MB_MAXBYTES + 1]; /* saved bytes */
+- #else
+- static char_u pc_bytes[2]; /* saved bytes */
+- #endif
+ static int pc_attr;
+ static int pc_row;
+ static int pc_col;
+--- 1648,1654 ----
+***************
+*** 6819,6829 ****
+ char_u *s;
+
+ vim_free(last_insert);
+- #ifdef FEAT_MBYTE
+ last_insert = alloc(MB_MAXBYTES * 3 + 5);
+- #else
+- last_insert = alloc(6);
+- #endif
+ if (last_insert != NULL)
+ {
+ s = last_insert;
+--- 6815,6821 ----
+***************
+*** 6861,6867 ****
+ char_u *s;
+ {
+ #ifdef FEAT_MBYTE
+! char_u temp[MB_MAXBYTES];
+ int i;
+ int len;
+
+--- 6853,6859 ----
+ char_u *s;
+ {
+ #ifdef FEAT_MBYTE
+! char_u temp[MB_MAXBYTES + 1];
+ int i;
+ int len;
+
+***************
+*** 7423,7429 ****
+ int cc;
+ {
+ int n;
+! char_u buf[MB_MAXBYTES];
+ int i;
+ int c;
+
+--- 7415,7421 ----
+ int cc;
+ {
+ int n;
+! char_u buf[MB_MAXBYTES + 1];
+ int i;
+ int c;
+
+***************
+*** 10109,10119 ****
+ int c;
+ {
+ char_u *res;
+- #ifdef FEAT_MBYTE
+ char_u buf[MB_MAXBYTES + 1];
+- #else
+- char_u buf[2];
+- #endif
+
+ /* Return quickly when there is nothing to do. */
+ if (!has_insertcharpre())
+--- 10101,10107 ----
+*** ../vim-7.3.534/src/eval.c 2012-05-18 18:34:15.000000000 +0200
+--- src/eval.c 2012-06-01 15:02:08.000000000 +0200
+***************
+*** 19170,19180 ****
+ set_vim_var_char(c)
+ int c;
+ {
+! #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES];
+! #else
+! char_u buf[2];
+! #endif
+
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+--- 19170,19176 ----
+ set_vim_var_char(c)
+ int c;
+ {
+! char_u buf[MB_MAXBYTES + 1];
+
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+*** ../vim-7.3.534/src/getchar.c 2012-04-05 16:07:01.000000000 +0200
+--- src/getchar.c 2012-06-01 15:03:51.000000000 +0200
+***************
+*** 723,729 ****
+ int c;
+ #ifdef FEAT_MBYTE
+ int n;
+! char_u buf[MB_MAXBYTES];
+ int i;
+ #endif
+
+--- 723,729 ----
+ int c;
+ #ifdef FEAT_MBYTE
+ int n;
+! char_u buf[MB_MAXBYTES + 1];
+ int i;
+ #endif
+
+***************
+*** 1072,1078 ****
+ int c;
+ {
+ #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES];
+ #else
+ char_u buf[4];
+ #endif
+--- 1072,1078 ----
+ int c;
+ {
+ #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES + 1];
+ #else
+ char_u buf[4];
+ #endif
+***************
+*** 1547,1553 ****
+ int c, c2;
+ #ifdef FEAT_MBYTE
+ int n;
+! char_u buf[MB_MAXBYTES];
+ int i;
+ #endif
+
+--- 1547,1553 ----
+ int c, c2;
+ #ifdef FEAT_MBYTE
+ int n;
+! char_u buf[MB_MAXBYTES + 1];
+ int i;
+ #endif
+
+***************
+*** 4335,4345 ****
+ int scol; /* starting column of the abbr. */
+ int j;
+ char_u *s;
+- #ifdef FEAT_MBYTE
+ char_u tb[MB_MAXBYTES + 4];
+- #else
+- char_u tb[4];
+- #endif
+ mapblock_T *mp;
+ #ifdef FEAT_LOCALMAP
+ mapblock_T *mp2;
+--- 4335,4341 ----
+*** ../vim-7.3.534/src/mbyte.c 2012-03-07 19:38:52.000000000 +0100
+--- src/mbyte.c 2012-06-01 15:04:27.000000000 +0200
+***************
+*** 708,714 ****
+ */
+ n = (i & 0x80) ? 2 : 1;
+ # else
+! char buf[MB_MAXBYTES];
+ # ifdef X_LOCALE
+ # ifndef mblen
+ # define mblen _Xmblen
+--- 708,714 ----
+ */
+ n = (i & 0x80) ? 2 : 1;
+ # else
+! char buf[MB_MAXBYTES + 1];
+ # ifdef X_LOCALE
+ # ifndef mblen
+ # define mblen _Xmblen
+***************
+*** 1953,1959 ****
+ /*
+ * Convert the character at screen position "off" to a sequence of bytes.
+ * Includes the composing characters.
+! * "buf" must at least have the length MB_MAXBYTES.
+ * Only to be used when ScreenLinesUC[off] != 0.
+ * Returns the produced number of bytes.
+ */
+--- 1953,1959 ----
+ /*
+ * Convert the character at screen position "off" to a sequence of bytes.
+ * Includes the composing characters.
+! * "buf" must at least have the length MB_MAXBYTES + 1.
+ * Only to be used when ScreenLinesUC[off] != 0.
+ * Returns the produced number of bytes.
+ */
+*** ../vim-7.3.534/src/misc1.c 2012-04-30 21:09:38.000000000 +0200
+--- src/misc1.c 2012-06-01 15:04:56.000000000 +0200
+***************
+*** 1932,1938 ****
+ int c;
+ {
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+! char_u buf[MB_MAXBYTES];
+ int n;
+
+ n = (*mb_char2bytes)(c, buf);
+--- 1932,1938 ----
+ int c;
+ {
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+! char_u buf[MB_MAXBYTES + 1];
+ int n;
+
+ n = (*mb_char2bytes)(c, buf);
+*** ../vim-7.3.534/src/screen.c 2012-03-23 16:25:13.000000000 +0100
+--- src/screen.c 2012-06-01 15:06:03.000000000 +0200
+***************
+*** 6621,6636 ****
+ int row, col;
+ int attr;
+ {
+- #ifdef FEAT_MBYTE
+ char_u buf[MB_MAXBYTES + 1];
+
+! buf[(*mb_char2bytes)(c, buf)] = NUL;
+! #else
+! char_u buf[2];
+!
+! buf[0] = c;
+! buf[1] = NUL;
+ #endif
+ screen_puts(buf, row, col, attr);
+ }
+
+--- 6621,6637 ----
+ int row, col;
+ int attr;
+ {
+ char_u buf[MB_MAXBYTES + 1];
+
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! buf[(*mb_char2bytes)(c, buf)] = NUL;
+! else
+ #endif
++ {
++ buf[0] = c;
++ buf[1] = NUL;
++ }
+ screen_puts(buf, row, col, attr);
+ }
+
+*** ../vim-7.3.534/src/spell.c 2012-05-18 18:07:57.000000000 +0200
+--- src/spell.c 2012-06-01 15:06:30.000000000 +0200
+***************
+*** 13694,13700 ****
+ {
+ int m1, m2;
+ #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES];
+ hashitem_T *hi;
+
+ if (c1 >= 256)
+--- 13694,13700 ----
+ {
+ int m1, m2;
+ #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES + 1];
+ hashitem_T *hi;
+
+ if (c1 >= 256)
+*** ../vim-7.3.534/src/vim.h 2012-04-30 18:48:38.000000000 +0200
+--- src/vim.h 2012-06-01 14:59:28.000000000 +0200
+***************
+*** 1703,1708 ****
+--- 1703,1710 ----
+ * character of up to 6 bytes, or one 16-bit character of up to three bytes
+ * plus six following composing characters of three bytes each. */
+ # define MB_MAXBYTES 21
++ #else
++ # define MB_MAXBYTES 1
+ #endif
+
+ #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
+***************
+*** 2017,2022 ****
+--- 2019,2025 ----
+ #pragma warning(disable : 4312)
+ #endif
+
++ /* Note: a NULL argument for vim_realloc() is not portable, don't use it. */
+ #if defined(MEM_PROFILE)
+ # define vim_realloc(ptr, size) mem_realloc((ptr), (size))
+ #else
+*** ../vim-7.3.534/src/version.c 2012-06-01 14:57:47.000000000 +0200
+--- src/version.c 2012-06-01 15:08:20.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 535,
+ /**/
+
+--
+Me? A skeptic? I trust you have proof.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.536
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.536
+Problem: When spell checking the German sharp s is not seen as a word
+ character. (Aexl Bender)
+Solution: In utf_islower() return true for the sharp s. Note: also need
+ updated spell file for this to take effect.
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.535/src/mbyte.c 2012-06-01 15:20:49.000000000 +0200
+--- src/mbyte.c 2012-06-01 16:50:41.000000000 +0200
+***************
+*** 2949,2955 ****
+ {
+ {0x61,0x7a,1,-32},
+ {0xb5,0xb5,-1,743},
+! {0xe0,0xf6,1,-32},
+ {0xf8,0xfe,1,-32},
+ {0xff,0xff,-1,121},
+ {0x101,0x12f,2,-1},
+--- 2949,2955 ----
+ {
+ {0x61,0x7a,1,-32},
+ {0xb5,0xb5,-1,743},
+! {0xe0,0xf6,1,-32}, /* 0xdf (German sharp s) is not upper-cased */
+ {0xf8,0xfe,1,-32},
+ {0xff,0xff,-1,121},
+ {0x101,0x12f,2,-1},
+***************
+*** 3129,3135 ****
+ utf_islower(a)
+ int a;
+ {
+! return (utf_toupper(a) != a);
+ }
+
+ /*
+--- 3129,3136 ----
+ utf_islower(a)
+ int a;
+ {
+! /* German sharp s is lower case but has no upper case equivalent. */
+! return (utf_toupper(a) != a) || a == 0xdf;
+ }
+
+ /*
+*** ../vim-7.3.535/src/version.c 2012-06-01 15:20:49.000000000 +0200
+--- src/version.c 2012-06-01 17:45:17.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 536,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+16. You step out of your room and realize that your parents have moved and
+ you don't have a clue when it happened.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.537
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.537
+Problem: Unecessary call to init_spell_chartab().
+Solution: Delete the call.
+Files: src/spell.c
+
+
+*** ../vim-7.3.536/src/spell.c 2012-06-01 15:20:49.000000000 +0200
+--- src/spell.c 2012-06-01 17:49:44.000000000 +0200
+***************
+*** 4721,4728 ****
+ int_wordlist = NULL;
+ }
+
+- init_spell_chartab();
+-
+ vim_free(repl_to);
+ repl_to = NULL;
+ vim_free(repl_from);
+--- 4721,4726 ----
+*** ../vim-7.3.536/src/version.c 2012-06-01 17:46:52.000000000 +0200
+--- src/version.c 2012-06-01 17:49:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 537,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+17. You turn on your intercom when leaving the room so you can hear if new
+ e-mail arrives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.538
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.538
+Problem: 'efm' does not handle Tabs in pointer lines.
+Solution: Add Tab support. Improve tests. (Lech Lorens)
+Files: src/quickfix.c, src/testdir/test10.in, src/testdir/test10.ok
+
+
+*** ../vim-7.3.537/src/quickfix.c 2012-04-25 18:57:17.000000000 +0200
+--- src/quickfix.c 2012-06-01 18:24:07.000000000 +0200
+***************
+*** 247,253 ****
+ {'t', "."},
+ {'m', ".\\+"},
+ {'r', ".*"},
+! {'p', "[- .]*"},
+ {'v', "\\d\\+"},
+ {'s', ".\\+"}
+ };
+--- 247,253 ----
+ {'t', "."},
+ {'m', ".\\+"},
+ {'r', ".*"},
+! {'p', "[- .]*"},
+ {'v', "\\d\\+"},
+ {'s', ".\\+"}
+ };
+***************
+*** 677,687 ****
+ }
+ if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
+ {
+ if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
+ continue;
+! col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
+! if (*((char_u *)regmatch.startp[i]) != TAB)
+! use_viscol = TRUE;
+ }
+ if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
+ {
+--- 677,699 ----
+ }
+ if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
+ {
++ char_u *match_ptr;
++
+ if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
+ continue;
+! col = 0;
+! for (match_ptr = regmatch.startp[i];
+! match_ptr != regmatch.endp[i]; ++match_ptr)
+! {
+! ++col;
+! if (*match_ptr == TAB)
+! {
+! col += 7;
+! col -= col % 8;
+! }
+! }
+! ++col;
+! use_viscol = TRUE;
+ }
+ if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
+ {
+*** ../vim-7.3.537/src/testdir/test10.in 2011-08-10 18:36:49.000000000 +0200
+--- src/testdir/test10.in 2012-06-01 18:22:40.000000000 +0200
+***************
+*** 8,48 ****
+ :7/start of errorfile/,/end of errorfile/w! Xerrorfile1
+ :7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
+ :/start of testfile/,/end of testfile/w! Xtestfile
+ :cf Xerrorfile2
+ :clast
+ :copen
+ :let a=w:quickfix_title
+ :wincmd p
+! gR\12=a\r\e
+ :cf Xerrorfile1
+! rA
+ :cn
+! rB
+ :cn
+! rC
+ :cn
+! rD
+ :cn
+! rE
+ :cn
+ :wincmd w
+ :let a=w:quickfix_title
+ :wincmd p
+! gR\12=a\r\e
+ :w! test.out " Write contents of this file
+ :qa!
+ ENDTEST
+
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+! "Xtestfile", line 7 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
+! Xtestfile:13: parse error before `asd'
+ make: *** [vim] Error 1
+! in file "Xtestfile" linenr 16: there is an error
+
+ 2 returned
+! "Xtestfile", linenr 19: yet another problem
+
+ Does anyone know what is the problem and how to correction it?
+ "Xtestfile", line 21 col 9: What is the title of the quickfix window?
+--- 8,88 ----
+ :7/start of errorfile/,/end of errorfile/w! Xerrorfile1
+ :7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
+ :/start of testfile/,/end of testfile/w! Xtestfile
++ :set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m
++ :set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m
+ :cf Xerrorfile2
+ :clast
+ :copen
+ :let a=w:quickfix_title
+ :wincmd p
+! lgR\12=a\r\e
+ :cf Xerrorfile1
+! grA
+ :cn
+! gRLINE 6, COL 19\e
+ :cn
+! gRNO COLUMN SPECIFIED\e
+ :cn
+! gRAGAIN NO COLUMN\e
+ :cn
+! gRCOL 1\e
+ :cn
++ gRCOL 2\e
++ :cn
++ gRCOL 10\e
++ :cn
++ gRVCOL 10\e
++ :cn
++ grI
++ :cn
++ gR. SPACE POINTER\e
++ :cn
++ gR. DOT POINTER\e
++ :cn
++ gR. DASH POINTER\e
++ :cn
++ gR. TAB-SPACE POINTER\e
++ :clast
++ :cprev
++ :cprev
+ :wincmd w
+ :let a=w:quickfix_title
+ :wincmd p
+! lgR\12=a\r\e
+ :w! test.out " Write contents of this file
+ :qa!
+ ENDTEST
+
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+! "Xtestfile", line 6 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
+! Xtestfile:9: parse error before `asd'
+ make: *** [vim] Error 1
+! in file "Xtestfile" linenr 10: there is an error
+
+ 2 returned
+! "Xtestfile", line 11 col 1; this is an error
+! "Xtestfile", line 12 col 2; this is another error
+! "Xtestfile", line 14:10; this is an error in column 10
+! =Xtestfile=, line 15:10; this is another error, but in vcol 10 this time
+! "Xtestfile", linenr 16: yet another problem
+! Error in "Xtestfile" at line 17:
+! x should be a dot
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17
+! ^
+! Error in "Xtestfile" at line 18:
+! x should be a dot
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18
+! .............^
+! Error in "Xtestfile" at line 19:
+! x should be a dot
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19
+! --------------^
+! Error in "Xtestfile" at line 20:
+! x should be a dot
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20
+! ^
+
+ Does anyone know what is the problem and how to correction it?
+ "Xtestfile", line 21 col 9: What is the title of the quickfix window?
+***************
+*** 50,74 ****
+ end of errorfile
+
+ start of testfile
+! line 2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 7 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 9 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ end of testfile
+--- 90,114 ----
+ end of errorfile
+
+ start of testfile
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22
+ end of testfile
+*** ../vim-7.3.537/src/testdir/test10.ok 2011-08-10 18:36:49.000000000 +0200
+--- src/testdir/test10.ok 2012-06-01 18:22:40.000000000 +0200
+***************
+*** 1,23 ****
+ start of testfile
+! line 2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 4 xxxAxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 7 xxxxxxxxxxBxxxxxxxxxxxxxxxxxxx
+! line 8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 9 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! Cine 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! Dine 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 21 :cf Xerrorfile1xxxxxxxxxxxxxxx
+! line 22 :cf Xerrorfile2xxxxxxxxxxxxxxx
+ end of testfile
+--- 1,23 ----
+ start of testfile
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3
+! xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx line 4
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5
+! xxxxxxxxxxxxxxxxxLINE 6, COL 19 line 6
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8
+! NO COLUMN SPECIFIEDxxxxxxxxxxx line 9
+! AGAIN NO COLUMNxxxxxxxxxxxxxxx line 10
+! COL 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11
+! COL 2xxxxxxxxxxxxxxxxxxxxxxxxx line 12
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13
+! xxxxxxxxCOL 10xxxxxxxxxxxxxxxx line 14
+! xVCOL 10xxxxxxxxxxxxxxxxxxxxxx line 15
+! Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16
+! xxxx. SPACE POINTERxxxxxxxxxxx line 17
+! xxxxx. DOT POINTERxxxxxxxxxxxx line 18
+! xxxxxx. DASH POINTERxxxxxxxxxx line 19
+! xxxxxxx. TAB-SPACE POINTERxxxx line 20
+! xxxxxxxx:cf Xerrorfile1xxxxxxx line 21
+! xxxxxxxx:cf Xerrorfile2xxxxxxx line 22
+ end of testfile
+*** ../vim-7.3.537/src/version.c 2012-06-01 17:49:51.000000000 +0200
+--- src/version.c 2012-06-01 18:22:27.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 538,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+18. Your wife drapes a blond wig over your monitor to remind you of what she
+ looks like.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.539
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.539
+Problem: Redrawing a character on the command line does not work properly
+ for multi-byte charactes.
+Solution: Count the number of bytes in a character. (Yukihiro Nakadaira)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.538/src/ex_getln.c 2012-05-25 11:02:34.000000000 +0200
+--- src/ex_getln.c 2012-06-06 11:50:37.000000000 +0200
+***************
+*** 2764,2769 ****
+--- 2764,2774 ----
+ msg_no_more = TRUE;
+ if (ccline.cmdlen == ccline.cmdpos)
+ msg_putchar(' ');
++ #ifdef FEAT_MBYTE
++ else if (has_mbyte)
++ draw_cmdline(ccline.cmdpos,
++ (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
++ #endif
+ else
+ draw_cmdline(ccline.cmdpos, 1);
+ msg_no_more = FALSE;
+*** ../vim-7.3.538/src/version.c 2012-06-01 18:34:37.000000000 +0200
+--- src/version.c 2012-06-06 12:02:45.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 539,
+ /**/
+
+--
+If they don't keep on exercising their lips, he thought, their brains
+start working.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.540
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.540
+Problem: Cursor is left on the text instead of the command line.
+Solution: Don't call setcursor() in command line mode.
+Files: src/getchar.c
+
+
+*** ../vim-7.3.539/src/getchar.c 2012-06-01 15:20:49.000000000 +0200
+--- src/getchar.c 2012-06-06 11:58:05.000000000 +0200
+***************
+*** 2819,2825 ****
+ edit_unputchar();
+ if (State & CMDLINE)
+ unputcmdline();
+! setcursor(); /* put cursor back where it belongs */
+ }
+
+ if (c < 0)
+--- 2819,2826 ----
+ edit_unputchar();
+ if (State & CMDLINE)
+ unputcmdline();
+! else
+! setcursor(); /* put cursor back where it belongs */
+ }
+
+ if (c < 0)
+*** ../vim-7.3.539/src/version.c 2012-06-06 12:02:57.000000000 +0200
+--- src/version.c 2012-06-06 12:05:22.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 540,
+ /**/
+
+--
+"Making it up? Why should I want to make anything up? Life's bad enough
+as it is without wanting to invent any more of it."
+ -- Marvin, the Paranoid Android in Douglas Adams'
+ "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.541
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.541
+Problem: When joining lines comment leaders need to be removed manually.
+Solution: Add the 'j' flag to 'formatoptions'. (Lech Lorens)
+Files: runtime/doc/change.txt, src/edit.c, src/ex_docmd.c, src/misc1.c,
+ src/normal.c, src/ops.c, src/option.h, src/proto/misc1.pro,
+ src/proto/ops.pro, src/search.c, src/testdir/test29.in,
+ src/testdir/test29.ok
+
+
+*** ../vim-7.3.540/runtime/doc/change.txt 2011-05-05 14:26:37.000000000 +0200
+--- runtime/doc/change.txt 2012-06-06 13:05:04.000000000 +0200
+***************
+*** 1495,1500 ****
+--- 1522,1533 ----
+ characters. Overruled by the 'M' flag.
+ 1 Don't break a line after a one-letter word. It's broken before it
+ instead (if possible).
++ j Where it makes sense, remove a comment leader when joining lines. For
++ example, joining:
++ int i; // the index ~
++ // in the list ~
++ Becomes:
++ int i; // the index in the list ~
+
+
+ With 't' and 'c' you can specify when Vim performs auto-wrapping:
+*** ../vim-7.3.540/src/edit.c 2012-06-01 15:20:49.000000000 +0200
+--- src/edit.c 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 5847,5853 ****
+ * Need to remove existing (middle) comment leader and insert end
+ * comment leader. First, check what comment leader we can find.
+ */
+! i = get_leader_len(line = ml_get_curline(), &p, FALSE);
+ if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL) /* Just checking */
+ {
+ /* Skip middle-comment string */
+--- 5847,5853 ----
+ * Need to remove existing (middle) comment leader and insert end
+ * comment leader. First, check what comment leader we can find.
+ */
+! i = get_leader_len(line = ml_get_curline(), &p, FALSE, TRUE);
+ if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL) /* Just checking */
+ {
+ /* Skip middle-comment string */
+***************
+*** 6085,6091 ****
+
+ /* Don't break until after the comment leader */
+ if (do_comments)
+! leader_len = get_leader_len(ml_get_curline(), NULL, FALSE);
+ else
+ leader_len = 0;
+
+--- 6085,6091 ----
+
+ /* Don't break until after the comment leader */
+ if (do_comments)
+! leader_len = get_leader_len(ml_get_curline(), NULL, FALSE, TRUE);
+ else
+ leader_len = 0;
+
+***************
+*** 6411,6417 ****
+ /* With the 'c' flag in 'formatoptions' and 't' missing: only format
+ * comments. */
+ if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
+! && get_leader_len(old, NULL, FALSE) == 0)
+ return;
+ #endif
+
+--- 6411,6417 ----
+ /* With the 'c' flag in 'formatoptions' and 't' missing: only format
+ * comments. */
+ if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
+! && get_leader_len(old, NULL, FALSE, TRUE) == 0)
+ return;
+ #endif
+
+***************
+*** 8565,8571 ****
+ {
+ temp = curwin->w_cursor.col;
+ if (!can_bs(BS_EOL) /* only if "eol" included */
+! || do_join(2, FALSE, TRUE) == FAIL)
+ vim_beep();
+ else
+ curwin->w_cursor.col = temp;
+--- 8565,8571 ----
+ {
+ temp = curwin->w_cursor.col;
+ if (!can_bs(BS_EOL) /* only if "eol" included */
+! || do_join(2, FALSE, TRUE, FALSE) == FAIL)
+ vim_beep();
+ else
+ curwin->w_cursor.col = temp;
+***************
+*** 8746,8752 ****
+ ptr[len - 1] = NUL;
+ }
+
+! (void)do_join(2, FALSE, FALSE);
+ if (temp == NUL && gchar_cursor() != NUL)
+ inc_cursor();
+ }
+--- 8746,8752 ----
+ ptr[len - 1] = NUL;
+ }
+
+! (void)do_join(2, FALSE, FALSE, FALSE);
+ if (temp == NUL && gchar_cursor() != NUL)
+ inc_cursor();
+ }
+*** ../vim-7.3.540/src/ex_docmd.c 2012-04-30 18:48:38.000000000 +0200
+--- src/ex_docmd.c 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 8545,8551 ****
+ }
+ ++eap->line2;
+ }
+! (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE);
+ beginline(BL_WHITE | BL_FIX);
+ ex_may_print(eap);
+ }
+--- 8545,8551 ----
+ }
+ ++eap->line2;
+ }
+! (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE);
+ beginline(BL_WHITE | BL_FIX);
+ ex_may_print(eap);
+ }
+*** ../vim-7.3.540/src/misc1.c 2012-06-01 15:20:49.000000000 +0200
+--- src/misc1.c 2012-06-06 13:27:32.000000000 +0200
+***************
+*** 671,677 ****
+ ptr = saved_line;
+ # ifdef FEAT_COMMENTS
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(ptr, NULL, FALSE);
+ else
+ lead_len = 0;
+ # endif
+--- 671,677 ----
+ ptr = saved_line;
+ # ifdef FEAT_COMMENTS
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
+ else
+ lead_len = 0;
+ # endif
+***************
+*** 693,699 ****
+ }
+ # ifdef FEAT_COMMENTS
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(ptr, NULL, FALSE);
+ else
+ lead_len = 0;
+ if (lead_len > 0)
+--- 693,699 ----
+ }
+ # ifdef FEAT_COMMENTS
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
+ else
+ lead_len = 0;
+ if (lead_len > 0)
+***************
+*** 836,842 ****
+ */
+ end_comment_pending = NUL;
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD);
+ else
+ lead_len = 0;
+ if (lead_len > 0)
+--- 836,842 ----
+ */
+ end_comment_pending = NUL;
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD, TRUE);
+ else
+ lead_len = 0;
+ if (lead_len > 0)
+***************
+*** 1548,1561 ****
+ * When "flags" is not NULL, it is set to point to the flags of the recognized
+ * comment leader.
+ * "backward" must be true for the "O" command.
+ */
+ int
+! get_leader_len(line, flags, backward)
+ char_u *line;
+ char_u **flags;
+ int backward;
+ {
+ int i, j;
+ int got_com = FALSE;
+ int found_one;
+ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
+--- 1548,1565 ----
+ * When "flags" is not NULL, it is set to point to the flags of the recognized
+ * comment leader.
+ * "backward" must be true for the "O" command.
++ * If "include_space" is set, include trailing whitespace while calculating the
++ * length.
+ */
+ int
+! get_leader_len(line, flags, backward, include_space)
+ char_u *line;
+ char_u **flags;
+ int backward;
++ int include_space;
+ {
+ int i, j;
++ int result;
+ int got_com = FALSE;
+ int found_one;
+ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
+***************
+*** 1565,1571 ****
+ char_u *prev_list;
+ char_u *saved_flags = NULL;
+
+! i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+ ++i;
+
+--- 1569,1575 ----
+ char_u *prev_list;
+ char_u *saved_flags = NULL;
+
+! result = i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+ ++i;
+
+***************
+*** 1668,1684 ****
+ if (!found_one)
+ break;
+
+ /* Include any trailing white space. */
+ while (vim_iswhite(line[i]))
+ ++i;
+
+ /* If this comment doesn't nest, stop here. */
+ got_com = TRUE;
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
+
+! return (got_com ? i : 0);
+ }
+ #endif
+
+--- 1672,1838 ----
+ if (!found_one)
+ break;
+
++ result = i;
++
+ /* Include any trailing white space. */
+ while (vim_iswhite(line[i]))
+ ++i;
+
++ if (include_space)
++ result = i;
++
+ /* If this comment doesn't nest, stop here. */
+ got_com = TRUE;
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
++ return result;
++ }
++
++ /*
++ * Return the offset at which the last comment in line starts. If there is no
++ * comment in the whole line, -1 is returned.
++ *
++ * When "flags" is not null, it is set to point to the flags describing the
++ * recognized comment leader.
++ */
++ int
++ get_last_leader_offset(line, flags)
++ char_u *line;
++ char_u **flags;
++ {
++ int result = -1;
++ int i, j;
++ int lower_check_bound = 0;
++ char_u *string;
++ char_u *com_leader;
++ char_u *com_flags;
++ char_u *list;
++ int found_one;
++ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
++
++ /*
++ * Repeat to match several nested comment strings.
++ */
++ i = (int)STRLEN(line);
++ while (--i >= lower_check_bound)
++ {
++ /*
++ * scan through the 'comments' option for a match
++ */
++ found_one = FALSE;
++ for (list = curbuf->b_p_com; *list; )
++ {
++ char_u *flags_save = list;
++
++ /*
++ * Get one option part into part_buf[]. Advance list to next one.
++ * put string at start of string.
++ */
++ (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
++ string = vim_strchr(part_buf, ':');
++ if (string == NULL) /* If everything is fine, this cannot actually
++ * happen. */
++ {
++ continue;
++ }
++ *string++ = NUL; /* Isolate flags from string. */
++ com_leader = string;
++
++ /*
++ * Line contents and string must match.
++ * When string starts with white space, must have some white space
++ * (but the amount does not need to match, there might be a mix of
++ * TABs and spaces).
++ */
++ if (vim_iswhite(string[0]))
++ {
++ if (i == 0 || !vim_iswhite(line[i - 1]))
++ continue;
++ while (vim_iswhite(string[0]))
++ ++string;
++ }
++ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
++ /* do nothing */;
++ if (string[j] != NUL)
++ continue;
++
++ /*
++ * When 'b' flag used, there must be white space or an
++ * end-of-line after the string in the line.
++ */
++ if (vim_strchr(part_buf, COM_BLANK) != NULL
++ && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
++ {
++ continue;
++ }
++
++ /*
++ * We have found a match, stop searching.
++ */
++ found_one = TRUE;
++
++ if (flags)
++ *flags = flags_save;
++ com_flags = flags_save;
++
++ break;
++ }
+
+! if (found_one)
+! {
+! char_u part_buf2[COM_MAX_LEN]; /* buffer for one option part */
+! int len1, len2, off;
+!
+! result = i;
+! /*
+! * If this comment nests, continue searching.
+! */
+! if (vim_strchr(part_buf, COM_NEST) != NULL)
+! continue;
+!
+! lower_check_bound = i;
+!
+! /* Let's verify whether the comment leader found is a substring
+! * of other comment leaders. If it is, let's adjust the
+! * lower_check_bound so that we make sure that we have determined
+! * the comment leader correctly.
+! */
+!
+! while (vim_iswhite(*com_leader))
+! ++com_leader;
+! len1 = (int)STRLEN(com_leader);
+!
+! for (list = curbuf->b_p_com; *list; )
+! {
+! char_u *flags_save = list;
+!
+! (void)copy_option_part(&list, part_buf2, COM_MAX_LEN, ",");
+! if (flags_save == com_flags)
+! continue;
+! string = vim_strchr(part_buf2, ':');
+! ++string;
+! while (vim_iswhite(*string))
+! ++string;
+! len2 = (int)STRLEN(string);
+! if (len2 == 0)
+! continue;
+!
+! /* Now we have to verify whether string ends with a substring
+! * beginning the com_leader. */
+! for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2;)
+! {
+! --off;
+! if (!STRNCMP(string + off, com_leader, len2 - off))
+! {
+! if (i - off < lower_check_bound)
+! lower_check_bound = i - off;
+! }
+! }
+! }
+! }
+! }
+! return result;
+ }
+ #endif
+
+*** ../vim-7.3.540/src/normal.c 2012-05-25 13:12:33.000000000 +0200
+--- src/normal.c 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 1968,1974 ****
+ beep_flush();
+ else
+ {
+! (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE);
+ auto_format(FALSE, TRUE);
+ }
+ break;
+--- 1968,1974 ----
+ beep_flush();
+ else
+ {
+! (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
+ auto_format(FALSE, TRUE);
+ }
+ break;
+***************
+*** 4426,4432 ****
+ break;
+ }
+ #ifdef FEAT_COMMENTS
+! if (get_leader_len(ml_get_curline(), NULL, FALSE) > 0)
+ {
+ /* Ignore this line, continue at start of next line. */
+ ++curwin->w_cursor.lnum;
+--- 4426,4432 ----
+ break;
+ }
+ #ifdef FEAT_COMMENTS
+! if (get_leader_len(ml_get_curline(), NULL, FALSE, TRUE) > 0)
+ {
+ /* Ignore this line, continue at start of next line. */
+ ++curwin->w_cursor.lnum;
+***************
+*** 9324,9330 ****
+ {
+ prep_redo(cap->oap->regname, cap->count0,
+ NUL, cap->cmdchar, NUL, NUL, cap->nchar);
+! (void)do_join(cap->count0, cap->nchar == NUL, TRUE);
+ }
+ }
+ }
+--- 9324,9330 ----
+ {
+ prep_redo(cap->oap->regname, cap->count0,
+ NUL, cap->cmdchar, NUL, NUL, cap->nchar);
+! (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE);
+ }
+ }
+ }
+*** ../vim-7.3.540/src/ops.c 2012-05-18 12:49:33.000000000 +0200
+--- src/ops.c 2012-06-06 15:43:31.000000000 +0200
+***************
+*** 112,117 ****
+--- 112,120 ----
+ # endif
+ #endif
+ static void dis_msg __ARGS((char_u *p, int skip_esc));
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ static char_u *skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
++ #endif
+ #ifdef FEAT_VISUAL
+ static void block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
+ #endif
+***************
+*** 1987,1993 ****
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+ }
+ if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! (void)do_join(2, FALSE, FALSE);
+ }
+ }
+
+--- 1990,1996 ----
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+ }
+ if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! (void)do_join(2, FALSE, FALSE, FALSE);
+ }
+ }
+
+***************
+*** 4197,4213 ****
+ ui_breakcheck();
+ }
+
+ /*
+ * Join 'count' lines (minimal 2) at cursor position.
+ * When "save_undo" is TRUE save lines for undo first.
+ *
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! do_join(count, insert_space, save_undo)
+ long count;
+ int insert_space;
+ int save_undo;
+ {
+ char_u *curr = NULL;
+ char_u *curr_start = NULL;
+--- 4200,4297 ----
+ ui_breakcheck();
+ }
+
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ /*
++ * If "process" is TRUE and the line begins with a comment leader (possibly
++ * after some white space), return a pointer to the text after it. Put a boolean
++ * value indicating whether the line ends with an unclosed comment in
++ * "is_comment".
++ * line - line to be processed,
++ * process - if FALSE, will only check whether the line ends with an unclosed
++ * comment,
++ * include_space - whether to also skip space following the comment leader,
++ * is_comment - will indicate whether the current line ends with an unclosed
++ * comment.
++ */
++ static char_u *
++ skip_comment(line, process, include_space, is_comment)
++ char_u *line;
++ int process;
++ int include_space;
++ int *is_comment;
++ {
++ char_u *comment_flags = NULL;
++ int lead_len;
++ int leader_offset = get_last_leader_offset(line, &comment_flags);
++
++ *is_comment = FALSE;
++ if (leader_offset != -1)
++ {
++ /* Let's check whether the line ends with an unclosed comment.
++ * If the last comment leader has COM_END in flags, there's no comment.
++ */
++ while (*comment_flags)
++ {
++ if (*comment_flags == COM_END
++ || *comment_flags == ':')
++ break;
++ ++comment_flags;
++ }
++ if (*comment_flags != COM_END)
++ *is_comment = TRUE;
++ }
++
++ if (process == FALSE)
++ return line;
++
++ lead_len = get_leader_len(line, &comment_flags, FALSE, include_space);
++
++ if (lead_len == 0)
++ return line;
++
++ /* Find:
++ * - COM_START,
++ * - COM_END,
++ * - colon,
++ * whichever comes first.
++ */
++ while (*comment_flags)
++ {
++ if (*comment_flags == COM_START
++ || *comment_flags == COM_END
++ || *comment_flags == ':')
++ {
++ break;
++ }
++ ++comment_flags;
++ }
++
++ /* If we found a colon, it means that we are not processing a line
++ * starting with an opening or a closing part of a three-part
++ * comment. That's good, because we don't want to remove those as
++ * this would be annoying.
++ */
++ if (*comment_flags == ':' || *comment_flags == NUL)
++ line += lead_len;
++
++ return line;
++ }
++ #endif
++
+ /*
+ * Join 'count' lines (minimal 2) at cursor position.
+ * When "save_undo" is TRUE save lines for undo first.
++ * Set "use_formatoptions" to FALSE when e.g. processing
++ * backspace and comment leaders should not be removed.
+ *
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! do_join(count, insert_space, save_undo, use_formatoptions)
+ long count;
+ int insert_space;
+ int save_undo;
++ int use_formatoptions UNUSED;
+ {
+ char_u *curr = NULL;
+ char_u *curr_start = NULL;
+***************
+*** 4221,4226 ****
+--- 4305,4317 ----
+ linenr_T t;
+ colnr_T col = 0;
+ int ret = OK;
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ int *comments;
++ int remove_comments = (use_formatoptions == TRUE)
++ && has_format_option(FO_REMOVE_COMS);
++ int prev_was_comment;
++ #endif
++
+
+ if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
+ (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
+***************
+*** 4232,4237 ****
+--- 4323,4339 ----
+ spaces = lalloc_clear((long_u)count, TRUE);
+ if (spaces == NULL)
+ return FAIL;
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ if (remove_comments)
++ {
++ comments = (int *)lalloc_clear((long_u)count * sizeof(int), TRUE);
++ if (comments == NULL)
++ {
++ vim_free(spaces);
++ return FAIL;
++ }
++ }
++ #endif
+
+ /*
+ * Don't move anything, just compute the final line length
+***************
+*** 4240,4245 ****
+--- 4342,4366 ----
+ for (t = 0; t < count; ++t)
+ {
+ curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ if (remove_comments)
++ {
++ /* We don't want to remove the comment leader if the
++ * previous line is not a comment. */
++ if (t > 0 && prev_was_comment)
++ {
++
++ char_u *new_curr = skip_comment(curr, TRUE, insert_space,
++ &prev_was_comment);
++ comments[t] = new_curr - curr;
++ curr = new_curr;
++ }
++ else
++ curr = skip_comment(curr, FALSE, insert_space,
++ &prev_was_comment);
++ }
++ #endif
++
+ if (insert_space && t > 0)
+ {
+ curr = skipwhite(curr);
+***************
+*** 4327,4332 ****
+--- 4448,4457 ----
+ if (t == 0)
+ break;
+ curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ if (remove_comments)
++ curr += comments[t - 1];
++ #endif
+ if (insert_space && t > 1)
+ curr = skipwhite(curr);
+ currsize = (int)STRLEN(curr);
+***************
+*** 4364,4369 ****
+--- 4489,4498 ----
+
+ theend:
+ vim_free(spaces);
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ if (remove_comments)
++ vim_free(comments);
++ #endif
+ return ret;
+ }
+
+***************
+*** 4788,4794 ****
+ (long)-next_leader_len);
+ #endif
+ curwin->w_cursor.lnum--;
+! if (do_join(2, TRUE, FALSE) == FAIL)
+ {
+ beep_flush();
+ break;
+--- 4917,4923 ----
+ (long)-next_leader_len);
+ #endif
+ curwin->w_cursor.lnum--;
+! if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
+ {
+ beep_flush();
+ break;
+***************
+*** 4844,4850 ****
+
+ ptr = ml_get(lnum);
+ if (do_comments)
+! *leader_len = get_leader_len(ptr, leader_flags, FALSE);
+ else
+ *leader_len = 0;
+
+--- 4973,4979 ----
+
+ ptr = ml_get(lnum);
+ if (do_comments)
+! *leader_len = get_leader_len(ptr, leader_flags, FALSE, TRUE);
+ else
+ *leader_len = 0;
+
+*** ../vim-7.3.540/src/option.h 2012-02-20 22:18:22.000000000 +0100
+--- src/option.h 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 104,113 ****
+ #define FO_ONE_LETTER '1'
+ #define FO_WHITE_PAR 'w' /* trailing white space continues paragr. */
+ #define FO_AUTO 'a' /* automatic formatting */
+
+ #define DFLT_FO_VI "vt"
+ #define DFLT_FO_VIM "tcq"
+! #define FO_ALL "tcroq2vlb1mMBn,aw" /* for do_set() */
+
+ /* characters for the p_cpo option: */
+ #define CPO_ALTREAD 'a' /* ":read" sets alternate file name */
+--- 104,114 ----
+ #define FO_ONE_LETTER '1'
+ #define FO_WHITE_PAR 'w' /* trailing white space continues paragr. */
+ #define FO_AUTO 'a' /* automatic formatting */
++ #define FO_REMOVE_COMS 'j' /* remove comment leaders when joining lines */
+
+ #define DFLT_FO_VI "vt"
+ #define DFLT_FO_VIM "tcq"
+! #define FO_ALL "tcroq2vlb1mMBn,awj" /* for do_set() */
+
+ /* characters for the p_cpo option: */
+ #define CPO_ALTREAD 'a' /* ":read" sets alternate file name */
+*** ../vim-7.3.540/src/proto/misc1.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/misc1.pro 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 6,12 ****
+ int set_indent __ARGS((int size, int flags));
+ int get_number_indent __ARGS((linenr_T lnum));
+ int open_line __ARGS((int dir, int flags, int old_indent));
+! int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
+ int plines __ARGS((linenr_T lnum));
+ int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
+ int plines_nofill __ARGS((linenr_T lnum));
+--- 6,13 ----
+ int set_indent __ARGS((int size, int flags));
+ int get_number_indent __ARGS((linenr_T lnum));
+ int open_line __ARGS((int dir, int flags, int old_indent));
+! int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int do_skip_space));
+! int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
+ int plines __ARGS((linenr_T lnum));
+ int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
+ int plines_nofill __ARGS((linenr_T lnum));
+*** ../vim-7.3.540/src/proto/ops.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/ops.pro 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 36,42 ****
+ int preprocs_left __ARGS((void));
+ int get_register_name __ARGS((int num));
+ void ex_display __ARGS((exarg_T *eap));
+! int do_join __ARGS((long count, int insert_space, int save_undo));
+ void op_format __ARGS((oparg_T *oap, int keep_cursor));
+ void op_formatexpr __ARGS((oparg_T *oap));
+ int fex_format __ARGS((linenr_T lnum, long count, int c));
+--- 36,42 ----
+ int preprocs_left __ARGS((void));
+ int get_register_name __ARGS((int num));
+ void ex_display __ARGS((exarg_T *eap));
+! int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions));
+ void op_format __ARGS((oparg_T *oap, int keep_cursor));
+ void op_formatexpr __ARGS((oparg_T *oap));
+ int fex_format __ARGS((linenr_T lnum, long count, int c));
+*** ../vim-7.3.540/src/search.c 2012-02-04 23:34:57.000000000 +0100
+--- src/search.c 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 1548,1554 ****
+ int len;
+ int stop = TRUE;
+ #ifdef FEAT_MBYTE
+! static char_u bytes[MB_MAXBYTES];
+ static int bytelen = 1; /* >1 for multi-byte char */
+ #endif
+
+--- 1548,1554 ----
+ int len;
+ int stop = TRUE;
+ #ifdef FEAT_MBYTE
+! static char_u bytes[MB_MAXBYTES + 1];
+ static int bytelen = 1; /* >1 for multi-byte char */
+ #endif
+
+***************
+*** 4901,4907 ****
+ #ifdef FEAT_COMMENTS
+ if ((*line != '#' ||
+ STRNCMP(skipwhite(line + 1), "define", 6) != 0)
+! && get_leader_len(line, NULL, FALSE))
+ matched = FALSE;
+
+ /*
+--- 4901,4907 ----
+ #ifdef FEAT_COMMENTS
+ if ((*line != '#' ||
+ STRNCMP(skipwhite(line + 1), "define", 6) != 0)
+! && get_leader_len(line, NULL, FALSE, TRUE))
+ matched = FALSE;
+
+ /*
+*** ../vim-7.3.540/src/testdir/test29.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test29.in 2012-06-06 15:44:38.000000000 +0200
+***************
+*** 4,19 ****
+ and with 'cpoptions' flag 'j' set or not
+
+ STARTTEST
+ :set nocompatible viminfo+=nviminfo
+ :set nojoinspaces
+ :set cpoptions-=j
+ /firstline/
+! j"tdGpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
+ j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
+! j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjdG:?firstline?+1,$w! test.out
+! :qa!
+ ENDTEST
+
+ firstline
+--- 4,20 ----
+ and with 'cpoptions' flag 'j' set or not
+
+ STARTTEST
++ :so small.vim
+ :set nocompatible viminfo+=nviminfo
+ :set nojoinspaces
+ :set cpoptions-=j
+ /firstline/
+! j"td/^STARTTEST/-1
+! PJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
+ j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
+! j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjd/STARTTEST/-2
+ ENDTEST
+
+ firstline
+***************
+*** 54,56 ****
+--- 55,181 ----
+ hjkl iop!
+ ert
+
++ STARTTEST
++ /^{/+1
++ :set comments=s1:/*,mb:*,ex:*/,://
++ :set nojoinspaces fo=j
++ :set backspace=eol,start
++ :.,+3join
++ j4J
++ :.,+2join
++ j3J
++ :.,+2join
++ j3J
++ :.,+2join
++ jj3J
++ ENDTEST
++
++ {
++
++ /*
++ * Make sure the previous comment leader is not removed.
++ */
++
++ /*
++ * Make sure the previous comment leader is not removed.
++ */
++
++ // Should the next comment leader be left alone?
++ // Yes.
++
++ // Should the next comment leader be left alone?
++ // Yes.
++
++ /* Here the comment leader should be left intact. */
++ // And so should this one.
++
++ /* Here the comment leader should be left intact. */
++ // And so should this one.
++
++ if (condition) // Remove the next comment leader!
++ // OK, I will.
++ action();
++
++ if (condition) // Remove the next comment leader!
++ // OK, I will.
++ action();
++ }
++
++ STARTTEST
++ /^{/+1
++ :set comments=s1:/*,mb:*,ex:*/,://
++ :set comments+=s1:>#,mb:#,ex:#<,:<
++ :set cpoptions-=j joinspaces fo=j
++ :set backspace=eol,start
++ :.,+3join
++ j4J
++ :.,+2join
++ j3J
++ :.,+2join
++ j3J
++ :.,+2join
++ jj3J
++ j:.,+2join
++ jj3J
++ j:.,+5join
++ j6J
++ oSome code!\r// Make sure backspacing does not remove this comment leader.\e0i\b\e
++ ENDTEST
++
++ {
++
++ /*
++ * Make sure the previous comment leader is not removed.
++ */
++
++ /*
++ * Make sure the previous comment leader is not removed.
++ */
++
++ // Should the next comment leader be left alone?
++ // Yes.
++
++ // Should the next comment leader be left alone?
++ // Yes.
++
++ /* Here the comment leader should be left intact. */
++ // And so should this one.
++
++ /* Here the comment leader should be left intact. */
++ // And so should this one.
++
++ if (condition) // Remove the next comment leader!
++ // OK, I will.
++ action();
++
++ if (condition) // Remove the next comment leader!
++ // OK, I will.
++ action();
++
++ int i = 7 /* foo *// 3
++ // comment
++ ;
++
++ int i = 7 /* foo *// 3
++ // comment
++ ;
++
++ ># Note that the last character of the ending comment leader (left angle
++ # bracket) is a comment leader itself. Make sure that this comment leader is
++ # not removed from the next line #<
++ < On this line a new comment is opened which spans 2 lines. This comment should
++ < retain its comment leader.
++
++ ># Note that the last character of the ending comment leader (left angle
++ # bracket) is a comment leader itself. Make sure that this comment leader is
++ # not removed from the next line #<
++ < On this line a new comment is opened which spans 2 lines. This comment should
++ < retain its comment leader.
++
++ }
++
++ STARTTEST
++ :g/^STARTTEST/.,/^ENDTEST/d
++ :?firstline?+1,$w! test.out
++ :qa!
++ ENDTEST
+*** ../vim-7.3.540/src/testdir/test29.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test29.ok 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 47,49 ****
+--- 47,86 ----
+ asdfasdf asdf
+ asdfasdf asdf
+ zx cvn. as dfg? hjkl iop! ert a
++
++
++ {
++ /* Make sure the previous comment leader is not removed. */
++ /* Make sure the previous comment leader is not removed. */
++ // Should the next comment leader be left alone? Yes.
++ // Should the next comment leader be left alone? Yes.
++ /* Here the comment leader should be left intact. */ // And so should this one.
++ /* Here the comment leader should be left intact. */ // And so should this one.
++ if (condition) // Remove the next comment leader! OK, I will.
++ action();
++ if (condition) // Remove the next comment leader! OK, I will.
++ action();
++ }
++
++
++ {
++ /* Make sure the previous comment leader is not removed. */
++ /* Make sure the previous comment leader is not removed. */
++ // Should the next comment leader be left alone? Yes.
++ // Should the next comment leader be left alone? Yes.
++ /* Here the comment leader should be left intact. */ // And so should this one.
++ /* Here the comment leader should be left intact. */ // And so should this one.
++ if (condition) // Remove the next comment leader! OK, I will.
++ action();
++ if (condition) // Remove the next comment leader! OK, I will.
++ action();
++ int i = 7 /* foo *// 3 // comment
++ ;
++ int i = 7 /* foo *// 3 // comment
++ ;
++ ># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
++ ># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
++
++ Some code!// Make sure backspacing does not remove this comment leader.
++ }
++
+*** ../vim-7.3.540/src/version.c 2012-06-06 12:06:10.000000000 +0200
+--- src/version.c 2012-06-06 16:10:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 541,
+ /**/
+
+--
+I have a drinking problem -- I don't have a drink!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.542
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.542 (after 7.3.506)
+Problem: Function is sometimes unused.
+Solution: Add #ifdef.
+Files: src/gui_gtk.c
+
+
+*** ../vim-7.3.541/src/gui_gtk.c 2012-04-25 17:10:12.000000000 +0200
+--- src/gui_gtk.c 2012-06-06 15:25:12.000000000 +0200
+***************
+*** 90,100 ****
+--- 90,102 ----
+ static void entry_activate_cb(GtkWidget *widget, gpointer data);
+ static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
+ static void find_replace_cb(GtkWidget *widget, gpointer data);
++ #if defined(FEAT_BROWSE) || defined(PROTO)
+ static void recent_func_log_func(
+ const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer user_data);
++ #endif
+
+ #if defined(FEAT_TOOLBAR)
+ /*
+***************
+*** 1896,1901 ****
+--- 1898,1904 ----
+ do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
+ }
+
++ #if defined(FEAT_BROWSE) || defined(PROTO)
+ static void
+ recent_func_log_func(const gchar *log_domain UNUSED,
+ GLogLevelFlags log_level UNUSED,
+***************
+*** 1905,1908 ****
+ /* We just want to suppress the warnings. */
+ /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
+ }
+!
+--- 1908,1911 ----
+ /* We just want to suppress the warnings. */
+ /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
+ }
+! #endif
+*** ../vim-7.3.541/src/version.c 2012-06-06 16:12:54.000000000 +0200
+--- src/version.c 2012-06-06 16:14:17.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 542,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+1. At lunch time, sit in your parked car with sunglasses on and point
+ a hair dryer at passing cars. See if they slow down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.543
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.543
+Problem: The cursor is in the wrong line after using ":copen". (John
+ Beckett)
+Solution: Invoke more drastic redraw method.
+Files: src/eval.c
+
+
+*** ../vim-7.3.542/src/eval.c 2012-06-01 15:20:49.000000000 +0200
+--- src/eval.c 2012-06-06 16:28:11.000000000 +0200
+***************
+*** 18507,18515 ****
+ curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+
+ check_cursor();
+! changed_cline_bef_curs();
+! invalidate_botline();
+! redraw_later(VALID);
+
+ if (curwin->w_topline == 0)
+ curwin->w_topline = 1;
+--- 18507,18513 ----
+ curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+
+ check_cursor();
+! changed_window_setting();
+
+ if (curwin->w_topline == 0)
+ curwin->w_topline = 1;
+*** ../vim-7.3.542/src/version.c 2012-06-06 16:14:36.000000000 +0200
+--- src/version.c 2012-06-06 16:28:16.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 543,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+2. Page yourself over the intercom. Don't disguise your voice.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.544
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.544
+Problem: There is no good way to close a quickfix window when closing the
+ last ordinary window.
+Solution: Add the QuitPre autocommand.
+Files: src/ex_docmd.c, src/fileio.c, src/vim.h
+
+
+*** ../vim-7.3.543/src/ex_docmd.c 2012-06-06 16:12:54.000000000 +0200
+--- src/ex_docmd.c 2012-06-06 17:58:41.000000000 +0200
+***************
+*** 6458,6463 ****
+--- 6458,6464 ----
+ return;
+ }
+ #ifdef FEAT_AUTOCMD
++ apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+ if (curbuf_locked())
+ return;
+ #endif
+*** ../vim-7.3.543/src/fileio.c 2012-04-30 17:04:47.000000000 +0200
+--- src/fileio.c 2012-06-06 17:32:12.000000000 +0200
+***************
+*** 7678,7683 ****
+--- 7678,7684 ----
+ {"MenuPopup", EVENT_MENUPOPUP},
+ {"QuickFixCmdPost", EVENT_QUICKFIXCMDPOST},
+ {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE},
++ {"QuitPre", EVENT_QUITPRE},
+ {"RemoteReply", EVENT_REMOTEREPLY},
+ {"SessionLoadPost", EVENT_SESSIONLOADPOST},
+ {"ShellCmdPost", EVENT_SHELLCMDPOST},
+*** ../vim-7.3.543/src/vim.h 2012-06-01 15:20:49.000000000 +0200
+--- src/vim.h 2012-06-06 17:30:01.000000000 +0200
+***************
+*** 1264,1271 ****
+ EVENT_INSERTENTER, /* when entering Insert mode */
+ EVENT_INSERTLEAVE, /* when leaving Insert mode */
+ EVENT_MENUPOPUP, /* just before popup menu is displayed */
+! EVENT_QUICKFIXCMDPOST, /* after :make, :grep etc */
+! EVENT_QUICKFIXCMDPRE, /* before :make, :grep etc */
+ EVENT_SESSIONLOADPOST, /* after loading a session file */
+ EVENT_STDINREADPOST, /* after reading from stdin */
+ EVENT_STDINREADPRE, /* before reading from stdin */
+--- 1264,1272 ----
+ EVENT_INSERTENTER, /* when entering Insert mode */
+ EVENT_INSERTLEAVE, /* when leaving Insert mode */
+ EVENT_MENUPOPUP, /* just before popup menu is displayed */
+! EVENT_QUICKFIXCMDPOST, /* after :make, :grep etc. */
+! EVENT_QUICKFIXCMDPRE, /* before :make, :grep etc. */
+! EVENT_QUITPRE, /* before :quit */
+ EVENT_SESSIONLOADPOST, /* after loading a session file */
+ EVENT_STDINREADPOST, /* after reading from stdin */
+ EVENT_STDINREADPRE, /* before reading from stdin */
+*** ../vim-7.3.543/src/version.c 2012-06-06 16:29:06.000000000 +0200
+--- src/version.c 2012-06-06 18:02:09.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 544,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+3. Every time someone asks you to do something, ask if they want fries
+ with that.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.545
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.545
+Problem: When closing a window or buffer autocommands may close it too,
+ causing problems for where the autocommand was invoked from.
+Solution: Add the w_closing and b_closing flags. When set disallow ":q" and
+ ":close" to prevent recursive closing.
+Files: src/structs.h, src/buffer.c, src/ex_docmd.c, src/window.c
+
+
+*** ../vim-7.3.544/src/structs.h 2012-02-04 21:57:44.000000000 +0100
+--- src/structs.h 2012-06-06 16:43:34.000000000 +0200
+***************
+*** 1201,1206 ****
+--- 1201,1210 ----
+ typedef struct qf_info_S qf_info_T;
+ #endif
+
++ /*
++ * These are items normally related to a buffer. But when using ":ownsyntax"
++ * a window may have its own instance.
++ */
+ typedef struct {
+ #ifdef FEAT_SYN_HL
+ hashtab_T b_keywtab; /* syntax keywords hash table */
+***************
+*** 1290,1295 ****
+--- 1294,1303 ----
+ int b_nwindows; /* nr of windows open on this buffer */
+
+ int b_flags; /* various BF_ flags */
++ #ifdef FEAT_AUTOCMD
++ int b_closing; /* buffer is being closed, don't let
++ autocommands close it too. */
++ #endif
+
+ /*
+ * b_ffname has the full path of the file (NULL for no name).
+***************
+*** 1853,1858 ****
+--- 1861,1870 ----
+ win_T *w_prev; /* link to previous window */
+ win_T *w_next; /* link to next window */
+ #endif
++ #ifdef FEAT_AUTOCMD
++ int w_closing; /* window is being closed, don't let
++ autocommands close it too. */
++ #endif
+
+ frame_T *w_frame; /* frame containing this window */
+
+*** ../vim-7.3.544/src/buffer.c 2012-03-16 14:32:10.000000000 +0100
+--- src/buffer.c 2012-06-06 18:57:27.000000000 +0200
+***************
+*** 377,404 ****
+ /* When the buffer is no longer in a window, trigger BufWinLeave */
+ if (buf->b_nwindows == 1)
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! /* Return if autocommands deleted the buffer or made it the only one. */
+! if (!buf_valid(buf) || (abort_if_last && one_window()))
+ {
+ EMSG(_(e_auabort));
+ return;
+ }
+
+ /* When the buffer becomes hidden, but is not unloaded, trigger
+ * BufHidden */
+ if (!unload_buf)
+ {
+ apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! /* Return if autocommands deleted the buffer or made it the only
+! * one. */
+! if (!buf_valid(buf) || (abort_if_last && one_window()))
+! {
+! EMSG(_(e_auabort));
+! return;
+! }
+ }
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+--- 377,411 ----
+ /* When the buffer is no longer in a window, trigger BufWinLeave */
+ if (buf->b_nwindows == 1)
+ {
++ buf->b_closing = TRUE;
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! if (!buf_valid(buf))
+ {
++ /* Autocommands deleted the buffer. */
++ aucmd_abort:
+ EMSG(_(e_auabort));
+ return;
+ }
++ buf->b_closing = FALSE;
++ if (abort_if_last && one_window())
++ /* Autocommands made this the only window. */
++ goto aucmd_abort;
+
+ /* When the buffer becomes hidden, but is not unloaded, trigger
+ * BufHidden */
+ if (!unload_buf)
+ {
++ buf->b_closing = TRUE;
+ apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! if (!buf_valid(buf))
+! /* Autocommands deleted the buffer. */
+! goto aucmd_abort;
+! buf->b_closing = FALSE;
+! if (abort_if_last && one_window())
+! /* Autocommands made this the only window. */
+! goto aucmd_abort;
+ }
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+***************
+*** 552,557 ****
+--- 559,565 ----
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf = (buf == curbuf);
+
++ buf->b_closing = TRUE;
+ apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
+ if (!buf_valid(buf)) /* autocommands may delete the buffer */
+ return;
+***************
+*** 568,573 ****
+--- 576,582 ----
+ if (!buf_valid(buf)) /* autocommands may delete the buffer */
+ return;
+ }
++ buf->b_closing = FALSE;
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+ return;
+***************
+*** 1150,1155 ****
+--- 1159,1167 ----
+ * a window with this buffer.
+ */
+ while (buf == curbuf
++ # ifdef FEAT_AUTOCMD
++ && !(curwin->w_closing || curwin->w_buffer->b_closing)
++ # endif
+ && (firstwin != lastwin || first_tabpage->tp_next != NULL))
+ win_close(curwin, FALSE);
+ #endif
+***************
+*** 4750,4756 ****
+ #ifdef FEAT_WINDOWS
+ || (had_tab > 0 && wp != firstwin)
+ #endif
+! ) && firstwin != lastwin)
+ {
+ win_close(wp, FALSE);
+ #ifdef FEAT_AUTOCMD
+--- 4762,4772 ----
+ #ifdef FEAT_WINDOWS
+ || (had_tab > 0 && wp != firstwin)
+ #endif
+! ) && firstwin != lastwin
+! #ifdef FEAT_AUTOCMD
+! && !(wp->w_closing || wp->w_buffer->b_closing)
+! #endif
+! )
+ {
+ win_close(wp, FALSE);
+ #ifdef FEAT_AUTOCMD
+*** ../vim-7.3.544/src/ex_docmd.c 2012-06-06 18:03:01.000000000 +0200
+--- src/ex_docmd.c 2012-06-06 18:06:46.000000000 +0200
+***************
+*** 6459,6465 ****
+ }
+ #ifdef FEAT_AUTOCMD
+ apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+! if (curbuf_locked())
+ return;
+ #endif
+
+--- 6459,6467 ----
+ }
+ #ifdef FEAT_AUTOCMD
+ apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+! /* Refuse to quick when locked or when the buffer in the last window is
+! * being closed (can only happen in autocommands). */
+! if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
+ return;
+ #endif
+
+*** ../vim-7.3.544/src/window.c 2012-05-25 12:38:57.000000000 +0200
+--- src/window.c 2012-06-06 18:47:19.000000000 +0200
+***************
+*** 2034,2040 ****
+
+ for (wp = firstwin; wp != NULL && lastwin != firstwin; )
+ {
+! if (wp->w_buffer == buf && (!keep_curwin || wp != curwin))
+ {
+ win_close(wp, FALSE);
+
+--- 2034,2044 ----
+
+ for (wp = firstwin; wp != NULL && lastwin != firstwin; )
+ {
+! if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
+! #ifdef FEAT_AUTOCMD
+! && !(wp->w_closing || wp->w_buffer->b_closing)
+! #endif
+! )
+ {
+ win_close(wp, FALSE);
+
+***************
+*** 2051,2057 ****
+ nexttp = tp->tp_next;
+ if (tp != curtab)
+ for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+! if (wp->w_buffer == buf)
+ {
+ win_close_othertab(wp, FALSE, tp);
+
+--- 2055,2065 ----
+ nexttp = tp->tp_next;
+ if (tp != curtab)
+ for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+! if (wp->w_buffer == buf
+! #ifdef FEAT_AUTOCMD
+! && !(wp->w_closing || wp->w_buffer->b_closing)
+! #endif
+! )
+ {
+ win_close_othertab(wp, FALSE, tp);
+
+***************
+*** 2168,2173 ****
+--- 2176,2183 ----
+ }
+
+ #ifdef FEAT_AUTOCMD
++ if (win->w_closing || win->w_buffer->b_closing)
++ return; /* window is already being closed */
+ if (win == aucmd_win)
+ {
+ EMSG(_("E813: Cannot close autocmd window"));
+***************
+*** 2203,2219 ****
+ wp = frame2win(win_altframe(win, NULL));
+
+ /*
+! * Be careful: If autocommands delete the window, return now.
+ */
+ if (wp->w_buffer != curbuf)
+ {
+ other_buffer = TRUE;
+ apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+! if (!win_valid(win) || last_window())
+ return;
+ }
+ apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+! if (!win_valid(win) || last_window())
+ return;
+ # ifdef FEAT_EVAL
+ /* autocmds may abort script processing */
+--- 2213,2238 ----
+ wp = frame2win(win_altframe(win, NULL));
+
+ /*
+! * Be careful: If autocommands delete the window or cause this window
+! * to be the last one left, return now.
+ */
+ if (wp->w_buffer != curbuf)
+ {
+ other_buffer = TRUE;
++ win->w_closing = TRUE;
+ apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+! if (!win_valid(win))
+! return;
+! win->w_closing = FALSE;
+! if (last_window())
+ return;
+ }
++ win->w_closing = TRUE;
+ apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+! if (!win_valid(win))
+! return;
+! win->w_closing = FALSE;
+! if (last_window())
+ return;
+ # ifdef FEAT_EVAL
+ /* autocmds may abort script processing */
+***************
+*** 2240,2246 ****
+ * Close the link to the buffer.
+ */
+ if (win->w_buffer != NULL)
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+--- 2259,2274 ----
+ * Close the link to the buffer.
+ */
+ if (win->w_buffer != NULL)
+! {
+! #ifdef FEAT_AUTOCMD
+! win->w_closing = TRUE;
+! #endif
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+! #ifdef FEAT_AUTOCMD
+! if (win_valid(win))
+! win->w_closing = FALSE;
+! #endif
+! }
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+***************
+*** 2346,2351 ****
+--- 2374,2384 ----
+ tabpage_T *ptp = NULL;
+ int free_tp = FALSE;
+
++ #ifdef FEAT_AUTOCMD
++ if (win->w_closing || win->w_buffer->b_closing)
++ return; /* window is already being closed */
++ #endif
++
+ /* Close the link to the buffer. */
+ close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+
+*** ../vim-7.3.544/src/version.c 2012-06-06 18:03:01.000000000 +0200
+--- src/version.c 2012-06-06 18:53:06.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 545,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+4. Put your garbage can on your desk and label it "in".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.546
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.546
+Problem: Bogus line break.
+Solution: Remove the line break.
+Files: src/screen.c
+
+
+*** ../vim-7.3.545/src/screen.c 2012-06-01 15:20:49.000000000 +0200
+--- src/screen.c 2012-06-01 16:31:30.000000000 +0200
+***************
+*** 3228,3235 ****
+ /* no bad word found at line start, don't check until end of a
+ * word */
+ spell_hlf = HLF_COUNT;
+! word_end = (int)(spell_to_word_end(ptr, wp)
+! - line + 1);
+ }
+ else
+ {
+--- 3228,3234 ----
+ /* no bad word found at line start, don't check until end of a
+ * word */
+ spell_hlf = HLF_COUNT;
+! word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
+ }
+ else
+ {
+*** ../vim-7.3.545/src/version.c 2012-06-06 19:02:40.000000000 +0200
+--- src/version.c 2012-06-06 19:05:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 546,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+5. Put decaf in the coffee maker for 3 weeks. Once everyone has gotten
+ over their caffeine addictions, switch to espresso.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.547
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.547 (after 7.3.541)
+Problem: Compiler warning for uninitialized variable.
+Solution: Initialize it.
+Files: src/ops.c
+
+
+*** ../vim-7.3.546/src/ops.c 2012-06-06 16:12:54.000000000 +0200
+--- src/ops.c 2012-06-06 23:06:45.000000000 +0200
+***************
+*** 4306,4312 ****
+ colnr_T col = 0;
+ int ret = OK;
+ #if defined(FEAT_COMMENTS) || defined(PROTO)
+! int *comments;
+ int remove_comments = (use_formatoptions == TRUE)
+ && has_format_option(FO_REMOVE_COMS);
+ int prev_was_comment;
+--- 4306,4312 ----
+ colnr_T col = 0;
+ int ret = OK;
+ #if defined(FEAT_COMMENTS) || defined(PROTO)
+! int *comments = NULL;
+ int remove_comments = (use_formatoptions == TRUE)
+ && has_format_option(FO_REMOVE_COMS);
+ int prev_was_comment;
+*** ../vim-7.3.546/src/version.c 2012-06-06 19:05:45.000000000 +0200
+--- src/version.c 2012-06-06 23:07:26.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 547,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+9. As often as possible, skip rather than walk.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
name = vim
version = 7.3
-release = 2
+release = 3
groups = Applications/Editors
url = http://www.vim.org
source_dl = ftp://ftp.vim.org/pub/vim/unix/
sources = %{thisapp}.tar.bz2
-DIR_APP = %{DIR_SRC}/%{name}73
build
+ DIR_APP = %{DIR_SRC}/%{name}73
+
requires
libacl-devel
libselinux-devel
ncurses-devel
+ python-devel
end
configure_options += \
+ --with-features=huge \
+ --enable-pythoninterp \
+ --enable-gui=no \
--enable-multibyte \
- --enable-selinux
+ --enable-cscope \
+ --enable-selinux \
+ --with-tlib=ncurses \
+ --with-modified-by="<bugzilla@ipfire.org>" \
+ --with-compiled-by="<bugzilla@ipfire.org>"
configure_cmds
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h