rpms/vim/F-10 7.2.027, NONE, 1.1 7.2.028, NONE, 1.1 7.2.029, NONE, 1.1 7.2.030, NONE, 1.1 7.2.031, NONE, 1.1 7.2.032, NONE, 1.1 7.2.033, NONE, 1.1 7.2.034, NONE, 1.1 7.2.035, NONE, 1.1 7.2.036, NONE, 1.1 7.2.037, NONE, 1.1 7.2.038, NONE, 1.1 7.2.039, NONE, 1.1 7.2.040, NONE, 1.1 7.2.041, NONE, 1.1 7.2.042, NONE, 1.1 7.2.043, NONE, 1.1 7.2.044, NONE, 1.1 7.2.045, NONE, 1.1 7.2.046, NONE, 1.1 7.2.047, NONE, 1.1 7.2.048, NONE, 1.1 7.2.049, NONE, 1.1 7.2.050, NONE, 1.1 7.2.051, NONE, 1.1 7.2.052, NONE, 1.1 7.2.053, NONE, 1.1 7.2.054, NONE, 1.1 7.2.055, NONE, 1.1 7.2.056, NONE, 1.1 7.2.057, NONE, 1.1 7.2.058, NONE, 1.1 7.2.059, NONE, 1.1 7.2.060, NONE, 1.1 filetype.vim, NONE, 1.1 gzip.vim, NONE, 1.1 netrw.vim, NONE, 1.1 netrwFileHandlers.vim, NONE, 1.1 netrwPlugin.vim, NONE, 1.1 netrwSettings.vim, NONE, 1.1 tar.vim, NONE, 1.1 zip.vim, NONE, 1.1 README.patches, 1.114, 1.115 vim.spec, 1.226, 1.227 vim-6.4-cvim.patch, 1.2, NONE vim-7.1-ada.patch, 1.3, NONE vim-7.1-erlang.patch, 1.1, NONE
Karsten Hopp
karsten at fedoraproject.org
Mon Dec 1 15:57:35 UTC 2008
- Previous message (by thread): rpms/bind/F-10 bind.spec,1.285,1.286 named.conf.sample,1.4,1.5
- Next message (by thread): rpms/ufraw/F-9 .cvsignore, 1.9, 1.10 sources, 1.9, 1.10 ufraw.spec, 1.32, 1.33
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: karsten
Update of /cvs/extras/rpms/vim/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv14916
Modified Files:
README.patches vim.spec
Added Files:
7.2.027 7.2.028 7.2.029 7.2.030 7.2.031 7.2.032 7.2.033
7.2.034 7.2.035 7.2.036 7.2.037 7.2.038 7.2.039 7.2.040
7.2.041 7.2.042 7.2.043 7.2.044 7.2.045 7.2.046 7.2.047
7.2.048 7.2.049 7.2.050 7.2.051 7.2.052 7.2.053 7.2.054
7.2.055 7.2.056 7.2.057 7.2.058 7.2.059 7.2.060 filetype.vim
gzip.vim netrw.vim netrwFileHandlers.vim netrwPlugin.vim
netrwSettings.vim tar.vim zip.vim
Removed Files:
vim-6.4-cvim.patch vim-7.1-ada.patch vim-7.1-erlang.patch
Log Message:
update to vim-7.2 patchlevel 60
--- NEW FILE 7.2.027 ---
To: vim-dev at vim.org
Subject: Patch 7.2.027
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.027
Problem: Can use cscope commands in the sandbox.
Solution: Disallow them, they might not be safe.
Files: src/ex_cmds.h
*** ../vim-7.2.026/src/ex_cmds.h Thu Sep 18 12:43:21 2008
--- src/ex_cmds.h Thu Sep 18 22:18:14 2008
***************
*** 278,284 ****
EX(CMD_crewind, "crewind", ex_cc,
RANGE|NOTADR|COUNT|TRLBAR|BANG),
EX(CMD_cscope, "cscope", do_cscope,
! EXTRA|NOTRLCOM|SBOXOK|XFILE),
EX(CMD_cstag, "cstag", do_cstag,
BANG|TRLBAR|WORD1),
EX(CMD_cunmap, "cunmap", ex_unmap,
--- 278,284 ----
EX(CMD_crewind, "crewind", ex_cc,
RANGE|NOTADR|COUNT|TRLBAR|BANG),
EX(CMD_cscope, "cscope", do_cscope,
! EXTRA|NOTRLCOM|XFILE),
EX(CMD_cstag, "cstag", do_cstag,
BANG|TRLBAR|WORD1),
EX(CMD_cunmap, "cunmap", ex_unmap,
***************
*** 506,512 ****
EX(CMD_lclose, "lclose", ex_cclose,
RANGE|NOTADR|COUNT|TRLBAR),
EX(CMD_lcscope, "lcscope", do_cscope,
! EXTRA|NOTRLCOM|SBOXOK|XFILE),
EX(CMD_left, "left", ex_align,
TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
EX(CMD_leftabove, "leftabove", ex_wrongmodifier,
--- 506,512 ----
EX(CMD_lclose, "lclose", ex_cclose,
RANGE|NOTADR|COUNT|TRLBAR),
EX(CMD_lcscope, "lcscope", do_cscope,
! EXTRA|NOTRLCOM|XFILE),
EX(CMD_left, "left", ex_align,
TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
EX(CMD_leftabove, "leftabove", ex_wrongmodifier,
***************
*** 653,658 ****
--- 653,660 ----
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_open, "open", ex_open,
RANGE|EXTRA),
+ EX(CMD_oldfiles, "oldfiles", ex_oldfiles,
+ BANG|TRLBAR|SBOXOK|CMDWIN),
EX(CMD_omap, "omap", ex_map,
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_omapclear, "omapclear", ex_mapclear,
***************
*** 804,810 ****
EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding,
WORD1|TRLBAR|CMDWIN),
EX(CMD_scscope, "scscope", do_scscope,
! EXTRA|NOTRLCOM|SBOXOK),
EX(CMD_set, "set", ex_set,
TRLBAR|EXTRA|CMDWIN|SBOXOK),
EX(CMD_setfiletype, "setfiletype", ex_setfiletype,
--- 806,812 ----
EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding,
WORD1|TRLBAR|CMDWIN),
EX(CMD_scscope, "scscope", do_scscope,
! EXTRA|NOTRLCOM),
EX(CMD_set, "set", ex_set,
TRLBAR|EXTRA|CMDWIN|SBOXOK),
EX(CMD_setfiletype, "setfiletype", ex_setfiletype,
*** ../vim-7.2.026/src/version.c Sat Nov 1 13:51:57 2008
--- src/version.c Thu Nov 6 10:21:21 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 27,
/**/
--
hundred-and-one symptoms of being an internet addict:
179. You wonder why your household garbage can doesn't have an
"empty recycle bin" button.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.028 ---
To: vim-dev at vim.org
Subject: Patch 7.2.028
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.028
Problem: Confusing error message for missing ().
Solution: Change "braces" to "parentheses". (Gary Johnson)
Files: src/eval.c
*** ../vim-7.2.027/src/eval.c Wed Sep 10 15:38:13 2008
--- src/eval.c Tue Sep 30 21:43:38 2008
***************
*** 3287,3293 ****
if (*startarg != '(')
{
! EMSG2(_("E107: Missing braces: %s"), eap->arg);
goto end;
}
--- 3293,3299 ----
if (*startarg != '(')
{
! EMSG2(_("E107: Missing parentheses: %s"), eap->arg);
goto end;
}
*** ../vim-7.2.027/src/version.c Thu Nov 6 10:23:03 2008
--- src/version.c Thu Nov 6 11:02:51 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 28,
/**/
--
Wizards had always known that the act of observation changed the thing that
was observed, and sometimes forgot that it also changed the observer too.
Terry Pratchett - Interesting times
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.029 ---
To: vim-dev at vim.org
Subject: Patch 7.2.029
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.029
Problem: No completion for ":doautoall".
Solution: Complete ":doautoall" like ":doautocmd". (Doug Kearns)
Files: src/ex_docmd.c
*** ../vim-7.2.028/src/ex_docmd.c Thu Sep 18 21:29:07 2008
--- src/ex_docmd.c Mon Nov 3 21:21:17 2008
***************
*** 3609,3614 ****
--- 3610,3616 ----
return set_context_in_autocmd(xp, arg, FALSE);
case CMD_doautocmd:
+ case CMD_doautoall:
return set_context_in_autocmd(xp, arg, TRUE);
#endif
case CMD_set:
*** ../vim-7.2.028/src/version.c Thu Nov 6 11:04:50 2008
--- src/version.c Thu Nov 6 17:14:58 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 29,
/**/
--
Press any key to continue, press any other key to quit.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.030 ---
To: vim-dev at vim.org
Subject: Patch 7.2.030
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.030 (after 7.2.027)
Problem: Can't compile.
Solution: Remove prematurely added ex_oldfiles.
Files: src/ex_cmds.h
*** ../vim-7.2.029/src/ex_cmds.h Thu Nov 6 10:23:03 2008
--- src/ex_cmds.h Thu Nov 6 20:45:07 2008
***************
*** 653,660 ****
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_open, "open", ex_open,
RANGE|EXTRA),
- EX(CMD_oldfiles, "oldfiles", ex_oldfiles,
- BANG|TRLBAR|SBOXOK|CMDWIN),
EX(CMD_omap, "omap", ex_map,
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_omapclear, "omapclear", ex_mapclear,
--- 653,658 ----
*** ../vim-7.2.029/src/version.c Thu Nov 6 17:16:06 2008
--- src/version.c Thu Nov 6 20:46:11 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 30,
/**/
--
% cat /usr/include/sys/errno.h
#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
[...]
#define EMACS 666 /* Too many macros */
%
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.031 ---
To: vim-dev at vim.org
Subject: Patch 7.2.031
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.031
Problem: Information in the viminfo file about previously edited files is
not available to the user. There is no way to get a complete list
of files edited in previous Vim sessions.
Solution: Add v:oldfiles and fill it with the list of old file names when
first reading the viminfo file. Add the ":oldfiles" command,
":browse oldfiles" and the "#<123" special file name. Increase
the default value for 'viminfo' from '20 to '100.
Files: runtime/doc/cmdline.txt, runtime/doc/eval.txt,
runtime/doc/starting.txt, runtime/doc/usr_21.txt, src/eval.c,
src/ex_cmds.c, src/ex_cmds.h, src/ex_docmd.c, src/feature.h,
src/fileio.c, src/main.c, src/mark.c, src/misc1.c,
src/proto/eval.pro, src/proto/ex_cmds.pro, src/proto/mark.pro,
src/option.c, src/structs.h, src/vim.h
*** ../vim-7.2.030/runtime/doc/cmdline.txt Sat Aug 9 19:36:46 2008
--- runtime/doc/cmdline.txt Thu Sep 18 22:55:27 2008
***************
*** 1,4 ****
! *cmdline.txt* For Vim version 7.2. Last change: 2008 Jul 29
VIM REFERENCE MANUAL by Bram Moolenaar
--- 1,4 ----
! *cmdline.txt* For Vim version 7.2. Last change: 2008 Sep 18
VIM REFERENCE MANUAL by Bram Moolenaar
***************
*** 157,162 ****
--- 157,167 ----
(doesn't work at the expression prompt; some
things such as changing the buffer or current
window are not allowed to avoid side effects)
+ When the result is a |List| the items are used
+ as lines. They can have line breaks inside
+ too.
+ When the result is a Float it's automatically
+ converted to a String.
See |registers| about registers. {not in Vi}
Implementation detail: When using the |expression| register
and invoking setcmdpos(), this sets the position before
***************
*** 730,748 ****
In Ex commands, at places where a file name can be used, the following
characters have a special meaning. These can also be used in the expression
function expand() |expand()|.
! % is replaced with the current file name *:_%*
! # is replaced with the alternate file name *:_#*
#n (where n is a number) is replaced with the file name of
! buffer n. "#0" is the same as "#"
! ## is replaced with all names in the argument list *:_##*
concatenated, separated by spaces. Each space in a name
is preceded with a backslash.
! Note that these give the file name as it was typed. If an absolute path is
! needed (when using the file name from a different directory), you need to add
! ":p". See |filename-modifiers|.
Note that backslashes are inserted before spaces, so that the command will
correctly interpret the file name. But this doesn't happen for shell
! commands. For those you probably have to use quotes: >
:!ls "%"
:r !spell "%"
--- 735,763 ----
In Ex commands, at places where a file name can be used, the following
characters have a special meaning. These can also be used in the expression
function expand() |expand()|.
! % Is replaced with the current file name. *:_%* *c_%*
! # Is replaced with the alternate file name. *:_#* *c_#*
#n (where n is a number) is replaced with the file name of
! buffer n. "#0" is the same as "#".
! ## Is replaced with all names in the argument list *:_##* *c_##*
concatenated, separated by spaces. Each space in a name
is preceded with a backslash.
! #<n (where n is a number > 0) is replaced with old *:_#<* *c_#<*
! file name n. See |:oldfiles| or |v:oldfiles| to get the
! number. *E809*
! {only when compiled with the +eval and +viminfo features}
!
! Note that these, except "#<n", give the file name as it was typed. If an
! absolute path is needed (when using the file name from a different directory),
! you need to add ":p". See |filename-modifiers|.
!
! The "#<n" item returns an absolute path, but it will start with "~/" for files
! below your home directory.
!
Note that backslashes are inserted before spaces, so that the command will
correctly interpret the file name. But this doesn't happen for shell
! commands. For those you probably have to use quotes (this fails for files
! that contain a quote and wildcards): >
:!ls "%"
:r !spell "%"
*** ../vim-7.2.030/runtime/doc/eval.txt Sat Aug 9 19:36:47 2008
--- runtime/doc/eval.txt Sun Nov 2 14:25:38 2008
***************
*** 1,4 ****
! *eval.txt* For Vim version 7.2. Last change: 2008 Aug 09
VIM REFERENCE MANUAL by Bram Moolenaar
--- 1,4 ----
! *eval.txt* For Vim version 7.2. Last change: 2008 Nov 02
VIM REFERENCE MANUAL by Bram Moolenaar
***************
*** 1484,1489 ****
--- 1484,1500 ----
This is the screen column number, like with |virtcol()|. The
value is zero when there was no mouse button click.
+ *v:oldfiles* *oldfiles-variable*
+ v:oldfiles List of file names that is loaded from the |viminfo| file on
+ startup. These are the files that Vim remembers marks for.
+ The length of the List is limited by the ' argument of the
+ 'viminfo' option (default is 100).
+ Also see |:oldfiles| and |c_#<|.
+ The List can be modified, but this has no effect on what is
+ stored in the |viminfo| file later. If you use values other
+ than String this will cause trouble.
+ {only when compiled with the +viminfo feature}
+
*v:operator* *operator-variable*
v:operator The last operator given in Normal mode. This is a single
character except for commands starting with <g> or <z>,
*** ../vim-7.2.030/runtime/doc/starting.txt Sat Aug 9 19:36:52 2008
--- runtime/doc/starting.txt Sun Nov 9 12:12:19 2008
***************
*** 1,4 ****
! *starting.txt* For Vim version 7.2. Last change: 2008 Jun 21
VIM REFERENCE MANUAL by Bram Moolenaar
--- 1,4 ----
! *starting.txt* For Vim version 7.2. Last change: 2008 Nov 09
VIM REFERENCE MANUAL by Bram Moolenaar
***************
*** 1337,1344 ****
*viminfo-read*
When Vim is started and the 'viminfo' option is non-empty, the contents of
the viminfo file are read and the info can be used in the appropriate places.
! The marks are not read in at startup (but file marks are). See
! |initialization| for how to set the 'viminfo' option upon startup.
*viminfo-write*
When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
--- 1335,1343 ----
*viminfo-read*
When Vim is started and the 'viminfo' option is non-empty, the contents of
the viminfo file are read and the info can be used in the appropriate places.
! The |v:oldfiles| variable is filled. The marks are not read in at startup
! (but file marks are). See |initialization| for how to set the 'viminfo'
! option upon startup.
*viminfo-write*
When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
***************
*** 1372,1377 ****
--- 1371,1378 ----
that start with any string given with the "r" flag in 'viminfo'. This can be
used to avoid saving marks for files on removable media (for MS-DOS you would
use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:").
+ The |v:oldfiles| variable is filled with the file names that the viminfo file
+ has marks for.
*viminfo-file-marks*
Uppercase marks ('A to 'Z) are stored when writing the viminfo file. The
***************
*** 1463,1470 ****
*:rv* *:rviminfo* *E195*
:rv[iminfo][!] [file] Read from viminfo file [file] (default: see above).
If [!] is given, then any information that is
! already set (registers, marks, etc.) will be
! overwritten. {not in Vi}
*:wv* *:wviminfo* *E137* *E138* *E574*
:wv[iminfo][!] [file] Write to viminfo file [file] (default: see above).
--- 1464,1471 ----
*:rv* *:rviminfo* *E195*
:rv[iminfo][!] [file] Read from viminfo file [file] (default: see above).
If [!] is given, then any information that is
! already set (registers, marks, |v:oldfiles|, etc.)
! will be overwritten {not in Vi}
*:wv* *:wviminfo* *E137* *E138* *E574*
:wv[iminfo][!] [file] Write to viminfo file [file] (default: see above).
***************
*** 1479,1482 ****
--- 1480,1499 ----
the .viminfo file.
{not in Vi}
+ *:ol* *:oldfiles*
+ :ol[dfiles] List the files that have marks stored in the viminfo
+ file. This list is read on startup and only changes
+ afterwards with ":rviminfo!". Also see |v:oldfiles|.
+ The number can be used with |c_#<|.
+ {not in Vi, only when compiled with the +eval feature}
+
+ :bro[wse] ol[dfiles][!]
+ List file names as with |:oldfiles|, and then prompt
+ for a number. When the number is valid that file from
+ the list is edited.
+ If you get the |press-enter| prompt you can press "q"
+ and still get the prompt to enter a file number.
+ Use ! to abondon a modified buffer. |abandon|
+ {not when compiled with tiny or small features}
+
vim:tw=78:ts=8:ft=help:norl:
*** ../vim-7.2.030/runtime/doc/usr_21.txt Sat Aug 9 19:36:53 2008
--- runtime/doc/usr_21.txt Sun Nov 9 12:14:10 2008
***************
*** 1,4 ****
! *usr_21.txt* For Vim version 7.2. Last change: 2007 May 01
VIM USER MANUAL - by Bram Moolenaar
--- 1,4 ----
! *usr_21.txt* For Vim version 7.2. Last change: 2008 Nov 09
VIM USER MANUAL - by Bram Moolenaar
***************
*** 153,159 ****
to be lost. Each item can be remembered only once.
! GETTING BACK TO WHERE YOU WERE
You are halfway editing a file and it's time to leave for holidays. You exit
Vim and go enjoy yourselves, forgetting all about your work. After a couple
--- 153,159 ----
to be lost. Each item can be remembered only once.
! GETTING BACK TO WHERE YOU STOPPED VIM
You are halfway editing a file and it's time to leave for holidays. You exit
Vim and go enjoy yourselves, forgetting all about your work. After a couple
***************
*** 168,173 ****
--- 168,215 ----
The |:marks| command is useful to find out where '0 to '9 will take you.
+ GETTING BACK TO SOME FILE
+
+ If you want to go back to a file that you edited recently, but not when
+ exiting Vim, there is a slightly more complicated way. You can see a list of
+ files by typing the command: >
+
+ :oldfiles
+ < 1: ~/.viminfo ~
+ 2: ~/text/resume.txt ~
+ 3: /tmp/draft ~
+
+ Now you would like to edit the second file, which is in the list preceded by
+ "2:". You type: >
+
+ :e #<2
+
+ Instead of ":e" you can use any command that has a file name argument, the
+ "#<2" item works in the same place as "%" (current file name) and "#"
+ (alternate file name). So you can also split the window to edit the third
+ file: >
+
+ :split #<3
+
+ That #<123 thing is a bit complicated when you just want to edit a file.
+ Fortunately there is a simpler way: >
+
+ :browse oldfiles
+ < 1: ~/.viminfo ~
+ 2: ~/text/resume.txt ~
+ 3: /tmp/draft ~
+ -- More --
+
+ You get the same list of files as with |:oldfiles|. If you want to edit
+ "resume.txt" first press "q" to stop the listing. You will get a prompt:
+
+ Type number and <Enter> (empty cancels): ~
+
+ Type "2" and press <Enter> to edit the second file.
+
+ More info at |:oldfiles|, |v:oldfiles| and |c_#<|.
+
+
MOVE INFO FROM ONE VIM TO ANOTHER
You can use the ":wviminfo" and ":rviminfo" commands to save and restore the
*** ../vim-7.2.030/src/eval.c Thu Nov 6 11:04:50 2008
--- src/eval.c Sun Nov 9 11:59:39 2008
***************
*** 348,353 ****
--- 348,354 ----
{VV_NAME("mouse_col", VAR_NUMBER), 0},
{VV_NAME("operator", VAR_STRING), VV_RO},
{VV_NAME("searchforward", VAR_NUMBER), 0},
+ {VV_NAME("oldfiles", VAR_LIST), 0},
};
/* shorthand */
***************
*** 355,360 ****
--- 356,362 ----
#define vv_nr vv_di.di_tv.vval.v_number
#define vv_float vv_di.di_tv.vval.v_float
#define vv_str vv_di.di_tv.vval.v_string
+ #define vv_list vv_di.di_tv.vval.v_list
#define vv_tv vv_di.di_tv
/*
***************
*** 426,432 ****
static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
static void list_append __ARGS((list_T *l, listitem_T *item));
static int list_append_tv __ARGS((list_T *l, typval_T *tv));
- static int list_append_string __ARGS((list_T *l, char_u *str, int len));
static int list_append_number __ARGS((list_T *l, varnumber_T n));
static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
static int list_extend __ARGS((list_T *l1, list_T *l2, listitem_T *bef));
--- 428,433 ----
***************
*** 845,852 ****
p = &vimvars[i];
if (p->vv_di.di_tv.v_type == VAR_STRING)
{
! vim_free(p->vv_di.di_tv.vval.v_string);
! p->vv_di.di_tv.vval.v_string = NULL;
}
}
hash_clear(&vimvarht);
--- 846,858 ----
p = &vimvars[i];
if (p->vv_di.di_tv.v_type == VAR_STRING)
{
! vim_free(p->vv_string);
! p->vv_string = NULL;
! }
! else if (p->vv_di.di_tv.v_type == VAR_LIST)
! {
! list_unref(p->vv_list);
! p->vv_list = NULL;
}
}
hash_clear(&vimvarht);
***************
*** 6057,6062 ****
--- 6063,6087 ----
}
/*
+ * Get list item "l[idx - 1]" as a string. Returns NULL for failure.
+ */
+ char_u *
+ list_find_str(l, idx)
+ list_T *l;
+ long idx;
+ {
+ listitem_T *li;
+
+ li = list_find(l, idx - 1);
+ if (li == NULL)
+ {
+ EMSGN(_(e_listidx), idx);
+ return NULL;
+ }
+ return get_tv_string(&li->li_tv);
+ }
+
+ /*
* Locate "item" list "l" and return its index.
* Returns -1 when "item" is not in the list.
*/
***************
*** 6147,6153 ****
* When "len" >= 0 use "str[len]".
* Returns FAIL when out of memory.
*/
! static int
list_append_string(l, str, len)
list_T *l;
char_u *str;
--- 6172,6178 ----
* When "len" >= 0 use "str[len]".
* Returns FAIL when out of memory.
*/
! int
list_append_string(l, str, len)
list_T *l;
char_u *str;
***************
*** 6507,6512 ****
--- 6532,6540 ----
set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
}
+ /* v: vars */
+ set_ref_in_ht(&vimvarht, copyID);
+
/*
* 2. Go through the list of dicts and free items without the copyID.
*/
***************
*** 6597,6603 ****
{
case VAR_DICT:
dd = tv->vval.v_dict;
! if (dd->dv_copyID != copyID)
{
/* Didn't see this dict yet. */
dd->dv_copyID = copyID;
--- 6625,6631 ----
{
case VAR_DICT:
dd = tv->vval.v_dict;
! if (dd != NULL && dd->dv_copyID != copyID)
{
/* Didn't see this dict yet. */
dd->dv_copyID = copyID;
***************
*** 6607,6613 ****
case VAR_LIST:
ll = tv->vval.v_list;
! if (ll->lv_copyID != copyID)
{
/* Didn't see this list yet. */
ll->lv_copyID = copyID;
--- 6635,6641 ----
case VAR_LIST:
ll = tv->vval.v_list;
! if (ll != NULL && ll->lv_copyID != copyID)
{
/* Didn't see this list yet. */
ll->lv_copyID = copyID;
***************
*** 18106,18111 ****
--- 18134,18150 ----
}
/*
+ * Get List v: variable value. Caller must take care of reference count when
+ * needed.
+ */
+ list_T *
+ get_vim_var_list(idx)
+ int idx;
+ {
+ return vimvars[idx].vv_list;
+ }
+
+ /*
* Set v:count, v:count1 and v:prevcount.
*/
void
***************
*** 18141,18146 ****
--- 18180,18199 ----
}
/*
+ * Set List v: variable to "val".
+ */
+ void
+ set_vim_var_list(idx, val)
+ int idx;
+ list_T *val;
+ {
+ list_unref(vimvars[idx].vv_list);
+ vimvars[idx].vv_list = val;
+ if (val != NULL)
+ ++val->lv_refcount;
+ }
+
+ /*
* Set v:register if needed.
*/
void
***************
*** 21900,21905 ****
--- 21953,22014 ----
}
}
+ /*
+ * List v:oldfiles in a nice way.
+ */
+ /*ARGSUSED*/
+ void
+ ex_oldfiles(eap)
+ exarg_T *eap;
+ {
+ list_T *l = vimvars[VV_OLDFILES].vv_list;
+ listitem_T *li;
+ int nr = 0;
+
+ if (l == NULL)
+ msg((char_u *)_("No old files"));
+ else
+ {
+ msg_start();
+ msg_scroll = TRUE;
+ for (li = l->lv_first; li != NULL && !got_int; li = li->li_next)
+ {
+ msg_outnum((long)++nr);
+ MSG_PUTS(": ");
+ msg_outtrans(get_tv_string(&li->li_tv));
+ msg_putchar('\n');
+ out_flush(); /* output one line at a time */
+ ui_breakcheck();
+ }
+ /* Assume "got_int" was set to truncate the listing. */
+ got_int = FALSE;
+
+ #ifdef FEAT_BROWSE_CMD
+ if (cmdmod.browse)
+ {
+ quit_more = FALSE;
+ nr = prompt_for_number(FALSE);
+ msg_starthere();
+ if (nr > 0)
+ {
+ char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES),
+ (long)nr);
+
+ if (p != NULL)
+ {
+ p = expand_env_save(p);
+ eap->arg = p;
+ eap->cmdidx = CMD_edit;
+ cmdmod.browse = FALSE;
+ do_exedit(eap, NULL);
+ vim_free(p);
+ }
+ }
+ }
+ #endif
+ }
+ }
+
#endif /* FEAT_EVAL */
*** ../vim-7.2.030/src/ex_cmds.c Sun Sep 14 21:40:26 2008
--- src/ex_cmds.c Sun Sep 14 13:45:03 2008
***************
*** 24,30 ****
static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
#ifdef FEAT_VIMINFO
static char_u *viminfo_filename __ARGS((char_u *));
! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int want_info, int want_marks, int force_read));
static int viminfo_encoding __ARGS((vir_T *virp));
static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
#endif
--- 24,30 ----
static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
#ifdef FEAT_VIMINFO
static char_u *viminfo_filename __ARGS((char_u *));
! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int flags));
static int viminfo_encoding __ARGS((vir_T *virp));
static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
#endif
***************
*** 1676,1689 ****
/*
* read_viminfo() -- Read the viminfo file. Registers etc. which are already
! * set are not over-written unless force is TRUE. -- webb
*/
int
! read_viminfo(file, want_info, want_marks, forceit)
! char_u *file;
! int want_info;
! int want_marks;
! int forceit;
{
FILE *fp;
char_u *fname;
--- 1676,1687 ----
/*
* read_viminfo() -- Read the viminfo file. Registers etc. which are already
! * set are not over-written unless "flags" includes VIF_FORCEIT. -- webb
*/
int
! read_viminfo(file, flags)
! char_u *file; /* file name or NULL to use default name */
! int flags; /* VIF_WANT_INFO et al. */
{
FILE *fp;
char_u *fname;
***************
*** 1691,1697 ****
if (no_viminfo())
return FAIL;
! fname = viminfo_filename(file); /* may set to default if NULL */
if (fname == NULL)
return FAIL;
fp = mch_fopen((char *)fname, READBIN);
--- 1689,1695 ----
if (no_viminfo())
return FAIL;
! fname = viminfo_filename(file); /* get file name in allocated buffer */
if (fname == NULL)
return FAIL;
fp = mch_fopen((char *)fname, READBIN);
***************
*** 1701,1708 ****
verbose_enter();
smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
fname,
! want_info ? _(" info") : "",
! want_marks ? _(" marks") : "",
fp == NULL ? _(" FAILED") : "");
verbose_leave();
}
--- 1699,1707 ----
verbose_enter();
smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
fname,
! (flags & VIF_WANT_INFO) ? _(" info") : "",
! (flags & VIF_WANT_MARKS) ? _(" marks") : "",
! (flags & VIF_GET_OLDFILES) ? _(" oldfiles") : "",
fp == NULL ? _(" FAILED") : "");
verbose_leave();
}
***************
*** 1712,1721 ****
return FAIL;
viminfo_errcnt = 0;
! do_viminfo(fp, NULL, want_info, want_marks, forceit);
fclose(fp);
-
return OK;
}
--- 1711,1719 ----
return FAIL;
viminfo_errcnt = 0;
! do_viminfo(fp, NULL, flags);
fclose(fp);
return OK;
}
***************
*** 1968,1974 ****
}
viminfo_errcnt = 0;
! do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE);
fclose(fp_out); /* errors are ignored !? */
if (fp_in != NULL)
--- 1966,1972 ----
}
viminfo_errcnt = 0;
! do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS));
fclose(fp_out); /* errors are ignored !? */
if (fp_in != NULL)
***************
*** 2041,2052 ****
* do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
*/
static void
! do_viminfo(fp_in, fp_out, want_info, want_marks, force_read)
FILE *fp_in;
FILE *fp_out;
! int want_info;
! int want_marks;
! int force_read;
{
int count = 0;
int eof = FALSE;
--- 2039,2048 ----
* do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
*/
static void
! do_viminfo(fp_in, fp_out, flags)
FILE *fp_in;
FILE *fp_out;
! int flags;
{
int count = 0;
int eof = FALSE;
***************
*** 2061,2068 ****
if (fp_in != NULL)
{
! if (want_info)
! eof = read_viminfo_up_to_marks(&vir, force_read, fp_out != NULL);
else
/* Skip info, find start of marks */
while (!(eof = viminfo_readline(&vir))
--- 2057,2065 ----
if (fp_in != NULL)
{
! if (flags & VIF_WANT_INFO)
! eof = read_viminfo_up_to_marks(&vir,
! flags & VIF_FORCEIT, fp_out != NULL);
else
/* Skip info, find start of marks */
while (!(eof = viminfo_readline(&vir))
***************
*** 2092,2099 ****
write_viminfo_bufferlist(fp_out);
count = write_viminfo_marks(fp_out);
}
! if (fp_in != NULL && want_marks)
! copy_viminfo_marks(&vir, fp_out, count, eof);
vim_free(vir.vir_line);
#ifdef FEAT_MBYTE
--- 2089,2097 ----
write_viminfo_bufferlist(fp_out);
count = write_viminfo_marks(fp_out);
}
! if (fp_in != NULL
! && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT)))
! copy_viminfo_marks(&vir, fp_out, count, eof, flags);
vim_free(vir.vir_line);
#ifdef FEAT_MBYTE
*** ../vim-7.2.030/src/ex_cmds.h Thu Nov 6 20:47:00 2008
--- src/ex_cmds.h Thu Sep 18 22:18:14 2008
***************
*** 653,658 ****
--- 653,660 ----
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_open, "open", ex_open,
RANGE|EXTRA),
+ EX(CMD_oldfiles, "oldfiles", ex_oldfiles,
+ BANG|TRLBAR|SBOXOK|CMDWIN),
EX(CMD_omap, "omap", ex_map,
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_omapclear, "omapclear", ex_mapclear,
*** ../vim-7.2.030/src/ex_docmd.c Thu Nov 6 17:16:06 2008
--- src/ex_docmd.c Mon Nov 3 21:21:17 2008
***************
*** 364,369 ****
--- 364,370 ----
# define ex_function ex_ni
# define ex_delfunction ex_ni
# define ex_return ex_ni
+ # define ex_oldfiles ex_ni
#endif
static char_u *arg_all __ARGS((void));
#ifdef FEAT_SESSION
***************
*** 1770,1776 ****
}
if (checkforcmd(&ea.cmd, "browse", 3))
{
! #ifdef FEAT_BROWSE
cmdmod.browse = TRUE;
#endif
continue;
--- 1771,1777 ----
}
if (checkforcmd(&ea.cmd, "browse", 3))
{
! #ifdef FEAT_BROWSE_CMD
cmdmod.browse = TRUE;
#endif
continue;
***************
*** 9508,9531 ****
break;
}
s = src + 1;
i = (int)getdigits(&s);
*usedlen = (int)(s - src); /* length of what we expand */
! buf = buflist_findnr(i);
! if (buf == NULL)
{
! *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
return NULL;
}
! if (lnump != NULL)
! *lnump = ECMD_LAST;
! if (buf->b_fname == NULL)
{
! result = (char_u *)"";
! valid = 0; /* Must have ":p:h" to be valid */
}
- else
- result = buf->b_fname;
break;
#ifdef FEAT_SEARCHPATH
--- 9509,9558 ----
break;
}
s = src + 1;
+ if (*s == '<') /* "#<99" uses v:oldfiles */
+ ++s;
i = (int)getdigits(&s);
*usedlen = (int)(s - src); /* length of what we expand */
! if (src[1] == '<')
{
! if (*usedlen < 2)
! {
! /* Should we give an error message for #<text? */
! *usedlen = 1;
! return NULL;
! }
! #ifdef FEAT_EVAL
! result = list_find_str(get_vim_var_list(VV_OLDFILES),
! (long)i);
! if (result == NULL)
! {
! *errormsg = (char_u *)"";
! return NULL;
! }
! #else
! *errormsg = (char_u *)_("E809: #< is not available without the +eval feature");
return NULL;
+ #endif
}
! else
{
! buf = buflist_findnr(i);
! if (buf == NULL)
! {
! *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
! return NULL;
! }
! if (lnump != NULL)
! *lnump = ECMD_LAST;
! if (buf->b_fname == NULL)
! {
! result = (char_u *)"";
! valid = 0; /* Must have ":p:h" to be valid */
! }
! else
! result = buf->b_fname;
}
break;
#ifdef FEAT_SEARCHPATH
***************
*** 10700,10706 ****
p_viminfo = (char_u *)"'100";
if (eap->cmdidx == CMD_rviminfo)
{
! if (read_viminfo(eap->arg, TRUE, TRUE, eap->forceit) == FAIL)
EMSG(_("E195: Cannot open viminfo file for reading"));
}
else
--- 10727,10734 ----
p_viminfo = (char_u *)"'100";
if (eap->cmdidx == CMD_rviminfo)
{
! if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS
! | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL)
EMSG(_("E195: Cannot open viminfo file for reading"));
}
else
*** ../vim-7.2.030/src/feature.h Wed Aug 6 18:45:07 2008
--- src/feature.h Fri Sep 19 19:14:22 2008
***************
*** 767,775 ****
/*
* +browse ":browse" command.
*/
! #if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
! # define FEAT_BROWSE
#endif
/*
--- 767,779 ----
/*
* +browse ":browse" command.
+ * or just the ":browse" command modifier
*/
! #if defined(FEAT_NORMAL)
! # define FEAT_BROWSE_CMD
! # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
! # define FEAT_BROWSE
! # endif
#endif
/*
*** ../vim-7.2.030/src/fileio.c Thu Sep 18 21:29:07 2008
--- src/fileio.c Mon Nov 3 21:21:47 2008
***************
*** 2711,2717 ****
{
if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
&& curbuf->b_ffname != NULL)
! read_viminfo(NULL, FALSE, TRUE, FALSE);
/* Always set b_marks_read; needed when 'viminfo' is changed to include
* the ' parameter after opening a buffer. */
--- 2711,2717 ----
{
if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
&& curbuf->b_ffname != NULL)
! read_viminfo(NULL, VIF_WANT_MARKS);
/* Always set b_marks_read; needed when 'viminfo' is changed to include
* the ' parameter after opening a buffer. */
***************
*** 9108,9114 ****
set_context_in_autocmd(xp, arg, doautocmd)
expand_T *xp;
char_u *arg;
! int doautocmd; /* TRUE for :doautocmd, FALSE for :autocmd */
{
char_u *p;
int group;
--- 9109,9115 ----
set_context_in_autocmd(xp, arg, doautocmd)
expand_T *xp;
char_u *arg;
! int doautocmd; /* TRUE for :doauto*, FALSE for :autocmd */
{
char_u *p;
int group;
*** ../vim-7.2.030/src/main.c Thu Sep 18 20:55:19 2008
--- src/main.c Sun Sep 14 13:26:10 2008
***************
*** 645,655 ****
#ifdef FEAT_VIMINFO
/*
! * Read in registers, history etc, but not marks, from the viminfo file
*/
if (*p_viminfo != NUL)
{
! read_viminfo(NULL, TRUE, FALSE, FALSE);
TIME_MSG("reading viminfo");
}
#endif
--- 645,656 ----
#ifdef FEAT_VIMINFO
/*
! * Read in registers, history etc, but not marks, from the viminfo file.
! * This is where v:oldfiles gets filled.
*/
if (*p_viminfo != NUL)
{
! read_viminfo(NULL, VIF_WANT_INFO | VIF_GET_OLDFILES);
TIME_MSG("reading viminfo");
}
#endif
*** ../vim-7.2.030/src/mark.c Sat Aug 9 19:37:29 2008
--- src/mark.c Sun Sep 14 13:46:19 2008
***************
*** 1627,1641 ****
/*
* Handle marks in the viminfo file:
! * fp_out == NULL read marks for current buffer only
! * fp_out != NULL copy marks for buffers not in buffer list
*/
void
! copy_viminfo_marks(virp, fp_out, count, eof)
vir_T *virp;
FILE *fp_out;
int count;
int eof;
{
char_u *line = virp->vir_line;
buf_T *buf;
--- 1627,1643 ----
/*
* Handle marks in the viminfo file:
! * fp_out != NULL: copy marks for buffers not in buffer list
! * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only
! * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles
*/
void
! copy_viminfo_marks(virp, fp_out, count, eof, flags)
vir_T *virp;
FILE *fp_out;
int count;
int eof;
+ int flags;
{
char_u *line = virp->vir_line;
buf_T *buf;
***************
*** 1647,1656 ****
--- 1649,1671 ----
char_u *p;
char_u *name_buf;
pos_T pos;
+ #ifdef FEAT_EVAL
+ list_T *list = NULL;
+ #endif
if ((name_buf = alloc(LSIZE)) == NULL)
return;
*name_buf = NUL;
+
+ #ifdef FEAT_EVAL
+ if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT)))
+ {
+ list = list_alloc();
+ if (list != NULL)
+ set_vim_var_list(VV_OLDFILES, list);
+ }
+ #endif
+
num_marked_files = get_viminfo_parameter('\'');
while (!eof && (count < num_marked_files || fp_out == NULL))
{
***************
*** 1681,1686 ****
--- 1696,1706 ----
p++;
*p = NUL;
+ #ifdef FEAT_EVAL
+ if (list != NULL)
+ list_append_string(list, str, -1);
+ #endif
+
/*
* If fp_out == NULL, load marks for current buffer.
* If fp_out != NULL, copy marks for buffers not in buflist.
***************
*** 1688,1694 ****
load_marks = copy_marks_out = FALSE;
if (fp_out == NULL)
{
! if (curbuf->b_ffname != NULL)
{
if (*name_buf == NUL) /* only need to do this once */
home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
--- 1708,1714 ----
load_marks = copy_marks_out = FALSE;
if (fp_out == NULL)
{
! if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL)
{
if (*name_buf == NUL) /* only need to do this once */
home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
*** ../vim-7.2.030/src/misc1.c Wed Jun 25 00:24:52 2008
--- src/misc1.c Sun Nov 9 11:47:00 2008
***************
*** 3245,3253 ****
/* When using ":silent" assume that <CR> was entered. */
if (mouse_used != NULL)
! MSG_PUTS(_("Type number or click with mouse (<Enter> cancels): "));
else
! MSG_PUTS(_("Choice number (<Enter> cancels): "));
/* Set the state such that text can be selected/copied/pasted and we still
* get mouse events. */
--- 3245,3253 ----
/* When using ":silent" assume that <CR> was entered. */
if (mouse_used != NULL)
! MSG_PUTS(_("Type number and <Enter> or click with mouse (empty cancels): "));
else
! MSG_PUTS(_("Type number and <Enter> (empty cancels): "));
/* Set the state such that text can be selected/copied/pasted and we still
* get mouse events. */
*** ../vim-7.2.030/src/proto/eval.pro Sun Jan 6 20:06:30 2008
--- src/proto/eval.pro Sun Nov 9 12:05:56 2008
***************
*** 17,23 ****
int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
int skip_expr __ARGS((char_u **pp));
! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist));
char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
int eval_to_number __ARGS((char_u *expr));
list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
--- 17,23 ----
int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
int skip_expr __ARGS((char_u **pp));
! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int convert));
char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
int eval_to_number __ARGS((char_u *expr));
list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
***************
*** 46,52 ****
--- 46,54 ----
void list_unref __ARGS((list_T *l));
void list_free __ARGS((list_T *l, int recurse));
dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
+ char_u *list_find_str __ARGS((list_T *l, long idx));
int list_append_dict __ARGS((list_T *list, dict_T *dict));
+ int list_append_string __ARGS((list_T *l, char_u *str, int len));
int garbage_collect __ARGS((void));
dict_T *dict_alloc __ARGS((void));
int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
***************
*** 58,65 ****
--- 60,69 ----
void set_vim_var_nr __ARGS((int idx, long val));
long get_vim_var_nr __ARGS((int idx));
char_u *get_vim_var_str __ARGS((int idx));
+ list_T *get_vim_var_list __ARGS((int idx));
void set_vcount __ARGS((long count, long count1));
void set_vim_var_string __ARGS((int idx, char_u *val, int len));
+ void set_vim_var_list __ARGS((int idx, list_T *val));
void set_reg_var __ARGS((int c));
char_u *v_exception __ARGS((char_u *oldval));
char_u *v_throwpoint __ARGS((char_u *oldval));
***************
*** 94,99 ****
--- 98,104 ----
void write_viminfo_varlist __ARGS((FILE *fp));
int store_session_globals __ARGS((FILE *fd));
void last_set_msg __ARGS((scid_T scriptID));
+ void ex_oldfiles __ARGS((exarg_T *eap));
int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen));
char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags));
/* vim: set ft=c : */
*** ../vim-7.2.030/src/proto/ex_cmds.pro Sat May 5 20:13:58 2007
--- src/proto/ex_cmds.pro Sat Sep 13 17:27:21 2008
***************
*** 11,17 ****
char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
! int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit));
void write_viminfo __ARGS((char_u *file, int forceit));
int viminfo_readline __ARGS((vir_T *virp));
char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
--- 11,17 ----
char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
! int read_viminfo __ARGS((char_u *file, int flags));
void write_viminfo __ARGS((char_u *file, int forceit));
int viminfo_readline __ARGS((vir_T *virp));
char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
*** ../vim-7.2.030/src/proto/mark.pro Sat May 5 19:29:37 2007
--- src/proto/mark.pro Sat Sep 13 18:06:20 2008
***************
*** 26,30 ****
void write_viminfo_filemarks __ARGS((FILE *fp));
int removable __ARGS((char_u *name));
int write_viminfo_marks __ARGS((FILE *fp_out));
! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof));
/* vim: set ft=c : */
--- 26,30 ----
void write_viminfo_filemarks __ARGS((FILE *fp));
int removable __ARGS((char_u *name));
int write_viminfo_marks __ARGS((FILE *fp_out));
! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags));
/* vim: set ft=c : */
*** ../vim-7.2.030/src/option.c Thu Oct 2 22:48:01 2008
--- src/option.c Fri Sep 26 22:20:20 2008
***************
*** 2593,2605 ****
#ifdef FEAT_VIMINFO
(char_u *)&p_viminfo, PV_NONE,
#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
! {(char_u *)"", (char_u *)"'20,<50,s10,h,rA:,rB:"}
#else
# ifdef AMIGA
{(char_u *)"",
! (char_u *)"'20,<50,s10,h,rdf0:,rdf1:,rdf2:"}
# else
! {(char_u *)"", (char_u *)"'20,<50,s10,h"}
# endif
#endif
#else
--- 2593,2605 ----
#ifdef FEAT_VIMINFO
(char_u *)&p_viminfo, PV_NONE,
#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
! {(char_u *)"", (char_u *)"'100,<50,s10,h,rA:,rB:"}
#else
# ifdef AMIGA
{(char_u *)"",
! (char_u *)"'100,<50,s10,h,rdf0:,rdf1:,rdf2:"}
# else
! {(char_u *)"", (char_u *)"'100,<50,s10,h"}
# endif
#endif
#else
*** ../vim-7.2.030/src/structs.h Thu Jul 31 22:04:27 2008
--- src/structs.h Fri Sep 19 19:15:18 2008
***************
*** 459,465 ****
typedef struct
{
int hide; /* TRUE when ":hide" was used */
! # ifdef FEAT_BROWSE
int browse; /* TRUE to invoke file dialog */
# endif
# ifdef FEAT_WINDOWS
--- 459,465 ----
typedef struct
{
int hide; /* TRUE when ":hide" was used */
! # ifdef FEAT_BROWSE_CMD
int browse; /* TRUE to invoke file dialog */
# endif
# ifdef FEAT_WINDOWS
*** ../vim-7.2.030/src/vim.h Sat Aug 9 19:37:40 2008
--- src/vim.h Sat Sep 13 17:41:24 2008
***************
*** 1728,1734 ****
#define VV_MOUSE_COL 51
#define VV_OP 52
#define VV_SEARCHFORWARD 53
! #define VV_LEN 54 /* number of v: vars */
#ifdef FEAT_CLIPBOARD
--- 1728,1735 ----
#define VV_MOUSE_COL 51
#define VV_OP 52
#define VV_SEARCHFORWARD 53
! #define VV_OLDFILES 54
! #define VV_LEN 55 /* number of v: vars */
#ifdef FEAT_CLIPBOARD
***************
*** 2054,2057 ****
--- 2055,2064 ----
#define DOSO_VIMRC 1 /* loading vimrc file */
#define DOSO_GVIMRC 2 /* loading gvimrc file */
+ /* flags for read_viminfo() and children */
+ #define VIF_WANT_INFO 1 /* load non-mark info */
+ #define VIF_WANT_MARKS 2 /* load file marks */
+ #define VIF_FORCEIT 4 /* overwrite info already read */
+ #define VIF_GET_OLDFILES 8 /* load v:oldfiles */
+
#endif /* VIM__H */
*** ../vim-7.2.030/src/version.c Thu Nov 6 20:47:00 2008
--- src/version.c Sun Nov 9 13:39:19 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 31,
/**/
--
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 at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.032 ---
To: vim-dev at vim.org
Subject: Patch 7.2.032
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.032 (after 7.2.031)
Problem: Can't build with EXITFREE defined. (Dominique Pelle)
Solution: Change vv_string to vv_str.
Files: src/eval.c
*** ../vim-7.2.031/src/eval.c Sun Nov 9 13:43:25 2008
--- src/eval.c Sun Nov 9 17:16:06 2008
***************
*** 846,853 ****
p = &vimvars[i];
if (p->vv_di.di_tv.v_type == VAR_STRING)
{
! vim_free(p->vv_string);
! p->vv_string = NULL;
}
else if (p->vv_di.di_tv.v_type == VAR_LIST)
{
--- 846,853 ----
p = &vimvars[i];
if (p->vv_di.di_tv.v_type == VAR_STRING)
{
! vim_free(p->vv_str);
! p->vv_str = NULL;
}
else if (p->vv_di.di_tv.v_type == VAR_LIST)
{
*** ../vim-7.2.031/src/version.c Sun Nov 9 13:43:25 2008
--- src/version.c Sun Nov 9 17:21:00 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 32,
/**/
--
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 at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.033 ---
To: vim-dev at vim.org
Subject: Patch 7.2.033
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.033
Problem: When detecting a little endian BOM "ucs-2le" is used, but the text
might be "utf-16le".
Solution: Default to "utf-16le", it also works for "ucs-2le". (Jia Yanwei)
Files: src/fileio.c, src/testdir/test42.ok
*** ../vim-7.2.032/src/fileio.c Sun Nov 9 13:43:25 2008
--- src/fileio.c Mon Nov 3 21:21:47 2008
***************
*** 5550,5558 ****
name = "ucs-4le"; /* FF FE 00 00 */
len = 4;
}
! else if (flags == FIO_ALL || flags == (FIO_UCS2 | FIO_ENDIAN_L))
name = "ucs-2le"; /* FF FE */
! else if (flags == (FIO_UTF16 | FIO_ENDIAN_L))
name = "utf-16le"; /* FF FE */
}
else if (p[0] == 0xfe && p[1] == 0xff
--- 5550,5559 ----
name = "ucs-4le"; /* FF FE 00 00 */
len = 4;
}
! else if (flags == (FIO_UCS2 | FIO_ENDIAN_L))
name = "ucs-2le"; /* FF FE */
! else if (flags == FIO_ALL || flags == (FIO_UTF16 | FIO_ENDIAN_L))
! /* utf-16le is preferred, it also works for ucs-2le text */
name = "utf-16le"; /* FF FE */
}
else if (p[0] == 0xfe && p[1] == 0xff
*** ../vim-7.2.032/src/testdir/test42.ok Sat Mar 1 13:49:21 2008
--- src/testdir/test42.ok Sat Nov 1 17:09:29 2008
***************
*** 20,26 ****
ucs-2
! fileencoding=ucs-2le
bomb
ucs-2le
--- 20,26 ----
ucs-2
! fileencoding=utf-16le
bomb
ucs-2le
*** ../vim-7.2.032/src/version.c Sun Nov 9 17:21:10 2008
--- src/version.c Tue Nov 11 21:54:14 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 33,
/**/
--
hundred-and-one symptoms of being an internet addict:
234. You started college as a chemistry major, and walk out four years
later as an Internet provider.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.034 ---
To: vim-dev at vim.org
Subject: Patch 7.2.034
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.034
Problem: Memory leak in spell info when deleting buffer.
Solution: Free the memory. (Dominique Pelle)
Files: src/buffer.c
*** ../vim-7.2.033/src/buffer.c Mon Sep 1 17:32:40 2008
--- src/buffer.c Wed Nov 12 11:21:49 2008
***************
*** 647,652 ****
--- 647,655 ----
vim_free(buf->b_start_fenc);
buf->b_start_fenc = NULL;
#endif
+ #ifdef FEAT_SPELL
+ ga_clear(&buf->b_langp);
+ #endif
}
/*
***************
*** 1237,1243 ****
* "buf" if one exists */
if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf))
return OK;
! /* If 'switchbuf' contians "usetab": jump to first window in any tab
* page containing "buf" if one exists */
if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf))
return OK;
--- 1240,1246 ----
* "buf" if one exists */
if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf))
return OK;
! /* If 'switchbuf' contains "usetab": jump to first window in any tab
* page containing "buf" if one exists */
if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf))
return OK;
***************
*** 3964,3970 ****
width = vim_strsize(out);
if (maxwidth > 0 && width > maxwidth)
{
! /* Result is too long, must trunctate somewhere. */
l = 0;
if (itemcnt == 0)
s = out;
--- 3967,3973 ----
width = vim_strsize(out);
if (maxwidth > 0 && width > maxwidth)
{
! /* Result is too long, must truncate somewhere. */
l = 0;
if (itemcnt == 0)
s = out;
*** ../vim-7.2.033/src/version.c Tue Nov 11 21:55:29 2008
--- src/version.c Wed Nov 12 12:51:21 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 34,
/**/
--
hundred-and-one symptoms of being an internet addict:
236. You start saving URL's in your digital watch.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.035 ---
To: vim-dev at vim.org
Subject: Patch 7.2.035
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.035
Problem: Mismatches between alloc/malloc, free/vim_free,
realloc/vim_realloc.
Solution: Use the right function. (Dominique Pelle)
Files: src/gui_x11.c, src/mbyte.c, src/misc2.c, src/os_unix.c
*** ../vim-7.2.034/src/gui_x11.c Fri Jun 20 11:59:25 2008
--- src/gui_x11.c Wed Nov 12 11:47:03 2008
***************
*** 2450,2456 ****
*colorPtr = colortable[closest];
}
! free(colortable);
return OK;
}
--- 2450,2456 ----
*colorPtr = colortable[closest];
}
! vim_free(colortable);
return OK;
}
*** ../vim-7.2.034/src/mbyte.c Sat Sep 6 16:44:06 2008
--- src/mbyte.c Wed Nov 12 11:24:14 2008
***************
*** 5384,5390 ****
draw_feedback = (char *)alloc(draw_data->chg_first
+ text->length);
else
! draw_feedback = realloc(draw_feedback,
draw_data->chg_first + text->length);
if (draw_feedback != NULL)
{
--- 5384,5390 ----
draw_feedback = (char *)alloc(draw_data->chg_first
+ text->length);
else
! draw_feedback = vim_realloc(draw_feedback,
draw_data->chg_first + text->length);
if (draw_feedback != NULL)
{
*** ../vim-7.2.034/src/misc2.c Sat Sep 6 16:44:06 2008
--- src/misc2.c Wed Nov 12 11:42:51 2008
***************
*** 873,879 ****
/* 3. check for available memory: call mch_avail_mem() */
if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
{
! vim_free((char *)p); /* System is low... no go! */
p = NULL;
}
else
--- 873,879 ----
/* 3. check for available memory: call mch_avail_mem() */
if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
{
! free((char *)p); /* System is low... no go! */
p = NULL;
}
else
*** ../vim-7.2.034/src/os_unix.c Wed Aug 6 18:45:01 2008
--- src/os_unix.c Wed Nov 12 11:55:33 2008
***************
*** 2905,2911 ****
* Ignore any errors.
*/
#if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
! signal_stack = malloc(SIGSTKSZ);
init_signal_stack();
#endif
}
--- 2905,2911 ----
* Ignore any errors.
*/
#if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
! signal_stack = (char *)alloc(SIGSTKSZ);
init_signal_stack();
#endif
}
***************
*** 6814,6820 ****
if (xsmp_icefd != -1)
{
SmcCloseConnection(xsmp.smcconn, 0, NULL);
! vim_free(xsmp.clientid);
xsmp.clientid = NULL;
xsmp_icefd = -1;
}
--- 6815,6822 ----
if (xsmp_icefd != -1)
{
SmcCloseConnection(xsmp.smcconn, 0, NULL);
! if (xsmp.clientid != NULL)
! free(xsmp.clientid);
xsmp.clientid = NULL;
xsmp_icefd = -1;
}
*** ../vim-7.2.034/src/version.c Wed Nov 12 12:51:38 2008
--- src/version.c Wed Nov 12 13:05:40 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 35,
/**/
--
You can tune a file system, but you can't tuna fish
-- man tunefs
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.036 ---
To: vim-dev at vim.org
Subject: Patch 7.2.036 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.036 (extra)
Problem: Mismatches between alloc/malloc, free/vim_free,
realloc/vim_realloc.
Solution: Use the right function. (Dominique Pelle)
Files: src/gui_riscos.c, src/gui_w48.c, src/mbyte.c, src/os_vms.c,
src/os_w32exe.c, src/os_win16.c
*** ../vim-7.2.035/src/gui_riscos.c Thu May 10 19:33:26 2007
--- src/gui_riscos.c Wed Nov 12 11:47:54 2008
***************
*** 695,701 ****
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 permissable window size (ignored) */
int min_height;
int base_width; /* Space for scroll bars, etc */
int base_height;
--- 695,701 ----
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;
***************
*** 863,869 ****
if (strncmp(file, "ZapFont\015", 8) == 0)
return file; /* Loaded OK! */
! free(file);
return NULL; /* Not a valid font file */
}
--- 863,869 ----
if (strncmp(file, "ZapFont\015", 8) == 0)
return file; /* Loaded OK! */
! vim_free(file);
return NULL; /* Not a valid font file */
}
*** ../vim-7.2.035/src/gui_w48.c Thu Jul 24 20:50:23 2008
--- src/gui_w48.c Wed Nov 12 11:37:41 2008
***************
*** 3335,3341 ****
/*
* Convert the string s to the proper format for a filter string by replacing
! * the \t and \n delimeters with \0.
* Returns the converted string in allocated memory.
*
* Keep in sync with convert_filterW() above!
--- 3335,3341 ----
/*
* Convert the string s to the proper format for a filter string by replacing
! * the \t and \n delimiters with \0.
* Returns the converted string in allocated memory.
*
* Keep in sync with convert_filterW() above!
***************
*** 3674,3680 ****
* Use "prog" as the name of the program and "cmdline" as the arguments.
* Copy the arguments to allocated memory.
* Return the number of arguments (including program name).
! * Return pointers to the arguments in "argvp".
* Return pointer to buffer in "tofree".
* Returns zero when out of memory.
*/
--- 3674,3681 ----
* Use "prog" as the name of the program and "cmdline" as the arguments.
* Copy the arguments to allocated memory.
* Return the number of arguments (including program name).
! * Return pointers to the arguments in "argvp". Memory is allocated with
! * malloc(), use free() instead of vim_free().
* Return pointer to buffer in "tofree".
* Returns zero when out of memory.
*/
***************
*** 3692,3697 ****
--- 3693,3700 ----
char **argv = NULL;
int round;
+ *tofree = NULL;
+
#ifdef FEAT_MBYTE
/* Try using the Unicode version first, it takes care of conversion when
* 'encoding' is changed. */
***************
*** 3802,3816 ****
argv = (char **)malloc((argc + 1) * sizeof(char *));
if (argv == NULL )
{
! vim_free(newcmdline);
return 0; /* malloc error */
}
pnew = newcmdline;
}
}
done:
-
argv[argc] = NULL; /* NULL-terminated list */
*argvp = argv;
return argc;
--- 3805,3819 ----
argv = (char **)malloc((argc + 1) * sizeof(char *));
if (argv == NULL )
{
! free(newcmdline);
return 0; /* malloc error */
}
pnew = newcmdline;
+ *tofree = newcmdline;
}
}
done:
argv[argc] = NULL; /* NULL-terminated list */
*argvp = argv;
return argc;
*** ../vim-7.2.035/src/os_vms.c Wed Aug 6 18:38:52 2008
--- src/os_vms.c Wed Nov 12 11:42:12 2008
***************
*** 228,234 ****
else if ((sbuf = getenv((char *)lognam)))
{
lengte = strlen(sbuf) + 1;
! cp = (char_u *)malloc((size_t)lengte);
if (cp)
strcpy((char *)cp, sbuf);
return cp;
--- 228,234 ----
else if ((sbuf = getenv((char *)lognam)))
{
lengte = strlen(sbuf) + 1;
! cp = (char_u *)alloc((size_t)lengte);
if (cp)
strcpy((char *)cp, sbuf);
return cp;
***************
*** 381,387 ****
if (--vms_match_free == 0) {
/* add more space to store matches */
vms_match_alloced += EXPL_ALLOC_INC;
! vms_fmatch = (char_u **)realloc(vms_fmatch,
sizeof(char **) * vms_match_alloced);
if (!vms_fmatch)
return 0;
--- 381,387 ----
if (--vms_match_free == 0) {
/* add more space to store matches */
vms_match_alloced += EXPL_ALLOC_INC;
! vms_fmatch = (char_u **)vim_realloc(vms_fmatch,
sizeof(char **) * vms_match_alloced);
if (!vms_fmatch)
return 0;
***************
*** 460,466 ****
if (--files_free < 1)
{
files_alloced += EXPL_ALLOC_INC;
! *file = (char_u **)realloc(*file,
sizeof(char_u **) * files_alloced);
if (*file == NULL)
{
--- 460,466 ----
if (--files_free < 1)
{
files_alloced += EXPL_ALLOC_INC;
! *file = (char_u **)vim_realloc(*file,
sizeof(char_u **) * files_alloced);
if (*file == NULL)
{
***************
*** 614,627 ****
{
buflen = len + 128;
if (buf)
! buf = (char *)realloc(buf, buflen);
else
! buf = (char *)calloc(buflen, sizeof(char));
}
#ifdef DEBUG
char *tmpbuf = NULL;
! tmpbuf = (char *)calloc(buflen, sizeof(char));
strcpy(tmpbuf, instring);
#endif
--- 614,627 ----
{
buflen = len + 128;
if (buf)
! buf = (char *)vim_realloc(buf, buflen);
else
! buf = (char *)alloc(buflen * sizeof(char));
}
#ifdef DEBUG
char *tmpbuf = NULL;
! tmpbuf = (char *)alloc(buflen * sizeof(char));
strcpy(tmpbuf, instring);
#endif
*** ../vim-7.2.035/src/os_w32exe.c Fri Jul 1 00:06:20 2005
--- src/os_w32exe.c Wed Nov 12 11:45:43 2008
***************
*** 129,135 ****
errout:
#endif
free(argv);
! free(tofree);
#ifdef FEAT_MBYTE
free_cmd_argsW();
#endif
--- 129,136 ----
errout:
#endif
free(argv);
! if (tofree != NULL)
! free(tofree);
#ifdef FEAT_MBYTE
free_cmd_argsW();
#endif
*** ../vim-7.2.035/src/os_win16.c Wed Jun 25 00:49:34 2008
--- src/os_win16.c Wed Nov 12 11:45:53 2008
***************
*** 121,127 ****
pmain(argc, argv);
free(argv);
! free(tofree);
return 0;
}
--- 121,128 ----
pmain(argc, argv);
free(argv);
! if (tofree != NULL)
! free(tofree);
return 0;
}
*** ../vim-7.2.035/src/version.c Wed Nov 12 13:07:48 2008
--- src/version.c Wed Nov 12 13:28:51 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 36,
/**/
--
hundred-and-one symptoms of being an internet addict:
239. You think "surfing" is something you do on dry land.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.037 ---
To: vim-dev at vim.org
Subject: Patch 7.2.037
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.037
Problem: Double free with GTK 1 and compiled with EXITFREE.
Solution: Don't close display. (Dominique Pelle)
Files: src/os_unix.c
*** ../vim-7.2.036/src/os_unix.c Wed Nov 12 13:07:48 2008
--- src/os_unix.c Wed Nov 12 11:55:33 2008
***************
*** 2936,2942 ****
}
# endif
# endif
! # ifdef FEAT_X11
if (x11_display != NULL
# ifdef FEAT_XCLIPBOARD
&& x11_display != xterm_dpy
--- 2936,2943 ----
}
# endif
# endif
! /* Don't close the display for GTK 1, it is done in exit(). */
! # if defined(FEAT_X11) && (!defined(FEAT_GUI_GTK) || defined(HAVE_GTK2))
if (x11_display != NULL
# ifdef FEAT_XCLIPBOARD
&& x11_display != xterm_dpy
*** ../vim-7.2.036/src/version.c Wed Nov 12 13:35:31 2008
--- src/version.c Wed Nov 12 14:08:56 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 37,
/**/
--
hundred-and-one symptoms of being an internet addict:
240. You think Webster's Dictionary is a directory of WEB sites.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.038 ---
To: vim-dev at vim.org
Subject: Patch 7.2.038
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.038
Problem: Overlapping arguments to memcpy().
Solution: Use mch_memmove(). (Dominique Pelle)
Files: src/if_xcmdsrv.c
*** ../vim-7.2.037/src/if_xcmdsrv.c Wed Aug 6 18:38:13 2008
--- src/if_xcmdsrv.c Wed Nov 12 12:09:01 2008
***************
*** 736,742 ****
+ serverReply.ga_len;
e.id = w;
ga_init2(&e.strings, 1, 100);
! memcpy(p, &e, sizeof(e));
serverReply.ga_len++;
}
}
--- 736,742 ----
+ serverReply.ga_len;
e.id = w;
ga_init2(&e.strings, 1, 100);
! mch_memmove(p, &e, sizeof(e));
serverReply.ga_len++;
}
}
***************
*** 1018,1024 ****
p++;
count = numItems - (p - regProp);
if (count > 0)
! memcpy(entry, p, count);
XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING,
8, PropModeReplace, regProp,
(int)(numItems - (p - entry)));
--- 1018,1024 ----
p++;
count = numItems - (p - regProp);
if (count > 0)
! mch_memmove(entry, p, count);
XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING,
8, PropModeReplace, regProp,
(int)(numItems - (p - entry)));
***************
*** 1072,1078 ****
p++;
lastHalf = numItems - (p - regProp);
if (lastHalf > 0)
! memcpy(entry, p, lastHalf);
numItems = (entry - regProp) + lastHalf;
p = entry;
continue;
--- 1072,1078 ----
p++;
lastHalf = numItems - (p - regProp);
if (lastHalf > 0)
! mch_memmove(entry, p, lastHalf);
numItems = (entry - regProp) + lastHalf;
p = entry;
continue;
*** ../vim-7.2.037/src/version.c Wed Nov 12 14:09:38 2008
--- src/version.c Wed Nov 12 14:51:00 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 38,
/**/
--
hundred-and-one symptoms of being an internet addict:
241. You try to look for Net Search even when you're in File Manager.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.039 ---
To: vim-dev at vim.org
Subject: Patch 7.2.039
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.039
Problem: Accessing freed memory on exit when EXITFREE is defined.
Solution: Call hash_init() on the v: hash table.
Files: src/eval.c
*** ../vim-7.2.038/src/eval.c Sun Nov 9 17:21:10 2008
--- src/eval.c Wed Nov 12 12:15:14 2008
***************
*** 856,861 ****
--- 856,862 ----
}
}
hash_clear(&vimvarht);
+ hash_init(&vimvarht); /* garbage_collect() will access it */
hash_clear(&compat_hashtab);
/* script-local variables */
*** ../vim-7.2.038/src/version.c Wed Nov 12 14:52:11 2008
--- src/version.c Wed Nov 12 15:09:39 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 39,
/**/
--
hundred-and-one symptoms of being an internet addict:
242. You turn down a better-paying job because it doesn't come with
a free e-mail account.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.040 ---
To: vim-dev at vim.org
Subject: Patch 7.2.040
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.040
Problem: When using ":e ++ff=dos fname" and the file contains a NL without
a CR before it and 'ffs' contains "unix" then the fileformat
becomes unix.
Solution: Ignore 'ffs' when using the ++ff argument. (Ben Schmidt)
Also remove unreachable code.
Files: src/fileio.c
*** ../vim-7.2.039/src/fileio.c Tue Nov 11 21:55:29 2008
--- src/fileio.c Wed Nov 12 13:19:42 2008
***************
*** 932,938 ****
--- 932,941 ----
else
{
if (eap != NULL && eap->force_ff != 0)
+ {
fileformat = get_fileformat_force(curbuf, eap);
+ try_unix = try_dos = try_mac = FALSE;
+ }
else if (curbuf->b_p_bin)
fileformat = EOL_UNIX; /* binary: use Unix format */
else if (*p_ffs == NUL)
***************
*** 2341,2351 ****
STRCAT(IObuff, _("[CR missing]"));
c = TRUE;
}
- if (ff_error == EOL_MAC)
- {
- STRCAT(IObuff, _("[NL found]"));
- c = TRUE;
- }
if (split)
{
STRCAT(IObuff, _("[long lines split]"));
--- 2344,2349 ----
*** ../vim-7.2.039/src/version.c Wed Nov 12 15:28:37 2008
--- src/version.c Wed Nov 12 16:03:44 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 40,
/**/
--
If you're sending someone Styrofoam, what do you pack it in?
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.041 ---
To: vim-dev at vim.org
Subject: Patch 7.2.041
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.041
Problem: In diff mode, when using two tabs, each with two diffed buffers,
editing a buffer of the other tab messes up the diff. (Matt
Mzyzik)
Solution: Only copy options from a window where the buffer was edited that
doesn't have 'diff' set or is for the current tab page.
Also fix that window options for a buffer are stored with the
wrong window.
Files: src/buffer.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c,
src/ex_getln.c, src/if_sniff.c, src/main.c, src/netbeans.c,
src/normal.c, src/popupmnu.c, src/proto/buffer.pro,
src/proto/ex_cmds.pro src/quickfix.c, src/window.c
*** ../vim-7.2.040/src/buffer.c Wed Nov 12 12:51:38 2008
--- src/buffer.c Wed Nov 12 17:45:01 2008
***************
*** 33,39 ****
static char_u *fname_match __ARGS((regprog_T *prog, char_u *name));
#endif
static void buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
! static wininfo_T *find_wininfo __ARGS((buf_T *buf));
#ifdef UNIX
static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st));
static int otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp));
--- 33,39 ----
static char_u *fname_match __ARGS((regprog_T *prog, char_u *name));
#endif
static void buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
! static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer));
#ifdef UNIX
static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st));
static int otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp));
***************
*** 1093,1099 ****
#endif
setpcmark();
retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
! forceit ? ECMD_FORCEIT : 0);
/*
* do_ecmd() may create a new buffer, then we have to delete
--- 1093,1099 ----
#endif
setpcmark();
retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
! forceit ? ECMD_FORCEIT : 0, curwin);
/*
* do_ecmd() may create a new buffer, then we have to delete
***************
*** 1316,1322 ****
setpcmark();
if (!cmdmod.keepalt)
curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
! buflist_altfpos(); /* remember curpos */
#ifdef FEAT_VISUAL
/* Don't restart Select mode after switching to another buffer. */
--- 1316,1322 ----
setpcmark();
if (!cmdmod.keepalt)
curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
! buflist_altfpos(curwin); /* remember curpos */
#ifdef FEAT_VISUAL
/* Don't restart Select mode after switching to another buffer. */
***************
*** 2404,2425 ****
return;
}
/*
* Find info for the current window in buffer "buf".
* If not found, return the info for the most recently used window.
* Returns NULL when there isn't any info.
*/
static wininfo_T *
! find_wininfo(buf)
buf_T *buf;
{
wininfo_T *wip;
for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
! if (wip->wi_win == curwin)
break;
! if (wip == NULL) /* if no fpos for curwin, use the first in the list */
! wip = buf->b_wininfo;
return wip;
}
--- 2404,2473 ----
return;
}
+ #ifdef FEAT_DIFF
+ static int wininfo_other_tab_diff __ARGS((wininfo_T *wip));
+
+ /*
+ * Return TRUE when "wip" has 'diff' set and the diff is only for another tab
+ * page. That's because a diff is local to a tab page.
+ */
+ static int
+ wininfo_other_tab_diff(wip)
+ wininfo_T *wip;
+ {
+ win_T *wp;
+
+ if (wip->wi_opt.wo_diff)
+ {
+ for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ /* return FALSE when it's a window in the current tab page, thus
+ * the buffer was in diff mode here */
+ if (wip->wi_win == wp)
+ return FALSE;
+ return TRUE;
+ }
+ return FALSE;
+ }
+ #endif
+
/*
* Find info for the current window in buffer "buf".
* If not found, return the info for the most recently used window.
+ * When "skip_diff_buffer" is TRUE avoid windows with 'diff' set that is in
+ * another tab page.
* Returns NULL when there isn't any info.
*/
+ /*ARGSUSED*/
static wininfo_T *
! find_wininfo(buf, skip_diff_buffer)
buf_T *buf;
+ int skip_diff_buffer;
{
wininfo_T *wip;
for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
! if (wip->wi_win == curwin
! #ifdef FEAT_DIFF
! && (!skip_diff_buffer || !wininfo_other_tab_diff(wip))
! #endif
! )
break;
!
! /* If no wininfo for curwin, use the first in the list (that doesn't have
! * 'diff' set and is in another tab page). */
! if (wip == NULL)
! {
! #ifdef FEAT_DIFF
! if (skip_diff_buffer)
! {
! for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
! if (!wininfo_other_tab_diff(wip))
! break;
! }
! else
! #endif
! wip = buf->b_wininfo;
! }
return wip;
}
***************
*** 2440,2446 ****
clearFolding(curwin);
#endif
! wip = find_wininfo(buf);
if (wip != NULL && wip->wi_optset)
{
copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
--- 2488,2494 ----
clearFolding(curwin);
#endif
! wip = find_wininfo(buf, TRUE);
if (wip != NULL && wip->wi_optset)
{
copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
***************
*** 2472,2478 ****
wininfo_T *wip;
static pos_T no_position = {1, 0};
! wip = find_wininfo(buf);
if (wip != NULL)
return &(wip->wi_fpos);
else
--- 2520,2526 ----
wininfo_T *wip;
static pos_T no_position = {1, 0};
! wip = find_wininfo(buf, FALSE);
if (wip != NULL)
return &(wip->wi_fpos);
else
***************
*** 2793,2806 ****
#endif
/*
! * Set alternate cursor position for current window.
* Also save the local window option values.
*/
void
! buflist_altfpos()
{
! buflist_setfpos(curbuf, curwin, curwin->w_cursor.lnum,
! curwin->w_cursor.col, TRUE);
}
/*
--- 2841,2854 ----
#endif
/*
! * Set alternate cursor position for the current buffer and window "win".
* Also save the local window option values.
*/
void
! buflist_altfpos(win)
! win_T *win;
{
! buflist_setfpos(curbuf, win, win->w_cursor.lnum, win->w_cursor.col, TRUE);
}
/*
***************
*** 4492,4498 ****
ECMD_ONE,
((P_HID(curwin->w_buffer)
|| bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
! + ECMD_OLDBUF);
#ifdef FEAT_AUTOCMD
if (use_firstwin)
++autocmd_no_leave;
--- 4540,4546 ----
ECMD_ONE,
((P_HID(curwin->w_buffer)
|| bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
! + ECMD_OLDBUF, curwin);
#ifdef FEAT_AUTOCMD
if (use_firstwin)
++autocmd_no_leave;
*** ../vim-7.2.040/src/ex_cmds.c Sun Nov 9 13:43:25 2008
--- src/ex_cmds.c Wed Nov 12 22:41:41 2008
***************
*** 3052,3058 ****
retval = 0; /* it's in the same file */
}
else if (do_ecmd(fnum, ffname, sfname, NULL, lnum,
! (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0)) == OK)
retval = -1; /* opened another file */
else
retval = 1; /* error encountered */
--- 3052,3059 ----
retval = 0; /* it's in the same file */
}
else if (do_ecmd(fnum, ffname, sfname, NULL, lnum,
! (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0),
! curwin) == OK)
retval = -1; /* opened another file */
else
retval = 1; /* error encountered */
***************
*** 3085,3101 ****
* ECMD_OLDBUF: use existing buffer if it exists
* ECMD_FORCEIT: ! used for Ex command
* ECMD_ADDBUF: don't edit, just add to buffer list
*
* return FAIL for failure, OK otherwise
*/
int
! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags)
int fnum;
char_u *ffname;
char_u *sfname;
exarg_T *eap; /* can be NULL! */
linenr_T newlnum;
int flags;
{
int other_file; /* TRUE if editing another file */
int oldbuf; /* TRUE if using existing buffer */
--- 3086,3106 ----
* ECMD_OLDBUF: use existing buffer if it exists
* ECMD_FORCEIT: ! used for Ex command
* ECMD_ADDBUF: don't edit, just add to buffer list
+ * oldwin: Should be "curwin" when editing a new buffer in the current
+ * window, NULL when splitting the window first. When not NULL info
+ * of the previous buffer for "oldwin" is stored.
*
* return FAIL for failure, OK otherwise
*/
int
! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin)
int fnum;
char_u *ffname;
char_u *sfname;
exarg_T *eap; /* can be NULL! */
linenr_T newlnum;
int flags;
+ win_T *oldwin;
{
int other_file; /* TRUE if editing another file */
int oldbuf; /* TRUE if using existing buffer */
***************
*** 3267,3273 ****
{
if (!cmdmod.keepalt)
curwin->w_alt_fnum = curbuf->b_fnum;
! buflist_altfpos();
}
if (fnum)
--- 3272,3279 ----
{
if (!cmdmod.keepalt)
curwin->w_alt_fnum = curbuf->b_fnum;
! if (oldwin != NULL)
! buflist_altfpos(oldwin);
}
if (fnum)
***************
*** 3371,3377 ****
/* close the link to the current buffer */
u_sync(FALSE);
! close_buffer(curwin, curbuf,
(flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
#ifdef FEAT_AUTOCMD
--- 3377,3383 ----
/* close the link to the current buffer */
u_sync(FALSE);
! close_buffer(oldwin, curbuf,
(flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
#ifdef FEAT_AUTOCMD
***************
*** 5609,5615 ****
*/
alt_fnum = curbuf->b_fnum;
(void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL,
! ECMD_HIDE + ECMD_SET_HELP);
if (!cmdmod.keepalt)
curwin->w_alt_fnum = alt_fnum;
empty_fnum = curbuf->b_fnum;
--- 5615,5627 ----
*/
alt_fnum = curbuf->b_fnum;
(void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL,
! ECMD_HIDE + ECMD_SET_HELP,
! #ifdef FEAT_WINDOWS
! NULL /* buffer is still open, don't store info */
! #else
! curwin
! #endif
! );
if (!cmdmod.keepalt)
curwin->w_alt_fnum = alt_fnum;
empty_fnum = curbuf->b_fnum;
*** ../vim-7.2.040/src/ex_cmds2.c Sun Sep 7 15:49:45 2008
--- src/ex_cmds2.c Wed Nov 12 17:46:41 2008
***************
*** 2132,2139 ****
* argument index. */
if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL,
eap, ECMD_LAST,
! (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) +
! (eap->forceit ? ECMD_FORCEIT : 0)) == FAIL)
curwin->w_arg_idx = old_arg_idx;
/* like Vi: set the mark where the cursor is in the file. */
else if (eap->cmdidx != CMD_argdo)
--- 2132,2139 ----
* argument index. */
if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL,
eap, ECMD_LAST,
! (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0)
! + (eap->forceit ? ECMD_FORCEIT : 0), curwin) == FAIL)
curwin->w_arg_idx = old_arg_idx;
/* like Vi: set the mark where the cursor is in the file. */
else if (eap->cmdidx != CMD_argdo)
*** ../vim-7.2.040/src/ex_docmd.c Sun Nov 9 13:43:25 2008
--- src/ex_docmd.c Wed Nov 12 18:04:22 2008
***************
*** 7488,7494 ****
/* ":new" or ":tabnew" without argument: edit an new empty buffer */
setpcmark();
(void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
! ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0));
}
else if ((eap->cmdidx != CMD_split
#ifdef FEAT_VERTSPLIT
--- 7488,7495 ----
/* ":new" or ":tabnew" without argument: edit an new empty buffer */
setpcmark();
(void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
! ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0),
! old_curwin == NULL ? curwin : NULL);
}
else if ((eap->cmdidx != CMD_split
#ifdef FEAT_VERTSPLIT
***************
*** 7525,7531 ****
#ifdef FEAT_LISTCMDS
+ (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 )
#endif
! ) == FAIL)
{
/* Editing the file failed. If the window was split, close it. */
#ifdef FEAT_WINDOWS
--- 7526,7532 ----
#ifdef FEAT_LISTCMDS
+ (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 )
#endif
! , old_curwin == NULL ? curwin : NULL) == FAIL)
{
/* Editing the file failed. If the window was split, close it. */
#ifdef FEAT_WINDOWS
*** ../vim-7.2.040/src/ex_getln.c Sun Sep 14 14:41:44 2008
--- src/ex_getln.c Wed Nov 12 18:06:25 2008
***************
*** 6051,6057 ****
cmdwin_type = '-';
/* Create the command-line buffer empty. */
! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
(void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
--- 6051,6057 ----
cmdwin_type = '-';
/* Create the command-line buffer empty. */
! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
(void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
*** ../vim-7.2.040/src/if_sniff.c Sat Aug 9 19:41:16 2008
--- src/if_sniff.c Wed Nov 12 17:48:46 2008
***************
*** 1114,1120 ****
char *fname;
{
++no_wait_return;
! do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF);
curbuf->b_sniff = TRUE;
--no_wait_return; /* [ex_docmd.c] */
}
--- 1114,1121 ----
char *fname;
{
++no_wait_return;
! do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF,
! curwin);
curbuf->b_sniff = TRUE;
--no_wait_return; /* [ex_docmd.c] */
}
*** ../vim-7.2.040/src/main.c Sun Nov 9 13:43:25 2008
--- src/main.c Wed Nov 12 17:49:06 2008
***************
*** 2588,2594 ****
# endif
(void)do_ecmd(0, arg_idx < GARGCOUNT
? alist_name(&GARGLIST[arg_idx]) : NULL,
! NULL, NULL, ECMD_LASTL, ECMD_HIDE);
# ifdef HAS_SWAP_EXISTS_ACTION
if (swap_exists_did_quit)
{
--- 2588,2594 ----
# endif
(void)do_ecmd(0, arg_idx < GARGCOUNT
? alist_name(&GARGLIST[arg_idx]) : NULL,
! NULL, NULL, ECMD_LASTL, ECMD_HIDE, curwin);
# ifdef HAS_SWAP_EXISTS_ACTION
if (swap_exists_did_quit)
{
*** ../vim-7.2.040/src/netbeans.c Sun Jul 13 19:18:03 2008
--- src/netbeans.c Wed Nov 12 17:49:40 2008
***************
*** 1795,1801 ****
buf->displayname = NULL;
netbeansReadFile = 0; /* don't try to open disk file */
! do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF);
netbeansReadFile = 1;
buf->bufp = curbuf;
maketitle();
--- 1795,1801 ----
buf->displayname = NULL;
netbeansReadFile = 0; /* don't try to open disk file */
! do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF, curwin);
netbeansReadFile = 1;
buf->bufp = curbuf;
maketitle();
***************
*** 1960,1966 ****
netbeansReadFile = 0; /* don't try to open disk file */
do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE,
! ECMD_HIDE + ECMD_OLDBUF);
netbeansReadFile = 1;
buf->bufp = curbuf;
maketitle();
--- 1960,1966 ----
netbeansReadFile = 0; /* don't try to open disk file */
do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE,
! ECMD_HIDE + ECMD_OLDBUF, curwin);
netbeansReadFile = 1;
buf->bufp = curbuf;
maketitle();
***************
*** 1979,1985 ****
vim_free(buf->displayname);
buf->displayname = nb_unquote(args, NULL);
do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE,
! ECMD_HIDE + ECMD_OLDBUF);
buf->bufp = curbuf;
buf->initDone = TRUE;
doupdate = 1;
--- 1979,1985 ----
vim_free(buf->displayname);
buf->displayname = nb_unquote(args, NULL);
do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE,
! ECMD_HIDE + ECMD_OLDBUF, curwin);
buf->bufp = curbuf;
buf->initDone = TRUE;
doupdate = 1;
*** ../vim-7.2.040/src/normal.c Sat Nov 1 13:51:57 2008
--- src/normal.c Wed Nov 12 17:49:50 2008
***************
*** 6050,6056 ****
autowrite(curbuf, FALSE);
setpcmark();
(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST,
! P_HID(curbuf) ? ECMD_HIDE : 0);
if (cap->nchar == 'F' && lnum >= 0)
{
curwin->w_cursor.lnum = lnum;
--- 6050,6056 ----
autowrite(curbuf, FALSE);
setpcmark();
(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST,
! P_HID(curbuf) ? ECMD_HIDE : 0, curwin);
if (cap->nchar == 'F' && lnum >= 0)
{
curwin->w_cursor.lnum = lnum;
*** ../vim-7.2.040/src/popupmnu.c Sun Jul 13 19:33:51 2008
--- src/popupmnu.c Wed Nov 12 18:08:07 2008
***************
*** 573,579 ****
{
/* Don't want to sync undo in the current buffer. */
++no_u_sync;
! res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0);
--no_u_sync;
if (res == OK)
{
--- 573,579 ----
{
/* Don't want to sync undo in the current buffer. */
++no_u_sync;
! res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0, NULL);
--no_u_sync;
if (res == OK)
{
*** ../vim-7.2.040/src/proto/buffer.pro Sun May 6 13:57:53 2007
--- src/proto/buffer.pro Wed Nov 12 17:43:39 2008
***************
*** 33,39 ****
char_u *getaltfname __ARGS((int errmsg));
int buflist_add __ARGS((char_u *fname, int flags));
void buflist_slash_adjust __ARGS((void));
! void buflist_altfpos __ARGS((void));
int otherfile __ARGS((char_u *ffname));
void buf_setino __ARGS((buf_T *buf));
void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate));
--- 33,39 ----
char_u *getaltfname __ARGS((int errmsg));
int buflist_add __ARGS((char_u *fname, int flags));
void buflist_slash_adjust __ARGS((void));
! void buflist_altfpos __ARGS((win_T *win));
int otherfile __ARGS((char_u *ffname));
void buf_setino __ARGS((buf_T *buf));
void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate));
*** ../vim-7.2.040/src/proto/ex_cmds.pro Sun Nov 9 13:43:25 2008
--- src/proto/ex_cmds.pro Wed Nov 12 17:44:27 2008
***************
*** 27,33 ****
void do_wqall __ARGS((exarg_T *eap));
int not_writing __ARGS((void));
int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit));
! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags));
void ex_append __ARGS((exarg_T *eap));
void ex_change __ARGS((exarg_T *eap));
void ex_z __ARGS((exarg_T *eap));
--- 27,33 ----
void do_wqall __ARGS((exarg_T *eap));
int not_writing __ARGS((void));
int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit));
! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags, win_T *oldwin));
void ex_append __ARGS((exarg_T *eap));
void ex_change __ARGS((exarg_T *eap));
void ex_z __ARGS((exarg_T *eap));
*** ../vim-7.2.040/src/quickfix.c Thu Jul 24 18:44:59 2008
--- src/quickfix.c Wed Nov 12 18:12:00 2008
***************
*** 1420,1425 ****
--- 1420,1426 ----
win_T *win;
win_T *altwin;
#endif
+ win_T *oldwin = curwin;
int print_message = TRUE;
int len;
#ifdef FEAT_FOLDING
***************
*** 1744,1750 ****
}
else
ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
! ECMD_HIDE + ECMD_SET_HELP);
}
else
ok = buflist_getfile(qf_ptr->qf_fnum,
--- 1745,1752 ----
}
else
ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
! ECMD_HIDE + ECMD_SET_HELP,
! oldwin == curwin ? curwin : NULL);
}
else
ok = buflist_getfile(qf_ptr->qf_fnum,
***************
*** 2267,2272 ****
--- 2269,2275 ----
win_T *win;
tabpage_T *prevtab = curtab;
buf_T *qf_buf;
+ win_T *oldwin = curwin;
if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
{
***************
*** 2326,2339 ****
win->w_llist->qf_refcount++;
}
if (qf_buf != NULL)
/* Use the existing quickfix buffer */
(void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
! ECMD_HIDE + ECMD_OLDBUF);
else
{
/* Create a new quickfix buffer */
! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
/* switch off 'swapfile' */
set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
--- 2329,2344 ----
win->w_llist->qf_refcount++;
}
+ if (oldwin != curwin)
+ oldwin = NULL; /* don't store info when in another window */
if (qf_buf != NULL)
/* Use the existing quickfix buffer */
(void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
! ECMD_HIDE + ECMD_OLDBUF, oldwin);
else
{
/* Create a new quickfix buffer */
! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin);
/* switch off 'swapfile' */
set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
*** ../vim-7.2.040/src/window.c Wed Aug 6 18:32:11 2008
--- src/window.c Wed Nov 12 18:12:37 2008
***************
*** 531,537 ****
# ifdef FEAT_SCROLLBIND
curwin->w_p_scb = FALSE;
# endif
! (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, ECMD_HIDE);
if (nchar == 'F' && lnum >= 0)
{
curwin->w_cursor.lnum = lnum;
--- 531,538 ----
# ifdef FEAT_SCROLLBIND
curwin->w_p_scb = FALSE;
# endif
! (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
! ECMD_HIDE, NULL);
if (nchar == 'F' && lnum >= 0)
{
curwin->w_cursor.lnum = lnum;
*** ../vim-7.2.040/src/version.c Wed Nov 12 16:04:43 2008
--- src/version.c Wed Nov 12 16:54:35 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 41,
/**/
--
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 at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.042 ---
To: vim-dev at vim.org
Subject: Patch 7.2.042
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.042
Problem: When using winrestview() in a BufWinEnter autocommand the window
is scrolled anyway. (Matt Zyzik)
Solution: Don't recompute topline when above 'scrolloff' from the bottom.
Don't always put the cursor halfway when entering a buffer. Add
"w_topline_was_set".
Files: src/buffer.c, src/move.c, src/structs.h
*** ../vim-7.2.041/src/buffer.c Sat Nov 15 14:10:23 2008
--- src/buffer.c Sat Nov 15 14:58:52 2008
***************
*** 1401,1406 ****
--- 1401,1409 ----
curwin->w_cursor.coladd = 0;
#endif
curwin->w_set_curswant = TRUE;
+ #ifdef FEAT_AUTOCMD
+ curwin->w_topline_was_set = FALSE;
+ #endif
/* Make sure the buffer is loaded. */
if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */
***************
*** 1440,1446 ****
maketitle();
#endif
#ifdef FEAT_AUTOCMD
! if (curwin->w_topline == 1) /* when autocmds didn't change it */
#endif
scroll_cursor_halfway(FALSE); /* redisplay at correct position */
--- 1443,1450 ----
maketitle();
#endif
#ifdef FEAT_AUTOCMD
! /* when autocmds didn't change it */
! if (curwin->w_topline == 1 && !curwin->w_topline_was_set)
#endif
scroll_cursor_halfway(FALSE); /* redisplay at correct position */
*** ../vim-7.2.041/src/move.c Sun Jul 13 19:25:23 2008
--- src/move.c Sat Nov 15 14:56:47 2008
***************
*** 280,297 ****
if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
{
! if (curwin->w_cursor.lnum < curwin->w_botline
! && ((long)curwin->w_cursor.lnum
>= (long)curwin->w_botline - p_so
#ifdef FEAT_FOLDING
|| hasAnyFolding(curwin)
#endif
))
! {
lineoff_T loff;
! /* Cursor is above botline, check if there are 'scrolloff'
! * window lines below the cursor. If not, need to scroll. */
n = curwin->w_empty_rows;
loff.lnum = curwin->w_cursor.lnum;
#ifdef FEAT_FOLDING
--- 280,299 ----
if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
{
! if (curwin->w_cursor.lnum < curwin->w_botline)
! {
! if (((long)curwin->w_cursor.lnum
>= (long)curwin->w_botline - p_so
#ifdef FEAT_FOLDING
|| hasAnyFolding(curwin)
#endif
))
! {
lineoff_T loff;
! /* Cursor is (a few lines) above botline, check if there are
! * 'scrolloff' window lines below the cursor. If not, need to
! * scroll. */
n = curwin->w_empty_rows;
loff.lnum = curwin->w_cursor.lnum;
#ifdef FEAT_FOLDING
***************
*** 317,322 ****
--- 319,328 ----
if (n >= p_so)
/* sufficient context, no need to scroll */
check_botline = FALSE;
+ }
+ else
+ /* sufficient context, no need to scroll */
+ check_botline = FALSE;
}
if (check_botline)
{
***************
*** 509,514 ****
--- 515,523 ----
/* Approximate the value of w_botline */
wp->w_botline += lnum - wp->w_topline;
wp->w_topline = lnum;
+ #ifdef FEAT_AUTOCMD
+ wp->w_topline_was_set = TRUE;
+ #endif
#ifdef FEAT_DIFF
wp->w_topfill = 0;
#endif
*** ../vim-7.2.041/src/structs.h Sun Nov 9 13:43:25 2008
--- src/structs.h Sat Nov 15 14:56:42 2008
***************
*** 1784,1793 ****
#endif
/*
! * The next three specify the offsets for displaying the buffer:
*/
linenr_T w_topline; /* buffer line number of the line at the
top of the window */
#ifdef FEAT_DIFF
int w_topfill; /* number of filler lines above w_topline */
int w_old_topfill; /* w_topfill at last redraw */
--- 1784,1798 ----
#endif
/*
! * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for
! * displaying the buffer.
*/
linenr_T w_topline; /* buffer line number of the line at the
top of the window */
+ #ifdef FEAT_AUTOCMD
+ char w_topline_was_set; /* flag set to TRUE when topline is set,
+ e.g. by winrestview() */
+ #endif
#ifdef FEAT_DIFF
int w_topfill; /* number of filler lines above w_topline */
int w_old_topfill; /* w_topfill at last redraw */
*** ../vim-7.2.041/src/version.c Sat Nov 15 14:10:23 2008
--- src/version.c Sat Nov 15 16:01:29 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 42,
/**/
--
hundred-and-one symptoms of being an internet addict:
261. You find diskettes in your pockets when doing laundry.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.043 ---
To: vim-dev at vim.org
Subject: Patch 7.2.043
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.043
Problem: VMS: Too many characters are escaped in filename and shell
commands.
Solution: Escape fewer characters. (Zoltan Arpadffy)
Files: src/vim.h
*** ../vim-7.2.042/src/vim.h Sun Nov 9 13:43:25 2008
--- src/vim.h Fri Nov 14 21:41:17 2008
***************
*** 341,348 ****
#ifdef BACKSLASH_IN_FILENAME
# define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
#else
! # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
#endif
#define NUMBUFLEN 30 /* length of a buffer to store a number in ASCII */
--- 341,354 ----
#ifdef BACKSLASH_IN_FILENAME
# define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
#else
! # ifdef VMS
! /* VMS allows a lot of characters in the file name */
! # define PATH_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'\"|!")
! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'|!()&")
! # else
! # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
! # endif
#endif
#define NUMBUFLEN 30 /* length of a buffer to store a number in ASCII */
***************
*** 370,376 ****
* Define __w64 as an empty token for everything but MSVC 7.x or later.
*/
# if !defined(_MSC_VER) || (_MSC_VER < 1300)
! # define __w64
# endif
typedef unsigned long __w64 long_u;
typedef long __w64 long_i;
--- 376,382 ----
* Define __w64 as an empty token for everything but MSVC 7.x or later.
*/
# if !defined(_MSC_VER) || (_MSC_VER < 1300)
! # define __w64
# endif
typedef unsigned long __w64 long_u;
typedef long __w64 long_i;
*** ../vim-7.2.042/src/version.c Sat Nov 15 16:05:30 2008
--- src/version.c Thu Nov 20 10:23:51 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 43,
/**/
--
In his lifetime van Gogh painted 486 oil paintings. Oddly enough, 8975
of them are to be found in the United States.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.044 ---
To: vim-dev at vim.org
Subject: Patch 7.2.044
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.044
Problem: Crash because of STRCPY() being over protective of the destination
size. (Dominique Pelle)
Solution: Add -D_FORTIFY_SOURCE=1 to CFLAGS. Use an intermediate variable
for the pointer to avoid a warning.
Files: src/auto/configure, src/configure.in, src/eval.c
*** ../vim-7.2.043/src/auto/configure Thu Jul 24 17:20:50 2008
--- src/auto/configure Sun Nov 16 17:08:44 2008
***************
*** 16819,16839 ****
LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
fi
- { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5
- $as_echo_n "checking for GCC 3 or later... " >&6; }
DEPEND_CFLAGS_FILTER=
if test "$GCC" = yes; then
gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'`
if test "$gccmajor" -gt "2"; then
DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
! fi
! fi
! if test "$DEPEND_CFLAGS_FILTER" = ""; then
! { $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
! else
! { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
fi
--- 16819,16847 ----
LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
fi
DEPEND_CFLAGS_FILTER=
if test "$GCC" = yes; then
+ { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5
+ $as_echo_n "checking for GCC 3 or later... " >&6; }
gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'`
if test "$gccmajor" -gt "2"; then
DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
! { $as_echo "$as_me:$LINENO: result: yes" >&5
! $as_echo "yes" >&6; }
! else
! { $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
! fi
! { $as_echo "$as_me:$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="$CFLAGS -D_FORTIFY_SOURCE=1"
! { $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
fi
*** ../vim-7.2.043/src/configure.in Thu Jul 24 17:20:31 2008
--- src/configure.in Sun Nov 16 17:08:40 2008
***************
*** 3152,3169 ****
dnl But only when making dependencies, cproto and lint don't take "-isystem".
dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
dnl the number before the version number.
- AC_MSG_CHECKING(for GCC 3 or later)
DEPEND_CFLAGS_FILTER=
if test "$GCC" = yes; then
gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
if test "$gccmajor" -gt "2"; then
DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
fi
- fi
- if test "$DEPEND_CFLAGS_FILTER" = ""; then
- AC_MSG_RESULT(no)
- else
- AC_MSG_RESULT(yes)
fi
AC_SUBST(DEPEND_CFLAGS_FILTER)
--- 3152,3176 ----
dnl But only when making dependencies, cproto and lint don't take "-isystem".
dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
dnl the number before the version number.
DEPEND_CFLAGS_FILTER=
if test "$GCC" = yes; then
+ AC_MSG_CHECKING(for GCC 3 or later)
gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
if test "$gccmajor" -gt "2"; then
DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ 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.
+ AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
+ if test "$gccmajor" -gt "3"; then
+ CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1"
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
fi
fi
AC_SUBST(DEPEND_CFLAGS_FILTER)
*** ../vim-7.2.043/src/eval.c Wed Nov 12 15:28:37 2008
--- src/eval.c Sun Nov 16 20:46:28 2008
***************
*** 21150,21157 ****
init_var_dict(&fc.l_avars, &fc.l_avars_var);
add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
(varnumber_T)(argcount - fp->uf_args.ga_len));
v = &fc.fixvar[fixvar_idx++].var;
! STRCPY(v->di_key, "000");
v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
v->di_tv.v_type = VAR_LIST;
--- 21150,21160 ----
init_var_dict(&fc.l_avars, &fc.l_avars_var);
add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
(varnumber_T)(argcount - fp->uf_args.ga_len));
+ /* Use "name" to avoid a warning from some compiler that checks the
+ * destination size. */
v = &fc.fixvar[fixvar_idx++].var;
! name = v->di_key;
! STRCPY(name, "000");
v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
v->di_tv.v_type = VAR_LIST;
*** ../vim-7.2.043/src/version.c Thu Nov 20 10:26:19 2008
--- src/version.c Thu Nov 20 10:34:31 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 44,
/**/
--
Error:015 - Unable to exit Windows. Try the door.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.045 ---
To: vim-dev at vim.org
Subject: Patch 7.2.045
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.045
Problem: The Python interface has an empty entry in sys.path.
Solution: Filter out the empty entry. (idea from James Vega)
Files: src/if_python.c
*** ../vim-7.2.044/src/if_python.c Thu Jul 24 16:24:48 2008
--- src/if_python.c Thu Nov 20 11:03:53 2008
***************
*** 531,536 ****
--- 531,542 ----
if (PythonMod_Init())
goto fail;
+ /* Remove the element from sys.path that was added because of our
+ * argv[0] value in PythonMod_Init(). 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 = filter(lambda x: x != '/must>not&exist', sys.path)");
+
/* the first python thread is vim's, release the lock */
Python_SaveThread();
***************
*** 2345,2351 ****
{
PyObject *mod;
PyObject *dict;
! static char *(argv[2]) = {"", NULL};
/* Fixups... */
BufferType.ob_type = &PyType_Type;
--- 2351,2358 ----
{
PyObject *mod;
PyObject *dict;
! /* The special value is removed from sys.path in Python_Init(). */
! static char *(argv[2]) = {"/must>not&exist/foo", NULL};
/* Fixups... */
BufferType.ob_type = &PyType_Type;
*** ../vim-7.2.044/src/version.c Thu Nov 20 10:36:04 2008
--- src/version.c Thu Nov 20 10:58:11 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 45,
/**/
--
press CTRL-ALT-DEL for more information
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.046 ---
To: vim-dev at vim.org
Subject: Patch 7.2.046
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.046
Problem: Wrong check for filling buffer with encoding. (Danek Duvall)
Solution: Remove pointers. (Dominique Pelle)
Files: src/mbyte.c
*** ../vim-7.2.045/src/mbyte.c Wed Nov 12 13:07:48 2008
--- src/mbyte.c Wed Nov 19 21:44:50 2008
***************
*** 3131,3137 ****
else
s = p + 1;
}
! for (i = 0; s[i] != NUL && s + i < buf + sizeof(buf) - 1; ++i)
{
if (s[i] == '_' || s[i] == '-')
buf[i] = '-';
--- 3131,3137 ----
else
s = p + 1;
}
! for (i = 0; s[i] != NUL && i < sizeof(buf) - 1; ++i)
{
if (s[i] == '_' || s[i] == '-')
buf[i] = '-';
*** ../vim-7.2.045/src/version.c Thu Nov 20 11:04:01 2008
--- src/version.c Thu Nov 20 11:54:23 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 46,
/**/
--
He was not in the least bit scared to be mashed into a pulp
Or to have his eyes gouged out and his elbows broken;
To have his kneecaps split and his body burned away
And his limbs all hacked and mangled, brave Sir Robin.
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.047 ---
To: vim-dev at vim.org
Subject: Patch 7.2.047
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.047
Problem: Starting Vim with the -nb argument while it's not supported causes
the other side to hang.
Solution: When -nb is used while it's not supported exit Vim. (Xavier de
Gaye)
Files: src/main.c, src/vim.h
*** ../vim-7.2.046/src/main.c Sat Nov 15 14:10:23 2008
--- src/main.c Thu Nov 20 14:09:27 2008
***************
*** 1510,1516 ****
early_arg_scan(parmp)
mparm_T *parmp;
{
! #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER)
int argc = parmp->argc;
char **argv = parmp->argv;
int i;
--- 1510,1517 ----
early_arg_scan(parmp)
mparm_T *parmp;
{
! #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \
! || !defined(FEAT_NETBEANS_INTG)
int argc = parmp->argc;
char **argv = parmp->argv;
int i;
***************
*** 1582,1587 ****
--- 1583,1596 ----
else if (STRICMP(argv[i], "--echo-wid") == 0)
echo_wid_arg = TRUE;
# endif
+ # ifndef FEAT_NETBEANS_INTG
+ else if (strncmp(argv[i], "-nb", (size_t)3) == 0)
+ {
+ mch_errmsg(_("'-nb' cannot be used: not enabled at compile time\n"));
+ mch_exit(2);
+ }
+ # endif
+
}
#endif
}
*** ../vim-7.2.046/src/vim.h Thu Nov 20 10:26:19 2008
--- src/vim.h Thu Nov 20 12:06:14 2008
***************
*** 1986,1991 ****
--- 1986,1994 ----
# endif
#endif
+ #ifndef FEAT_NETBEANS_INTG
+ # undef NBDEBUG
+ #endif
#ifdef NBDEBUG /* Netbeans debugging. */
# include "nbdebug.h"
#else
*** ../vim-7.2.046/src/version.c Thu Nov 20 11:55:53 2008
--- src/version.c Thu Nov 20 14:07:57 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 47,
/**/
--
FIRST HEAD: Oh! quick! get the sword out I want to cut his head off.
THIRD HEAD: Oh, cut your own head off.
SECOND HEAD: Yes - do us all a favour.
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.048 ---
To: vim-dev at vim.org
Subject: Patch 7.2.048
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.048
Problem: v:prevcount is changed too often. Counts are not multiplied when
setting v:count.
Solution: Set v:prevcount properly. Multiply counts. (idea by Ben Schmidt)
Files: src/eval.c, src/normal.c, src/proto/eval.pro
*** ../vim-7.2.047/src/eval.c Thu Nov 20 10:36:04 2008
--- src/eval.c Thu Nov 20 15:53:47 2008
***************
*** 18146,18159 ****
}
/*
! * Set v:count, v:count1 and v:prevcount.
*/
void
! set_vcount(count, count1)
long count;
long count1;
{
! vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
vimvars[VV_COUNT].vv_nr = count;
vimvars[VV_COUNT1].vv_nr = count1;
}
--- 18146,18162 ----
}
/*
! * Set v:count to "count" and v:count1 to "count1".
! * When "set_prevcount" is TRUE first set v:prevcount from v:count.
*/
void
! set_vcount(count, count1, set_prevcount)
long count;
long count1;
+ int set_prevcount;
{
! if (set_prevcount)
! vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
vimvars[VV_COUNT].vv_nr = count;
vimvars[VV_COUNT1].vv_nr = count1;
}
*** ../vim-7.2.047/src/normal.c Sat Nov 15 14:10:23 2008
--- src/normal.c Thu Nov 20 16:04:44 2008
***************
*** 580,585 ****
--- 580,588 ----
static int old_mapped_len = 0;
#endif
int idx;
+ #ifdef FEAT_EVAL
+ int set_prevcount = FALSE;
+ #endif
vim_memset(&ca, 0, sizeof(ca)); /* also resets ca.retval */
ca.oap = oap;
***************
*** 615,621 ****
--- 618,629 ----
/* When not finishing an operator and no register name typed, reset the
* count. */
if (!finish_op && !oap->regname)
+ {
ca.opcount = 0;
+ #ifdef FEAT_EVAL
+ set_prevcount = TRUE;
+ #endif
+ }
#ifdef FEAT_AUTOCMD
/* Restore counts from before receiving K_CURSORHOLD. This means after
***************
*** 719,725 ****
* command, so that v:count can be used in an expression mapping
* right after the count. */
if (toplevel && stuff_empty())
! set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0);
#endif
if (ctrl_w)
{
--- 727,741 ----
* 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)
{
***************
*** 806,812 ****
* Only set v:count when called from main() and not a stuffed command.
*/
if (toplevel && stuff_empty())
! set_vcount(ca.count0, ca.count1);
#endif
/*
--- 822,828 ----
* Only set v:count when called from main() and not a stuffed command.
*/
if (toplevel && stuff_empty())
! set_vcount(ca.count0, ca.count1, set_prevcount);
#endif
/*
*** ../vim-7.2.047/src/proto/eval.pro Sun Nov 9 13:43:25 2008
--- src/proto/eval.pro Thu Nov 20 15:53:54 2008
***************
*** 61,67 ****
long get_vim_var_nr __ARGS((int idx));
char_u *get_vim_var_str __ARGS((int idx));
list_T *get_vim_var_list __ARGS((int idx));
! void set_vcount __ARGS((long count, long count1));
void set_vim_var_string __ARGS((int idx, char_u *val, int len));
void set_vim_var_list __ARGS((int idx, list_T *val));
void set_reg_var __ARGS((int c));
--- 61,67 ----
long get_vim_var_nr __ARGS((int idx));
char_u *get_vim_var_str __ARGS((int idx));
list_T *get_vim_var_list __ARGS((int idx));
! void set_vcount __ARGS((long count, long count1, int set_prevcount));
void set_vim_var_string __ARGS((int idx, char_u *val, int len));
void set_vim_var_list __ARGS((int idx, list_T *val));
void set_reg_var __ARGS((int c));
*** ../vim-7.2.047/src/version.c Thu Nov 20 14:11:47 2008
--- src/version.c Thu Nov 20 16:08:19 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 48,
/**/
--
Microsoft's definition of a boolean: TRUE, FALSE, MAYBE
"Embrace and extend"...?
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.049 ---
To: vim-dev at vim.org
Subject: Patch 7.2.049 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.049 (extra)
Problem: Win32: the clipboard doesn't support UTF-16.
Solution: Change UCS-2 support to UTF-16 support. (Jia Yanwei)
Files: src/gui_w32.c, src/gui_w48.c, src/mbyte.c, src/misc1.c,
src/os_mswin.c, src/os_win32.c, src/proto/os_mswin.pro
*** ../vim-7.2.048/src/gui_w32.c Tue Jun 24 23:46:14 2008
--- src/gui_w32.c Thu Nov 20 16:47:10 2008
***************
*** 992,998 ****
SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH,
0, 500);
! tt_text = enc_to_ucs2(str, NULL);
lpdi->lpszText = tt_text;
/* can't show tooltip if failed */
}
--- 992,998 ----
SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH,
0, 500);
! tt_text = enc_to_utf16(str, NULL);
lpdi->lpszText = tt_text;
/* can't show tooltip if failed */
}
***************
*** 1935,1941 ****
if (buf == NULL)
return NULL;
! convbuf = ucs2_to_enc(buf, lenp);
pImmReleaseContext(hwnd, hIMC);
vim_free(buf);
return convbuf;
--- 1935,1941 ----
if (buf == NULL)
return NULL;
! convbuf = utf16_to_enc(buf, lenp);
pImmReleaseContext(hwnd, hIMC);
vim_free(buf);
return convbuf;
***************
*** 2566,2572 ****
{
/* 'encoding' differs from active codepage: convert menu name
* and use wide function */
! wn = enc_to_ucs2(menu->name, NULL);
if (wn != NULL)
{
MENUITEMINFOW infow;
--- 2566,2572 ----
{
/* 'encoding' differs from active codepage: convert menu name
* and use wide function */
! wn = enc_to_utf16(menu->name, NULL);
if (wn != NULL)
{
MENUITEMINFOW infow;
***************
*** 2728,2734 ****
{
/* 'encoding' differs from active codepage: convert menu item name
* and use wide function */
! wn = enc_to_ucs2(menu->name, NULL);
if (wn != NULL)
{
n = InsertMenuW(parent->submenu_id, (UINT)idx,
--- 2728,2734 ----
{
/* 'encoding' differs from active codepage: convert menu item name
* and use wide function */
! wn = enc_to_utf16(menu->name, NULL);
if (wn != NULL)
{
n = InsertMenuW(parent->submenu_id, (UINT)idx,
***************
*** 3570,3576 ****
if (enc_codepage == 0 && (int)GetACP() != enc_codepage)
{
/* Not a codepage, use our own conversion function. */
! wn = enc_to_ucs2(lpAnsiIn, NULL);
if (wn != NULL)
{
wcscpy(lpWCStr, wn);
--- 3570,3576 ----
if (enc_codepage == 0 && (int)GetACP() != enc_codepage)
{
/* Not a codepage, use our own conversion function. */
! wn = enc_to_utf16(lpAnsiIn, NULL);
if (wn != NULL)
{
wcscpy(lpWCStr, wn);
*** ../vim-7.2.048/src/gui_w48.c Wed Nov 12 13:35:31 2008
--- src/gui_w48.c Thu Nov 20 16:42:32 2008
***************
*** 547,553 ****
else
{
len = 1;
! ws = ucs2_to_enc(wstring, &len);
if (ws == NULL)
len = 0;
else
--- 547,553 ----
else
{
len = 1;
! ws = utf16_to_enc(wstring, &len);
if (ws == NULL)
len = 0;
else
***************
*** 2128,2134 ****
{
/* 'encoding' differs from active codepage: convert text and use wide
* function */
! wstr = enc_to_ucs2(str, &wlen);
if (wstr != NULL)
{
n = GetTextExtentPointW(hdc, wstr, wlen, &size);
--- 2128,2134 ----
{
/* 'encoding' differs from active codepage: convert text and use wide
* function */
! wstr = enc_to_utf16(str, &wlen);
if (wstr != NULL)
{
n = GetTextExtentPointW(hdc, wstr, wlen, &size);
***************
*** 2252,2258 ****
{
/* 'encoding' differs from active codepage: convert menu name
* and use wide function */
! wn = enc_to_ucs2(item_text, NULL);
if (wn != NULL)
{
MENUITEMINFOW infow;
--- 2252,2258 ----
{
/* 'encoding' differs from active codepage: convert menu name
* and use wide function */
! wn = enc_to_utf16(item_text, NULL);
if (wn != NULL)
{
MENUITEMINFOW infow;
***************
*** 2422,2428 ****
if (use_unicode)
{
/* Need to go through Unicode. */
! wstr = enc_to_ucs2(NameBuff, NULL);
if (wstr != NULL)
{
TCITEMW tiw;
--- 2422,2428 ----
if (use_unicode)
{
/* Need to go through Unicode. */
! wstr = enc_to_utf16(NameBuff, NULL);
if (wstr != NULL)
{
TCITEMW tiw;
***************
*** 2521,2528 ****
WCHAR *wbuf;
int n;
! /* Convert the title from 'encoding' to ucs2. */
! wbuf = (WCHAR *)enc_to_ucs2((char_u *)title, NULL);
if (wbuf != NULL)
{
n = SetWindowTextW(hwnd, wbuf);
--- 2521,2528 ----
WCHAR *wbuf;
int n;
! /* Convert the title from 'encoding' to UTF-16. */
! wbuf = (WCHAR *)enc_to_utf16((char_u *)title, NULL);
if (wbuf != NULL)
{
n = SetWindowTextW(hwnd, wbuf);
***************
*** 3222,3228 ****
char_u *initdir,
char_u *filter)
{
! /* We always use the wide function. This means enc_to_ucs2() must work,
* otherwise it fails miserably! */
OPENFILENAMEW fileStruct;
WCHAR fileBuf[MAXPATHL];
--- 3222,3228 ----
char_u *initdir,
char_u *filter)
{
! /* We always use the wide function. This means enc_to_utf16() must work,
* otherwise it fails miserably! */
OPENFILENAMEW fileStruct;
WCHAR fileBuf[MAXPATHL];
***************
*** 3238,3244 ****
fileBuf[0] = NUL;
else
{
! wp = enc_to_ucs2(dflt, NULL);
if (wp == NULL)
fileBuf[0] = NUL;
else
--- 3238,3244 ----
fileBuf[0] = NUL;
else
{
! wp = enc_to_utf16(dflt, NULL);
if (wp == NULL)
fileBuf[0] = NUL;
else
***************
*** 3263,3273 ****
#endif
if (title != NULL)
! titlep = enc_to_ucs2(title, NULL);
fileStruct.lpstrTitle = titlep;
if (ext != NULL)
! extp = enc_to_ucs2(ext, NULL);
fileStruct.lpstrDefExt = extp;
fileStruct.lpstrFile = fileBuf;
--- 3263,3273 ----
#endif
if (title != NULL)
! titlep = enc_to_utf16(title, NULL);
fileStruct.lpstrTitle = titlep;
if (ext != NULL)
! extp = enc_to_utf16(ext, NULL);
fileStruct.lpstrDefExt = extp;
fileStruct.lpstrFile = fileBuf;
***************
*** 3278,3284 ****
if (initdir != NULL && *initdir != NUL)
{
/* Must have backslashes here, no matter what 'shellslash' says */
! initdirp = enc_to_ucs2(initdir, NULL);
if (initdirp != NULL)
{
for (wp = initdirp; *wp != NUL; ++wp)
--- 3278,3284 ----
if (initdir != NULL && *initdir != NUL)
{
/* Must have backslashes here, no matter what 'shellslash' says */
! initdirp = enc_to_utf16(initdir, NULL);
if (initdirp != NULL)
{
for (wp = initdirp; *wp != NUL; ++wp)
***************
*** 3318,3324 ****
vim_free(extp);
/* Convert from UCS2 to 'encoding'. */
! p = ucs2_to_enc(fileBuf, NULL);
if (p != NULL)
/* when out of memory we get garbage for non-ASCII chars */
STRCPY(fileBuf, p);
--- 3318,3324 ----
vim_free(extp);
/* Convert from UCS2 to 'encoding'. */
! p = utf16_to_enc(fileBuf, NULL);
if (p != NULL)
/* when out of memory we get garbage for non-ASCII chars */
STRCPY(fileBuf, p);
***************
*** 3518,3524 ****
{
#ifdef FEAT_MBYTE
if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0)
! fnames[i] = ucs2_to_enc(wszFile, NULL);
else
#endif
{
--- 3518,3524 ----
{
#ifdef FEAT_MBYTE
if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0)
! fnames[i] = utf16_to_enc(wszFile, NULL);
else
#endif
{
*** ../vim-7.2.048/src/mbyte.c Thu Nov 20 11:55:53 2008
--- src/mbyte.c Thu Nov 20 16:47:41 2008
***************
*** 6101,6107 ****
/* 1. codepage/UTF-8 -> ucs-2. */
if (vcp->vc_cpfrom == 0)
! tmp_len = utf8_to_ucs2(ptr, len, NULL, NULL);
else
tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
ptr, len, 0, 0);
--- 6101,6107 ----
/* 1. codepage/UTF-8 -> ucs-2. */
if (vcp->vc_cpfrom == 0)
! tmp_len = utf8_to_utf16(ptr, len, NULL, NULL);
else
tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
ptr, len, 0, 0);
***************
*** 6109,6121 ****
if (tmp == NULL)
break;
if (vcp->vc_cpfrom == 0)
! utf8_to_ucs2(ptr, len, tmp, unconvlenp);
else
MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len);
/* 2. ucs-2 -> codepage/UTF-8. */
if (vcp->vc_cpto == 0)
! retlen = ucs2_to_utf8(tmp, tmp_len, NULL);
else
retlen = WideCharToMultiByte(vcp->vc_cpto, 0,
tmp, tmp_len, 0, 0, 0, 0);
--- 6109,6121 ----
if (tmp == NULL)
break;
if (vcp->vc_cpfrom == 0)
! utf8_to_utf16(ptr, len, tmp, unconvlenp);
else
MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len);
/* 2. ucs-2 -> codepage/UTF-8. */
if (vcp->vc_cpto == 0)
! retlen = utf16_to_utf8(tmp, tmp_len, NULL);
else
retlen = WideCharToMultiByte(vcp->vc_cpto, 0,
tmp, tmp_len, 0, 0, 0, 0);
***************
*** 6123,6129 ****
if (retval != NULL)
{
if (vcp->vc_cpto == 0)
! ucs2_to_utf8(tmp, tmp_len, retval);
else
WideCharToMultiByte(vcp->vc_cpto, 0,
tmp, tmp_len, retval, retlen, 0, 0);
--- 6123,6129 ----
if (retval != NULL)
{
if (vcp->vc_cpto == 0)
! utf16_to_utf8(tmp, tmp_len, retval);
else
WideCharToMultiByte(vcp->vc_cpto, 0,
tmp, tmp_len, retval, retlen, 0, 0);
*** ../vim-7.2.048/src/misc1.c Sun Nov 9 13:43:25 2008
--- src/misc1.c Thu Nov 20 16:42:59 2008
***************
*** 8728,8734 ****
/* The active codepage differs from 'encoding'. Attempt using the
* wide function. If it fails because it is not implemented fall back
* to the non-wide version (for Windows 98) */
! wn = enc_to_ucs2(buf, NULL);
if (wn != NULL)
{
hFind = FindFirstFileW(wn, &wfb);
--- 8728,8734 ----
/* The active codepage differs from 'encoding'. Attempt using the
* wide function. If it fails because it is not implemented fall back
* to the non-wide version (for Windows 98) */
! wn = enc_to_utf16(buf, NULL);
if (wn != NULL)
{
hFind = FindFirstFileW(wn, &wfb);
***************
*** 8756,8762 ****
#ifdef WIN3264
# ifdef FEAT_MBYTE
if (wn != NULL)
! p = ucs2_to_enc(wfb.cFileName, NULL); /* p is allocated here */
else
# endif
p = (char_u *)fb.cFileName;
--- 8756,8762 ----
#ifdef WIN3264
# ifdef FEAT_MBYTE
if (wn != NULL)
! p = utf16_to_enc(wfb.cFileName, NULL); /* p is allocated here */
else
# endif
p = (char_u *)fb.cFileName;
***************
*** 8830,8836 ****
if (wn != NULL)
{
vim_free(wn);
! wn = enc_to_ucs2(buf, NULL);
if (wn != NULL)
hFind = FindFirstFileW(wn, &wfb);
}
--- 8830,8836 ----
if (wn != NULL)
{
vim_free(wn);
! wn = enc_to_utf16(buf, NULL);
if (wn != NULL)
hFind = FindFirstFileW(wn, &wfb);
}
*** ../vim-7.2.048/src/os_mswin.c Sat Aug 9 19:37:30 2008
--- src/os_mswin.c Thu Nov 20 17:05:10 2008
***************
*** 309,315 ****
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
/* Convert the title from 'encoding' to the active codepage. */
! WCHAR *wp = enc_to_ucs2(title, NULL);
int n;
if (wp != NULL)
--- 309,315 ----
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
/* Convert the title from 'encoding' to the active codepage. */
! WCHAR *wp = enc_to_utf16(title, NULL);
int n;
if (wp != NULL)
***************
*** 406,415 ****
* - invoke _wfullpath()
* - convert the result from UCS2 to 'encoding'.
*/
! wname = enc_to_ucs2(fname, NULL);
if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL)
{
! cname = ucs2_to_enc((short_u *)wbuf, NULL);
if (cname != NULL)
{
vim_strncpy(buf, cname, len - 1);
--- 406,415 ----
* - invoke _wfullpath()
* - convert the result from UCS2 to 'encoding'.
*/
! wname = enc_to_utf16(fname, NULL);
if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL)
{
! cname = utf16_to_enc((short_u *)wbuf, NULL);
if (cname != NULL)
{
vim_strncpy(buf, cname, len - 1);
***************
*** 507,513 ****
# endif
)
{
! WCHAR *wp = enc_to_ucs2(buf, NULL);
int n;
if (wp != NULL)
--- 507,513 ----
# endif
)
{
! WCHAR *wp = enc_to_utf16(buf, NULL);
int n;
if (wp != NULL)
***************
*** 668,674 ****
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! WCHAR *p = enc_to_ucs2(path, NULL);
int n;
if (p != NULL)
--- 668,674 ----
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! WCHAR *p = enc_to_utf16(path, NULL);
int n;
if (p != NULL)
***************
*** 891,909 ****
#if defined(FEAT_MBYTE) || defined(PROTO)
/*
! * Convert an UTF-8 string to UCS-2.
* "instr[inlen]" is the input. "inlen" is in bytes.
! * When "outstr" is NULL only return the number of UCS-2 words produced.
* Otherwise "outstr" must be a buffer of sufficient size.
! * Returns the number of UCS-2 words produced.
*/
int
! utf8_to_ucs2(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
{
int outlen = 0;
char_u *p = instr;
int todo = inlen;
int l;
while (todo > 0)
{
--- 891,910 ----
#if defined(FEAT_MBYTE) || defined(PROTO)
/*
! * Convert an UTF-8 string to UTF-16.
* "instr[inlen]" is the input. "inlen" is in bytes.
! * When "outstr" is NULL only return the number of UTF-16 words produced.
* Otherwise "outstr" must be a buffer of sufficient size.
! * Returns the number of UTF-16 words produced.
*/
int
! utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
{
int outlen = 0;
char_u *p = instr;
int todo = inlen;
int l;
+ int ch;
while (todo > 0)
{
***************
*** 917,924 ****
break;
}
! if (outstr != NULL)
! *outstr++ = utf_ptr2char(p);
++outlen;
p += l;
todo -= l;
--- 918,936 ----
break;
}
! ch = utf_ptr2char(p);
! if (ch >= 0x10000)
! {
! /* non-BMP character, encoding with surrogate pairs */
! ++outlen;
! if (outstr != NULL)
! {
! *outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
! *outstr++ = 0xDC00 | (ch & 0x3FF);
! }
! }
! else if (outstr != NULL)
! *outstr++ = ch;
++outlen;
p += l;
todo -= l;
***************
*** 928,956 ****
}
/*
! * Convert an UCS-2 string to UTF-8.
! * The input is "instr[inlen]" with "inlen" in number of ucs-2 words.
* When "outstr" is NULL only return the required number of bytes.
* Otherwise "outstr" must be a buffer of sufficient size.
* Return the number of bytes produced.
*/
int
! ucs2_to_utf8(short_u *instr, int inlen, char_u *outstr)
{
int outlen = 0;
int todo = inlen;
short_u *p = instr;
int l;
while (todo > 0)
{
if (outstr != NULL)
{
! l = utf_char2bytes(*p, outstr);
outstr += l;
}
else
! l = utf_char2len(*p);
++p;
outlen += l;
--todo;
--- 940,981 ----
}
/*
! * Convert an UTF-16 string to UTF-8.
! * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
* When "outstr" is NULL only return the required number of bytes.
* Otherwise "outstr" must be a buffer of sufficient size.
* Return the number of bytes produced.
*/
int
! utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
{
int outlen = 0;
int todo = inlen;
short_u *p = instr;
int l;
+ int ch, ch2;
while (todo > 0)
{
+ ch = *p;
+ if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
+ {
+ /* surrogate pairs handling */
+ ch2 = p[1];
+ if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
+ {
+ ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
+ ++p;
+ --todo;
+ }
+ }
if (outstr != NULL)
{
! l = utf_char2bytes(ch, outstr);
outstr += l;
}
else
! l = utf_char2len(ch);
++p;
outlen += l;
--todo;
***************
*** 1079,1092 ****
*/
/*
! * Convert "str" from 'encoding' to UCS-2.
* 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_ucs2(char_u *str, int *lenp)
{
vimconv_T conv;
WCHAR *ret;
--- 1104,1117 ----
*/
/*
! * 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;
***************
*** 1102,1108 ****
if (enc_codepage > 0)
{
! /* We can do any CP### -> UCS-2 in one pass, and we can do it
* without iconv() (convert_* may need iconv). */
MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
}
--- 1127,1133 ----
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);
}
***************
*** 1123,1133 ****
}
convert_setup(&conv, NULL, NULL);
! length = utf8_to_ucs2(str, *lenp, NULL, NULL);
ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
if (ret != NULL)
{
! utf8_to_ucs2(str, *lenp, (short_u *)ret, NULL);
ret[length] = 0;
}
--- 1148,1158 ----
}
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;
}
***************
*** 1139,1145 ****
}
/*
! * Convert an UCS-2 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
--- 1164,1170 ----
}
/*
! * 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
***************
*** 1147,1153 ****
* Returns NULL when out of memory.
*/
char_u *
! ucs2_to_enc(short_u *str, int *lenp)
{
vimconv_T conv;
char_u *utf8_str = NULL, *enc_str = NULL;
--- 1172,1178 ----
* 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;
***************
*** 1161,1167 ****
if (enc_codepage > 0)
{
! /* We can do any UCS-2 -> CP### in one pass. */
int length;
WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
--- 1186,1192 ----
if (enc_codepage > 0)
{
! /* We can do any UTF-16 -> CP### in one pass. */
int length;
WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
***************
*** 1171,1180 ****
}
/* Avoid allocating zero bytes, it generates an error message. */
! utf8_str = alloc(ucs2_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
if (utf8_str != NULL)
{
! *lenp = ucs2_to_utf8(str, *lenp, utf8_str);
/* We might be called before we have p_enc set up. */
conv.vc_type = CONV_NONE;
--- 1196,1205 ----
}
/* 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;
***************
*** 1308,1314 ****
if (hMemWstr[str_size] == NUL)
break;
}
! to_free = str = ucs2_to_enc((short_u *)hMemWstr, &str_size);
GlobalUnlock(hMemW);
}
}
--- 1333,1339 ----
if (hMemWstr[str_size] == NUL)
break;
}
! to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
GlobalUnlock(hMemW);
}
}
***************
*** 1340,1346 ****
# if defined(FEAT_MBYTE) && defined(WIN3264)
/* The text is in the active codepage. Convert to 'encoding',
! * going through UCS-2. */
acp_to_enc(str, str_size, &to_free, &maxlen);
if (to_free != NULL)
{
--- 1365,1371 ----
# if defined(FEAT_MBYTE) && defined(WIN3264)
/* The text is in the active codepage. Convert to 'encoding',
! * going through UTF-16. */
acp_to_enc(str, str_size, &to_free, &maxlen);
if (to_free != NULL)
{
***************
*** 1404,1410 ****
if (widestr != NULL)
{
++*outlen; /* Include the 0 after the string */
! *out = ucs2_to_enc((short_u *)widestr, outlen);
vim_free(widestr);
}
}
--- 1429,1435 ----
if (widestr != NULL)
{
++*outlen; /* Include the 0 after the string */
! *out = utf16_to_enc((short_u *)widestr, outlen);
vim_free(widestr);
}
}
***************
*** 1466,1474 ****
WCHAR *out;
int len = metadata.txtlen;
! /* Convert the text to UCS-2. This is put on the clipboard as
* CF_UNICODETEXT. */
! out = (WCHAR *)enc_to_ucs2(str, &len);
if (out != NULL)
{
WCHAR *lpszMemW;
--- 1491,1499 ----
WCHAR *out;
int len = metadata.txtlen;
! /* Convert the text to UTF-16. This is put on the clipboard as
* CF_UNICODETEXT. */
! out = (WCHAR *)enc_to_utf16(str, &len);
if (out != NULL)
{
WCHAR *lpszMemW;
***************
*** 1488,1494 ****
WideCharToMultiByte(GetACP(), 0, out, len,
str, metadata.txtlen, 0, 0);
! /* Allocate memory for the UCS-2 text, add one NUL word to
* terminate the string. */
hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
(len + 1) * sizeof(WCHAR));
--- 1513,1519 ----
WideCharToMultiByte(GetACP(), 0, out, len,
str, metadata.txtlen, 0, 0);
! /* Allocate memory for the UTF-16 text, add one NUL word to
* terminate the string. */
hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
(len + 1) * sizeof(WCHAR));
*** ../vim-7.2.048/src/os_win32.c Thu Jul 24 20:50:30 2008
--- src/os_win32.c Thu Nov 20 16:44:33 2008
***************
*** 1587,1593 ****
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! WCHAR *p = enc_to_ucs2(name, NULL);
WCHAR fnamew[_MAX_PATH];
WCHAR *dumw;
long n;
--- 1587,1593 ----
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! WCHAR *p = enc_to_utf16(name, NULL);
WCHAR fnamew[_MAX_PATH];
WCHAR *dumw;
long n;
***************
*** 2440,2446 ****
if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
{
! char_u *p = ucs2_to_enc(wbuf, NULL);
if (p != NULL)
{
--- 2440,2446 ----
if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
{
! char_u *p = utf16_to_enc(wbuf, NULL);
if (p != NULL)
{
***************
*** 2466,2472 ****
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! WCHAR *p = enc_to_ucs2(name, NULL);
long n;
if (p != NULL)
--- 2466,2472 ----
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! WCHAR *p = enc_to_utf16(name, NULL);
long n;
if (p != NULL)
***************
*** 2495,2501 ****
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! WCHAR *p = enc_to_ucs2(name, NULL);
long n;
if (p != NULL)
--- 2495,2501 ----
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! WCHAR *p = enc_to_utf16(name, NULL);
long n;
if (p != NULL)
***************
*** 2522,2528 ****
WCHAR *p = NULL;
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! p = enc_to_ucs2(name, NULL);
#endif
#ifdef FEAT_MBYTE
--- 2522,2528 ----
WCHAR *p = NULL;
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! p = enc_to_utf16(name, NULL);
#endif
#ifdef FEAT_MBYTE
***************
*** 2590,2596 ****
WCHAR *wn = NULL;
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! wn = enc_to_ucs2(fname, NULL);
if (wn != NULL)
{
hFile = CreateFileW(wn, /* file name */
--- 2590,2596 ----
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 */
***************
*** 4239,4245 ****
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! wn = enc_to_ucs2(name, NULL);
if (wn != NULL)
{
SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL);
--- 4239,4245 ----
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! wn = enc_to_utf16(name, NULL);
if (wn != NULL)
{
SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL);
***************
*** 4382,4389 ****
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! wold = enc_to_ucs2((char_u *)pszOldFile, NULL);
! wnew = enc_to_ucs2((char_u *)pszNewFile, NULL);
if (wold != NULL && wnew != NULL)
retval = mch_wrename(wold, wnew);
vim_free(wold);
--- 4382,4389 ----
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! wold = enc_to_utf16((char_u *)pszOldFile, NULL);
! wnew = enc_to_utf16((char_u *)pszNewFile, NULL);
if (wold != NULL && wnew != NULL)
retval = mch_wrename(wold, wnew);
vim_free(wold);
***************
*** 4492,4498 ****
WCHAR *wn = NULL;
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! wn = enc_to_ucs2(n, NULL);
#endif
if (mch_isdir(n))
--- 4492,4498 ----
WCHAR *wn = NULL;
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! wn = enc_to_utf16(n, NULL);
#endif
if (mch_isdir(n))
***************
*** 4618,4624 ****
#if defined(FEAT_MBYTE) || defined(PROTO)
/*
! * Version of open() that may use ucs2 file name.
*/
int
mch_open(char *name, int flags, int mode)
--- 4618,4624 ----
#if defined(FEAT_MBYTE) || defined(PROTO)
/*
! * Version of open() that may use UTF-16 file name.
*/
int
mch_open(char *name, int flags, int mode)
***************
*** 4630,4636 ****
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! wn = enc_to_ucs2(name, NULL);
if (wn != NULL)
{
f = _wopen(wn, flags, mode);
--- 4630,4636 ----
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
! wn = enc_to_utf16(name, NULL);
if (wn != NULL)
{
f = _wopen(wn, flags, mode);
***************
*** 4648,4654 ****
}
/*
! * Version of fopen() that may use ucs2 file name.
*/
FILE *
mch_fopen(char *name, char *mode)
--- 4648,4654 ----
}
/*
! * Version of fopen() that may use UTF-16 file name.
*/
FILE *
mch_fopen(char *name, char *mode)
***************
*** 4675,4682 ****
else if (newMode == 'b')
_set_fmode(_O_BINARY);
# endif
! wn = enc_to_ucs2(name, NULL);
! wm = enc_to_ucs2(mode, NULL);
if (wn != NULL && wm != NULL)
f = _wfopen(wn, wm);
vim_free(wn);
--- 4675,4682 ----
else if (newMode == 'b')
_set_fmode(_O_BINARY);
# endif
! wn = enc_to_utf16(name, NULL);
! wm = enc_to_utf16(mode, NULL);
if (wn != NULL && wm != NULL)
f = _wfopen(wn, wm);
vim_free(wn);
***************
*** 4776,4783 ****
int len;
/* Convert the file names to wide characters. */
! fromw = enc_to_ucs2(from, NULL);
! tow = enc_to_ucs2(to, NULL);
if (fromw != NULL && tow != NULL)
{
/* Open the file for reading. */
--- 4776,4783 ----
int len;
/* Convert the file names to wide characters. */
! fromw = enc_to_utf16(from, NULL);
! tow = enc_to_utf16(to, NULL);
if (fromw != NULL && tow != NULL)
{
/* Open the file for reading. */
***************
*** 5122,5128 ****
for (i = 0; i < used_file_count; ++i)
{
idx = used_file_indexes[i];
! str = ucs2_to_enc(ArglistW[idx], NULL);
if (str != NULL)
{
#ifdef FEAT_DIFF
--- 5122,5128 ----
for (i = 0; i < used_file_count; ++i)
{
idx = used_file_indexes[i];
! str = utf16_to_enc(ArglistW[idx], NULL);
if (str != NULL)
{
#ifdef FEAT_DIFF
*** ../vim-7.2.048/src/proto/os_mswin.pro Sat May 5 19:07:50 2007
--- src/proto/os_mswin.pro Thu Nov 20 16:41:00 2008
***************
*** 22,35 ****
int can_end_termcap_mode __ARGS((int give_msg));
int mch_screenmode __ARGS((char_u *arg));
int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
! int utf8_to_ucs2 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
! int ucs2_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
int clip_mch_own_selection __ARGS((VimClipboard *cbd));
void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
! short_u *enc_to_ucs2 __ARGS((char_u *str, int *lenp));
! char_u *ucs2_to_enc __ARGS((short_u *str, int *lenp));
void clip_mch_request_selection __ARGS((VimClipboard *cbd));
void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
void clip_mch_set_selection __ARGS((VimClipboard *cbd));
--- 22,35 ----
int can_end_termcap_mode __ARGS((int give_msg));
int mch_screenmode __ARGS((char_u *arg));
int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
! int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
! int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
int clip_mch_own_selection __ARGS((VimClipboard *cbd));
void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
! short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
! char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
void clip_mch_request_selection __ARGS((VimClipboard *cbd));
void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
void clip_mch_set_selection __ARGS((VimClipboard *cbd));
*** ../vim-7.2.048/src/version.c Thu Nov 20 16:11:03 2008
--- src/version.c Thu Nov 20 17:08:07 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 49,
/**/
--
FIRST HEAD: All right! All right! We'll kill him first and then have tea and
biscuits.
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.050 ---
To: vim-dev at vim.org
Subject: Patch 7.2.050
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.050
Problem: Warnings for not checking return value of fwrite(). (Chip Campbell)
Solution: Use the return value.
Files: src/spell.c
*** ../vim-7.2.049/src/spell.c Mon Aug 25 04:12:38 2008
--- src/spell.c Thu Nov 20 17:28:01 2008
***************
*** 7926,7931 ****
--- 7926,7933 ----
char_u *p;
int rr;
int retval = OK;
+ int fwv = 1; /* collect return value of fwrite() to avoid
+ warnings from picky compiler */
fd = mch_fopen((char *)fname, "w");
if (fd == NULL)
***************
*** 7936,7946 ****
/* <HEADER>: <fileID> <versionnr> */
/* <fileID> */
! if (fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd) != 1)
! {
! EMSG(_(e_write));
! retval = FAIL;
! }
putc(VIMSPELLVERSION, fd); /* <versionnr> */
/*
--- 7938,7944 ----
/* <HEADER>: <fileID> <versionnr> */
/* <fileID> */
! fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd);
putc(VIMSPELLVERSION, fd); /* <versionnr> */
/*
***************
*** 7955,7961 ****
i = (int)STRLEN(spin->si_info);
put_bytes(fd, (long_u)i, 4); /* <sectionlen> */
! fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */
}
/* SN_REGION: <regionname> ...
--- 7953,7959 ----
i = (int)STRLEN(spin->si_info);
put_bytes(fd, (long_u)i, 4); /* <sectionlen> */
! fwv &= fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */
}
/* SN_REGION: <regionname> ...
***************
*** 7966,7972 ****
putc(SNF_REQUIRED, fd); /* <sectionflags> */
l = spin->si_region_count * 2;
put_bytes(fd, (long_u)l, 4); /* <sectionlen> */
! fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd);
/* <regionname> ... */
regionmask = (1 << spin->si_region_count) - 1;
}
--- 7964,7970 ----
putc(SNF_REQUIRED, fd); /* <sectionflags> */
l = spin->si_region_count * 2;
put_bytes(fd, (long_u)l, 4); /* <sectionlen> */
! fwv &= fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd);
/* <regionname> ... */
regionmask = (1 << spin->si_region_count) - 1;
}
***************
*** 8016,8022 ****
}
put_bytes(fd, (long_u)l, 2); /* <folcharslen> */
! fwrite(folchars, (size_t)l, (size_t)1, fd); /* <folchars> */
}
/* SN_MIDWORD: <midword> */
--- 8014,8020 ----
}
put_bytes(fd, (long_u)l, 2); /* <folcharslen> */
! fwv &= fwrite(folchars, (size_t)l, (size_t)1, fd); /* <folchars> */
}
/* SN_MIDWORD: <midword> */
***************
*** 8027,8033 ****
i = (int)STRLEN(spin->si_midword);
put_bytes(fd, (long_u)i, 4); /* <sectionlen> */
! fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); /* <midword> */
}
/* SN_PREFCOND: <prefcondcnt> <prefcond> ... */
--- 8025,8032 ----
i = (int)STRLEN(spin->si_midword);
put_bytes(fd, (long_u)i, 4); /* <sectionlen> */
! fwv &= fwrite(spin->si_midword, (size_t)i, (size_t)1, fd);
! /* <midword> */
}
/* SN_PREFCOND: <prefcondcnt> <prefcond> ... */
***************
*** 8113,8119 ****
p = rr == 1 ? ftp->ft_from : ftp->ft_to;
l = (int)STRLEN(p);
putc(l, fd);
! fwrite(p, l, (size_t)1, fd);
}
}
--- 8112,8118 ----
p = rr == 1 ? ftp->ft_from : ftp->ft_to;
l = (int)STRLEN(p);
putc(l, fd);
! fwv &= fwrite(p, l, (size_t)1, fd);
}
}
***************
*** 8131,8141 ****
/* <sectionlen> */
put_bytes(fd, (long_u)l, 2); /* <sofofromlen> */
! fwrite(spin->si_sofofr, l, (size_t)1, fd); /* <sofofrom> */
l = (int)STRLEN(spin->si_sofoto);
put_bytes(fd, (long_u)l, 2); /* <sofotolen> */
! fwrite(spin->si_sofoto, l, (size_t)1, fd); /* <sofoto> */
}
/* SN_WORDS: <word> ...
--- 8130,8140 ----
/* <sectionlen> */
put_bytes(fd, (long_u)l, 2); /* <sofofromlen> */
! fwv &= fwrite(spin->si_sofofr, l, (size_t)1, fd); /* <sofofrom> */
l = (int)STRLEN(spin->si_sofoto);
put_bytes(fd, (long_u)l, 2); /* <sofotolen> */
! fwv &= fwrite(spin->si_sofoto, l, (size_t)1, fd); /* <sofoto> */
}
/* SN_WORDS: <word> ...
***************
*** 8160,8166 ****
l = (int)STRLEN(hi->hi_key) + 1;
len += l;
if (round == 2) /* <word> */
! fwrite(hi->hi_key, (size_t)l, (size_t)1, fd);
--todo;
}
if (round == 1)
--- 8159,8165 ----
l = (int)STRLEN(hi->hi_key) + 1;
len += l;
if (round == 2) /* <word> */
! fwv &= fwrite(hi->hi_key, (size_t)l, (size_t)1, fd);
--todo;
}
if (round == 1)
***************
*** 8176,8182 ****
putc(0, fd); /* <sectionflags> */
l = spin->si_map.ga_len;
put_bytes(fd, (long_u)l, 4); /* <sectionlen> */
! fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);
/* <mapstr> */
}
--- 8175,8181 ----
putc(0, fd); /* <sectionflags> */
l = spin->si_map.ga_len;
put_bytes(fd, (long_u)l, 4); /* <sectionlen> */
! fwv &= fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);
/* <mapstr> */
}
***************
*** 8232,8241 ****
{
p = ((char_u **)(spin->si_comppat.ga_data))[i];
putc((int)STRLEN(p), fd); /* <comppatlen> */
! fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);/* <comppattext> */
}
/* <compflags> */
! fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),
(size_t)1, fd);
}
--- 8231,8241 ----
{
p = ((char_u **)(spin->si_comppat.ga_data))[i];
putc((int)STRLEN(p), fd); /* <comppatlen> */
! fwv &= fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);
! /* <comppattext> */
}
/* <compflags> */
! fwv &= fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),
(size_t)1, fd);
}
***************
*** 8259,8265 ****
l = (int)STRLEN(spin->si_syllable);
put_bytes(fd, (long_u)l, 4); /* <sectionlen> */
! fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); /* <syllable> */
}
/* end of <SECTIONS> */
--- 8259,8266 ----
l = (int)STRLEN(spin->si_syllable);
put_bytes(fd, (long_u)l, 4); /* <sectionlen> */
! fwv &= fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd);
! /* <syllable> */
}
/* end of <SECTIONS> */
***************
*** 8295,8307 ****
(void)put_node(fd, tree, 0, regionmask, round == 3);
}
! /* Write another byte to check for errors. */
if (putc(0, fd) == EOF)
retval = FAIL;
if (fclose(fd) == EOF)
retval = FAIL;
return retval;
}
--- 8296,8313 ----
(void)put_node(fd, tree, 0, regionmask, round == 3);
}
! /* Write another byte to check for errors (file system full). */
if (putc(0, fd) == EOF)
retval = FAIL;
if (fclose(fd) == EOF)
retval = FAIL;
+ if (fwv != 1)
+ retval = FAIL;
+ if (retval == FAIL)
+ EMSG(_(e_write));
+
return retval;
}
***************
*** 9890,9895 ****
--- 9896,9902 ----
char_u *p;
int len;
int totlen;
+ int x = 1; /* collect return value of fwrite() */
if (fd != NULL)
put_bytes(fd, (long_u)gap->ga_len, 2); /* <prefcondcnt> */
***************
*** 9906,9912 ****
if (fd != NULL)
{
fputc(len, fd);
! fwrite(p, (size_t)len, (size_t)1, fd);
}
totlen += len;
}
--- 9913,9919 ----
if (fd != NULL)
{
fputc(len, fd);
! x &= fwrite(p, (size_t)len, (size_t)1, fd);
}
totlen += len;
}
*** ../vim-7.2.049/src/version.c Thu Nov 20 17:09:09 2008
--- src/version.c Fri Nov 28 10:06:13 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 50,
/**/
--
You got to work at a mill? Lucky! I got sent back to work in the
acid-mines for my daily crust of stale bread... which not even the
birds would eat.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.051 ---
To: vim-dev at vim.org
Subject: Patch 7.2.051
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.051
Problem: Can't avoid 'wildignore' and 'suffixes' for glob() and globpath().
Solution: Add an extra argument to these functions. (Ingo Karkat)
Files: src/eval.c, src/ex_getln.c, src/proto/ex_getln.pro,
runtime/doc/eval.txt, runtime/doc/options.txt
*** ../vim-7.2.050/src/eval.c Thu Nov 20 16:11:03 2008
--- src/eval.c Thu Nov 27 22:15:40 2008
***************
*** 7564,7571 ****
{"getwinposx", 0, 0, f_getwinposx},
{"getwinposy", 0, 0, f_getwinposy},
{"getwinvar", 2, 2, f_getwinvar},
! {"glob", 1, 1, f_glob},
! {"globpath", 2, 2, f_globpath},
{"has", 1, 1, f_has},
{"has_key", 2, 2, f_has_key},
{"haslocaldir", 0, 0, f_haslocaldir},
--- 7564,7571 ----
{"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},
{"haslocaldir", 0, 0, f_haslocaldir},
***************
*** 9557,9563 ****
else
{
/* When the optional second argument is non-zero, don't remove matches
! * for 'suffixes' and 'wildignore' */
if (argvars[1].v_type != VAR_UNKNOWN
&& get_tv_number_chk(&argvars[1], &error))
flags |= WILD_KEEP_ALL;
--- 9557,9563 ----
else
{
/* 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))
flags |= WILD_KEEP_ALL;
***************
*** 11323,11335 ****
typval_T *argvars;
typval_T *rettv;
{
expand_T xpc;
! ExpandInit(&xpc);
! xpc.xp_context = EXPAND_FILES;
! rettv->v_type = VAR_STRING;
! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
! NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
}
/*
--- 11323,11347 ----
typval_T *argvars;
typval_T *rettv;
{
+ int flags = WILD_SILENT|WILD_USE_NL;
expand_T xpc;
+ 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))
! flags |= WILD_KEEP_ALL;
! rettv->v_type = VAR_STRING;
! if (!error)
! {
! ExpandInit(&xpc);
! xpc.xp_context = EXPAND_FILES;
! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
! NULL, flags, WILD_ALL);
! }
! else
! rettv->vval.v_string = NULL;
}
/*
***************
*** 11340,11353 ****
typval_T *argvars;
typval_T *rettv;
{
char_u buf1[NUMBUFLEN];
char_u *file = get_tv_string_buf_chk(&argvars[1], buf1);
rettv->v_type = VAR_STRING;
! if (file == NULL)
rettv->vval.v_string = NULL;
else
! rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file);
}
/*
--- 11352,11373 ----
typval_T *argvars;
typval_T *rettv;
{
+ int flags = 0;
char_u buf1[NUMBUFLEN];
char_u *file = get_tv_string_buf_chk(&argvars[1], buf1);
+ 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[2].v_type != VAR_UNKNOWN
+ && get_tv_number_chk(&argvars[2], &error))
+ flags |= WILD_KEEP_ALL;
rettv->v_type = VAR_STRING;
! if (file == NULL || error)
rettv->vval.v_string = NULL;
else
! rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file,
! flags);
}
/*
*** ../vim-7.2.050/src/ex_getln.c Sat Nov 15 14:10:23 2008
--- src/ex_getln.c Thu Nov 20 18:37:20 2008
***************
*** 2524,2530 ****
&& ccline.xpc->xp_context != EXPAND_NOTHING
&& ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
{
! int i = ccline.xpc->xp_pattern - p;
/* If xp_pattern points inside the old cmdbuff it needs to be adjusted
* to point into the newly allocated memory. */
--- 2524,2530 ----
&& ccline.xpc->xp_context != EXPAND_NOTHING
&& ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
{
! int i = (int)(ccline.xpc->xp_pattern - p);
/* If xp_pattern points inside the old cmdbuff it needs to be adjusted
* to point into the newly allocated memory. */
***************
*** 4897,4903 ****
if (s == NULL)
return FAIL;
sprintf((char *)s, "%s/%s*.vim", dirname, pat);
! all = globpath(p_rtp, s);
vim_free(s);
if (all == NULL)
return FAIL;
--- 4897,4903 ----
if (s == NULL)
return FAIL;
sprintf((char *)s, "%s/%s*.vim", dirname, pat);
! all = globpath(p_rtp, s, 0);
vim_free(s);
if (all == NULL)
return FAIL;
***************
*** 4938,4946 ****
* newlines. Returns NULL for an error or no matches.
*/
char_u *
! globpath(path, file)
char_u *path;
char_u *file;
{
expand_T xpc;
char_u *buf;
--- 4938,4947 ----
* newlines. Returns NULL for an error or no matches.
*/
char_u *
! globpath(path, file, expand_options)
char_u *path;
char_u *file;
+ int expand_options;
{
expand_T xpc;
char_u *buf;
***************
*** 4969,4978 ****
{
add_pathsep(buf);
STRCAT(buf, file);
! if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL
! && num_p > 0)
{
! ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT);
for (len = 0, i = 0; i < num_p; ++i)
len += (int)STRLEN(p[i]) + 1;
--- 4970,4979 ----
{
add_pathsep(buf);
STRCAT(buf, file);
! if (ExpandFromContext(&xpc, buf, &num_p, &p,
! WILD_SILENT|expand_options) != FAIL && num_p > 0)
{
! ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options);
for (len = 0, i = 0; i < num_p; ++i)
len += (int)STRLEN(p[i]) + 1;
*** ../vim-7.2.050/src/proto/ex_getln.pro Wed May 28 16:49:01 2008
--- src/proto/ex_getln.pro Thu Nov 20 18:27:57 2008
***************
*** 31,37 ****
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));
void init_history __ARGS((void));
int get_histtype __ARGS((char_u *name));
void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
--- 31,37 ----
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));
void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
*** ../vim-7.2.050/runtime/doc/eval.txt Sun Nov 9 13:43:25 2008
--- runtime/doc/eval.txt Thu Nov 27 22:17:13 2008
***************
*** 1,4 ****
! *eval.txt* For Vim version 7.2. Last change: 2008 Nov 02
VIM REFERENCE MANUAL by Bram Moolenaar
--- 1,4 ----
! *eval.txt* For Vim version 7.2. Last change: 2008 Nov 27
VIM REFERENCE MANUAL by Bram Moolenaar
***************
*** 1706,1712 ****
exists( {expr}) Number TRUE if {expr} exists
extend({expr1}, {expr2} [, {expr3}])
List/Dict insert items of {expr2} into {expr1}
! expand( {expr}) 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
--- 1709,1715 ----
exists( {expr}) Number TRUE if {expr} exists
extend({expr1}, {expr2} [, {expr3}])
List/Dict insert items of {expr2} into {expr1}
! 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
***************
*** 1758,1765 ****
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}) String expand file wildcards in {expr}
! globpath( {path}, {expr}) String do glob({expr}) for all dirs in {path}
has( {feature}) Number TRUE if feature {feature} supported
has_key( {dict}, {key}) Number TRUE if {dict} has entry {key}
haslocaldir() Number TRUE if current window executed |:lcd|
--- 1761,1769 ----
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
has_key( {dict}, {key}) Number TRUE if {dict} has entry {key}
haslocaldir() Number TRUE if current window executed |:lcd|
***************
*** 3286,3299 ****
:let list_is_on = getwinvar(2, '&list')
:echo "myvar = " . getwinvar(1, 'myvar')
<
! *glob()*
! glob({expr}) 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.
! The 'wildignore' option applies: Names matching one of the
! patterns in 'wildignore' will be skipped.
If the expansion fails, the result is an empty string.
A name for a non-existing file is not included.
--- 3290,3305 ----
: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.
***************
*** 3307,3326 ****
See |expand()| for expanding special Vim variables. See
|system()| for getting the raw output of an external command.
! globpath({path}, {expr}) *globpath()*
Perform glob() on all directories in {path} and concatenate
the results. Example: >
:echo globpath(&rtp, "syntax/c.vim")
< {path} is a comma-separated list of directory names. Each
directory name is prepended to {expr} and expanded like with
! glob(). A path separator is inserted when needed.
To add a comma inside a directory name escape it with a
backslash. Note that on MS-Windows a directory may have a
trailing backslash, remove it if you put a comma after it.
If the expansion fails for one of the directories, there is no
error message.
! The 'wildignore' option applies: Names matching one of the
! patterns in 'wildignore' will be skipped.
The "**" item can be used to search in a directory tree.
For example, to find all "README.txt" files in the directories
--- 3313,3334 ----
See |expand()| for expanding special Vim variables. See
|system()| for getting the raw output of an external command.
! globpath({path}, {expr} [, {flag}]) *globpath()*
Perform glob() on all directories in {path} and concatenate
the results. Example: >
:echo globpath(&rtp, "syntax/c.vim")
< {path} is a comma-separated list of directory names. Each
directory name is prepended to {expr} and expanded like with
! |glob()|. A path separator is inserted when needed.
To add a comma inside a directory name escape it with a
backslash. Note that on MS-Windows a directory may have a
trailing backslash, remove it if you put a comma after it.
If the expansion fails for one of the directories, there is no
error message.
! 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.
The "**" item can be used to search in a directory tree.
For example, to find all "README.txt" files in the directories
*** ../vim-7.2.050/runtime/doc/options.txt Sat Aug 9 19:36:49 2008
--- runtime/doc/options.txt Tue Nov 25 23:43:55 2008
***************
*** 1,4 ****
! *options.txt* For Vim version 7.2. Last change: 2008 Aug 06
VIM REFERENCE MANUAL by Bram Moolenaar
--- 1,4 ----
! *options.txt* For Vim version 7.2. Last change: 2008 Nov 25
VIM REFERENCE MANUAL by Bram Moolenaar
***************
*** 7472,7478 ****
{not available when compiled without the |+wildignore|
feature}
A list of file patterns. A file that matches with one of these
! patterns is ignored when completing file or directory names.
The pattern is used like with |:autocmd|, see |autocmd-patterns|.
Also see 'suffixes'.
Example: >
--- 7481,7489 ----
{not available when compiled without the |+wildignore|
feature}
A list of file patterns. A file that matches with one of these
! patterns is ignored when completing file or directory names, and
! influences the result of |expand()|, |glob()| and |globpath()| unless
! a flag is passed to disable this.
The pattern is used like with |:autocmd|, see |autocmd-patterns|.
Also see 'suffixes'.
Example: >
*** ../vim-7.2.050/src/version.c Fri Nov 28 10:08:05 2008
--- src/version.c Fri Nov 28 10:55:44 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 51,
/**/
--
Not too long ago, unzipping in public was illegal...
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.052 ---
To: vim-dev at vim.org
Subject: Patch 7.2.052
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.052
Problem: synIDattr() doesn't support "sp" for special color.
Solution: Recognize "sp" and "sp#". (Matt Wozniski)
Files: runtime/doc/eval.txt, src/eval.c
*** ../vim-7.2.051/runtime/doc/eval.txt Fri Nov 28 10:59:57 2008
--- runtime/doc/eval.txt Thu Nov 27 22:17:13 2008
***************
*** 5348,5357 ****
"fg" foreground color (GUI: color name used to set
the color, cterm: color number as a string,
term: empty string)
! "bg" background color (like "fg")
"fg#" like "fg", but for the GUI and the GUI is
running the name in "#RRGGBB" form
"bg#" like "fg#" for "bg"
"bold" "1" if bold
"italic" "1" if italic
"reverse" "1" if reverse
--- 5359,5370 ----
"fg" foreground color (GUI: color name used to set
the color, cterm: color number as a string,
term: empty string)
! "bg" background color (as with "fg")
! "sp" special color (as with "fg") |highlight-guisp|
"fg#" like "fg", but for the GUI and the GUI is
running the name in "#RRGGBB" form
"bg#" like "fg#" for "bg"
+ "sp#" like "fg#" for "sp"
"bold" "1" if bold
"italic" "1" if italic
"reverse" "1" if reverse
*** ../vim-7.2.051/src/eval.c Fri Nov 28 10:59:57 2008
--- src/eval.c Thu Nov 27 22:15:40 2008
***************
*** 16648,16655 ****
p = highlight_has_attr(id, HL_INVERSE, modec);
break;
! case 's': /* standout */
! p = highlight_has_attr(id, HL_STANDOUT, modec);
break;
case 'u':
--- 16648,16658 ----
p = highlight_has_attr(id, HL_INVERSE, modec);
break;
! case 's':
! if (TOLOWER_ASC(what[1]) == 'p') /* sp[#] */
! p = highlight_color(id, what, modec);
! else /* standout */
! p = highlight_has_attr(id, HL_STANDOUT, modec);
break;
case 'u':
*** ../vim-7.2.051/src/version.c Fri Nov 28 10:59:57 2008
--- src/version.c Fri Nov 28 11:13:45 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 52,
/**/
--
Not too long ago, a keyboard was something to make music with...
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.053 ---
To: vim-dev at vim.org
Subject: Patch 7.2.053
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.053
Problem: Crash when using WorkShop command ":ws foo". (Dominique Pelle)
Solution: Avoid using a NULL pointer.
Files: src/workshop.c
*** ../vim-7.2.052/src/workshop.c Tue Jun 24 23:34:50 2008
--- src/workshop.c Thu Nov 27 22:31:27 2008
***************
*** 1121,1128 ****
? (char *)curbuf->b_sfname : "<None>");
#endif
! strcpy(ffname, (char *) curbuf->b_ffname);
! *filename = ffname; /* copy so nobody can change b_ffname */
*curLine = curwin->w_cursor.lnum;
*curCol = curwin->w_cursor.col;
--- 1121,1132 ----
? (char *)curbuf->b_sfname : "<None>");
#endif
! if (curbuf->b_ffname == NULL)
! ffname[0] = NUL;
! else
! /* copy so nobody can change b_ffname */
! strcpy(ffname, (char *) curbuf->b_ffname);
! *filename = ffname;
*curLine = curwin->w_cursor.lnum;
*curCol = curwin->w_cursor.col;
*** ../vim-7.2.052/src/version.c Fri Nov 28 11:15:10 2008
--- src/version.c Fri Nov 28 11:44:23 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 53,
/**/
--
What the word 'politics' means: 'Poli' in Latin meaning 'many' and 'tics'
meaning 'bloodsucking creatures'.
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.054 ---
To: vim-dev at vim.org
Subject: Patch 7.2.054
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.054
Problem: Compilation warnings for format in getchar.c.
Solution: Use fputs() instead of fprintf(). (Dominique Pelle)
Files: src/getchar.c
*** ../vim-7.2.053/src/getchar.c Tue Jul 22 18:58:23 2008
--- src/getchar.c Thu Nov 27 22:38:24 2008
***************
*** 4702,4708 ****
return FAIL;
if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0)
return FAIL;
! if (fprintf(fd, cmd) < 0)
return FAIL;
if (buf != NULL && fputs(" <buffer>", fd) < 0)
return FAIL;
--- 4702,4708 ----
return FAIL;
if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0)
return FAIL;
! if (fputs(cmd, fd) < 0)
return FAIL;
if (buf != NULL && fputs(" <buffer>", fd) < 0)
return FAIL;
***************
*** 4801,4807 ****
}
if (IS_SPECIAL(c) || modifiers) /* special key */
{
! if (fprintf(fd, (char *)get_special_key_name(c, modifiers)) < 0)
return FAIL;
continue;
}
--- 4801,4807 ----
}
if (IS_SPECIAL(c) || modifiers) /* special key */
{
! if (fputs((char *)get_special_key_name(c, modifiers), fd) < 0)
return FAIL;
continue;
}
*** ../vim-7.2.053/src/version.c Fri Nov 28 11:47:14 2008
--- src/version.c Fri Nov 28 12:02:48 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 54,
/**/
--
Not too long ago, compress was something you did to garbage...
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.055 ---
To: vim-dev at vim.org
Subject: Patch 7.2.055
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.055
Problem: Various compiler warnings with strict checking.
Solution: Avoid the warnings by using return values and renaming.
Files: src/diff.c, src/eval.c, src/ex_cmds.c, src/ex_docmd.c,
src/fileio.c, src/fold.c, src/globals.h, src/gui.c,
src/gui_at_sb.c, src/gui_gtk_x11.c, src/gui_xmdlg.c,
src/gui_xmebw.c, src/main.c, src/mbyte.c, src/message.c,
src/netbeans.c, src/option.c, src/os_unix.c, src/spell.c,
src/ui.c, src/window.c
*** ../vim-7.2.054/src/diff.c Fri Jan 18 17:39:32 2008
--- src/diff.c Fri Nov 28 17:23:35 2008
***************
*** 661,666 ****
--- 665,671 ----
char_u *tmp_diff;
FILE *fd;
int ok;
+ int io_error = FALSE;
/* Delete all diffblocks. */
diff_clear(curtab);
***************
*** 697,714 ****
{
ok = FALSE;
fd = mch_fopen((char *)tmp_orig, "w");
! if (fd != NULL)
{
! fwrite("line1\n", (size_t)6, (size_t)1, fd);
fclose(fd);
fd = mch_fopen((char *)tmp_new, "w");
! if (fd != NULL)
{
! fwrite("line2\n", (size_t)6, (size_t)1, fd);
fclose(fd);
diff_file(tmp_orig, tmp_new, tmp_diff);
fd = mch_fopen((char *)tmp_diff, "r");
! if (fd != NULL)
{
char_u linebuf[LBUFLEN];
--- 702,727 ----
{
ok = FALSE;
fd = mch_fopen((char *)tmp_orig, "w");
! if (fd == NULL)
! io_error = TRUE;
! else
{
! if (fwrite("line1\n", (size_t)6, (size_t)1, fd) != 1)
! io_error = TRUE;
fclose(fd);
fd = mch_fopen((char *)tmp_new, "w");
! if (fd == NULL)
! io_error = TRUE;
! else
{
! if (fwrite("line2\n", (size_t)6, (size_t)1, fd) != 1)
! io_error = TRUE;
fclose(fd);
diff_file(tmp_orig, tmp_new, tmp_diff);
fd = mch_fopen((char *)tmp_diff, "r");
! if (fd == NULL)
! io_error = TRUE;
! else
{
char_u linebuf[LBUFLEN];
***************
*** 761,766 ****
--- 774,781 ----
}
if (!ok)
{
+ if (io_error)
+ EMSG(_("E810: Cannot read or write temp files"));
EMSG(_("E97: Cannot create diffs"));
diff_a_works = MAYBE;
#if defined(MSWIN) || defined(MSDOS)
***************
*** 925,934 ****
{
# ifdef TEMPDIRNAMES
if (vim_tempdir != NULL)
! mch_chdir((char *)vim_tempdir);
else
# endif
! mch_chdir("/tmp");
shorten_fnames(TRUE);
}
#endif
--- 940,949 ----
{
# ifdef TEMPDIRNAMES
if (vim_tempdir != NULL)
! ignored = mch_chdir((char *)vim_tempdir);
else
# endif
! ignored = mch_chdir("/tmp");
shorten_fnames(TRUE);
}
#endif
*** ../vim-7.2.054/src/eval.c Fri Nov 28 11:15:10 2008
--- src/eval.c Fri Nov 28 12:23:13 2008
***************
*** 10641,10647 ****
# ifdef FEAT_WINDOWS
win_T *wp;
# endif
! int n = 1;
if (row >= 0 && col >= 0)
{
--- 10641,10647 ----
# ifdef FEAT_WINDOWS
win_T *wp;
# endif
! int winnr = 1;
if (row >= 0 && col >= 0)
{
***************
*** 10651,10659 ****
(void)mouse_comp_pos(win, &row, &col, &lnum);
# ifdef FEAT_WINDOWS
for (wp = firstwin; wp != win; wp = wp->w_next)
! ++n;
# endif
! vimvars[VV_MOUSE_WIN].vv_nr = n;
vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
vimvars[VV_MOUSE_COL].vv_nr = col + 1;
}
--- 10651,10659 ----
(void)mouse_comp_pos(win, &row, &col, &lnum);
# ifdef FEAT_WINDOWS
for (wp = firstwin; wp != win; wp = wp->w_next)
! ++winnr;
# endif
! vimvars[VV_MOUSE_WIN].vv_nr = winnr;
vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
vimvars[VV_MOUSE_COL].vv_nr = col + 1;
}
*** ../vim-7.2.054/src/ex_cmds.c Sat Nov 15 14:10:23 2008
--- src/ex_cmds.c Fri Nov 28 17:24:08 2008
***************
*** 1941,1947 ****
* root.
*/
if (fp_out != NULL)
! (void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
#endif
}
}
--- 1941,1947 ----
* root.
*/
if (fp_out != NULL)
! ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
#endif
}
}
*** ../vim-7.2.054/src/ex_docmd.c Sat Nov 15 14:10:23 2008
--- src/ex_docmd.c Fri Nov 28 17:26:13 2008
***************
*** 8753,8760 ****
else if (*dirnow != NUL
&& (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
{
! (void)mch_chdir((char *)globaldir);
! shorten_fnames(TRUE);
}
failed |= (makeopens(fd, dirnow) == FAIL);
--- 8753,8760 ----
else if (*dirnow != NUL
&& (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
{
! if (mch_chdir((char *)globaldir) == OK)
! shorten_fnames(TRUE);
}
failed |= (makeopens(fd, dirnow) == FAIL);
*** ../vim-7.2.054/src/fileio.c Wed Nov 12 16:04:43 2008
--- src/fileio.c Fri Nov 28 17:35:54 2008
***************
*** 2214,2220 ****
{
/* Use stderr for stdin, makes shell commands work. */
close(0);
! dup(2);
}
#endif
--- 2214,2220 ----
{
/* Use stderr for stdin, makes shell commands work. */
close(0);
! ignored = dup(2);
}
#endif
***************
*** 3449,3455 ****
{
# ifdef UNIX
# ifdef HAVE_FCHOWN
! fchown(fd, st_old.st_uid, st_old.st_gid);
# endif
if (mch_stat((char *)IObuff, &st) < 0
|| st.st_uid != st_old.st_uid
--- 3449,3455 ----
{
# ifdef UNIX
# ifdef HAVE_FCHOWN
! ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
# endif
if (mch_stat((char *)IObuff, &st) < 0
|| st.st_uid != st_old.st_uid
***************
*** 4365,4371 ****
|| st.st_uid != st_old.st_uid
|| st.st_gid != st_old.st_gid)
{
! fchown(fd, st_old.st_uid, st_old.st_gid);
if (perm >= 0) /* set permission again, may have changed */
(void)mch_setperm(wfname, perm);
}
--- 4365,4371 ----
|| st.st_uid != st_old.st_uid
|| st.st_gid != st_old.st_gid)
{
! ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
if (perm >= 0) /* set permission again, may have changed */
(void)mch_setperm(wfname, perm);
}
***************
*** 6030,6038 ****
{
tbuf[FGETS_SIZE - 2] = NUL;
#ifdef USE_CR
! fgets_cr((char *)tbuf, FGETS_SIZE, fp);
#else
! fgets((char *)tbuf, FGETS_SIZE, fp);
#endif
} while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
}
--- 6030,6038 ----
{
tbuf[FGETS_SIZE - 2] = NUL;
#ifdef USE_CR
! ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
#else
! ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
#endif
} while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
}
*** ../vim-7.2.054/src/fold.c Wed Aug 6 18:59:40 2008
--- src/fold.c Fri Nov 28 12:24:16 2008
***************
*** 48,54 ****
static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp));
static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum));
static void checkupdate __ARGS((win_T *wp));
! static void setFoldRepeat __ARGS((linenr_T lnum, long count, int open));
static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep));
static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep));
static void foldOpenNested __ARGS((fold_T *fpr));
--- 48,54 ----
static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp));
static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum));
static void checkupdate __ARGS((win_T *wp));
! static void setFoldRepeat __ARGS((linenr_T lnum, long count, int do_open));
static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep));
static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep));
static void foldOpenNested __ARGS((fold_T *fpr));
***************
*** 1241,1250 ****
* Repeat "count" times.
*/
static void
! setFoldRepeat(lnum, count, open)
linenr_T lnum;
long count;
! int open;
{
int done;
long n;
--- 1241,1250 ----
* Repeat "count" times.
*/
static void
! setFoldRepeat(lnum, count, do_open)
linenr_T lnum;
long count;
! int do_open;
{
int done;
long n;
***************
*** 1252,1258 ****
for (n = 0; n < count; ++n)
{
done = DONE_NOTHING;
! (void)setManualFold(lnum, open, FALSE, &done);
if (!(done & DONE_ACTION))
{
/* Only give an error message when no fold could be opened. */
--- 1252,1258 ----
for (n = 0; n < count; ++n)
{
done = DONE_NOTHING;
! (void)setManualFold(lnum, do_open, FALSE, &done);
if (!(done & DONE_ACTION))
{
/* Only give an error message when no fold could be opened. */
*** ../vim-7.2.054/src/globals.h Thu Sep 18 21:29:07 2008
--- src/globals.h Fri Nov 28 17:35:50 2008
***************
*** 1549,1554 ****
--- 1549,1562 ----
EXTERN time_t starttime;
/*
+ * Some compilers warn for not using a return value, but in some situations we
+ * can't do anything useful with the value. Assign to this variable to avoid
+ * the warning.
+ */
+ EXTERN int ignored;
+ EXTERN char *ignoredp;
+
+ /*
* Optional Farsi support. Include it here, so EXTERN and INIT are defined.
*/
#ifdef FEAT_FKMAP
*** ../vim-7.2.054/src/gui.c Wed Aug 6 14:37:26 2008
--- src/gui.c Fri Nov 28 18:48:31 2008
***************
*** 139,145 ****
/* The read returns when the child closes the pipe (or when
* the child dies for some reason). */
close(pipefd[1]);
! (void)read(pipefd[0], &dummy, (size_t)1);
close(pipefd[0]);
}
--- 139,145 ----
/* 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]);
}
*** ../vim-7.2.054/src/gui_at_sb.c Sun Jun 13 21:37:13 2004
--- src/gui_at_sb.c Fri Nov 28 12:19:19 2008
***************
*** 1078,1083 ****
--- 1078,1089 ----
Cardinal *num_params; /* unused */
{
ScrollbarWidget sbw = (ScrollbarWidget)w;
+ /* Use a union to avoid a warning for the weird conversion from float to
+ * XtPointer. Comes from Xaw/Scrollbar.c. */
+ union {
+ XtPointer xtp;
+ float xtf;
+ } xtpf;
if (LookAhead(w, event))
return;
***************
*** 1085,1091 ****
/* thumbProc is not pretty, but is necessary for backwards
compatibility on those architectures for which it work{s,ed};
the intent is to pass a (truncated) float by value. */
! XtCallCallbacks(w, XtNthumbProc, *(XtPointer*)&sbw->scrollbar.top);
XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top);
}
--- 1091,1098 ----
/* thumbProc is not pretty, but is necessary for backwards
compatibility on those architectures for which it work{s,ed};
the intent is to pass a (truncated) float by value. */
! xtpf.xtf = sbw->scrollbar.top;
! XtCallCallbacks(w, XtNthumbProc, xtpf.xtp);
XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top);
}
*** ../vim-7.2.054/src/gui_gtk_x11.c Tue Jul 8 12:46:08 2008
--- src/gui_gtk_x11.c Fri Nov 28 21:06:38 2008
***************
*** 4070,4083 ****
if (mask & (XValue | YValue))
{
! int w, h;
! gui_mch_get_screen_dimensions(&w, &h);
! h += p_ghr + get_menu_tool_height();
! w += get_menu_tool_width();
if (mask & XNegative)
! x += w - pixel_width;
if (mask & YNegative)
! y += h - pixel_height;
#ifdef HAVE_GTK2
gtk_window_move(GTK_WINDOW(gui.mainwin), x, y);
#else
--- 4070,4083 ----
if (mask & (XValue | YValue))
{
! int ww, hh;
! gui_mch_get_screen_dimensions(&ww, &hh);
! hh += p_ghr + get_menu_tool_height();
! ww += get_menu_tool_width();
if (mask & XNegative)
! x += ww - pixel_width;
if (mask & YNegative)
! y += hh - pixel_height;
#ifdef HAVE_GTK2
gtk_window_move(GTK_WINDOW(gui.mainwin), x, y);
#else
*** ../vim-7.2.054/src/gui_xmdlg.c Tue Jun 24 23:39:32 2008
--- src/gui_xmdlg.c Fri Nov 28 21:04:08 2008
***************
*** 369,378 ****
char buf[TEMP_BUF_SIZE];
XmString items[MAX_ENTRIES_IN_LIST];
int i;
! int index;
! for (index = (int)ENCODING; index < (int)NONE; ++index)
! count[index] = 0;
/* First we insert the wild char into every single list. */
if (fix != ENCODING)
--- 369,378 ----
char buf[TEMP_BUF_SIZE];
XmString items[MAX_ENTRIES_IN_LIST];
int i;
! int idx;
! for (idx = (int)ENCODING; idx < (int)NONE; ++idx)
! count[idx] = 0;
/* First we insert the wild char into every single list. */
if (fix != ENCODING)
***************
*** 503,516 ****
/*
* Now loop trough the remaining lists and set them up.
*/
! for (index = (int)NAME; index < (int)NONE; ++index)
{
Widget w;
! if (fix == (enum ListSpecifier)index)
continue;
! switch ((enum ListSpecifier)index)
{
case NAME:
w = data->list[NAME];
--- 503,516 ----
/*
* Now loop trough the remaining lists and set them up.
*/
! for (idx = (int)NAME; idx < (int)NONE; ++idx)
{
Widget w;
! if (fix == (enum ListSpecifier)idx)
continue;
! switch ((enum ListSpecifier)idx)
{
case NAME:
w = data->list[NAME];
***************
*** 525,545 ****
w = (Widget)0; /* for lint */
}
! for (i = 0; i < count[index]; ++i)
{
! items[i] = XmStringCreateLocalized(list[index][i]);
! XtFree(list[index][i]);
}
XmListDeleteAllItems(w);
! XmListAddItems(w, items, count[index], 1);
! if (data->sel[index])
{
XmStringFree(items[0]);
! items[0] = XmStringCreateLocalized(data->sel[index]);
XmListSelectItem(w, items[0], False);
XmListSetBottomItem(w, items[0]);
}
! for (i = 0; i < count[index]; ++i)
XmStringFree(items[i]);
}
}
--- 525,545 ----
w = (Widget)0; /* for lint */
}
! for (i = 0; i < count[idx]; ++i)
{
! items[i] = XmStringCreateLocalized(list[idx][i]);
! XtFree(list[idx][i]);
}
XmListDeleteAllItems(w);
! XmListAddItems(w, items, count[idx], 1);
! if (data->sel[idx])
{
XmStringFree(items[0]);
! items[0] = XmStringCreateLocalized(data->sel[idx]);
XmListSelectItem(w, items[0], False);
XmListSetBottomItem(w, items[0]);
}
! for (i = 0; i < count[idx]; ++i)
XmStringFree(items[i]);
}
}
***************
*** 695,708 ****
int n;
XmString str;
Arg args[4];
! char *msg = _("no specific match");
n = 0;
! str = XmStringCreateLocalized(msg);
XtSetArg(args[n], XmNlabelString, str); ++n;
XtSetValues(data->sample, args, n);
apply_fontlist(data->sample);
! XmTextSetString(data->name, msg);
XmStringFree(str);
return False;
--- 695,708 ----
int n;
XmString str;
Arg args[4];
! char *nomatch_msg = _("no specific match");
n = 0;
! str = XmStringCreateLocalized(nomatch_msg);
XtSetArg(args[n], XmNlabelString, str); ++n;
XtSetValues(data->sample, args, n);
apply_fontlist(data->sample);
! XmTextSetString(data->name, nomatch_msg);
XmStringFree(str);
return False;
***************
*** 886,906 ****
{
int i;
int max;
! int index = 0;
int size;
! char str[128];
for (i = 0, max = 0; i < data->num; i++)
{
! get_part(fn(data, i), 7, str);
! size = atoi(str);
if ((size > max) && (size < MAX_DISPLAY_SIZE))
{
! index = i;
max = size;
}
}
! strcpy(big_font, fn(data, index));
}
data->old = XLoadQueryFont(XtDisplay(parent), big_font);
data->old_list = gui_motif_create_fontlist(data->old);
--- 886,906 ----
{
int i;
int max;
! int idx = 0;
int size;
! char buf[128];
for (i = 0, max = 0; i < data->num; i++)
{
! get_part(fn(data, i), 7, buf);
! size = atoi(buf);
if ((size > max) && (size < MAX_DISPLAY_SIZE))
{
! idx = i;
max = size;
}
}
! strcpy(big_font, fn(data, idx));
}
data->old = XLoadQueryFont(XtDisplay(parent), big_font);
data->old_list = gui_motif_create_fontlist(data->old);
***************
*** 1217,1244 ****
if (i != 0)
{
! char name[TEMP_BUF_SIZE];
! char style[TEMP_BUF_SIZE];
! char size[TEMP_BUF_SIZE];
! char encoding[TEMP_BUF_SIZE];
char *found;
found = names[0];
! name_part(found, name);
! style_part(found, style);
! size_part(found, size, data->in_pixels);
! encoding_part(found, encoding);
!
! if (strlen(name) > 0
! && strlen(style) > 0
! && strlen(size) > 0
! && strlen(encoding) > 0)
{
! data->sel[NAME] = XtNewString(name);
! data->sel[STYLE] = XtNewString(style);
! data->sel[SIZE] = XtNewString(size);
! data->sel[ENCODING] = XtNewString(encoding);
data->font_name = XtNewString(names[0]);
display_sample(data);
XmTextSetString(data->name, data->font_name);
--- 1217,1244 ----
if (i != 0)
{
! char namebuf[TEMP_BUF_SIZE];
! char stylebuf[TEMP_BUF_SIZE];
! char sizebuf[TEMP_BUF_SIZE];
! char encodingbuf[TEMP_BUF_SIZE];
char *found;
found = names[0];
! name_part(found, namebuf);
! style_part(found, stylebuf);
! size_part(found, sizebuf, data->in_pixels);
! encoding_part(found, encodingbuf);
!
! if (strlen(namebuf) > 0
! && strlen(stylebuf) > 0
! && strlen(sizebuf) > 0
! && strlen(encodingbuf) > 0)
{
! data->sel[NAME] = XtNewString(namebuf);
! data->sel[STYLE] = XtNewString(stylebuf);
! data->sel[SIZE] = XtNewString(sizebuf);
! data->sel[ENCODING] = XtNewString(encodingbuf);
data->font_name = XtNewString(names[0]);
display_sample(data);
XmTextSetString(data->name, data->font_name);
*** ../vim-7.2.054/src/gui_xmebw.c Thu Nov 8 20:48:14 2007
--- src/gui_xmebw.c Fri Nov 28 18:58:53 2008
***************
*** 1256,1262 ****
}
else
{
! int adjust = 0;
#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
/*
--- 1256,1262 ----
}
else
{
! adjust = 0;
#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
/*
***************
*** 1268,1279 ****
{
case XmEXTERNAL_HIGHLIGHT:
adjust = (eb->primitive.highlight_thickness -
! (eb->pushbutton.default_button_shadow_thickness ?
! Xm3D_ENHANCE_PIXEL : 0));
break;
case XmINTERNAL_HIGHLIGHT:
- adjust = 0;
break;
default:
--- 1268,1278 ----
{
case XmEXTERNAL_HIGHLIGHT:
adjust = (eb->primitive.highlight_thickness -
! (eb->pushbutton.default_button_shadow_thickness
! ? Xm3D_ENHANCE_PIXEL : 0));
break;
case XmINTERNAL_HIGHLIGHT:
break;
default:
*** ../vim-7.2.054/src/main.c Thu Nov 20 14:11:47 2008
--- src/main.c Fri Nov 28 18:32:48 2008
***************
*** 2372,2378 ****
* Is there any other system that cannot do this?
*/
close(0);
! dup(2);
#endif
}
--- 2372,2378 ----
* Is there any other system that cannot do this?
*/
close(0);
! ignored = dup(2);
#endif
}
*** ../vim-7.2.054/src/mbyte.c Thu Nov 20 17:09:09 2008
--- src/mbyte.c Fri Nov 28 18:44:05 2008
***************
*** 717,723 ****
* where mblen() returns 0 for invalid character.
* Therefore, following condition includes 0.
*/
! (void)mblen(NULL, 0); /* First reset the state. */
if (mblen(buf, (size_t)1) <= 0)
n = 2;
else
--- 717,723 ----
* where mblen() returns 0 for invalid character.
* Therefore, following condition includes 0.
*/
! ignored = mblen(NULL, 0); /* First reset the state. */
if (mblen(buf, (size_t)1) <= 0)
n = 2;
else
***************
*** 5278,5284 ****
/*ARGSUSED*/
static void
! preedit_start_cbproc(XIC xic, XPointer client_data, XPointer call_data)
{
#ifdef XIM_DEBUG
xim_log("xim_decide_input_style()\n");
--- 5278,5284 ----
/*ARGSUSED*/
static void
! preedit_start_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
{
#ifdef XIM_DEBUG
xim_log("xim_decide_input_style()\n");
***************
*** 5312,5318 ****
/*ARGSUSED*/
static void
! preedit_draw_cbproc(XIC xic, XPointer client_data, XPointer call_data)
{
XIMPreeditDrawCallbackStruct *draw_data;
XIMText *text;
--- 5312,5318 ----
/*ARGSUSED*/
static void
! preedit_draw_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
{
XIMPreeditDrawCallbackStruct *draw_data;
XIMText *text;
***************
*** 5453,5459 ****
/*ARGSUSED*/
static void
! preedit_caret_cbproc(XIC xic, XPointer client_data, XPointer call_data)
{
#ifdef XIM_DEBUG
xim_log("preedit_caret_cbproc()\n");
--- 5453,5459 ----
/*ARGSUSED*/
static void
! preedit_caret_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
{
#ifdef XIM_DEBUG
xim_log("preedit_caret_cbproc()\n");
***************
*** 5462,5468 ****
/*ARGSUSED*/
static void
! preedit_done_cbproc(XIC xic, XPointer client_data, XPointer call_data)
{
#ifdef XIM_DEBUG
xim_log("preedit_done_cbproc()\n");
--- 5462,5468 ----
/*ARGSUSED*/
static void
! preedit_done_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
{
#ifdef XIM_DEBUG
xim_log("preedit_done_cbproc()\n");
*** ../vim-7.2.054/src/message.c Sun Jul 13 19:18:44 2008
--- src/message.c Fri Nov 28 12:26:56 2008
***************
*** 4585,4645 ****
if (remove_trailing_zeroes)
{
int i;
! char *p;
/* Using %g or %G: remove superfluous zeroes. */
if (fmt_spec == 'f')
! p = tmp + str_arg_l - 1;
else
{
! p = (char *)vim_strchr((char_u *)tmp,
fmt_spec == 'e' ? 'e' : 'E');
! if (p != NULL)
{
/* Remove superfluous '+' and leading
* zeroes from the exponent. */
! if (p[1] == '+')
{
/* Change "1.0e+07" to "1.0e07" */
! STRMOVE(p + 1, p + 2);
--str_arg_l;
}
! i = (p[1] == '-') ? 2 : 1;
! while (p[i] == '0')
{
/* Change "1.0e07" to "1.0e7" */
! STRMOVE(p + i, p + i + 1);
--str_arg_l;
}
! --p;
}
}
! if (p != NULL && !precision_specified)
/* Remove trailing zeroes, but keep the one
* just after a dot. */
! while (p > tmp + 2 && *p == '0' && p[-1] != '.')
{
! STRMOVE(p, p + 1);
! --p;
--str_arg_l;
}
}
else
{
! char *p;
/* Be consistent: some printf("%e") use 1.0e+12
* and some 1.0e+012. Remove one zero in the last
* case. */
! p = (char *)vim_strchr((char_u *)tmp,
fmt_spec == 'e' ? 'e' : 'E');
! if (p != NULL && (p[1] == '+' || p[1] == '-')
! && p[2] == '0'
! && vim_isdigit(p[3])
! && vim_isdigit(p[4]))
{
! STRMOVE(p + 2, p + 3);
--str_arg_l;
}
}
--- 4585,4646 ----
if (remove_trailing_zeroes)
{
int i;
! char *tp;
/* Using %g or %G: remove superfluous zeroes. */
if (fmt_spec == 'f')
! tp = tmp + str_arg_l - 1;
else
{
! tp = (char *)vim_strchr((char_u *)tmp,
fmt_spec == 'e' ? 'e' : 'E');
! if (tp != NULL)
{
/* Remove superfluous '+' and leading
* zeroes from the exponent. */
! if (tp[1] == '+')
{
/* Change "1.0e+07" to "1.0e07" */
! STRMOVE(tp + 1, tp + 2);
--str_arg_l;
}
! i = (tp[1] == '-') ? 2 : 1;
! while (tp[i] == '0')
{
/* Change "1.0e07" to "1.0e7" */
! STRMOVE(tp + i, tp + i + 1);
--str_arg_l;
}
! --tp;
}
}
! if (tp != NULL && !precision_specified)
/* Remove trailing zeroes, but keep the one
* just after a dot. */
! while (tp > tmp + 2 && *tp == '0'
! && tp[-1] != '.')
{
! STRMOVE(tp, tp + 1);
! --tp;
--str_arg_l;
}
}
else
{
! char *tp;
/* Be consistent: some printf("%e") use 1.0e+12
* and some 1.0e+012. Remove one zero in the last
* case. */
! tp = (char *)vim_strchr((char_u *)tmp,
fmt_spec == 'e' ? 'e' : 'E');
! if (tp != NULL && (tp[1] == '+' || tp[1] == '-')
! && tp[2] == '0'
! && vim_isdigit(tp[3])
! && vim_isdigit(tp[4]))
{
! STRMOVE(tp + 2, tp + 3);
--str_arg_l;
}
}
*** ../vim-7.2.054/src/netbeans.c Sat Nov 15 14:10:23 2008
--- src/netbeans.c Fri Nov 28 18:51:43 2008
***************
*** 1043,1049 ****
nbdebug(("EVT: %s", buf));
/* nb_send(buf, "netbeans_end"); avoid "write failed" messages */
if (sd >= 0)
! sock_write(sd, buf, (int)STRLEN(buf)); /* ignore errors */
}
}
--- 1043,1049 ----
nbdebug(("EVT: %s", buf));
/* nb_send(buf, "netbeans_end"); avoid "write failed" messages */
if (sd >= 0)
! ignored = sock_write(sd, buf, (int)STRLEN(buf));
}
}
***************
*** 2277,2285 ****
int serNum;
int localTypeNum;
int typeNum;
- # ifdef NBDEBUG
- int len;
- # endif
pos_T *pos;
if (buf == NULL || buf->bufp == NULL)
--- 2277,2282 ----
***************
*** 2303,2315 ****
pos = get_off_or_lnum(buf->bufp, &args);
cp = (char *)args;
! # ifdef NBDEBUG
! len =
! # endif
! strtol(cp, &cp, 10);
args = (char_u *)cp;
# ifdef NBDEBUG
! if (len != -1)
{
nbdebug((" partial line annotation -- Not Yet Implemented!\n"));
}
--- 2300,2309 ----
pos = get_off_or_lnum(buf->bufp, &args);
cp = (char *)args;
! ignored = (int)strtol(cp, &cp, 10);
args = (char_u *)cp;
# ifdef NBDEBUG
! if (ignored != -1)
{
nbdebug((" partial line annotation -- Not Yet Implemented!\n"));
}
*** ../vim-7.2.054/src/option.c Sun Nov 9 13:43:25 2008
--- src/option.c Fri Nov 28 12:27:34 2008
***************
*** 8232,8244 ****
{
if (number == 0 && string != NULL)
{
! int index;
/* Either we are given a string or we are setting option
* to zero. */
! for (index = 0; string[index] == '0'; ++index)
;
! if (string[index] != NUL || index == 0)
{
/* There's another character after zeros or the string
* is empty. In both cases, we are trying to set a
--- 8232,8244 ----
{
if (number == 0 && string != NULL)
{
! int idx;
/* Either we are given a string or we are setting option
* to zero. */
! for (idx = 0; string[idx] == '0'; ++idx)
;
! if (string[idx] != NUL || idx == 0)
{
/* There's another character after zeros or the string
* is empty. In both cases, we are trying to set a
*** ../vim-7.2.054/src/os_unix.c Wed Nov 12 14:09:38 2008
--- src/os_unix.c Fri Nov 28 18:39:55 2008
***************
*** 315,326 ****
{-1, "Unknown!", FALSE}
};
void
mch_write(s, len)
char_u *s;
int len;
{
! write(1, (char *)s, len);
if (p_wd) /* Unix is too fast, slow down a bit more */
RealWaitForChar(read_cmd_fd, p_wd, NULL);
}
--- 315,329 ----
{-1, "Unknown!", FALSE}
};
+ /*
+ * Write s[len] to the screen.
+ */
void
mch_write(s, len)
char_u *s;
int len;
{
! ignored = (int)write(1, (char *)s, len);
if (p_wd) /* Unix is too fast, slow down a bit more */
RealWaitForChar(read_cmd_fd, p_wd, NULL);
}
***************
*** 3927,3935 ****
*/
if (fd >= 0)
{
! dup(fd); /* To replace stdin (file descriptor 0) */
! dup(fd); /* To replace stdout (file descriptor 1) */
! dup(fd); /* To replace stderr (file descriptor 2) */
/* Don't need this now that we've duplicated it */
close(fd);
--- 3930,3938 ----
*/
if (fd >= 0)
{
! ignored = dup(fd); /* To replace stdin (fd 0) */
! ignored = dup(fd); /* To replace stdout (fd 1) */
! ignored = dup(fd); /* To replace stderr (fd 2) */
/* Don't need this now that we've duplicated it */
close(fd);
***************
*** 3997,4009 ****
/* set up stdin/stdout/stderr for the child */
close(0);
! dup(pty_slave_fd);
close(1);
! dup(pty_slave_fd);
if (gui.in_use)
{
close(2);
! dup(pty_slave_fd);
}
close(pty_slave_fd); /* has been dupped, close it now */
--- 4000,4012 ----
/* set up stdin/stdout/stderr for the child */
close(0);
! ignored = dup(pty_slave_fd);
close(1);
! ignored = dup(pty_slave_fd);
if (gui.in_use)
{
close(2);
! ignored = dup(pty_slave_fd);
}
close(pty_slave_fd); /* has been dupped, close it now */
***************
*** 4014,4026 ****
/* set up stdin for the child */
close(fd_toshell[1]);
close(0);
! dup(fd_toshell[0]);
close(fd_toshell[0]);
/* set up stdout for the child */
close(fd_fromshell[0]);
close(1);
! dup(fd_fromshell[1]);
close(fd_fromshell[1]);
# ifdef FEAT_GUI
--- 4017,4029 ----
/* set up stdin for the child */
close(fd_toshell[1]);
close(0);
! ignored = dup(fd_toshell[0]);
close(fd_toshell[0]);
/* set up stdout for the child */
close(fd_fromshell[0]);
close(1);
! ignored = dup(fd_fromshell[1]);
close(fd_fromshell[1]);
# ifdef FEAT_GUI
***************
*** 4028,4034 ****
{
/* set up stderr for the child */
close(2);
! dup(1);
}
# endif
}
--- 4031,4037 ----
{
/* set up stderr for the child */
close(2);
! ignored = dup(1);
}
# endif
}
***************
*** 4159,4165 ****
&& (lnum !=
curbuf->b_ml.ml_line_count
|| curbuf->b_p_eol)))
! write(toshell_fd, "\n", (size_t)1);
++lnum;
if (lnum > curbuf->b_op_end.lnum)
{
--- 4162,4169 ----
&& (lnum !=
curbuf->b_ml.ml_line_count
|| curbuf->b_p_eol)))
! ignored = write(toshell_fd, "\n",
! (size_t)1);
++lnum;
if (lnum > curbuf->b_op_end.lnum)
{
*** ../vim-7.2.054/src/spell.c Fri Nov 28 10:08:05 2008
--- src/spell.c Fri Nov 28 12:28:24 2008
***************
*** 4950,4956 ****
static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd));
static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname));
static void clear_node __ARGS((wordnode_T *node));
! static int put_node __ARGS((FILE *fd, wordnode_T *node, int index, int regionmask, int prefixtree));
static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname));
static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang));
static int sug_maketable __ARGS((spellinfo_T *spin));
--- 4950,4956 ----
static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd));
static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname));
static void clear_node __ARGS((wordnode_T *node));
! static int put_node __ARGS((FILE *fd, wordnode_T *node, int idx, int regionmask, int prefixtree));
static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname));
static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang));
static int sug_maketable __ARGS((spellinfo_T *spin));
*** ../vim-7.2.054/src/ui.c Sun Sep 14 15:57:54 2008
--- src/ui.c Fri Nov 28 19:04:36 2008
***************
*** 1820,1826 ****
#ifdef HAVE_DUP
/* Use stderr for stdin, also works for shell commands. */
close(0);
! dup(2);
#else
read_cmd_fd = 2; /* read from stderr instead of stdin */
#endif
--- 1820,1826 ----
#ifdef HAVE_DUP
/* Use stderr for stdin, also works for shell commands. */
close(0);
! ignored = dup(2);
#else
read_cmd_fd = 2; /* read from stderr instead of stdin */
#endif
*** ../vim-7.2.054/src/window.c Sat Nov 15 14:10:23 2008
--- src/window.c Fri Nov 28 18:46:45 2008
***************
*** 4029,4042 ****
if (mch_dirname(cwd, MAXPATHL) == OK)
globaldir = vim_strsave(cwd);
}
! mch_chdir((char *)curwin->w_localdir);
! shorten_fnames(TRUE);
}
else if (globaldir != NULL)
{
/* Window doesn't have a local directory and we are not in the global
* directory: Change to the global directory. */
! mch_chdir((char *)globaldir);
vim_free(globaldir);
globaldir = NULL;
shorten_fnames(TRUE);
--- 4029,4042 ----
if (mch_dirname(cwd, MAXPATHL) == OK)
globaldir = vim_strsave(cwd);
}
! if (mch_chdir((char *)curwin->w_localdir) == 0)
! shorten_fnames(TRUE);
}
else if (globaldir != NULL)
{
/* Window doesn't have a local directory and we are not in the global
* directory: Change to the global directory. */
! ignored = mch_chdir((char *)globaldir);
vim_free(globaldir);
globaldir = NULL;
shorten_fnames(TRUE);
*** ../vim-7.2.054/src/version.c Fri Nov 28 12:05:07 2008
--- src/version.c Fri Nov 28 21:12:42 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 55,
/**/
--
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 at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.056 ---
To: vim-dev at vim.org
Subject: Patch 7.2.056
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.056 (after 7.2.050)
Problem: Tests 58 and 59 fail.
Solution: Don't invoke fwrite() with a zero length. (Dominique Pelle)
Files: src/spell.c
*** ../vim-7.2.055/src/spell.c Fri Nov 28 21:26:50 2008
--- src/spell.c Sat Nov 29 19:58:21 2008
***************
*** 8112,8118 ****
p = rr == 1 ? ftp->ft_from : ftp->ft_to;
l = (int)STRLEN(p);
putc(l, fd);
! fwv &= fwrite(p, l, (size_t)1, fd);
}
}
--- 8218,8225 ----
p = rr == 1 ? ftp->ft_from : ftp->ft_to;
l = (int)STRLEN(p);
putc(l, fd);
! if (l > 0)
! fwv &= fwrite(p, l, (size_t)1, fd);
}
}
*** ../vim-7.2.055/src/version.c Fri Nov 28 21:26:50 2008
--- src/version.c Sat Nov 29 20:10:05 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 56,
/**/
--
GUARD #1: Where'd you get the coconut?
ARTHUR: We found them.
GUARD #1: Found them? In Mercea? The coconut's tropical!
ARTHUR: What do you mean?
GUARD #1: Well, this is a temperate zone.
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.057 ---
To: vim-dev at vim.org
Subject: Patch 7.2.057
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.057 (after 7.2.056)
Problem: Combination of int and size_t may not work.
Solution: Use size_t for variable.
Files: src/spell.c
*** ../vim-7.2.056/src/spell.c Sat Nov 29 20:10:59 2008
--- src/spell.c Sat Nov 29 20:15:43 2008
***************
*** 7926,7932 ****
char_u *p;
int rr;
int retval = OK;
! int fwv = 1; /* collect return value of fwrite() to avoid
warnings from picky compiler */
fd = mch_fopen((char *)fname, "w");
--- 8028,8034 ----
char_u *p;
int rr;
int retval = OK;
! size_t fwv = 1; /* collect return value of fwrite() to avoid
warnings from picky compiler */
fd = mch_fopen((char *)fname, "w");
***************
*** 7939,7944 ****
--- 8041,8050 ----
/* <HEADER>: <fileID> <versionnr> */
/* <fileID> */
fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd);
+ if (fwv != (size_t)1)
+ /* Catch first write error, don't try writing more. */
+ goto theend;
+
putc(VIMSPELLVERSION, fd); /* <versionnr> */
/*
***************
*** 8300,8310 ****
/* Write another byte to check for errors (file system full). */
if (putc(0, fd) == EOF)
retval = FAIL;
!
if (fclose(fd) == EOF)
retval = FAIL;
! if (fwv != 1)
retval = FAIL;
if (retval == FAIL)
EMSG(_(e_write));
--- 8406,8416 ----
/* Write another byte to check for errors (file system full). */
if (putc(0, fd) == EOF)
retval = FAIL;
! theend:
if (fclose(fd) == EOF)
retval = FAIL;
! if (fwv != (size_t)1)
retval = FAIL;
if (retval == FAIL)
EMSG(_(e_write));
***************
*** 9897,9903 ****
char_u *p;
int len;
int totlen;
! int x = 1; /* collect return value of fwrite() */
if (fd != NULL)
put_bytes(fd, (long_u)gap->ga_len, 2); /* <prefcondcnt> */
--- 10003,10009 ----
char_u *p;
int len;
int totlen;
! size_t x = 1; /* collect return value of fwrite() */
if (fd != NULL)
put_bytes(fd, (long_u)gap->ga_len, 2); /* <prefcondcnt> */
*** ../vim-7.2.056/src/version.c Sat Nov 29 20:10:59 2008
--- src/version.c Sat Nov 29 20:13:46 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 57,
/**/
--
GUARD #1: What -- a swallow carrying a coconut?
ARTHUR: It could grip it by the husk!
GUARD #1: It's not a question of where he grips it! It's a simple question
of weight ratios! A five ounce bird could not carry a 1 pound
coconut.
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.058 ---
To: vim-dev at vim.org
Subject: Patch 7.2.058
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.058
Problem: Can't add a patch name to the ":version" output.
Solution: Add the extra_patches array.
Files: src/version.c
*** ../vim-7.2.057/src/version.c Sat Nov 29 20:18:44 2008
--- src/version.c Sun Nov 30 12:12:31 2008
***************
*** 794,799 ****
--- 796,814 ----
0
};
+ /*
+ * Place to put a short description when adding a feature with a patch.
+ * Keep it short, e.g.,: "relative numbers", "persistent undo".
+ * Also add a comment marker to separate the lines.
+ * See the official Vim patches for the diff format: It must use a context of
+ * one line only. Use "diff -C2".
+ */
+ static char *(extra_patches[]) =
+ { /* Add your patch description below this line */
+ /**/
+ NULL
+ };
+
int
highest_patch()
{
***************
*** 939,944 ****
--- 954,972 ----
}
}
+ /* Print the list of extra patch descriptions if there is at least one. */
+ if (extra_patches[0] != NULL)
+ {
+ MSG_PUTS(_("\nExtra patches: "));
+ s = "";
+ for (i = 0; extra_patches[i] != NULL; ++i)
+ {
+ MSG_PUTS(s);
+ s = ", ";
+ MSG_PUTS(extra_patches[i]);
+ }
+ }
+
#ifdef MODIFIED_BY
MSG_PUTS("\n");
MSG_PUTS(_("Modified by "));
*** ../vim-7.2.057/src/version.c Sat Nov 29 20:18:44 2008
--- src/version.c Sun Nov 30 12:12:31 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 58,
/**/
--
ARTHUR: Well, it doesn't matter. Will you go and tell your master that
Arthur from the Court of Camelot is here.
GUARD #1: Listen, in order to maintain air-speed velocity, a swallow
needs to beat its wings 43 times every second, right?
ARTHUR: Please!
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.059 ---
To: vim-dev at vim.org
Subject: Patch 7.2.059
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.059
Problem: Diff display is not always updated.
Solution: Update the display more often.
Files: src/diff.c
*** ../vim-7.2.058/src/diff.c Fri Nov 28 21:26:50 2008
--- src/diff.c Fri Nov 28 17:23:35 2008
***************
*** 73,78 ****
--- 73,80 ----
{
tp->tp_diffbuf[i] = NULL;
tp->tp_diff_invalid = TRUE;
+ if (tp == curtab)
+ diff_redraw(TRUE);
}
}
}
***************
*** 102,107 ****
--- 104,110 ----
{
curtab->tp_diffbuf[i] = NULL;
curtab->tp_diff_invalid = TRUE;
+ diff_redraw(TRUE);
}
}
}
***************
*** 131,136 ****
--- 134,140 ----
{
curtab->tp_diffbuf[i] = buf;
curtab->tp_diff_invalid = TRUE;
+ diff_redraw(TRUE);
return;
}
*** ../vim-7.2.058/src/version.c Sun Nov 30 12:14:35 2008
--- src/version.c Sun Nov 30 15:13:18 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 59,
/**/
--
GUARD #2: Wait a minute -- supposing two swallows carried it together?
GUARD #1: No, they'd have to have it on a line.
GUARD #2: Well, simple! They'd just use a standard creeper!
GUARD #1: What, held under the dorsal guiding feathers?
GUARD #2: Well, why not?
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE 7.2.060 ---
To: vim-dev at vim.org
Subject: Patch 7.2.060
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.060
Problem: When a spell files has many compound rules it may take a very long
time making the list of suggestions. Displaying also can be slow
when there are misspelled words.
Can't parse some Hunspell .aff files.
Solution: Check if a compounding can possibly work before trying a
combination, if the compound rules don't contain wildcards.
Implement using CHECKCOMPOUNDPATTERN.
Ignore COMPOUNDRULES. Ignore a comment after most items.
Accept ONLYINCOMPOUND as an alias for NEEDCOMPOUND.
Accept FORBIDDENWORD as an alias for BAD.
Files: runtime/doc/spell.txt, src/spell.c
*** ../vim-7.2.059/runtime/doc/spell.txt Sat Aug 9 19:36:52 2008
--- runtime/doc/spell.txt Sun Nov 30 16:30:02 2008
***************
*** 1,4 ****
! *spell.txt* For Vim version 7.2. Last change: 2008 Jun 21
VIM REFERENCE MANUAL by Bram Moolenaar
--- 1,4 ----
! *spell.txt* For Vim version 7.2. Last change: 2008 Nov 30
VIM REFERENCE MANUAL by Bram Moolenaar
***************
*** 831,838 ****
# comment line ~
! With some items it's also possible to put a comment after it, but this isn't
! supported in general.
ENCODING *spell-SET*
--- 831,841 ----
# comment line ~
! Items with a fixed number of arguments can be followed by a comment. But only
! if none of the arguments can contain white space. The comment must start with
! a "#" character. Example:
!
! KEEPCASE = # fix case for words with this flag ~
ENCODING *spell-SET*
***************
*** 965,970 ****
--- 968,976 ----
Note: When using utf-8 only characters up to 65000 may be used for flags.
+ Note: even when using "num" or "long" the number of flags available to
+ compounding and prefixes is limited to about 250.
+
AFFIXES
*spell-PFX* *spell-SFX*
***************
*** 1178,1183 ****
--- 1185,1193 ----
The flag also applies to the word with affixes, thus this can be used to mark
a whole bunch of related words as bad.
+ *spell-FORBIDDENWORD*
+ FORBIDDENWORD can be used just like BAD. For compatibility with Hunspell.
+
*spell-NEEDAFFIX*
The NEEDAFFIX flag is used to require that a word is used with an affix. The
word itself is not a good word (unless there is an empty affix). Example:
***************
*** 1268,1273 ****
--- 1278,1287 ----
NEEDCOMPOUND & ~
+ *spell-ONLYINCOMPOUND*
+ The ONLYINCOMPOUND does exactly the same as NEEDCOMPOUND. Supported for
+ compatiblity with Hunspell.
+
*spell-COMPOUNDMIN*
The minimal character length of a word used for compounding is specified with
COMPOUNDMIN. Example:
***************
*** 1328,1333 ****
--- 1342,1361 ----
rules. Can also be used for an affix to count the affix as a compounding
word.
+ *spell-CHECKCOMPOUNDPATTERN*
+ CHECKCOMPOUNDPATTERN is used to define patterns that, when matching at the
+ position where two words are compounded together forbids the compound.
+ For example:
+ CHECKCOMPOUNDPATTERN o e ~
+
+ This forbids compounding if the first word ends in "o" and the second word
+ starts with "e".
+
+ The arguments must be plain text, no patterns are actually supported, despite
+ the item name. Case is always ignored.
+
+ The Hunspell feature to use three arguments and flags is not supported.
+
*spell-SYLLABLE*
The SYLLABLE item defines characters or character sequences that are used to
count the number of syllables in a word. Example:
***************
*** 1496,1501 ****
--- 1524,1533 ----
ACCENT (Hunspell) *spell-ACCENT*
Use MAP instead. |spell-MAP|
+ BREAK (Hunspell) *spell-BREAK*
+ Define break points. Unclear how it works exactly.
+ Not supported.
+
CHECKCOMPOUNDCASE (Hunspell) *spell-CHECKCOMPOUNDCASE*
Disallow uppercase letters at compound word boundaries.
Not supported.
***************
*** 1512,1520 ****
Forbid three identical characters when compounding. Not
supported.
- CHECKCOMPOUNDPATTERN (Hunspell) *spell-CHECKCOMPOUNDPATTERN*
- Forbid compounding when patterns match. Not supported.
-
COMPLEXPREFIXES (Hunspell) *spell-COMPLEXPREFIXES*
Enables using two prefixes. Not supported.
--- 1544,1549 ----
***************
*** 1536,1548 ****
COMPOUNDMIDDLE (Hunspell) *spell-COMPOUNDMIDDLE*
Use COMPOUNDRULE instead. |spell-COMPOUNDRULE|
COMPOUNDSYLLABLE (Hunspell) *spell-COMPOUNDSYLLABLE*
Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE|
|spell-COMPOUNDSYLMAX|
! FORBIDDENWORD (Hunspell) *spell-FORBIDDENWORD*
! Use BAD instead. |spell-BAD|
!
LANG (Hunspell) *spell-LANG*
This specifies language-specific behavior. This actually
moves part of the language knowledge into the program,
--- 1565,1582 ----
COMPOUNDMIDDLE (Hunspell) *spell-COMPOUNDMIDDLE*
Use COMPOUNDRULE instead. |spell-COMPOUNDRULE|
+ COMPOUNDRULES (Hunspell) *spell-COMPOUNDRULES*
+ Number of COMPOUNDRULE lines following. Ignored, but the
+ argument must be a number.
+
COMPOUNDSYLLABLE (Hunspell) *spell-COMPOUNDSYLLABLE*
Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE|
|spell-COMPOUNDSYLMAX|
! KEY (Hunspell) *spell-KEY*
! Define characters that are close together on the keyboard.
! Used to give better suggestions. Not supported.
!
LANG (Hunspell) *spell-LANG*
This specifies language-specific behavior. This actually
moves part of the language knowledge into the program,
***************
*** 1553,1562 ****
Only needed for morphological analysis.
MAXNGRAMSUGS (Hunspell) *spell-MAXNGRAMSUGS*
! Not supported.
!
! ONLYINCOMPOUND (Hunspell) *spell-ONLYINCOMPOUND*
! Use NEEDCOMPOUND instead. |spell-NEEDCOMPOUND|
PSEUDOROOT (Hunspell) *spell-PSEUDOROOT*
Use NEEDAFFIX instead. |spell-NEEDAFFIX|
--- 1587,1593 ----
Only needed for morphological analysis.
MAXNGRAMSUGS (Hunspell) *spell-MAXNGRAMSUGS*
! Set number of n-gram suggestions. Not supported.
PSEUDOROOT (Hunspell) *spell-PSEUDOROOT*
Use NEEDAFFIX instead. |spell-NEEDAFFIX|
*** ../vim-7.2.059/src/spell.c Sat Nov 29 20:18:44 2008
--- src/spell.c Sun Nov 30 20:59:13 2008
***************
*** 469,474 ****
--- 469,475 ----
garray_T sl_comppat; /* CHECKCOMPOUNDPATTERN items */
regprog_T *sl_compprog; /* COMPOUNDRULE turned into a regexp progrm
* (NULL when no compounding) */
+ char_u *sl_comprules; /* all COMPOUNDRULE concatenated (or NULL) */
char_u *sl_compstartflags; /* flags for first compound word */
char_u *sl_compallflags; /* all flags for compound words */
char_u sl_nobreak; /* When TRUE: no spaces between words */
***************
*** 839,845 ****
--- 840,849 ----
static void slang_clear __ARGS((slang_T *lp));
static void slang_clear_sug __ARGS((slang_T *lp));
static void find_word __ARGS((matchinf_T *mip, int mode));
+ static int match_checkcompoundpattern __ARGS((char_u *ptr, int wlen, garray_T *gap));
static int can_compound __ARGS((slang_T *slang, char_u *word, char_u *flags));
+ static int can_be_compound __ARGS((trystate_T *sp, slang_T *slang, char_u *compflags, int flag));
+ static int match_compoundrule __ARGS((slang_T *slang, char_u *compflags));
static int valid_word_prefix __ARGS((int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req));
static void find_prefix __ARGS((matchinf_T *mip, int mode));
static int fold_more __ARGS((matchinf_T *mip));
***************
*** 1519,1524 ****
--- 1523,1533 ----
((unsigned)flags >> 24)))
continue;
+ /* If there is a match with a CHECKCOMPOUNDPATTERN rule
+ * discard the compound word. */
+ if (match_checkcompoundpattern(ptr, wlen, &slang->sl_comppat))
+ continue;
+
if (mode == FIND_COMPOUND)
{
int capflags;
***************
*** 1577,1582 ****
--- 1586,1596 ----
if (!can_compound(slang, fword, mip->mi_compflags))
continue;
}
+ else if (slang->sl_comprules != NULL
+ && !match_compoundrule(slang, mip->mi_compflags))
+ /* The compound flags collected so far do not match any
+ * COMPOUNDRULE, discard the compounded word. */
+ continue;
}
/* Check NEEDCOMPOUND: can't use word without compounding. */
***************
*** 1727,1732 ****
--- 1741,1779 ----
}
/*
+ * Return TRUE if there is a match between the word ptr[wlen] and
+ * CHECKCOMPOUNDPATTERN rules, assuming that we will concatenate with another
+ * word.
+ * A match means that the first part of CHECKCOMPOUNDPATTERN matches at the
+ * end of ptr[wlen] and the second part matches after it.
+ */
+ static int
+ match_checkcompoundpattern(ptr, wlen, gap)
+ char_u *ptr;
+ int wlen;
+ garray_T *gap; /* &sl_comppat */
+ {
+ int i;
+ char_u *p;
+ int len;
+
+ for (i = 0; i + 1 < gap->ga_len; i += 2)
+ {
+ p = ((char_u **)gap->ga_data)[i + 1];
+ if (STRNCMP(ptr + wlen, p, STRLEN(p)) == 0)
+ {
+ /* Second part matches at start of following compound word, now
+ * check if first part matches at end of previous word. */
+ p = ((char_u **)gap->ga_data)[i];
+ len = STRLEN(p);
+ if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+
+ /*
* Return TRUE if "flags" is a valid sequence of compound flags and "word"
* does not have too many syllables.
*/
***************
*** 1773,1778 ****
--- 1820,1917 ----
}
/*
+ * Return TRUE when the sequence of flags in "compflags" plus "flag" can
+ * possibly form a valid compounded word. This also checks the COMPOUNDRULE
+ * lines if they don't contain wildcards.
+ */
+ static int
+ can_be_compound(sp, slang, compflags, flag)
+ trystate_T *sp;
+ slang_T *slang;
+ char_u *compflags;
+ int flag;
+ {
+ /* If the flag doesn't appear in sl_compstartflags or sl_compallflags
+ * then it can't possibly compound. */
+ if (!byte_in_str(sp->ts_complen == sp->ts_compsplit
+ ? slang->sl_compstartflags : slang->sl_compallflags, flag))
+ return FALSE;
+
+ /* If there are no wildcards, we can check if the flags collected so far
+ * possibly can form a match with COMPOUNDRULE patterns. This only
+ * makes sense when we have two or more words. */
+ if (slang->sl_comprules != NULL && sp->ts_complen > sp->ts_compsplit)
+ {
+ int v;
+
+ compflags[sp->ts_complen] = flag;
+ compflags[sp->ts_complen + 1] = NUL;
+ v = match_compoundrule(slang, compflags + sp->ts_compsplit);
+ compflags[sp->ts_complen] = NUL;
+ return v;
+ }
+
+ return TRUE;
+ }
+
+
+ /*
+ * Return TRUE if the compound flags in compflags[] match the start of any
+ * compound rule. This is used to stop trying a compound if the flags
+ * collected so far can't possibly match any compound rule.
+ * Caller must check that slang->sl_comprules is not NULL.
+ */
+ static int
+ match_compoundrule(slang, compflags)
+ slang_T *slang;
+ char_u *compflags;
+ {
+ char_u *p;
+ int i;
+ int c;
+
+ /* loop over all the COMPOUNDRULE entries */
+ for (p = slang->sl_comprules; *p != NUL; ++p)
+ {
+ /* loop over the flags in the compound word we have made, match
+ * them against the current rule entry */
+ for (i = 0; ; ++i)
+ {
+ c = compflags[i];
+ if (c == NUL)
+ /* found a rule that matches for the flags we have so far */
+ return TRUE;
+ if (*p == '/' || *p == NUL)
+ break; /* end of rule, it's too short */
+ if (*p == '[')
+ {
+ int match = FALSE;
+
+ /* compare against all the flags in [] */
+ ++p;
+ while (*p != ']' && *p != NUL)
+ if (*p++ == c)
+ match = TRUE;
+ if (!match)
+ break; /* none matches */
+ }
+ else if (*p != c)
+ break; /* flag of word doesn't match flag in pattern */
+ ++p;
+ }
+
+ /* Skip to the next "/", where the next pattern starts. */
+ p = vim_strchr(p, '/');
+ if (p == NULL)
+ break;
+ }
+
+ /* Checked all the rules and none of them match the flags, so there
+ * can't possibly be a compound starting with these flags. */
+ return FALSE;
+ }
+
+ /*
* Return non-zero if the prefix indicated by "arridx" matches with the prefix
* ID in "flags" for the word "word".
* The WF_RAREPFX flag is included in the return value for a rare prefix.
***************
*** 2513,2521 ****
--- 2652,2662 ----
lp->sl_midword = NULL;
vim_free(lp->sl_compprog);
+ vim_free(lp->sl_comprules);
vim_free(lp->sl_compstartflags);
vim_free(lp->sl_compallflags);
lp->sl_compprog = NULL;
+ lp->sl_comprules = NULL;
lp->sl_compstartflags = NULL;
lp->sl_compallflags = NULL;
***************
*** 3460,3465 ****
--- 3601,3607 ----
char_u *pp;
char_u *cp;
char_u *ap;
+ char_u *crp;
int cnt;
garray_T *gap;
***************
*** 3545,3550 ****
--- 3687,3698 ----
slang->sl_compallflags = ap;
*ap = NUL;
+ /* And a list of all patterns in their original form, for checking whether
+ * compounding may work in match_compoundrule(). This is freed when we
+ * encounter a wildcard, the check doesn't work then. */
+ crp = alloc(todo + 1);
+ slang->sl_comprules = crp;
+
pp = pat;
*pp++ = '^';
*pp++ = '\\';
***************
*** 3587,3592 ****
--- 3735,3754 ----
atstart = 0;
}
}
+
+ /* 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;
+ crp = NULL;
+ }
+ else
+ *crp++ = c;
+ }
+
if (c == '/') /* slash separates two items */
{
*pp++ = '\\';
***************
*** 3611,3616 ****
--- 3773,3781 ----
*pp++ = '$';
*pp = NUL;
+ if (crp != NULL)
+ *crp = NUL;
+
slang->sl_compprog = vim_regcomp(pat, RE_MAGIC + RE_STRING + RE_STRICT);
vim_free(pat);
if (slang->sl_compprog == NULL)
***************
*** 4915,4920 ****
--- 5080,5086 ----
} spellinfo_T;
static afffile_T *spell_read_aff __ARGS((spellinfo_T *spin, char_u *fname));
+ static int is_aff_rule __ARGS((char_u **items, int itemcnt, char *rulename, int mincount));
static void aff_process_flags __ARGS((afffile_T *affile, affentry_T *entry));
static int spell_info_item __ARGS((char_u *s));
static unsigned affitem2flag __ARGS((int flagtype, char_u *item, char_u *fname, int lnum));
***************
*** 5223,5230 ****
/* Handle non-empty lines. */
if (itemcnt > 0)
{
! if (STRCMP(items[0], "SET") == 0 && itemcnt == 2
! && aff->af_enc == NULL)
{
#ifdef FEAT_MBYTE
/* Setup for conversion from "ENC" to 'encoding'. */
--- 5389,5395 ----
/* Handle non-empty lines. */
if (itemcnt > 0)
{
! if (is_aff_rule(items, itemcnt, "SET", 2) && aff->af_enc == NULL)
{
#ifdef FEAT_MBYTE
/* Setup for conversion from "ENC" to 'encoding'. */
***************
*** 5239,5245 ****
smsg((char_u *)_("Conversion in %s not supported"), fname);
#endif
}
! else if (STRCMP(items[0], "FLAG") == 0 && itemcnt == 2
&& aff->af_flagtype == AFT_CHAR)
{
if (STRCMP(items[1], "long") == 0)
--- 5404,5410 ----
smsg((char_u *)_("Conversion in %s not supported"), fname);
#endif
}
! else if (is_aff_rule(items, itemcnt, "FLAG", 2)
&& aff->af_flagtype == AFT_CHAR)
{
if (STRCMP(items[1], "long") == 0)
***************
*** 5284,5352 ****
spin->si_info = p;
}
}
! else if (STRCMP(items[0], "MIDWORD") == 0 && itemcnt == 2
&& midword == NULL)
{
midword = getroom_save(spin, items[1]);
}
! else if (STRCMP(items[0], "TRY") == 0 && itemcnt == 2)
{
/* ignored, we look in the tree for what chars may appear */
}
/* TODO: remove "RAR" later */
! else if ((STRCMP(items[0], "RAR") == 0
! || STRCMP(items[0], "RARE") == 0) && itemcnt == 2
! && aff->af_rare == 0)
{
aff->af_rare = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
/* TODO: remove "KEP" later */
! else if ((STRCMP(items[0], "KEP") == 0
! || STRCMP(items[0], "KEEPCASE") == 0) && itemcnt == 2
&& aff->af_keepcase == 0)
{
aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (STRCMP(items[0], "BAD") == 0 && itemcnt == 2
! && aff->af_bad == 0)
{
aff->af_bad = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (STRCMP(items[0], "NEEDAFFIX") == 0 && itemcnt == 2
&& aff->af_needaffix == 0)
{
aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (STRCMP(items[0], "CIRCUMFIX") == 0 && itemcnt == 2
&& aff->af_circumfix == 0)
{
aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (STRCMP(items[0], "NOSUGGEST") == 0 && itemcnt == 2
&& aff->af_nosuggest == 0)
{
aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (STRCMP(items[0], "NEEDCOMPOUND") == 0 && itemcnt == 2
&& aff->af_needcomp == 0)
{
aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (STRCMP(items[0], "COMPOUNDROOT") == 0 && itemcnt == 2
&& aff->af_comproot == 0)
{
aff->af_comproot = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (STRCMP(items[0], "COMPOUNDFORBIDFLAG") == 0
! && itemcnt == 2 && aff->af_compforbid == 0)
{
aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
--- 5449,5519 ----
spin->si_info = p;
}
}
! else if (is_aff_rule(items, itemcnt, "MIDWORD", 2)
&& midword == NULL)
{
midword = getroom_save(spin, items[1]);
}
! else if (is_aff_rule(items, itemcnt, "TRY", 2))
{
/* ignored, we look in the tree for what chars may appear */
}
/* TODO: remove "RAR" later */
! else if ((is_aff_rule(items, itemcnt, "RAR", 2)
! || is_aff_rule(items, itemcnt, "RARE", 2))
! && aff->af_rare == 0)
{
aff->af_rare = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
/* TODO: remove "KEP" later */
! else if ((is_aff_rule(items, itemcnt, "KEP", 2)
! || is_aff_rule(items, itemcnt, "KEEPCASE", 2))
&& aff->af_keepcase == 0)
{
aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if ((is_aff_rule(items, itemcnt, "BAD", 2)
! || is_aff_rule(items, itemcnt, "FORBIDDENWORD", 2))
! && aff->af_bad == 0)
{
aff->af_bad = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (is_aff_rule(items, itemcnt, "NEEDAFFIX", 2)
&& aff->af_needaffix == 0)
{
aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (is_aff_rule(items, itemcnt, "CIRCUMFIX", 2)
&& aff->af_circumfix == 0)
{
aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (is_aff_rule(items, itemcnt, "NOSUGGEST", 2)
&& aff->af_nosuggest == 0)
{
aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if ((is_aff_rule(items, itemcnt, "NEEDCOMPOUND", 2)
! || is_aff_rule(items, itemcnt, "ONLYINCOMPOUND", 2))
&& aff->af_needcomp == 0)
{
aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (is_aff_rule(items, itemcnt, "COMPOUNDROOT", 2)
&& aff->af_comproot == 0)
{
aff->af_comproot = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
}
! else if (is_aff_rule(items, itemcnt, "COMPOUNDFORBIDFLAG", 2)
! && aff->af_compforbid == 0)
{
aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
***************
*** 5354,5361 ****
smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"),
fname, lnum);
}
! else if (STRCMP(items[0], "COMPOUNDPERMITFLAG") == 0
! && itemcnt == 2 && aff->af_comppermit == 0)
{
aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
--- 5521,5528 ----
smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"),
fname, lnum);
}
! else if (is_aff_rule(items, itemcnt, "COMPOUNDPERMITFLAG", 2)
! && aff->af_comppermit == 0)
{
aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1],
fname, lnum);
***************
*** 5363,5369 ****
smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"),
fname, lnum);
}
! else if (STRCMP(items[0], "COMPOUNDFLAG") == 0 && itemcnt == 2
&& compflags == NULL)
{
/* Turn flag "c" into COMPOUNDRULE compatible string "c+",
--- 5530,5536 ----
smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"),
fname, lnum);
}
! else if (is_aff_rule(items, itemcnt, "COMPOUNDFLAG", 2)
&& compflags == NULL)
{
/* Turn flag "c" into COMPOUNDRULE compatible string "c+",
***************
*** 5376,5382 ****
compflags = p;
}
}
! else if (STRCMP(items[0], "COMPOUNDRULE") == 0 && itemcnt == 2)
{
/* Concatenate this string to previously defined ones, using a
* slash to separate them. */
--- 5543,5557 ----
compflags = p;
}
}
! else if (is_aff_rule(items, itemcnt, "COMPOUNDRULES", 2))
! {
! /* We don't use the count, but do check that it's a number and
! * not COMPOUNDRULE mistyped. */
! if (atoi((char *)items[1]) == 0)
! smsg((char_u *)_("Wrong COMPOUNDRULES value in %s line %d: %s"),
! fname, lnum, items[1]);
! }
! else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
{
/* Concatenate this string to previously defined ones, using a
* slash to separate them. */
***************
*** 5395,5401 ****
compflags = p;
}
}
! else if (STRCMP(items[0], "COMPOUNDWORDMAX") == 0 && itemcnt == 2
&& compmax == 0)
{
compmax = atoi((char *)items[1]);
--- 5570,5576 ----
compflags = p;
}
}
! else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
&& compmax == 0)
{
compmax = atoi((char *)items[1]);
***************
*** 5403,5409 ****
smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"),
fname, lnum, items[1]);
}
! else if (STRCMP(items[0], "COMPOUNDMIN") == 0 && itemcnt == 2
&& compminlen == 0)
{
compminlen = atoi((char *)items[1]);
--- 5578,5584 ----
smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"),
fname, lnum, items[1]);
}
! else if (is_aff_rule(items, itemcnt, "COMPOUNDMIN", 2)
&& compminlen == 0)
{
compminlen = atoi((char *)items[1]);
***************
*** 5411,5417 ****
smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"),
fname, lnum, items[1]);
}
! else if (STRCMP(items[0], "COMPOUNDSYLMAX") == 0 && itemcnt == 2
&& compsylmax == 0)
{
compsylmax = atoi((char *)items[1]);
--- 5586,5592 ----
smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"),
fname, lnum, items[1]);
}
! else if (is_aff_rule(items, itemcnt, "COMPOUNDSYLMAX", 2)
&& compsylmax == 0)
{
compsylmax = atoi((char *)items[1]);
***************
*** 5419,5450 ****
smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"),
fname, lnum, items[1]);
}
! else if (STRCMP(items[0], "CHECKCOMPOUNDDUP") == 0 && itemcnt == 1)
{
compoptions |= COMP_CHECKDUP;
}
! else if (STRCMP(items[0], "CHECKCOMPOUNDREP") == 0 && itemcnt == 1)
{
compoptions |= COMP_CHECKREP;
}
! else if (STRCMP(items[0], "CHECKCOMPOUNDCASE") == 0 && itemcnt == 1)
{
compoptions |= COMP_CHECKCASE;
}
! else if (STRCMP(items[0], "CHECKCOMPOUNDTRIPLE") == 0
! && itemcnt == 1)
{
compoptions |= COMP_CHECKTRIPLE;
}
! else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0
! && itemcnt == 2)
{
if (atoi((char *)items[1]) == 0)
smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"),
fname, lnum, items[1]);
}
! else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0
! && itemcnt == 3)
{
garray_T *gap = &spin->si_comppat;
int i;
--- 5594,5622 ----
smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"),
fname, lnum, items[1]);
}
! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDDUP", 1))
{
compoptions |= COMP_CHECKDUP;
}
! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDREP", 1))
{
compoptions |= COMP_CHECKREP;
}
! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDCASE", 1))
{
compoptions |= COMP_CHECKCASE;
}
! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDTRIPLE", 1))
{
compoptions |= COMP_CHECKTRIPLE;
}
! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 2))
{
if (atoi((char *)items[1]) == 0)
smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"),
fname, lnum, items[1]);
}
! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 3))
{
garray_T *gap = &spin->si_comppat;
int i;
***************
*** 5463,5486 ****
= getroom_save(spin, items[2]);
}
}
! else if (STRCMP(items[0], "SYLLABLE") == 0 && itemcnt == 2
&& syllable == NULL)
{
syllable = getroom_save(spin, items[1]);
}
! else if (STRCMP(items[0], "NOBREAK") == 0 && itemcnt == 1)
{
spin->si_nobreak = TRUE;
}
! else if (STRCMP(items[0], "NOSPLITSUGS") == 0 && itemcnt == 1)
{
spin->si_nosplitsugs = TRUE;
}
! else if (STRCMP(items[0], "NOSUGFILE") == 0 && itemcnt == 1)
{
spin->si_nosugfile = TRUE;
}
! else if (STRCMP(items[0], "PFXPOSTPONE") == 0 && itemcnt == 1)
{
aff->af_pfxpostpone = TRUE;
}
--- 5635,5658 ----
= getroom_save(spin, items[2]);
}
}
! else if (is_aff_rule(items, itemcnt, "SYLLABLE", 2)
&& syllable == NULL)
{
syllable = getroom_save(spin, items[1]);
}
! else if (is_aff_rule(items, itemcnt, "NOBREAK", 1))
{
spin->si_nobreak = TRUE;
}
! else if (is_aff_rule(items, itemcnt, "NOSPLITSUGS", 1))
{
spin->si_nosplitsugs = TRUE;
}
! else if (is_aff_rule(items, itemcnt, "NOSUGFILE", 1))
{
spin->si_nosugfile = TRUE;
}
! else if (is_aff_rule(items, itemcnt, "PFXPOSTPONE", 1))
{
aff->af_pfxpostpone = TRUE;
}
***************
*** 5771,5794 ****
}
}
}
! else if (STRCMP(items[0], "FOL") == 0 && itemcnt == 2
! && fol == NULL)
{
fol = vim_strsave(items[1]);
}
! else if (STRCMP(items[0], "LOW") == 0 && itemcnt == 2
! && low == NULL)
{
low = vim_strsave(items[1]);
}
! else if (STRCMP(items[0], "UPP") == 0 && itemcnt == 2
! && upp == NULL)
{
upp = vim_strsave(items[1]);
}
! else if ((STRCMP(items[0], "REP") == 0
! || STRCMP(items[0], "REPSAL") == 0)
! && itemcnt == 2)
{
/* Ignore REP/REPSAL count */;
if (!isdigit(*items[1]))
--- 5943,5962 ----
}
}
}
! else if (is_aff_rule(items, itemcnt, "FOL", 2) && fol == NULL)
{
fol = vim_strsave(items[1]);
}
! else if (is_aff_rule(items, itemcnt, "LOW", 2) && low == NULL)
{
low = vim_strsave(items[1]);
}
! else if (is_aff_rule(items, itemcnt, "UPP", 2) && upp == NULL)
{
upp = vim_strsave(items[1]);
}
! else if (is_aff_rule(items, itemcnt, "REP", 2)
! || is_aff_rule(items, itemcnt, "REPSAL", 2))
{
/* Ignore REP/REPSAL count */;
if (!isdigit(*items[1]))
***************
*** 5819,5825 ****
: &spin->si_rep, items[1], items[2]);
}
}
! else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2)
{
/* MAP item or count */
if (!found_map)
--- 5987,5993 ----
: &spin->si_rep, items[1], items[2]);
}
}
! else if (is_aff_rule(items, itemcnt, "MAP", 2))
{
/* MAP item or count */
if (!found_map)
***************
*** 5856,5864 ****
ga_append(&spin->si_map, '/');
}
}
! /* Accept "SAL from to" and "SAL from to # comment". */
! else if (STRCMP(items[0], "SAL") == 0
! && (itemcnt == 3 || (itemcnt > 3 && items[3][0] == '#')))
{
if (do_sal)
{
--- 6024,6031 ----
ga_append(&spin->si_map, '/');
}
}
! /* Accept "SAL from to" and "SAL from to #comment". */
! else if (is_aff_rule(items, itemcnt, "SAL", 3))
{
if (do_sal)
{
***************
*** 5877,5888 ****
: items[2]);
}
}
! else if (STRCMP(items[0], "SOFOFROM") == 0 && itemcnt == 2
&& sofofrom == NULL)
{
sofofrom = getroom_save(spin, items[1]);
}
! else if (STRCMP(items[0], "SOFOTO") == 0 && itemcnt == 2
&& sofoto == NULL)
{
sofoto = getroom_save(spin, items[1]);
--- 6044,6055 ----
: items[2]);
}
}
! else if (is_aff_rule(items, itemcnt, "SOFOFROM", 2)
&& sofofrom == NULL)
{
sofofrom = getroom_save(spin, items[1]);
}
! else if (is_aff_rule(items, itemcnt, "SOFOTO", 2)
&& sofoto == NULL)
{
sofoto = getroom_save(spin, items[1]);
***************
*** 6017,6022 ****
--- 6184,6205 ----
}
/*
+ * Return TRUE when items[0] equals "rulename", there are "mincount" items or
+ * a comment is following after item "mincount".
+ */
+ static int
+ is_aff_rule(items, itemcnt, rulename, mincount)
+ char_u **items;
+ int itemcnt;
+ char *rulename;
+ int mincount;
+ {
+ return (STRCMP(items[0], rulename) == 0
+ && (itemcnt == mincount
+ || (itemcnt > mincount && items[mincount][0] == '#')));
+ }
+
+ /*
* For affix "entry" move COMPOUNDFORBIDFLAG and COMPOUNDPERMITFLAG from
* ae_flags to ae_comppermit and ae_compforbid.
*/
***************
*** 11492,11506 ****
vim_strncpy(preword + sp->ts_prewordlen,
tword + sp->ts_splitoff,
sp->ts_twordlen - sp->ts_splitoff);
! p = preword;
! while (*skiptowhite(p) != NUL)
! p = skipwhite(skiptowhite(p));
! if (fword_ends && !can_compound(slang, p,
! compflags + sp->ts_compsplit))
! /* Compound is not allowed. But it may still be
! * possible if we add another (short) word. */
compound_ok = FALSE;
/* Get pointer to last char of previous word. */
p = preword + sp->ts_prewordlen;
mb_ptr_back(preword, p);
--- 11675,11698 ----
vim_strncpy(preword + sp->ts_prewordlen,
tword + sp->ts_splitoff,
sp->ts_twordlen - sp->ts_splitoff);
!
! /* Verify CHECKCOMPOUNDPATTERN rules. */
! if (match_checkcompoundpattern(preword, sp->ts_prewordlen,
! &slang->sl_comppat))
compound_ok = FALSE;
+ if (compound_ok)
+ {
+ p = preword;
+ while (*skiptowhite(p) != NUL)
+ p = skipwhite(skiptowhite(p));
+ if (fword_ends && !can_compound(slang, p,
+ compflags + sp->ts_compsplit))
+ /* Compound is not allowed. But it may still be
+ * possible if we add another (short) word. */
+ compound_ok = FALSE;
+ }
+
/* Get pointer to last char of previous word. */
p = preword + sp->ts_prewordlen;
mb_ptr_back(preword, p);
***************
*** 11697,11706 ****
&& (slang->sl_compsylmax < MAXWLEN
|| sp->ts_complen + 1 - sp->ts_compsplit
< slang->sl_compmax)
! && (byte_in_str(sp->ts_complen == sp->ts_compsplit
! ? slang->sl_compstartflags
! : slang->sl_compallflags,
! ((unsigned)flags >> 24))))
{
try_compound = TRUE;
compflags[sp->ts_complen] = ((unsigned)flags >> 24);
--- 11889,11897 ----
&& (slang->sl_compsylmax < MAXWLEN
|| sp->ts_complen + 1 - sp->ts_compsplit
< slang->sl_compmax)
! && (can_be_compound(sp, slang,
! compflags, ((unsigned)flags >> 24))))
!
{
try_compound = TRUE;
compflags[sp->ts_complen] = ((unsigned)flags >> 24);
*** ../vim-7.2.059/src/version.c Sun Nov 30 15:15:56 2008
--- src/version.c Sun Nov 30 21:09:23 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 60,
/**/
--
DEAD PERSON: I'm getting better!
CUSTOMER: No, you're not -- you'll be stone dead in a moment.
MORTICIAN: Oh, I can't take him like that -- it's against regulations.
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- NEW FILE filetype.vim ---
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram at vim.org>
" Last Change: 2008 Nov 01
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
finish
endif
let did_load_filetypes = 1
" Line continuation is used here, remove 'C' from 'cpoptions'
let s:cpo_save = &cpo
set cpo&vim
augroup filetypedetect
" Ignored extensions
if exists("*fnameescape")
au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.rpmsave,?\+.rpmnew
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
au BufNewFile,BufRead *~
\ let s:name = expand("<afile>") |
\ let s:short = substitute(s:name, '\~$', '', '') |
\ if s:name != s:short && s:short != "" |
\ exe "doau filetypedetect BufRead " . fnameescape(s:short) |
\ endif |
\ unlet! s:name s:short
au BufNewFile,BufRead ?\+.in
\ if expand("<afile>:t") != "configure.in" |
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) |
\ endif
elseif &verbose > 0
echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()"
endif
" Pattern used to match file names which should not be inspected.
" Currently finds compressed files.
if !exists("g:ft_ignore_pat")
let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
endif
" Function used for patterns that end in a star: don't set the filetype if the
" file name matches ft_ignore_pat.
func! s:StarSetf(ft)
if expand("<amatch>") !~ g:ft_ignore_pat
exe 'setf ' . a:ft
endif
endfunc
" Abaqus or Trasys
au BufNewFile,BufRead *.inp call s:Check_inp()
func! s:Check_inp()
if getline(1) =~ '^\*'
setf abaqus
else
let n = 1
if line("$") > 500
let nmax = 500
else
let nmax = line("$")
endif
while n <= nmax
if getline(n) =~? "^header surface data"
setf trasys
break
endif
let n = n + 1
endwhile
endif
endfunc
" A-A-P recipe
au BufNewFile,BufRead *.aap setf aap
" A2ps printing utility
au BufNewFile,BufRead etc/a2ps.cfg,etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
" ABAB/4
au BufNewFile,BufRead *.abap setf abap
" ABC music notation
au BufNewFile,BufRead *.abc setf abc
" ABEL
au BufNewFile,BufRead *.abl setf abel
" AceDB
au BufNewFile,BufRead *.wrm setf acedb
" Ada (83, 9X, 95)
au BufNewFile,BufRead *.adb,*.ads,*.ada setf ada
if has("vms")
au BufNewFile,BufRead *.gpr,*.ada_m,*.adc setf ada
else
au BufNewFile,BufRead *.gpr setf ada
endif
" AHDL
au BufNewFile,BufRead *.tdf setf ahdl
" AMPL
au BufNewFile,BufRead *.run setf ampl
" Ant
au BufNewFile,BufRead build.xml setf ant
" Apache style config file
au BufNewFile,BufRead proftpd.conf* call s:StarSetf('apachestyle')
" Apache config file
au BufNewFile,BufRead .htaccess setf apache
au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf* call s:StarSetf('apache')
" XA65 MOS6510 cross assembler
au BufNewFile,BufRead *.a65 setf a65
" Applescript
au BufNewFile,BufRead *.scpt setf applescript
" Applix ELF
au BufNewFile,BufRead *.am
\ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
" ALSA configuration
au BufNewFile,BufRead ~/.asoundrc,/usr/share/alsa/alsa.conf,/etc/asound.conf setf alsaconf
" Arc Macro Language
au BufNewFile,BufRead *.aml setf aml
" Arch Inventory file
au BufNewFile,BufRead .arch-inventory,=tagging-method setf arch
" ART*Enterprise (formerly ART-IM)
au BufNewFile,BufRead *.art setf art
" ASN.1
au BufNewFile,BufRead *.asn,*.asn1 setf asn
" Active Server Pages (with Visual Basic Script)
au BufNewFile,BufRead *.asa
\ if exists("g:filetype_asa") |
\ exe "setf " . g:filetype_asa |
\ else |
\ setf aspvbs |
\ endif
" Active Server Pages (with Perl or Visual Basic Script)
au BufNewFile,BufRead *.asp
\ if exists("g:filetype_asp") |
\ exe "setf " . g:filetype_asp |
\ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" |
\ setf aspperl |
\ else |
\ setf aspvbs |
\ endif
" Grub (must be before catch *.lst)
au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf,/etc/grub.conf setf grub
" Assembly (all kinds)
" *.lst is not pure assembly, it has two extra columns (address, byte codes)
au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst call s:FTasm()
" This function checks for the kind of assembly that is wanted by the user, or
" can be detected from the first five lines of the file.
func! s:FTasm()
" make sure b:asmsyntax exists
if !exists("b:asmsyntax")
let b:asmsyntax = ""
endif
if b:asmsyntax == ""
call s:FTasmsyntax()
endif
" if b:asmsyntax still isn't set, default to asmsyntax or GNU
if b:asmsyntax == ""
if exists("g:asmsyntax")
let b:asmsyntax = g:asmsyntax
else
let b:asmsyntax = "asm"
endif
endif
exe "setf " . fnameescape(b:asmsyntax)
endfunc
func! s:FTasmsyntax()
" see if file contains any asmsyntax=foo overrides. If so, change
" b:asmsyntax appropriately
let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
\" ".getline(5)." "
let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
if match != ''
let b:asmsyntax = match
elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
let b:asmsyntax = "vmasm"
[...2050 lines suppressed...]
endwhile
setf yacc
endfunc
" Yaml
au BufNewFile,BufRead *.yaml,*.yml setf yaml
" Zope
" dtml (zope dynamic template markup language), pt (zope page template),
" cpt (zope form controller page template)
au BufNewFile,BufRead *.dtml,*.pt,*.cpt call s:FThtml()
" zsql (zope sql method)
au BufNewFile,BufRead *.zsql call s:SQL()
" Z80 assembler asz80
au BufNewFile,BufRead *.z8a setf z8a
augroup END
" Source the user-specified filetype file, for backwards compatibility with
" Vim 5.x.
if exists("myfiletypefile") && filereadable(expand(myfiletypefile))
execute "source " . myfiletypefile
endif
" Check for "*" after loading myfiletypefile, so that scripts.vim is only used
" when there are no matching file name extensions.
" Don't do this for compressed files.
augroup filetypedetect
au BufNewFile,BufRead *
\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
\ | runtime! scripts.vim | endif
au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
" Extra checks for when no filetype has been detected now. Mostly used for
" patterns that end in "*". E.g., "zsh*" matches "zsh.vim", but that's a Vim
" script file.
" Most of these should call s:StarSetf() to avoid names ending in .gz and the
" like are used.
" More Apache files.
au BufNewFile,BufRead /etc/apache2/conf.*/*,/etc/apache2/sites-*/*,/etc/apache2/mods-*/* call s:StarSetf('apache')
" Asterisk config file
au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk')
au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm')
" Bazaar version control
au BufNewFile,BufRead bzr_log.* setf bzr
" BIND zone
au BufNewFile,BufRead */named/db.*,*/bind/db.* call s:StarSetf('bindzone')
" Changelog
au BufNewFile,BufRead [cC]hange[lL]og*
\ if getline(1) =~ '; urgency='
\| call s:StarSetf('debchangelog')
\|else
\| call s:StarSetf('changelog')
\|endif
" Crontab
au BufNewFile,BufRead crontab,crontab.*,/etc/cron.d/* call s:StarSetf('crontab')
" Debian Sources.list
au BufNewFile,BufRead /etc/apt/sources.list.d/* call s:StarSetf('debsources')
" Dracula
au BufNewFile,BufRead drac.* call s:StarSetf('dracula')
" Fvwm
au BufNewFile,BufRead */.fvwm/* call s:StarSetf('fvwm')
au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook
\ let b:fvwm_version = 1 | call s:StarSetf('fvwm')
au BufNewFile,BufRead *fvwm2rc*
\ if expand("<afile>:e") == "m4"
\| call s:StarSetf('fvwm2m4')
\|else
\| let b:fvwm_version = 2 | call s:StarSetf('fvwm')
\|endif
" GTK RC
au BufNewFile,BufRead .gtkrc*,gtkrc* call s:StarSetf('gtkrc')
" Jam
au BufNewFile,BufRead Prl*.*,JAM*.* call s:StarSetf('jam')
" Jargon
au! BufNewFile,BufRead *jarg*
\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE'
\| call s:StarSetf('jargon')
\|endif
" Kconfig
au BufNewFile,BufRead Kconfig.* call s:StarSetf('kconfig')
" Makefile
au BufNewFile,BufRead [mM]akefile* call s:StarSetf('make')
" Ruby Makefile
au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby')
" Mail (also matches muttrc.vim, so this is below the other checks)
au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\} setf mail
" Modconf
au BufNewFile,BufRead /etc/modprobe.* call s:StarSetf('modconf')
" Mutt setup file
au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc* call s:StarSetf('muttrc')
au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc* call s:StarSetf('muttrc')
" Nroff macros
au BufNewFile,BufRead tmac.* call s:StarSetf('nroff')
" Pam conf
au BufNewFile,BufRead /etc/pam.d/* call s:StarSetf('pamconf')
" Printcap and Termcap
au BufNewFile,BufRead *printcap*
\ if !did_filetype()
\| let b:ptcap_type = "print" | call s:StarSetf('ptcap')
\|endif
au BufNewFile,BufRead *termcap*
\ if !did_filetype()
\| let b:ptcap_type = "term" | call s:StarSetf('ptcap')
\|endif
" Vim script
au BufNewFile,BufRead *vimrc* call s:StarSetf('vim')
" Subversion commit file
au BufNewFile,BufRead svn-commit*.tmp setf svn
" X resources file
au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults')
" XFree86 config
au BufNewFile,BufRead XF86Config-4*
\ let b:xf86c_xfree86_version = 4 | call s:StarSetf('xf86conf')
au BufNewFile,BufRead XF86Config*
\ if getline(1) =~ '\<XConfigurator\>'
\| let b:xf86c_xfree86_version = 3
\|endif
\|call s:StarSetf('xf86conf')
" X11 xmodmap
au BufNewFile,BufRead *xmodmap* call s:StarSetf('xmodmap')
" Xinetd conf
au BufNewFile,BufRead /etc/xinetd.d/* call s:StarSetf('xinetd')
" Z-Shell script
au BufNewFile,BufRead zsh*,zlog* call s:StarSetf('zsh')
" 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
" Use the plugin-filetype checks last, they may overrule any of the previously
" detected filetypes.
runtime! ftdetect/*.vim
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'.
if has("menu") && has("gui_running")
\ && !exists("did_install_syntax_menu") && &guioptions !~# "M"
source <sfile>:p:h/menu.vim
endif
" Function called for testing all functions defined here. These are
" script-local, thus need to be executed here.
" Returns a string with error messages (hopefully empty).
func! TestFiletypeFuncs(testlist)
let output = ''
for f in a:testlist
try
exe f
catch
let output = output . "\n" . f . ": " . v:exception
endtry
endfor
return output
endfunc
" Restore 'cpoptions'
let &cpo = s:cpo_save
unlet s:cpo_save
--- NEW FILE gzip.vim ---
" Vim plugin for editing compressed files.
" Maintainer: Bram Moolenaar <Bram at vim.org>
" Last Change: 2005 Jul 26
" Exit quickly when:
" - this plugin was already loaded
" - when 'compatible' is set
" - some autocommands are already taking care of compressed files
if exists("loaded_gzip") || &cp || exists("#BufReadPre#*.gz")
finish
endif
let loaded_gzip = 1
augroup gzip
" Remove all gzip autocommands
au!
" Enable editing of gzipped files.
" The functions are defined in autoload/gzip.vim.
"
" Set binary mode before reading the file.
" Use "gzip -d", gunzip isn't always available.
autocmd BufReadPre,FileReadPre *.gz,*.bz2,*.Z setlocal bin
autocmd BufReadPost,FileReadPost *.gz call gzip#read("gzip -dn")
autocmd BufReadPost,FileReadPost *.bz2 call gzip#read("bzip2 -d")
autocmd BufReadPost,FileReadPost *.Z call gzip#read("uncompress")
autocmd BufWritePost,FileWritePost *.gz call gzip#write("gzip")
autocmd BufWritePost,FileWritePost *.bz2 call gzip#write("bzip2")
autocmd BufWritePost,FileWritePost *.Z call gzip#write("compress -f")
autocmd FileAppendPre *.gz call gzip#appre("gzip -dn")
autocmd FileAppendPre *.bz2 call gzip#appre("bzip2 -d")
autocmd FileAppendPre *.Z call gzip#appre("uncompress")
autocmd FileAppendPost *.gz call gzip#write("gzip")
autocmd FileAppendPost *.bz2 call gzip#write("bzip2")
autocmd FileAppendPost *.Z call gzip#write("compress -f")
augroup END
--- NEW FILE netrw.vim ---
" netrw.vim: Handles file transfer and remote directory listing across
" AUTOLOAD SECTION
" Date: Oct 23, 2008
" Version: 134
" Maintainer: Charles E Campbell, Jr <NdrOchip at ScampbellPfamily.AbizM-NOSPAM>
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
" *as is* and come with no warranty of any kind, either
" expressed or implied. By using this plugin, you agree that
" in no event will the copyright holder be liable for any damages
" resulting from the use of this software.
"redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
"
" But be doers of the Word, and not only hearers, deluding your own selves {{{1
" (James 1:22 RSV)
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
" Load Once: {{{1
if &cp || exists("g:loaded_netrw")
finish
endif
let g:loaded_netrw = "v134"
if v:version < 702
echohl WarningMsg
echo "***warning*** this version of netrw needs vim 7.2"
echohl Normal
finish
endif
if !exists("s:NOTE")
let s:NOTE = 0
let s:WARNING = 1
let s:ERROR = 2
endif
" sanity checks
if v:version < 700
call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
finish
endif
let s:keepcpo= &cpo
setlocal cpo&vim
"DechoTabOn
"call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)
" ======================
" Netrw Variables: {{{1
" ======================
" ---------------------------------------------------------------------
" Netrw Constants: {{{2
if !exists("g:netrw_dirhist_cnt")
let g:netrw_dirhist_cnt= 0
endif
if !exists("s:LONGLIST")
let s:THINLIST = 0
let s:LONGLIST = 1
let s:WIDELIST = 2
let s:TREELIST = 3
let s:MAXLIST = 4
endif
" ---------------------------------------------------------------------
" Default values for netrw's global protocol variables {{{2
if !exists("g:netrw_dav_cmd")
if executable("cadaver")
let g:netrw_dav_cmd = "cadaver"
elseif executable("curl")
let g:netrw_dav_cmd = "curl"
else
let g:netrw_dav_cmd = ""
endif
endif
if !exists("g:netrw_fetch_cmd")
if executable("fetch")
let g:netrw_fetch_cmd = "fetch -o"
else
let g:netrw_fetch_cmd = ""
endif
endif
if !exists("g:netrw_ftp_cmd")
let g:netrw_ftp_cmd = "ftp"
endif
if !exists("g:netrw_http_cmd")
if executable("elinks")
let g:netrw_http_cmd = "elinks"
if !exists("g:netrw_http_xcmd")
let g:netrw_http_xcmd= "-dump >"
endif
elseif executable("links")
let g:netrw_http_cmd = "links"
if !exists("g:netrw_http_xcmd")
let g:netrw_http_xcmd= "-dump >"
endif
elseif executable("curl")
let g:netrw_http_cmd = "curl"
if !exists("g:netrw_http_xcmd")
let g:netrw_http_xcmd= "-o"
endif
elseif executable("wget")
let g:netrw_http_cmd = "wget"
if !exists("g:netrw_http_xcmd")
let g:netrw_http_xcmd= "-q -O"
endif
elseif executable("fetch")
let g:netrw_http_cmd = "fetch"
if !exists("g:netrw_http_xcmd")
let g:netrw_http_xcmd= "-o"
endif
else
let g:netrw_http_cmd = ""
endif
endif
if !exists("g:netrw_rcp_cmd")
let g:netrw_rcp_cmd = "rcp"
endif
if !exists("g:netrw_rsync_cmd")
let g:netrw_rsync_cmd = "rsync"
endif
if !exists("g:netrw_scp_cmd")
let g:netrw_scp_cmd = "scp -q"
endif
if !exists("g:netrw_sftp_cmd")
let g:netrw_sftp_cmd = "sftp"
endif
if !exists("g:netrw_ssh_cmd")
let g:netrw_ssh_cmd= "ssh"
endif
if (has("win32") || has("win95") || has("win64") || has("win16"))
\ && exists("g:netrw_use_nt_rcp")
\ && g:netrw_use_nt_rcp
\ && executable( $SystemRoot .'/system32/rcp.exe')
let s:netrw_has_nt_rcp = 1
let s:netrw_rcpmode = '-b'
else
let s:netrw_has_nt_rcp = 0
let s:netrw_rcpmode = ''
endif
" ---------------------------------------------------------------------
" Default values for netrw's global variables {{{2
" Cygwin Detection ------- {{{3
if !exists("g:netrw_cygwin")
if has("win32") || has("win95") || has("win64") || has("win16")
if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
let g:netrw_cygwin= 1
else
let g:netrw_cygwin= 0
endif
else
let g:netrw_cygwin= 0
endif
endif
" Default values - a-c ---------- {{{3
if !exists("g:netrw_alto")
let g:netrw_alto= &sb
endif
if !exists("g:netrw_altv")
let g:netrw_altv= &spr
endif
if !exists("g:netrw_browse_split")
let g:netrw_browse_split= 0
endif
if !exists("g:netrw_chgwin")
let g:netrw_chgwin = -1
endif
if !exists("g:netrw_compress")
let g:netrw_compress= "gzip"
endif
if !exists("g:netrw_ctags")
let g:netrw_ctags= "ctags"
endif
if !exists("g:netrw_cursorline")
let g:netrw_cursorline= 1
let s:netrw_usercul = &cursorline
let s:netrw_usercuc = &cursorcolumn
endif
" Default values - d-g ---------- {{{3
if !exists("g:netrw_dirhist_cnt")
let g:netrw_dirhist_cnt= 0
endif
if !exists("g:netrw_decompress")
let g:netrw_decompress= { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"}
endif
if !exists("g:netrw_dirhistmax")
let g:netrw_dirhistmax= 10
endif
if !exists("g:netrw_fastbrowse")
let g:netrw_fastbrowse= 1
endif
if !exists("g:netrw_ftp_browse_reject")
let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$'
endif
if !exists("g:netrw_ftp_list_cmd")
if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
[...7612 lines suppressed...]
" UseBufWinVars() get around that.
fun! s:SetBufWinVars()
" call Dfunc("s:SetBufWinVars()")
if exists("w:netrw_liststyle") |let b:netrw_liststyle = w:netrw_liststyle |endif
if exists("w:netrw_bannercnt") |let b:netrw_bannercnt = w:netrw_bannercnt |endif
if exists("w:netrw_method") |let b:netrw_method = w:netrw_method |endif
if exists("w:netrw_prvdir") |let b:netrw_prvdir = w:netrw_prvdir |endif
if exists("w:netrw_explore_indx") |let b:netrw_explore_indx = w:netrw_explore_indx |endif
if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen= w:netrw_explore_listlen|endif
if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt= w:netrw_explore_mtchcnt|endif
if exists("w:netrw_explore_bufnr") |let b:netrw_explore_bufnr = w:netrw_explore_bufnr |endif
if exists("w:netrw_explore_line") |let b:netrw_explore_line = w:netrw_explore_line |endif
if exists("w:netrw_explore_list") |let b:netrw_explore_list = w:netrw_explore_list |endif
" call Dret("s:SetBufWinVars")
endfun
" ---------------------------------------------------------------------
" s:SetRexDir: set directory for :Rexplore {{{2
fun! s:SetRexDir(islocal,dirname)
" call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)")
" set up Rex and leftmouse-double-click
if a:islocal
exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")'
if g:netrw_retmap
if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
nmap <unique> <silent> <2-leftmouse> <Plug>NetrwReturn
endif
let dir = escape(a:dirname, s:netrw_map_escape)
exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(1,"'.dir.'")<cr>'
endif
else
exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")'
if g:netrw_retmap
if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
nmap <unique> <silent> <2-leftmouse> <Plug>NetrwReturn
endif
let dir = escape(a:dirname, s:netrw_map_escape)
exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(0,"'.dir.'")<cr>'
endif
endif
" call Dret("s:SetRexDir")
endfun
" ---------------------------------------------------------------------
" s:Strlen: this function returns the length of a string, even if its {{{2
" using two-byte etc characters.
" Currently, its only used if g:Align_xstrlen is set to a
" nonzero value. Solution from Nicolai Weibull, vim docs
" (:help strlen()), Tony Mechelynck, and my own invention.
fun! s:Strlen(x)
" call Dfunc("s:Strlen(x<".a:x.">")
if g:netrw_xstrlen == 1
" number of codepoints (Latin a + combining circumflex is two codepoints)
" (comment from TM, solution from NW)
let ret= strlen(substitute(a:x,'.','c','g'))
elseif g:netrw_xstrlen == 2
" number of spacing codepoints (Latin a + combining circumflex is one spacing
" codepoint; a hard tab is one; wide and narrow CJK are one each; etc.)
" (comment from TM, solution from TM)
let ret=strlen(substitute(a:x, '.\Z', 'x', 'g'))
elseif g:netrw_xstrlen == 3
" virtual length (counting, for instance, tabs as anything between 1 and
" 'tabstop', wide CJK as 2 rather than 1, Arabic alif as zero when immediately
" preceded by lam, one otherwise, etc.)
" (comment from TM, solution from me)
let modkeep= &mod
exe "norm! o\<esc>"
call setline(line("."),a:x)
let ret= virtcol("$") - 1
d
let &mod= modkeep
else
" at least give a decent default
ret= strlen(a:x)
endif
" call Dret("s:Strlen ".ret)
return ret
endfun
" ---------------------------------------------------------------------
" s:TreeListMove: {{{2
fun! s:TreeListMove(dir)
" call Dfunc("s:TreeListMove(dir<".a:dir.">)")
let curline = getline('.')
let prvline = (line(".") > 1)? getline(line(".")-1) : ''
let nxtline = (line(".") < line("$"))? getline(line(".")+1) : ''
let curindent= substitute(curline,'^\([| ]*\).\{-}$','\1','')
let indentm1 = substitute(curindent,'^| ','','')
" call Decho("prvline <".prvline."> #".line(".")-1)
" call Decho("curline <".curline."> #".line("."))
" call Decho("nxtline <".nxtline."> #".line(".")+1)
" call Decho("curindent<".curindent.">")
" call Decho("indentm1 <".indentm1.">")
if curline !~ '/$'
" call Decho('regfile')
if a:dir == '[' && prvline != ''
norm! 0
let nl = search('^'.indentm1.'[^|]','bWe') " search backwards from regular file
" call Decho("regfile srch back: ".nl)
elseif a:dir == ']' && nxtline != ''
norm! $
let nl = search('^'.indentm1.'[^|]','We') " search forwards from regular file
" call Decho("regfile srch fwd: ".nl)
endif
elseif a:dir == '[' && prvline != ''
norm! 0
let curline= line(".")
let nl = search('^'.curindent.'[^|]','bWe') " search backwards From directory, same indentation
" call Decho("dir srch back ind: ".nl)
if nl != 0
if line(".") == curline-1
let nl= search('^'.indentm1.'[^|]','bWe') " search backwards from directory, indentation - 1
" call Decho("dir srch back ind-1: ".nl)
endif
endif
elseif a:dir == ']' && nxtline != ''
norm! $
let curline = line(".")
let nl = search('^'.curindent.'[^|]','We') " search forwards from directory, same indentation
" call Decho("dir srch fwd ind: ".nl)
if nl != 0
if line(".") == curline+1
let nl= search('^'.indentm1.'[^|]','We') " search forwards from directory, indentation - 1
" call Decho("dir srch fwd ind-1: ".nl)
endif
endif
endif
" call Dret("s:TreeListMove")
endfun
" ---------------------------------------------------------------------
" s:UpdateBuffersMenu: does emenu Buffers.Refresh (but due to locale, the menu item may not be called that) {{{2
" The Buffers.Refresh menu calls s:BMShow(); unfortunately, that means that that function
" can't be called except via emenu. But due to locale, that menu line may not be called
" Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
fun! s:UpdateBuffersMenu()
" call Dfunc("s:UpdateBuffersMenu()")
if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
try
silent emenu Buffers.Refresh\ menu
catch /^Vim\%((\a\+)\)\=:E/
let v:errmsg= ""
silent call s:NetrwBMShow()
endtry
endif
" call Dret("s:UpdateBuffersMenu")
endfun
" ---------------------------------------------------------------------
" s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2
" Matching function to BufferWinVars()
fun! s:UseBufWinVars()
" call Dfunc("s:UseBufWinVars()")
if exists("b:netrw_liststyle") && !exists("w:netrw_liststyle") |let w:netrw_liststyle = b:netrw_liststyle |endif
if exists("b:netrw_bannercnt") && !exists("w:netrw_bannercnt") |let w:netrw_bannercnt = b:netrw_bannercnt |endif
if exists("b:netrw_method") && !exists("w:netrw_method") |let w:netrw_method = b:netrw_method |endif
if exists("b:netrw_prvdir") && !exists("w:netrw_prvdir") |let w:netrw_prvdir = b:netrw_prvdir |endif
if exists("b:netrw_explore_indx") && !exists("w:netrw_explore_indx") |let w:netrw_explore_indx = b:netrw_explore_indx |endif
if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif
if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
if exists("b:netrw_explore_bufnr") && !exists("w:netrw_explore_bufnr") |let w:netrw_explore_bufnr = b:netrw_explore_bufnr |endif
if exists("b:netrw_explore_line") && !exists("w:netrw_explore_line") |let w:netrw_explore_line = b:netrw_explore_line |endif
if exists("b:netrw_explore_list") && !exists("w:netrw_explore_list") |let w:netrw_explore_list = b:netrw_explore_list |endif
" call Dret("s:UseBufWinVars")
endfun
" ---------------------------------------------------------------------
" s:WinPath: {{{2
fun! s:WinPath(path)
" call Dfunc("s:WinPath(path<".a:path.">)")
if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
" remove trailing slash (Win95)
let path = substitute(a:path, '\(\\\|/\)$', '', 'g')
" remove escaped spaces
let path = substitute(path, '\ ', ' ', 'g')
" convert slashes to backslashes
let path = substitute(path, '/', '\', 'g')
else
let path= a:path
endif
" call Dret("s:WinPath <".path.">")
return path
endfun
" ---------------------------------------------------------------------
" Settings Restoration: {{{2
let &cpo= s:keepcpo
unlet s:keepcpo
" ------------------------------------------------------------------------
" Modelines: {{{1
" vim:ts=8 fdm=marker
--- NEW FILE netrwFileHandlers.vim ---
" netrwFileHandlers: contains various extension-based file handlers for
" netrw's browsers' x command ("eXecute launcher")
" Author: Charles E. Campbell, Jr.
" Date: Sep 30, 2008
" Version: 10
" Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" netrwFileHandlers.vim is provided *as is* and comes with no
" warranty of any kind, either expressed or implied. In no
" event will the copyright holder be liable for any damages
" resulting from the use of this software.
"
" Rom 6:23 (WEB) For the wages of sin is death, but the free gift of God {{{1
" is eternal life in Christ Jesus our Lord.
" ---------------------------------------------------------------------
" Load Once: {{{1
if exists("g:loaded_netrwFileHandlers") || &cp
finish
endif
let g:loaded_netrwFileHandlers= "v10"
if v:version < 702
echohl WarningMsg
echo "***warning*** this version of netrwFileHandlers needs vim 7.2"
echohl Normal
finish
endif
let s:keepcpo= &cpo
set cpo&vim
" ---------------------------------------------------------------------
" netrwFileHandlers#Invoke: {{{1
fun! netrwFileHandlers#Invoke(exten,fname)
" call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
let fname= a:fname
" list of supported special characters. Consider rcs,v --- that can be
" supported with a NFH_rcsCOMMAv() handler
if a:fname =~ '[@:,$!=\-+%?;~]'
let specials= {
\ '@' : 'AT',
\ ':' : 'COLON',
\ ',' : 'COMMA',
\ '$' : 'DOLLAR',
\ '!' : 'EXCLAMATION',
\ '=' : 'EQUAL',
\ '-' : 'MINUS',
\ '+' : 'PLUS',
\ '%' : 'PERCENT',
\ '?' : 'QUESTION',
\ ';' : 'SEMICOLON',
\ '~' : 'TILDE'}
let fname= substitute(a:fname,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
" call Decho('fname<'.fname.'> done with dictionary')
endif
if a:exten != "" && exists("*NFH_".a:exten)
" support user NFH_*() functions
" call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
exe "let ret= NFH_".a:exten.'("'.fname.'")'
elseif a:exten != "" && exists("*s:NFH_".a:exten)
" use builtin-NFH_*() functions
" call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
exe "let ret= s:NFH_".a:exten.'("'.fname.'")'
endif
" call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
return 0
endfun
" ---------------------------------------------------------------------
" s:NFH_html: handles html when the user hits "x" when the {{{1
" cursor is atop a *.html file
fun! s:NFH_html(pagefile)
" call Dfunc("s:NFH_html(".a:pagefile.")")
let page= substitute(a:pagefile,'^','file://','')
if executable("mozilla")
" call Decho("executing !mozilla ".page)
exe "!mozilla ".shellescape(page,1)
elseif executable("netscape")
" call Decho("executing !netscape ".page)
exe "!netscape ".shellescape(page,1)
else
" call Dret("s:NFH_html 0")
return 0
endif
" call Dret("s:NFH_html 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_htm: handles html when the user hits "x" when the {{{1
" cursor is atop a *.htm file
fun! s:NFH_htm(pagefile)
" call Dfunc("s:NFH_htm(".a:pagefile.")")
let page= substitute(a:pagefile,'^','file://','')
if executable("mozilla")
" call Decho("executing !mozilla ".page)
exe "!mozilla ".shellescape(page,1)
elseif executable("netscape")
" call Decho("executing !netscape ".page)
exe "!netscape ".shellescape(page,1)
else
" call Dret("s:NFH_htm 0")
return 0
endif
" call Dret("s:NFH_htm 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_jpg: {{{1
fun! s:NFH_jpg(jpgfile)
" call Dfunc("s:NFH_jpg(jpgfile<".a:jpgfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".shellescape(a:jpgfile,1)
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
" call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:jpgfile,1)
else
" call Dret("s:NFH_jpg 0")
return 0
endif
" call Dret("s:NFH_jpg 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_gif: {{{1
fun! s:NFH_gif(giffile)
" call Dfunc("s:NFH_gif(giffile<".a:giffile.">)")
if executable("gimp")
exe "silent! !gimp -s ".shellescape(a:giffile,1)
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:giffile,1)
else
" call Dret("s:NFH_gif 0")
return 0
endif
" call Dret("s:NFH_gif 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_png: {{{1
fun! s:NFH_png(pngfile)
" call Dfunc("s:NFH_png(pngfile<".a:pngfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".shellescape(a:pngfile,1)
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pngfile,1)
else
" call Dret("s:NFH_png 0")
return 0
endif
" call Dret("s:NFH_png 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_pnm: {{{1
fun! s:NFH_pnm(pnmfile)
" call Dfunc("s:NFH_pnm(pnmfile<".a:pnmfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".shellescape(a:pnmfile,1)
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pnmfile,1)
else
" call Dret("s:NFH_pnm 0")
return 0
endif
" call Dret("s:NFH_pnm 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_bmp: visualize bmp files {{{1
fun! s:NFH_bmp(bmpfile)
" call Dfunc("s:NFH_bmp(bmpfile<".a:bmpfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:bmpfile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:bmpfile,1)
else
" call Dret("s:NFH_bmp 0")
return 0
endif
" call Dret("s:NFH_bmp 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_pdf: visualize pdf files {{{1
fun! s:NFH_pdf(pdf)
" call Dfunc("s:NFH_pdf(pdf<".a:pdf.">)")
if executable("gs")
exe 'silent! !gs '.shellescape(a:pdf,1)
elseif executable("pdftotext")
exe 'silent! pdftotext -nopgbrk '.shellescape(a:pdf,1)
else
" call Dret("s:NFH_pdf 0")
return 0
endif
" call Dret("s:NFH_pdf 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_doc: visualize doc files {{{1
fun! s:NFH_doc(doc)
" call Dfunc("s:NFH_doc(doc<".a:doc.">)")
if executable("oowriter")
exe 'silent! !oowriter '.shellescape(a:doc,1)
redraw!
else
" call Dret("s:NFH_doc 0")
return 0
endif
" call Dret("s:NFH_doc 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_sxw: visualize sxw files {{{1
fun! s:NFH_sxw(sxw)
" call Dfunc("s:NFH_sxw(sxw<".a:sxw.">)")
if executable("oowriter")
exe 'silent! !oowriter '.shellescape(a:sxw,1)
redraw!
else
" call Dret("s:NFH_sxw 0")
return 0
endif
" call Dret("s:NFH_sxw 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_xls: visualize xls files {{{1
fun! s:NFH_xls(xls)
" call Dfunc("s:NFH_xls(xls<".a:xls.">)")
if executable("oocalc")
exe 'silent! !oocalc '.shellescape(a:xls,1)
redraw!
else
" call Dret("s:NFH_xls 0")
return 0
endif
" call Dret("s:NFH_xls 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_ps: handles PostScript files {{{1
fun! s:NFH_ps(ps)
" call Dfunc("s:NFH_ps(ps<".a:ps.">)")
if executable("gs")
" call Decho("exe silent! !gs ".a:ps)
exe "silent! !gs ".shellescape(a:ps,1)
redraw!
elseif executable("ghostscript")
" call Decho("exe silent! !ghostscript ".a:ps)
exe "silent! !ghostscript ".shellescape(a:ps,1)
redraw!
elseif executable("gswin32")
" call Decho("exe silent! !gswin32 ".shellescape(a:ps,1))
exe "silent! !gswin32 ".shellescape(a:ps,1)
redraw!
else
" call Dret("s:NFH_ps 0")
return 0
endif
" call Dret("s:NFH_ps 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_eps: handles encapsulated PostScript files {{{1
fun! s:NFH_eps(eps)
" call Dfunc("s:NFH_eps()")
if executable("gs")
exe "silent! !gs ".shellescape(a:eps,1)
redraw!
elseif executable("ghostscript")
exe "silent! !ghostscript ".shellescape(a:eps,1)
redraw!
elseif executable("ghostscript")
exe "silent! !ghostscript ".shellescape(a:eps,1)
redraw!
elseif executable("gswin32")
exe "silent! !gswin32 ".shellescape(a:eps,1)
redraw!
else
" call Dret("s:NFH_eps 0")
return 0
endif
" call Dret("s:NFH_eps 0")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_fig: handles xfig files {{{1
fun! s:NFH_fig(fig)
" call Dfunc("s:NFH_fig()")
if executable("xfig")
exe "silent! !xfig ".a:fig
redraw!
else
" call Dret("s:NFH_fig 0")
return 0
endif
" call Dret("s:NFH_fig 1")
return 1
endfun
" ---------------------------------------------------------------------
" s:NFH_obj: handles tgif's obj files {{{1
fun! s:NFH_obj(obj)
" call Dfunc("s:NFH_obj()")
if has("unix") && executable("tgif")
exe "silent! !tgif ".a:obj
redraw!
else
" call Dret("s:NFH_obj 0")
return 0
endif
" call Dret("s:NFH_obj 1")
return 1
endfun
let &cpo= s:keepcpo
" ---------------------------------------------------------------------
" Modelines: {{{1
" vim: fdm=marker
--- NEW FILE netrwPlugin.vim ---
" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
" PLUGIN SECTION
" Date: Aug 10, 2008
" Maintainer: Charles E Campbell, Jr <NdrOchip at ScampbellPfamily.AbizM-NOSPAM>
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
" *as is* and comes with no warranty of any kind, either
" expressed or implied. By using this plugin, you agree that
" in no event will the copyright holder be liable for any damages
" resulting from the use of this software.
"
" But be doers of the Word, and not only hearers, deluding your own selves {{{1
" (James 1:22 RSV)
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
" Load Once: {{{1
if &cp || exists("g:loaded_netrwPlugin")
finish
endif
let g:loaded_netrwPlugin = "v134"
if v:version < 702
echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
finish
endif
let s:keepcpo = &cpo
set cpo&vim
" ---------------------------------------------------------------------
" Public Interface: {{{1
" Local Browsing: {{{2
augroup FileExplorer
au!
au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
if has("win32") || has("win95") || has("win64") || has("win16")
au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
endif
augroup END
" Network Browsing Reading Writing: {{{2
augroup Network
au!
if has("win32") || has("win95") || has("win64") || has("win16")
au BufReadCmd file://* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
else
au BufReadCmd file://* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
endif
au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|exe '2Nread '.fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|exe 'Nread '.fnameescape(expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
try
au SourceCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>"))
catch /^Vim\%((\a\+)\)\=:E216/
au SourcePre ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>"))
endtry
augroup END
" Commands: :Nread, :Nwrite, :NetUserPass {{{2
com! -count=1 -nargs=* Nread call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
com! -range=% -nargs=* Nwrite call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
com! -nargs=* NetUserPass call NetUserPass(<f-args>)
com! -nargs=* Nsource call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>)
com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>)
com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>)
" Commands: NetrwSettings {{{2
com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings()
com! -bang NetrwClean call netrw#NetrwClean(<bang>0)
" Maps:
if !exists("g:netrw_nogx") && maparg('g','n') == ""
if !hasmapto('<Plug>NetrwBrowseX')
nmap <unique> gx <Plug>NetrwBrowseX
endif
nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
endif
" ---------------------------------------------------------------------
" LocalBrowse: {{{2
fun! s:LocalBrowse(dirname)
" unfortunate interaction -- debugging calls can't be used here;
" the BufEnter event causes triggering when attempts to write to
" the DBG buffer are made.
" echomsg "dirname<".a:dirname.">"
if has("amiga")
" The check against '' is made for the Amiga, where the empty
" string is the current directory and not checking would break
" things such as the help command.
if a:dirname != '' && isdirectory(a:dirname)
silent! call netrw#LocalBrowseCheck(a:dirname)
endif
elseif isdirectory(a:dirname)
" echomsg "dirname<".dirname."> isdir"
silent! call netrw#LocalBrowseCheck(a:dirname)
endif
" not a directory, ignore it
endfun
" ---------------------------------------------------------------------
" NetrwStatusLine: {{{1
fun! NetrwStatusLine()
" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
let &stl= s:netrw_explore_stl
if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
return ""
else
return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
endif
endfun
" ------------------------------------------------------------------------
" NetUserPass: set username and password for subsequent ftp transfer {{{1
" Usage: :call NetUserPass() -- will prompt for userid and password
" :call NetUserPass("uid") -- will prompt for password
" :call NetUserPass("uid","password") -- sets global userid and password
fun! NetUserPass(...)
" get/set userid
if a:0 == 0
" call Dfunc("NetUserPass(a:0<".a:0.">)")
if !exists("g:netrw_uid") || g:netrw_uid == ""
" via prompt
let g:netrw_uid= input('Enter username: ')
endif
else " from command line
" call Dfunc("NetUserPass(a:1<".a:1.">) {")
let g:netrw_uid= a:1
endif
" get password
if a:0 <= 1 " via prompt
" call Decho("a:0=".a:0." case <=1:")
let g:netrw_passwd= inputsecret("Enter Password: ")
else " from command line
" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
let g:netrw_passwd=a:2
endif
" call Dret("NetUserPass")
endfun
" ------------------------------------------------------------------------
" Modelines And Restoration: {{{1
let &cpo= s:keepcpo
unlet s:keepcpo
" vim:ts=8 fdm=marker
--- NEW FILE netrwSettings.vim ---
" netrwSettings.vim: makes netrw settings simpler
" Date: Sep 03, 2008
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
" Version: 13
" Copyright: Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" netrwSettings.vim is provided *as is* and comes with no
" warranty of any kind, either expressed or implied. By using
" this plugin, you agree that in no event will the copyright
" holder be liable for any damages resulting from the use
" of this software.
"
" Mat 4:23 (WEB) Jesus went about in all Galilee, teaching in their {{{1
" synagogues, preaching the gospel of the kingdom, and healing
" every disease and every sickness among the people.
" Load Once: {{{1
if exists("g:loaded_netrwSettings") || &cp
finish
endif
let g:loaded_netrwSettings = "v13"
if v:version < 700
echohl WarningMsg
echo "***warning*** this version of netrwSettings needs vim 7.0"
echohl Normal
finish
endif
" ---------------------------------------------------------------------
" NetrwSettings: {{{1
fun! netrwSettings#NetrwSettings()
" this call is here largely just to insure that netrw has been loaded
call netrw#NetrwSavePosn()
if !exists("g:loaded_netrw")
echohl WarningMsg | echomsg "***sorry*** netrw needs to be loaded prior to using NetrwSettings" | echohl None
return
endif
above wincmd s
enew
setlocal noswapfile bh=wipe
set ft=vim
file Netrw\ Settings
" these variables have the following default effects when they don't
" exist (ie. have not been set by the user in his/her .vimrc)
if !exists("g:netrw_liststyle")
let g:netrw_liststyle= 0
let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
endif
if !exists("g:netrw_silent")
let g:netrw_silent= 0
endif
if !exists("g:netrw_use_nt_rcp")
let g:netrw_use_nt_rcp= 0
endif
if !exists("g:netrw_ftp")
let g:netrw_ftp= 0
endif
if !exists("g:netrw_ignorenetrc")
let g:netrw_ignorenetrc= 0
endif
put ='+ ---------------------------------------------'
put ='+ NetrwSettings: by Charles E. Campbell, Jr.'
put ='+ Press <F1> with cursor atop any line for help'
put ='+ ---------------------------------------------'
let s:netrw_settings_stop= line(".")
put =''
put ='+ Netrw Protocol Commands'
put = 'let g:netrw_dav_cmd = '.g:netrw_dav_cmd
put = 'let g:netrw_fetch_cmd = '.g:netrw_fetch_cmd
put = 'let g:netrw_ftp_cmd = '.g:netrw_ftp_cmd
put = 'let g:netrw_http_cmd = '.g:netrw_http_cmd
put = 'let g:netrw_rcp_cmd = '.g:netrw_rcp_cmd
put = 'let g:netrw_rsync_cmd = '.g:netrw_rsync_cmd
put = 'let g:netrw_scp_cmd = '.g:netrw_scp_cmd
put = 'let g:netrw_sftp_cmd = '.g:netrw_sftp_cmd
put = 'let g:netrw_ssh_cmd = '.g:netrw_ssh_cmd
let s:netrw_protocol_stop= line(".")
put = ''
put ='+Netrw Transfer Control'
put = 'let g:netrw_cygwin = '.g:netrw_cygwin
put = 'let g:netrw_ftp = '.g:netrw_ftp
put = 'let g:netrw_ftpmode = '.g:netrw_ftpmode
put = 'let g:netrw_ignorenetrc = '.g:netrw_ignorenetrc
put = 'let g:netrw_sshport = '.g:netrw_sshport
put = 'let g:netrw_use_nt_rcp = '.g:netrw_use_nt_rcp
put = 'let g:netrw_win95ftp = '.g:netrw_win95ftp
let s:netrw_xfer_stop= line(".")
put =''
put ='+ Netrw Messages'
put ='let g:netrw_use_errorwindow = '.g:netrw_use_errorwindow
put = ''
put ='+ Netrw Browser Control'
put = 'let g:netrw_alto = '.g:netrw_alto
put = 'let g:netrw_altv = '.g:netrw_altv
put = 'let g:netrw_browse_split = '.g:netrw_browse_split
if exists("g:netrw_browsex_viewer")
put = 'let g:netrw_browsex_viewer = '.g:netrw_browsex_viewer
else
put = 'let g:netrw_browsex_viewer = (not defined)'
endif
put = 'let g:netrw_compress = '.g:netrw_compress
put = 'let g:netrw_cursorline = '.g:netrw_cursorline
let decompressline= line("$")
put ='let g:netrw_decompress...'
put = 'let g:netrw_dirhistmax = '.g:netrw_dirhistmax
put = 'let g:netrw_fastbrowse = '.g:netrw_fastbrowse
let fnameescline= line("$")
put = 'let g:netrw_fname_escape...'
put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
put = 'let g:netrw_ftp_list_cmd = '.g:netrw_ftp_list_cmd
put = 'let g:netrw_ftp_sizelist_cmd = '.g:netrw_ftp_sizelist_cmd
put = 'let g:netrw_ftp_timelist_cmd = '.g:netrw_ftp_timelist_cmd
let globescline= line("$")
put ='let g:netrw_glob_escape...'
put = 'let g:netrw_hide = '.g:netrw_hide
put = 'let g:netrw_keepdir = '.g:netrw_keepdir
put = 'let g:netrw_list_cmd = '.g:netrw_list_cmd
put = 'let g:netrw_list_hide = '.g:netrw_list_hide
put = 'let g:netrw_liststyle = '.g:netrw_liststyle
put = 'let g:netrw_localcopycmd = '.g:netrw_localcopycmd
put = 'let g:netrw_local_mkdir = '.g:netrw_local_mkdir
put = 'let g:netrw_localmovecmd = '.g:netrw_localmovecmd
put = 'let g:netrw_local_rmdir = '.g:netrw_local_rmdir
put = 'let g:netrw_maxfilenamelen = '.g:netrw_maxfilenamelen
put = 'let g:netrw_menu = '.g:netrw_menu
put = 'let g:netrw_mkdir_cmd = '.g:netrw_mkdir_cmd
put = 'let g:netrw_preview = '.g:netrw_preview
put = 'let g:netrw_rename_cmd = '.g:netrw_rename_cmd
put = 'let g:netrw_retmap = '.g:netrw_retmap
put = 'let g:netrw_rm_cmd = '.g:netrw_rm_cmd
put = 'let g:netrw_rmdir_cmd = '.g:netrw_rmdir_cmd
put = 'let g:netrw_rmf_cmd = '.g:netrw_rmf_cmd
put = 'let g:netrw_silent = '.g:netrw_silent
put = 'let g:netrw_sort_by = '.g:netrw_sort_by
put = 'let g:netrw_sort_direction = '.g:netrw_sort_direction
put = 'let g:netrw_sort_options = '.g:netrw_sort_options
put = 'let g:netrw_sort_sequence = '.g:netrw_sort_sequence
put = 'let g:netrw_special_syntax = '.g:netrw_special_syntax
put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
put = 'let g:netrw_scpport = '.g:netrw_scpport
put = 'let g:netrw_sshport = '.g:netrw_sshport
put = 'let g:netrw_timefmt = '.g:netrw_timefmt
let tmpfileescline= line("$")
put ='let g:netrw_tmpfile_escape...'
put = 'let g:netrw_use_noswf = '.g:netrw_use_noswf
put = 'let g:netrw_xstrlen = '.g:netrw_xstrlen
put = 'let g:netrw_winsize = '.g:netrw_winsize
put =''
put ='+ For help, place cursor on line and press <F1>'
1d
silent %s/^+/"/e
res 99
silent %s/= \([^0-9].*\)$/= '\1'/e
silent %s/= $/= ''/e
1
call setline(decompressline,"let g:netrw_decompress = ".substitute(string(g:netrw_decompress),"^'\\(.*\\)'$",'\1',''))
call setline(fnameescline, "let g:netrw_fname_escape = '".escape(g:netrw_fname_escape,"'")."'")
call setline(globescline, "let g:netrw_glob_escape = '".escape(g:netrw_glob_escape,"'")."'")
call setline(tmpfileescline,"let g:netrw_tmpfile_escape = '".escape(g:netrw_tmpfile_escape,"'")."'")
set nomod
nmap <buffer> <silent> <F1> :call NetrwSettingHelp()<cr>
nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call NetrwSettingHelp()<cr>
let tmpfile= tempname()
exe 'au BufWriteCmd Netrw\ Settings silent w! '.tmpfile.'|so '.tmpfile.'|call delete("'.tmpfile.'")|set nomod'
endfun
" ---------------------------------------------------------------------
" NetrwSettingHelp: {{{2
fun! NetrwSettingHelp()
" call Dfunc("NetrwSettingHelp()")
let curline = getline(".")
if curline =~ '='
let varhelp = substitute(curline,'^\s*let ','','e')
let varhelp = substitute(varhelp,'\s*=.*$','','e')
" call Decho("trying help ".varhelp)
try
exe "he ".varhelp
catch /^Vim\%((\a\+)\)\=:E149/
echo "***sorry*** no help available for <".varhelp.">"
endtry
elseif line(".") < s:netrw_settings_stop
he netrw-settings
elseif line(".") < s:netrw_protocol_stop
he netrw-externapp
elseif line(".") < s:netrw_xfer_stop
he netrw-variables
else
he netrw-browse-var
endif
" call Dret("NetrwSettingHelp")
endfun
" ---------------------------------------------------------------------
" Modelines: {{{1
" vim:ts=8 fdm=marker
--- NEW FILE tar.vim ---
" tar.vim: Handles browsing tarfiles
" AUTOLOAD PORTION
" Date: Aug 08, 2008
" Version: 23 + modifications by Bram
" Maintainer: Charles E Campbell, Jr <NdrOchip at ScampbellPfamily.AbizM-NOSPAM>
" License: Vim License (see vim's :help license)
"
" Contains many ideas from Michael Toren's <tar.vim>
"
" Copyright: Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" tar.vim and tarPlugin.vim are provided *as is* and comes
" with no warranty of any kind, either expressed or implied.
" By using this plugin, you agree that in no event will the
" copyright holder be liable for any damages resulting from
" the use of this software.
" ---------------------------------------------------------------------
" Load Once: {{{1
let s:keepcpo= &cpo
set cpo&vim
if &cp || exists("g:loaded_tar") || v:version < 700
finish
endif
let g:loaded_tar= "v23b"
"call Decho("loading autoload/tar.vim")
if v:version < 701 || (v:version == 701 && !has("patch299"))
echoerr "(autoload/tar.vim) need vim v7.1 with patchlevel 299"
endif
" ---------------------------------------------------------------------
" Default Settings: {{{1
if !exists("g:tar_browseoptions")
let g:tar_browseoptions= "Ptf"
endif
if !exists("g:tar_readoptions")
let g:tar_readoptions= "OPxf"
endif
if !exists("g:tar_cmd")
let g:tar_cmd= "tar"
endif
if !exists("g:tar_writeoptions")
let g:tar_writeoptions= "uf"
endif
if !exists("g:netrw_cygwin")
if has("win32") || has("win95") || has("win64") || has("win16")
if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
let g:netrw_cygwin= 1
else
let g:netrw_cygwin= 0
endif
else
let g:netrw_cygwin= 0
endif
endif
" set up shell quoting character
if !exists("g:tar_shq")
if exists("&shq") && &shq != ""
let g:tar_shq= &shq
elseif has("win32") || has("win95") || has("win64") || has("win16")
if exists("g:netrw_cygwin") && g:netrw_cygwin
let g:tar_shq= "'"
else
let g:tar_shq= '"'
endif
else
let g:tar_shq= "'"
endif
" call Decho("g:tar_shq<".g:tar_shq.">")
endif
" ----------------
" Functions: {{{1
" ----------------
" ---------------------------------------------------------------------
" tar#Browse: {{{2
fun! tar#Browse(tarfile)
" call Dfunc("tar#Browse(tarfile<".a:tarfile.">)")
let repkeep= &report
set report=10
" sanity checks
if !executable(g:tar_cmd)
redraw!
echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("tar#Browse")
return
endif
if !filereadable(a:tarfile)
" call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
if a:tarfile !~# '^\a\+://'
" if its an url, don't complain, let url-handlers such as vim do its thing
redraw!
echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
endif
let &report= repkeep
" call Dret("tar#Browse : file<".a:tarfile."> not readable")
return
endif
if &ma != 1
set ma
endif
let w:tarfile= a:tarfile
setlocal noswapfile
setlocal buftype=nofile
setlocal bufhidden=hide
setlocal nobuflisted
setlocal nowrap
set ft=tar
" give header
" call Decho("printing header")
let lastline= line("$")
call setline(lastline+1,'" tar.vim version '.g:loaded_tar)
call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
call setline(lastline+3,'" Select a file with cursor and press ENTER')
$put =''
0d
$
let tarfile= a:tarfile
if has("win32") && executable("cygpath")
" assuming cygwin
let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
endif
let curlast= line("$")
if tarfile =~# '\.\(gz\|tgz\)$'
" call Decho("1: exe silent r! gzip -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
exe "silent r! gzip -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
elseif tarfile =~# '\.lrp'
" call Decho("2: exe silent r! cat -- ".s:Escape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
exe "silent r! cat -- ".s:Escape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
elseif tarfile =~# '\.bz2$'
" call Decho("3: exe silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
exe "silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
else
if tarfile =~ '^\s*-'
" A file name starting with a dash may be taken as an option. Prepend ./ to avoid that.
let tarfile = substitute(tarfile, '-', './-', '')
endif
" call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".s:Escape(tarfile,1))
exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".s:Escape(tarfile,1)
endif
if v:shell_error != 0
redraw!
echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">"
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
" call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
return
endif
if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
redraw!
echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
silent %d
let eikeep= &ei
set ei=BufReadCmd,FileReadCmd
exe "r ".fnameescape(a:tarfile)
let &ei= eikeep
1d
" call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
return
endif
setlocal noma nomod ro
noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
let &report= repkeep
" call Dret("tar#Browse : w:tarfile<".w:tarfile.">")
endfun
" ---------------------------------------------------------------------
" TarBrowseSelect: {{{2
fun! s:TarBrowseSelect()
" call Dfunc("TarBrowseSelect() w:tarfile<".w:tarfile."> curfile<".expand("%").">")
let repkeep= &report
set report=10
let fname= getline(".")
" call Decho("fname<".fname.">")
if !exists("g:tar_secure") && fname =~ '^\s*-\|\s\+-'
redraw!
echohl WarningMsg | echo '***error*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"; See :help tar-options'
" call Dret('tar#BrowseSelect : rejecting tarfile member<'.fname.'> because of embedded "-"')
return
endif
" sanity check
if fname =~ '^"'
let &report= repkeep
" call Dret("TarBrowseSelect")
return
endif
" about to make a new window, need to use w:tarfile
let tarfile= w:tarfile
let curfile= expand("%")
if has("win32") && executable("cygpath")
" assuming cygwin
let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
endif
new
if !exists("g:tar_nomax") || g:tar_nomax == 0
wincmd _
endif
let s:tblfile_{winnr()}= curfile
call tar#Read("tarfile:".tarfile.'::'.fname,1)
filetype detect
let &report= repkeep
" call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
endfun
" ---------------------------------------------------------------------
" tar#Read: {{{2
fun! tar#Read(fname,mode)
" call Dfunc("tar#Read(fname<".a:fname.">,mode=".a:mode.")")
let repkeep= &report
set report=10
let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','')
let fname = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
if has("win32") && executable("cygpath")
" assuming cygwin
let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
endif
" call Decho("tarfile<".tarfile.">")
" call Decho("fname<".fname.">")
if fname =~ '\.gz$' && executable("zcat")
let decmp= "|zcat"
let doro = 1
elseif fname =~ '\.bz2$' && executable("bzcat")
let decmp= "|bzcat"
let doro = 1
else
let decmp=""
let doro = 0
if fname =~ '\.gz$\|\.bz2$\|\.Z$\|\.zip$'
setlocal bin
endif
endif
if exists("g:tar_secure")
let tar_secure= " -- "
else
let tar_secure= " "
endif
if tarfile =~# '\.\(gz\|tgz\)$'
" call Decho("5: exe silent r! gzip -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.s:Escape(fname,1))
exe "silent r! gzip -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
elseif tarfile =~# '\.lrp$'
" call Decho("6: exe silent r! cat ".s:Escape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp)
exe "silent r! cat -- ".s:Escape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
elseif tarfile =~# '\.bz2$'
" call Decho("7: exe silent r! bzip2 -d -c ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp)
exe "silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
else
if tarfile =~ '^\s*-'
" A file name starting with a dash may be taken as an option. Prepend ./ to avoid that.
let tarfile = substitute(tarfile, '-', './-', '')
endif
" call Decho("8: exe silent r! ".g:tar_cmd." -".g:tar_readoptions." "s:Escape(tarfile,1).tar_secure..s:Escape(fname,1).decmp)
exe "silent r! ".g:tar_cmd." -".g:tar_readoptions." ".s:Escape(tarfile,1).tar_secure.s:Escape(fname,1).decmp
endif
if doro
" because the reverse process of compressing changed files back into the tarball is not currently supported
setlocal ro
endif
let w:tarfile= a:fname
exe "file tarfile::".fnameescape(fname)
" cleanup
0d
set nomod
let &report= repkeep
" call Dret("tar#Read : w:tarfile<".w:tarfile.">")
endfun
" ---------------------------------------------------------------------
" tar#Write: {{{2
fun! tar#Write(fname)
" call Dfunc("tar#Write(fname<".a:fname.">) w:tarfile<".w:tarfile."> tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
let repkeep= &report
set report=10
if !exists("g:tar_secure") && a:fname =~ '^\s*-\|\s\+-'
redraw!
echohl WarningMsg | echo '***error*** (tar#Write) rejecting tarfile member<'.a:fname.'> because of embedded "-"; See :help tar-options'
" call Dret('tar#Write : rejecting tarfile member<'.fname.'> because of embedded "-"')
return
endif
" sanity checks
if !executable(g:tar_cmd)
redraw!
echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("tar#Write")
return
endif
if !exists("*mkdir")
redraw!
echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("tar#Write")
return
endif
let curdir= getcwd()
let tmpdir= tempname()
" call Decho("orig tempname<".tmpdir.">")
if tmpdir =~ '\.'
let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
endif
" call Decho("tmpdir<".tmpdir.">")
call mkdir(tmpdir,"p")
" attempt to change to the indicated directory
try
exe "cd ".fnameescape(tmpdir)
catch /^Vim\%((\a\+)\)\=:E344/
redraw!
echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("tar#Write")
return
endtry
" call Decho("current directory now: ".getcwd())
" place temporary files under .../_ZIPVIM_/
if isdirectory("_ZIPVIM_")
call s:Rmdir("_ZIPVIM_")
endif
call mkdir("_ZIPVIM_")
cd _ZIPVIM_
" call Decho("current directory now: ".getcwd())
let tarfile = substitute(w:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
let fname = substitute(w:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
" handle compressed archives
if tarfile =~# '\.gz'
call system("gzip -d -- ".s:Escape(tarfile,0))
let tarfile = substitute(tarfile,'\.gz','','e')
let compress= "gzip -- ".s:Escape(tarfile,0)
" call Decho("compress<".compress.">")
elseif tarfile =~# '\.tgz'
call system("gzip -d -- ".s:Escape(tarfile,0))
let tarfile = substitute(tarfile,'\.tgz','.tar','e')
let compress= "gzip -- ".s:Escape(tarfile,0)
let tgz = 1
" call Decho("compress<".compress.">")
elseif tarfile =~# '\.bz2'
call system("bzip2 -d -- ".s:Escape(tarfile,0))
let tarfile = substitute(tarfile,'\.bz2','','e')
let compress= "bzip2 -- ".s:Escape(tarfile,0)
" call Decho("compress<".compress.">")
endif
" call Decho("tarfile<".tarfile.">")
if v:shell_error != 0
redraw!
echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
else
" call Decho("tarfile<".tarfile."> fname<".fname.">")
if fname =~ '/'
let dirpath = substitute(fname,'/[^/]\+$','','e')
if executable("cygpath")
let dirpath = substitute(system("cygpath ".s:Escape(dirpath, 0)),'\n','','e')
endif
call mkdir(dirpath,"p")
endif
if tarfile !~ '/'
let tarfile= curdir.'/'.tarfile
endif
if tarfile =~ '^\s*-'
" A file name starting with a dash may be taken as an option. Prepend ./ to avoid that.
let tarfile = substitute(tarfile, '-', './-', '')
endif
" call Decho("tarfile<".tarfile."> fname<".fname.">")
if exists("g:tar_secure")
let tar_secure= " -- "
else
let tar_secure= " "
endif
exe "w! ".fnameescape(fname)
if executable("cygpath")
let tarfile = substitute(system("cygpath ".s:Escape(tarfile,0)),'\n','','e')
endif
" delete old file from tarfile
" call Decho("system(".g:tar_cmd." --delete -f ".s:Escape(tarfile,0)." -- ".s:Escape(fname,0).")")
call system(g:tar_cmd." --delete -f ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
if v:shell_error != 0
redraw!
echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
else
" update tarfile with new file
" call Decho(g:tar_cmd." -".g:tar_writeoptions." ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
call system(g:tar_cmd." -".g:tar_writeoptions." ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
if v:shell_error != 0
redraw!
echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
elseif exists("compress")
" call Decho("call system(".compress.")")
call system(compress)
if exists("tgz")
" call Decho("rename(".tarfile.".gz,".substitute(tarfile,'\.tar$','.tgz','e').")")
call rename(tarfile.".gz",substitute(tarfile,'\.tar$','.tgz','e'))
endif
endif
endif
" support writing tarfiles across a network
if s:tblfile_{winnr()} =~ '^\a\+://'
" call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">")
let tblfile= s:tblfile_{winnr()}
1split|enew
let binkeep= &binary
let eikeep = &ei
set binary ei=all
exe "e! ".fnameescape(tarfile)
call netrw#NetWrite(tblfile)
let &ei = eikeep
let &binary = binkeep
q!
unlet s:tblfile_{winnr()}
endif
endif
" cleanup and restore current directory
cd ..
call s:Rmdir("_ZIPVIM_")
exe "cd ".fnameescape(curdir)
setlocal nomod
let &report= repkeep
" call Dret("tar#Write")
endfun
" ---------------------------------------------------------------------
" Rmdir: {{{2
fun! s:Rmdir(fname)
" call Dfunc("Rmdir(fname<".a:fname.">)")
if has("unix")
call system("/bin/rm -rf -- ".s:Escape(a:fname,0))
elseif has("win32") || has("win95") || has("win64") || has("win16")
if &shell =~? "sh$"
call system("/bin/rm -rf -- ".s:Escape(a:fname,0))
else
call system("del /S ".s:Escape(a:fname,0))
endif
endif
" call Dret("Rmdir")
endfun
" ---------------------------------------------------------------------
" s:Escape: {{{2
fun s:Escape(name,isfilt)
" shellescape() was added by patch 7.0.111
if exists("*shellescape")
if a:isfilt
let qnameq= shellescape(a:name,1)
else
let qnameq= shellescape(a:name)
endif
else
let qnameq= g:tar_shq . a:name . g:tar_shq
endif
return qnameq
endfun
" ---------------------------------------------------------------------
" Modelines And Restoration: {{{1
let &cpo= s:keepcpo
unlet s:keepcpo
" vim:ts=8 fdm=marker
--- NEW FILE zip.vim ---
" zip.vim: Handles browsing zipfiles
" AUTOLOAD PORTION
" Date: Jul 30, 2008
" Version: 22
" Maintainer: Charles E Campbell, Jr <NdrOchip at ScampbellPfamily.AbizM-NOSPAM>
" License: Vim License (see vim's :help license)
" Copyright: Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" zip.vim and zipPlugin.vim are provided *as is* and comes with
" no warranty of any kind, either expressed or implied. By using
" this plugin, you agree that in no event will the copyright
" holder be liable for any damages resulting from the use
" of this software.
" ---------------------------------------------------------------------
" Load Once: {{{1
let s:keepcpo= &cpo
set cpo&vim
if &cp || exists("g:loaded_zip") || v:version < 700
finish
endif
let g:loaded_zip = "v22"
let s:zipfile_escape = ' ?&;\'
let s:ERROR = 2
let s:WARNING = 1
let s:NOTE = 0
" ---------------------------------------------------------------------
" Global Values: {{{1
if !exists("g:zip_shq")
if &shq != ""
let g:zip_shq= &shq
elseif has("unix")
let g:zip_shq= "'"
else
let g:zip_shq= '"'
endif
endif
if !exists("g:zip_zipcmd")
let g:zip_zipcmd= "zip"
endif
if !exists("g:zip_unzipcmd")
let g:zip_unzipcmd= "unzip"
endif
" ----------------
" Functions: {{{1
" ----------------
" ---------------------------------------------------------------------
" zip#Browse: {{{2
fun! zip#Browse(zipfile)
" call Dfunc("zip#Browse(zipfile<".a:zipfile.">)")
let repkeep= &report
set report=10
" sanity checks
if !exists("*fnameescape")
if &verbose > 1
echoerr "the zip plugin is not available (your vim doens't support fnameescape())"
endif
return
endif
if !executable(g:zip_unzipcmd)
redraw!
echohl Error | echo "***error*** (zip#Browse) unzip not available on your system"
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("zip#Browse")
return
endif
if !filereadable(a:zipfile)
if a:zipfile !~# '^\a\+://'
" if its an url, don't complain, let url-handlers such as vim do its thing
redraw!
echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
endif
let &report= repkeep
" call Dret("zip#Browse : file<".a:zipfile."> not readable")
return
endif
" call Decho("passed sanity checks")
if &ma != 1
set ma
endif
let b:zipfile= a:zipfile
setlocal noswapfile
setlocal buftype=nofile
setlocal bufhidden=hide
setlocal nobuflisted
setlocal nowrap
set ft=tar
" give header
let lastline= line("$")
call setline(lastline+1,'" zip.vim version '.g:loaded_zip)
call setline(lastline+2,'" Browsing zipfile '.a:zipfile)
call setline(lastline+3,'" Select a file with cursor and press ENTER')
$put =''
0d
$
" call Decho("exe silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1))
exe "silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1)
if v:shell_error != 0
redraw!
echohl WarningMsg | echo "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
silent %d
let eikeep= &ei
set ei=BufReadCmd,FileReadCmd
exe "r ".fnameescape(a:zipfile)
let &ei= eikeep
1d
" call Dret("zip#Browse")
return
endif
" call Decho("line 6: ".getline(6))
let namecol= stridx(getline(6),'Name') + 1
" call Decho("namecol=".namecol)
4,$g/^\s*----/d
4,$g/^\s*\a/d
$d
if namecol > 0
exe 'silent 4,$s/^.*\%'.namecol.'c//'
endif
setlocal noma nomod ro
noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
let &report= repkeep
" call Dret("zip#Browse")
endfun
" ---------------------------------------------------------------------
" ZipBrowseSelect: {{{2
fun! s:ZipBrowseSelect()
" call Dfunc("ZipBrowseSelect() zipfile<".b:zipfile."> curfile<".expand("%").">")
let repkeep= &report
set report=10
let fname= getline(".")
" sanity check
if fname =~ '^"'
let &report= repkeep
" call Dret("ZipBrowseSelect")
return
endif
if fname =~ '/$'
redraw!
echohl Error | echo "***error*** (zip#Browse) Please specify a file, not a directory" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("ZipBrowseSelect")
return
endif
" call Decho("fname<".fname.">")
" get zipfile to the new-window
let zipfile = b:zipfile
let curfile= expand("%")
" call Decho("zipfile<".zipfile.">")
" call Decho("curfile<".curfile.">")
new
if !exists("g:zip_nomax") || g:zip_nomax == 0
wincmd _
endif
let s:zipfile_{winnr()}= curfile
" call Decho("exe e ".fnameescape("zipfile:".zipfile.'::'.fname))
exe "e ".fnameescape("zipfile:".zipfile.'::'.fname)
filetype detect
let &report= repkeep
" call Dret("ZipBrowseSelect : s:zipfile_".winnr()."<".s:zipfile_{winnr()}.">")
endfun
" ---------------------------------------------------------------------
" zip#Read: {{{2
fun! zip#Read(fname,mode)
" call Dfunc("zip#Read(fname<".a:fname.">,mode=".a:mode.")")
let repkeep= &report
set report=10
if has("unix")
let zipfile = substitute(a:fname,'zipfile:\(.\{-}\)::[^\\].*$','\1','')
let fname = substitute(a:fname,'zipfile:.\{-}::\([^\\].*\)$','\1','')
else
let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
let fname = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
let fname = substitute(fname, '[', '[[]', 'g')
endif
" call Decho("zipfile<".zipfile.">")
" call Decho("fname <".fname.">")
" call Decho("exe r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1))
exe "silent r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1)
" cleanup
0d
set nomod
let &report= repkeep
" call Dret("zip#Read")
endfun
" ---------------------------------------------------------------------
" zip#Write: {{{2
fun! zip#Write(fname)
" call Dfunc("zip#Write(fname<".a:fname.">) zipfile_".winnr()."<".s:zipfile_{winnr()}.">")
let repkeep= &report
set report=10
" sanity checks
if !executable(g:zip_zipcmd)
redraw!
echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the zip pgm" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("zip#Write")
return
endif
if !exists("*mkdir")
redraw!
echohl Error | echo "***error*** (zip#Write) sorry, mkdir() doesn't work on your system" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("zip#Write")
return
endif
let curdir= getcwd()
let tmpdir= tempname()
" call Decho("orig tempname<".tmpdir.">")
if tmpdir =~ '\.'
let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
endif
" call Decho("tmpdir<".tmpdir.">")
call mkdir(tmpdir,"p")
" attempt to change to the indicated directory
if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot cd to temporary directory")
let &report= repkeep
" call Dret("zip#Write")
return
endif
" call Decho("current directory now: ".getcwd())
" place temporary files under .../_ZIPVIM_/
if isdirectory("_ZIPVIM_")
call s:Rmdir("_ZIPVIM_")
endif
call mkdir("_ZIPVIM_")
cd _ZIPVIM_
" call Decho("current directory now: ".getcwd())
if has("unix")
let zipfile = substitute(a:fname,'zipfile:\(.\{-}\)::[^\\].*$','\1','')
let fname = substitute(a:fname,'zipfile:.\{-}::\([^\\].*\)$','\1','')
else
let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
let fname = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
endif
" call Decho("zipfile<".zipfile.">")
" call Decho("fname <".fname.">")
if fname =~ '/'
let dirpath = substitute(fname,'/[^/]\+$','','e')
if executable("cygpath")
let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e')
endif
" call Decho("mkdir(dirpath<".dirpath.">,p)")
call mkdir(dirpath,"p")
endif
if zipfile !~ '/'
let zipfile= curdir.'/'.zipfile
endif
" call Decho("zipfile<".zipfile."> fname<".fname.">")
exe "w! ".fnameescape(fname)
if executable("cygpath")
let zipfile = substitute(system("cygpath ".s:Escape(zipfile,0)),'\n','','e')
endif
if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
let fname = substitute(fname, '[', '[[]', 'g')
endif
" call Decho(g:zip_zipcmd." -u ".s:Escape(fnamemodify(zipfile,":p"),0)." ".s:Escape(fname,0))
call system(g:zip_zipcmd." -u ".s:Escape(fnamemodify(zipfile,":p"),0)." ".s:Escape(fname,0))
if v:shell_error != 0
redraw!
echohl Error | echo "***error*** (zip#Write) sorry, unable to update ".zipfile." with ".fname | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
elseif s:zipfile_{winnr()} =~ '^\a\+://'
" support writing zipfiles across a network
let netzipfile= s:zipfile_{winnr()}
" call Decho("handle writing <".zipfile."> across network as <".netzipfile.">")
1split|enew
let binkeep= &binary
let eikeep = &ei
set binary ei=all
exe "e! ".fnameescape(zipfile)
call netrw#NetWrite(netzipfile)
let &ei = eikeep
let &binary = binkeep
q!
unlet s:zipfile_{winnr()}
endif
" cleanup and restore current directory
cd ..
call s:Rmdir("_ZIPVIM_")
call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
call s:Rmdir(tmpdir)
setlocal nomod
let &report= repkeep
" call Dret("zip#Write")
endfun
" ---------------------------------------------------------------------
" s:Escape: {{{2
fun! s:Escape(fname,isfilt)
" call Dfunc("QuoteFileDir(fname<".a:fname."> isfilt=".a:isfilt.")")
if exists("*shellescape")
if a:isfilt
let qnameq= shellescape(a:fname,1)
else
let qnameq= shellescape(a:fname)
endif
else
let qnameq= g:zip_shq.escape(a:fname,g:zip_shq).g:zip_shq
endif
" call Dret("QuoteFileDir <".qnameq.">")
return qnameq
endfun
" ---------------------------------------------------------------------
" ChgDir: {{{2
fun! s:ChgDir(newdir,errlvl,errmsg)
" call Dfunc("ChgDir(newdir<".a:newdir."> errlvl=".a:errlvl." errmsg<".a:errmsg.">)")
try
exe "cd ".fnameescape(a:newdir)
catch /^Vim\%((\a\+)\)\=:E344/
redraw!
if a:errlvl == s:NOTE
echo "***note*** ".a:errmsg
elseif a:errlvl == s:WARNING
echohl WarningMsg | echo "***warning*** ".a:errmsg | echohl NONE
elseif a:errlvl == s:ERROR
echohl Error | echo "***error*** ".a:errmsg | echohl NONE
endif
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
" call Dret("ChgDir 1")
return 1
endtry
" call Dret("ChgDir 0")
return 0
endfun
" ---------------------------------------------------------------------
" s:Rmdir: {{{2
fun! s:Rmdir(fname)
" call Dfunc("Rmdir(fname<".a:fname.">)")
if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
call system("rmdir /S/Q ".s:Escape(a:fname,0))
else
call system("/bin/rm -rf ".s:Escape(a:fname,0))
endif
" call Dret("Rmdir")
endfun
" ------------------------------------------------------------------------
" Modelines And Restoration: {{{1
let &cpo= s:keepcpo
unlet s:keepcpo
" vim:ts=8 fdm=marker
Index: README.patches
===================================================================
RCS file: /cvs/extras/rpms/vim/F-10/README.patches,v
retrieving revision 1.114
retrieving revision 1.115
diff -u -r1.114 -r1.115
--- README.patches 3 Nov 2008 11:44:50 -0000 1.114
+++ README.patches 1 Dec 2008 15:57:03 -0000 1.115
@@ -51,3 +51,37 @@
1452 7.2.024 'history' can be made negative, causes out-of-memory error
1470 7.2.025 a CursorHold event that invokes system() is retriggered
2969 7.2.026 (after 7.2.010) 'K' uses the rest of the line
+ 3235 7.2.027 can use cscope commands in the sandbox, might not be safe
+ 1466 7.2.028 confusing error message for missing ()
+ 1291 7.2.029 no completion for ":doautoall" like for ":doautocmd"
+ 1546 7.2.030 (after 7.2.027) can't compile, ex_oldfiles undefined
+ 39400 7.2.031 file names from viminfo are not available to the user
+ 1583 7.2.032 (after 7.2.031) can't compile with EXITFREE defined
+ 2270 7.2.033 using "ucs-2le" for two-byte BOM, but text might be "utf-16le"
+ 2372 7.2.034 memory leak in spell info when deleting a buffer
+ 3522 7.2.035 mismatches for library and Vim alloc/free functions
+ 7545 7.2.036 (extra) mismatches for library and Vim alloc/free functions
+ 1576 7.2.037 double free with GTK 1 and compiled with EXITFREE
+ 2438 7.2.038 overlapping arguments to memcpy()
+ 1378 7.2.039 accessing freed memory on exit when EXITFREE is defined
+ 1836 7.2.040 ":e ++ff=dos foo" gets "unix" 'ff' when CR before NL missing
+ 22993 7.2.041 diff messed up when editing a diff buffer in another tab page
+ 4987 7.2.042 restoring view in autocmd sometimes doesn't work completely
+ 2550 7.2.043 VMS: Too many chars escaped in filename and shell commands
+ 5639 7.2.044 crash because of gcc 4 being over protective for strcpy()
+ 2056 7.2.045 the Python interface has an empty entry in sys.path
+ 1704 7.2.046 wrong check for filling buffer with encoding
+ 2470 7.2.047 using -nb while it is not supported makes other side hang
+ 4758 7.2.048 v:count and v:prevcount are not set correctly
+ 32552 7.2.049 (extra) Win32: the clipboard doesn't support UTF-16
+ 8484 7.2.050 compiler warnings for not using return value of fwrite()
+ 15179 7.2.051 can't avoid 'wig' and 'suffixes' for glob() and globpath()
+ 2611 7.2.052 synIDattr() doesn't support "sp" for special color
+ 1754 7.2.053 crash when using WorkShop command ":ws foo"
+ 2006 7.2.054 compilation warnings for fprintf format
+ 34319 7.2.055 various compiler warnings with strict checking
+ 1635 7.2.056 (after 7.2.050) tests 58 and 59 fail
+ 3210 7.2.057 (after 7.2.056) trying to put size_t in int variable
+ 2338 7.2.058 can't add a feature name in the :version output
+ 1847 7.2.059 diff is not always displayed properly
+ 34772 7.2.060 spell checking doesn't work well for compound words
Index: vim.spec
===================================================================
RCS file: /cvs/extras/rpms/vim/F-10/vim.spec,v
retrieving revision 1.226
retrieving revision 1.227
diff -u -r1.226 -r1.227
--- vim.spec 3 Nov 2008 13:48:56 -0000 1.226
+++ vim.spec 1 Dec 2008 15:57:05 -0000 1.227
@@ -8,7 +8,7 @@
%define desktop_file_utils_version 0.2.93
%endif
-%define withnetbeans 0
+%define withnetbeans 1
%define withvimspell 0
%define withhunspell 0
@@ -18,13 +18,13 @@
#used for pre-releases:
%define beta %{nil}
%define vimdir vim72%{?beta}
-%define patchlevel 026
+%define patchlevel 060
Summary: The VIM editor
URL: http://www.vim.org/
Name: vim
Version: %{baseversion}.%{beta}%{patchlevel}
-Release: 2%{?dist}
+Release: 1%{?dist}
License: Vim
Group: Applications/Editors
Source0: ftp://ftp.vim.org/pub/vim/unix/vim-%{baseversion}%{?beta}%{?CVSDATE}.tar.bz2
@@ -45,6 +45,16 @@
Source14: spec-template
Source15: http://www.cvjb.de/comp/vim/forth.vim
+# remove this for the next major version, CVE fixes:
+Source16: ftp://ftp.vim.org/vol/2/vim/runtime/plugin/netrwPlugin.vim
+Source17: ftp://ftp.vim.org/vol/2/vim/runtime/plugin/gzip.vim
+Source18: ftp://ftp.vim.org/vol/2/vim/runtime/filetype.vim
+Source19: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/zip.vim
+Source20: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/tar.vim
+Source21: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrwFileHandlers.vim
+Source22: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrw.vim
+Source23: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrwSettings.vim
+
Patch2002: vim-7.0-fixkeys.patch
Patch2003: vim-6.2-specsyntax.patch
Patch2004: vim-7.0-crv.patch
@@ -56,32 +66,66 @@
# Patches 001 < 999 are patches from the base maintainer.
# If you're as lazy as me, generate the list using
# for i in `seq 1 14`; do printf "Patch%03d: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.%03d\n" $i $i; done
-Patch001: 7.2.001
-Patch002: 7.2.002
-Patch003: 7.2.003
-Patch004: 7.2.004
-Patch005: 7.2.005
-Patch006: 7.2.006
-Patch007: 7.2.007
-Patch008: 7.2.008
-Patch009: 7.2.009
-Patch010: 7.2.010
-Patch011: 7.2.011
-Patch012: 7.2.012
-Patch013: 7.2.013
-Patch014: 7.2.014
-Patch015: 7.2.015
-Patch016: 7.2.016
-Patch017: 7.2.017
-Patch018: 7.2.018
-Patch019: 7.2.019
-Patch020: 7.2.020
-Patch021: 7.2.021
-Patch022: 7.2.022
-Patch023: 7.2.023
-Patch024: 7.2.024
-Patch025: 7.2.025
-Patch026: 7.2.026
+Patch001: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.001
+Patch002: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.002
+Patch003: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.003
+Patch004: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.004
+Patch005: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.005
+Patch006: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.006
+Patch007: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.007
+Patch008: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.008
+Patch009: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.009
+Patch010: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.010
+Patch011: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.011
+Patch012: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.012
+Patch013: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.013
+Patch014: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.014
+Patch015: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.015
+Patch016: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.016
+Patch017: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.017
+Patch018: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.018
+Patch019: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.019
+Patch020: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.020
+Patch021: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.021
+Patch022: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.022
+Patch023: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.023
+Patch024: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.024
+Patch025: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.025
+Patch026: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.026
+Patch027: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.027
+Patch028: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.028
+Patch029: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.029
+Patch030: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.030
+Patch031: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.031
+Patch032: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.032
+Patch033: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.033
+Patch034: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.034
+Patch035: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.035
+Patch036: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.036
+Patch037: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.037
+Patch038: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.038
+Patch039: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.039
+Patch040: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.040
+Patch041: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.041
+Patch042: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.042
+Patch043: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.043
+Patch044: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.044
+Patch045: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.045
+Patch046: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.046
+Patch047: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.047
+Patch048: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.048
+Patch049: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.049
+Patch050: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.050
+Patch051: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.051
+Patch052: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.052
+Patch053: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.053
+Patch054: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.054
+Patch055: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.055
+Patch056: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.056
+Patch057: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.057
+Patch058: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.058
+Patch059: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.059
+Patch060: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.060
Patch3000: vim-7.0-syntax.patch
Patch3002: vim-7.1-nowarnings.patch
@@ -241,6 +285,41 @@
%patch024 -p0
%patch025 -p0
%patch026 -p0
+%patch027 -p0
+%patch028 -p0
+%patch029 -p0
+%patch030 -p0
+%patch031 -p0
+%patch032 -p0
+%patch033 -p0
+%patch034 -p0
+%patch035 -p0
+%patch036 -p0
+%patch037 -p0
+%patch038 -p0
+%patch039 -p0
+%patch040 -p0
+%patch041 -p0
+%patch042 -p0
+%patch043 -p0
+%patch044 -p0
+%patch045 -p0
+%patch046 -p0
+%patch047 -p0
+%patch048 -p0
+%patch049 -p0
+%patch050 -p0
+%patch051 -p0
+%patch052 -p0
+%patch053 -p0
+%patch054 -p0
+%patch055 -p0
+%patch056 -p0
+%patch057 -p0
+%patch058 -p0
+%patch059 -p0
+%patch060 -p0
+
# install spell files
%if %{withvimspell}
@@ -260,6 +339,14 @@
%patch3011 -p1
cp -f %{SOURCE15} runtime/syntax/forth.vim
+cp -f %{SOURCE16} runtime/plugin/netrwPlugin.vim
+cp -f %{SOURCE17} runtime/plugin/gzip.vim
+cp -f %{SOURCE18} runtime/plugin/filetype.vim
+cp -f %{SOURCE19} runtime/autoload/zip.vim
+cp -f %{SOURCE20} runtime/autoload/tar.vim
+cp -f %{SOURCE21} runtime/autoload/netrwFileHandlers.vim
+cp -f %{SOURCE22} runtime/autoload/netrw.vim
+cp -f %{SOURCE23} runtime/autoload/netrwSettings.vim
%build
@@ -691,6 +778,12 @@
%{_datadir}/icons/hicolor/*/apps/*
%changelog
+* Mon Dec 01 2008 Karsten Hopp <karsten at redhat.com> 7.2.060-1
+- patchlevel 60
+
+* Mon Nov 10 2008 Karsten Hopp <karsten at redhat.com> 7.2.032-1
+- patchlevel 32
+
* Mon Nov 03 2008 Karsten Hopp <karsten at redhat.com> 7.2.026-2
- add more /usr/share/vim/vimfiles directories (#444387)
--- vim-6.4-cvim.patch DELETED ---
--- vim-7.1-ada.patch DELETED ---
--- vim-7.1-erlang.patch DELETED ---
- Previous message (by thread): rpms/bind/F-10 bind.spec,1.285,1.286 named.conf.sample,1.4,1.5
- Next message (by thread): rpms/ufraw/F-9 .cvsignore, 1.9, 1.10 sources, 1.9, 1.10 ufraw.spec, 1.32, 1.33
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list