mirror of
https://github.com/macvim-dev/macvim.git
synced 2026-06-11 15:37:29 +02:00
Merge branch 'vim'
Conflicts: src/if_ruby.c
This commit is contained in:
@@ -38,6 +38,15 @@ src/Obj*/pathdef.c
|
||||
gvimext.dll
|
||||
gvimext.lib
|
||||
|
||||
# Borland C++
|
||||
bcc.cfg
|
||||
*.ilc
|
||||
*.ild
|
||||
*.ilf
|
||||
*.ils
|
||||
*.map
|
||||
*.tds
|
||||
|
||||
# Mac OSX
|
||||
src/xxd/xxd.dSYM
|
||||
|
||||
|
||||
@@ -2826,3 +2826,83 @@ acbe5414cb7f302f548bc1cbdc1ddb029dbf9094 v7-4-095
|
||||
ec5d11403c1952b2ed192f28afb6261d0867bb20 v7-4-101
|
||||
9417f4de27a2a6acfa6b1660ac6ef2b5692e4554 v7-4-102
|
||||
4db151014f93b7512919e452e6b3f4184758db7b v7-4-103
|
||||
dd7d1a86b311c11e9c03b7ca95c7b62206bbc7ab v7-4-104
|
||||
eed95874f30e9d9dad577f2361f2dfed93c5db4d v7-4-105
|
||||
de9a01851ebd1ce1d225b40c182b6f1e105863a7 v7-4-106
|
||||
064e2a080e2e158177acc017c318bc953fb7535b v7-4-107
|
||||
fa31c5b82424373885d2fa55b4f8531ac21baacd v7-4-108
|
||||
1cdf517067743dc33ebb9c7af8844abd9d9c7863 v7-4-109
|
||||
6e54d1b3408ca745341b0b219c588c265fa52494 v7-4-110
|
||||
3fbda56bb2008e2459951f3ad0258ff0500ba07c v7-4-111
|
||||
af8217e4ed7e28b797c628f067ebfd4433c07326 v7-4-112
|
||||
0e21e2a38ec6df5c4fe37d639906f56f9f445b96 v7-4-113
|
||||
6db758f82227989426560c19fdd234b154b54419 v7-4-114
|
||||
e35c69ad482370b2685bf1360a63fb27ce8b3819 v7-4-115
|
||||
40aff213baff00d43ea8c1b6a9734ccad63a3921 v7-4-116
|
||||
805ad8488dc88a575b841589f36c278aaead4e52 v7-4-117
|
||||
62c720661f81c17348636956c1158639d59e1e9f v7-4-118
|
||||
2f99966971b0556bc302ec809712f5ba3f030028 v7-4-119
|
||||
ca0e43bbf8f9e409130d5d1ce29621edbcdff92a v7-4-120
|
||||
4bf53c1ef37a5023e06f3c6b4f1c24857b4f52a6 v7-4-121
|
||||
270c62fe685ae943de64e1a4ab295dae6f4ccabe v7-4-122
|
||||
32e50f85d2c7a56c600a2c36107e56fa9f2952cb v7-4-123
|
||||
9faba192ea90a32ee137aa42f5027b098931ddb2 v7-4-124
|
||||
45ef9d2096e82d6a56a58606b6811620a61cb1ba v7-4-125
|
||||
b14554844756422a39c72e62b8c2391c2d5a2e17 v7-4-126
|
||||
6f5a7d3943007afc6bc03c445380776e18787f0c v7-4-127
|
||||
4b92012f6b18f56664c268200fb54f1316495dc5 v7-4-128
|
||||
1e28c0fad344549665c60c62374e6f511e5aec76 v7-4-129
|
||||
cf722c09236098ae585840d62eca68dbf8065247 v7-4-130
|
||||
4b23119cb58473ab70cf1a1204d4d3fad83881ec v7-4-131
|
||||
1b09d6792520cbe1c94c20f6c833ad57316e75bb v7-4-132
|
||||
6a28a9cf51537b81da7e9ec3f70fea55e393b345 v7-4-133
|
||||
0defb460a0ebbc954b0f22267cb06e9d210be43a v7-4-134
|
||||
1aeb7f4d6527369cf5f9101813ce8f10caf7a869 v7-4-135
|
||||
3881cd916014605875de128226b83a24d18afe46 v7-4-136
|
||||
6fdb1d6646b6b256623edb05f9dd770eeacaeb05 v7-4-137
|
||||
6eb60041548ce42748cd8d7d49bdbf9dd164c967 v7-4-138
|
||||
c8c80c9d2e2237fedeadfb1c6856c53c7a5e90d2 v7-4-139
|
||||
505cf1943dc238c2383dcbc37a93fbb136e1f08b v7-4-140
|
||||
2ca470c6096e3ec7cbbedeb1d0281056b088812b v7-4-141
|
||||
735b70faac4a54ca9d8ebc2303ba28d5d18017e2 v7-4-142
|
||||
d11f223f4c753889fa8f974f295c2a0a451c653c v7-4-143
|
||||
bcf25cc08236c2adc27a4d7d556e11e8ea6ddce2 v7-4-144
|
||||
1098b7b6e147cdd324ac665340540922c2cdceb3 v7-4-145
|
||||
ec93f50f1d93c4c279606117a9f3eb37301b051a v7-4-146
|
||||
d289f2167d702c87493d1934db863df29676e261 v7-4-147
|
||||
8507bf8874d816a79411bc74df71fa58b557b71d v7-4-148
|
||||
b43363a7b4c71a7a4e20dc21f4906f4595785983 v7-4-149
|
||||
15960ebc2ee8539a1f15f660d43df1a502c34829 v7-4-150
|
||||
ec02e1474bc2bbfd73349e7fedf62ae45f941ad9 v7-4-151
|
||||
2ace11abcfb59f6e88c3a40aa1d849d335cfd993 v7-4-152
|
||||
30e300c0b2c1c069d953afb258dba39c50772463 v7-4-153
|
||||
71837ace77dfdd6c01e0a334314a7c6c713a095c v7-4-154
|
||||
fa53233519c693591ce60f9270cf259c07d6cc26 v7-4-155
|
||||
05a5cb0d6b37eb7806eb902a72d8b00dde48bc1c v7-4-156
|
||||
be61f315eafe5cbadbd00bf7275e004fe09779db v7-4-157
|
||||
d59544f3022ba0a35af174d1085a321de6d3b9b4 v7-4-158
|
||||
a95a151402be5155cd89f8758e2e09ca95473ad1 v7-4-159
|
||||
f29febf858be9c7df896cc86ea89c3da8823b4fb v7-4-160
|
||||
91f3908748c29b0e8e759ac4cdafc95e536eab9a v7-4-161
|
||||
477665b4105fa80e3655981790e55fc9babfeed5 v7-4-162
|
||||
7db84aadd37aaf9d59f8f15dd6783a4e28dcb63c v7-4-163
|
||||
a01819fb6e2b5c270dac492ab2fe923ea9301651 v7-4-164
|
||||
c82339d8fdae0d43d51cde5216c979a5c9415bc4 v7-4-165
|
||||
5d03c374712128077ac4c342aad02120ed98df70 v7-4-166
|
||||
22387c8eec43ea8b1b704cad49c8f7187e2fd579 v7-4-167
|
||||
e61a2b709f693eea9108d475b9bab5ed10ac675d v7-4-168
|
||||
4e3a9dd25d428e7c08ed401afc244972e27e08e6 v7-4-169
|
||||
8122eab8fcdbbdaac62dfbf7c6458cb3e6f46b04 v7-4-170
|
||||
beb037a6c2708f539d50840637f70eed0811d93c v7-4-171
|
||||
391e10afccf6879dcfab8b28cb1587a13eb835c0 v7-4-172
|
||||
233ad7b960d0fbeb224b383918113b25c74ebe35 v7-4-173
|
||||
f2c8d86c460d75fec17a0527a2fe93ac7220693e v7-4-174
|
||||
6b69d8dde19e32909f4ee3a6337e6a2ecfbb6f72 v7-4-175
|
||||
ae228baaec2c5eda4cd948382c2bab498d1a34cc v7-4-176
|
||||
df3b0b70d8c1d29817597f45d19bb72755f86bd1 v7-4-177
|
||||
647e6bb15aa3f864eaf447fe77e3e3ae7e37b134 v7-4-178
|
||||
d1c8c1d6403485ff0135f0cf5c1ef07272a07173 v7-4-179
|
||||
b1b8b097539a001043d1f0aac4663d6ee358dee8 v7-4-180
|
||||
cb5683bcde03796baa7e845fd9a2fcaec3383538 v7-4-181
|
||||
708a6a5905217736a2a231e36ced82f9535c4954 v7-4-182
|
||||
1e2bfe4f3e903110f27cb6231f6642e721808837 v7-4-183
|
||||
|
||||
@@ -80,6 +80,7 @@ SRC_ALL = \
|
||||
src/main.aap \
|
||||
src/testdir/main.aap \
|
||||
src/testdir/*.in \
|
||||
src/testdir/sautest/autoload/*.vim \
|
||||
src/testdir/test[0-9]*.ok \
|
||||
src/testdir/test49.vim \
|
||||
src/testdir/test60.vim \
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
" ---------------------------------------------------------------------
|
||||
" getscript.vim
|
||||
" Author: Charles E. Campbell
|
||||
" Date: Apr 17, 2013
|
||||
" Version: 35
|
||||
" Date: Jan 21, 2014
|
||||
" Version: 36
|
||||
" Installing: :help glvs-install
|
||||
" Usage: :help glvs
|
||||
"
|
||||
@@ -15,7 +15,7 @@
|
||||
if exists("g:loaded_getscript")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_getscript= "v35"
|
||||
let g:loaded_getscript= "v36"
|
||||
if &cp
|
||||
echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
|
||||
finish
|
||||
@@ -208,8 +208,8 @@ fun! getscript#GetLatestVimScripts()
|
||||
let lastline = line("$")
|
||||
" call Decho("lastline#".lastline)
|
||||
let firstdir = substitute(&rtp,',.*$','','')
|
||||
let plugins = split(globpath(firstdir,"plugin/*.vim"),'\n')
|
||||
let plugins = plugins + split(globpath(firstdir,"AsNeeded/*.vim"),'\n')
|
||||
let plugins = split(globpath(firstdir,"plugin/**/*.vim"),'\n')
|
||||
let plugins = plugins + split(globpath(firstdir,"AsNeeded/**/*.vim"),'\n')
|
||||
let foundscript = 0
|
||||
|
||||
" this loop updates the GetLatestVimScripts.dat file
|
||||
|
||||
+625
-344
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
" netrwSettings.vim: makes netrw settings simpler
|
||||
" Date: May 03, 2013
|
||||
" Date: Aug 27, 2013
|
||||
" Maintainer: Charles E Campbell <drchipNOSPAM at campbellfamily dot biz>
|
||||
" Version: 14a ASTRO-ONLY
|
||||
" Version: 14
|
||||
" Copyright: Copyright (C) 1999-2007 Charles E. Campbell {{{1
|
||||
" Permission is hereby granted to use and distribute this code,
|
||||
" with or without modifications, provided that this copyright
|
||||
@@ -19,7 +19,7 @@
|
||||
if exists("g:loaded_netrwSettings") || &cp
|
||||
finish
|
||||
endif
|
||||
let g:loaded_netrwSettings = "v14a"
|
||||
let g:loaded_netrwSettings = "v14"
|
||||
if v:version < 700
|
||||
echohl WarningMsg
|
||||
echo "***warning*** this version of netrwSettings needs vim 7.0"
|
||||
@@ -98,6 +98,11 @@ fun! netrwSettings#NetrwSettings()
|
||||
|
||||
put = ''
|
||||
put ='+ Netrw Browser Control'
|
||||
if exists("g:netrw_altfile")
|
||||
put = 'let g:netrw_altfile = '.g:netrw_altfile
|
||||
else
|
||||
put = 'let g:netrw_altfile = 0'
|
||||
endif
|
||||
put = 'let g:netrw_alto = '.g:netrw_alto
|
||||
put = 'let g:netrw_altv = '.g:netrw_altv
|
||||
put = 'let g:netrw_banner = '.g:netrw_banner
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
" netrw_gitignore#Hide: gitignore-based hiding
|
||||
" Function returns a string of comma separated patterns convenient for
|
||||
" assignment to `g:netrw_list_hide` option.
|
||||
" Function can take additional filenames as arguments, example:
|
||||
" netrw_gitignore#Hide('custom_gitignore1', 'custom_gitignore2')
|
||||
"
|
||||
" Usage examples:
|
||||
" let g:netrw_list_hide = netrw_gitignore#Hide()
|
||||
" let g:netrw_list_hide = netrw_gitignore#Hide() . 'more,hide,patterns'
|
||||
"
|
||||
" Copyright: Copyright (C) 2013 Bruno Sutic {{{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_gitignore.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.
|
||||
function! netrw_gitignore#Hide(...)
|
||||
let additional_files = a:000
|
||||
|
||||
let default_files = ['.gitignore', '.git/info/exclude']
|
||||
|
||||
" get existing global/system gitignore files
|
||||
let global_gitignore = expand(substitute(system("git config --global core.excludesfile"), '\n', '', 'g'))
|
||||
if global_gitignore !=# ''
|
||||
let default_files = add(default_files, global_gitignore)
|
||||
endif
|
||||
let system_gitignore = expand(substitute(system("git config --system core.excludesfile"), '\n', '', 'g'))
|
||||
if system_gitignore !=# ''
|
||||
let default_files = add(default_files, system_gitignore)
|
||||
endif
|
||||
|
||||
" append additional files if given as function arguments
|
||||
if additional_files !=# []
|
||||
let files = extend(default_files, additional_files)
|
||||
else
|
||||
let files = default_files
|
||||
endif
|
||||
|
||||
" keep only existing/readable files
|
||||
let gitignore_files = []
|
||||
for file in files
|
||||
if filereadable(file)
|
||||
let gitignore_files = add(gitignore_files, file)
|
||||
endif
|
||||
endfor
|
||||
|
||||
" get contents of gitignore patterns from those files
|
||||
let gitignore_lines = []
|
||||
for file in gitignore_files
|
||||
for line in readfile(file)
|
||||
" filter empty lines and comments
|
||||
if line !~# '^#' && line !~# '^$'
|
||||
let gitignore_lines = add(gitignore_lines, line)
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
|
||||
" convert gitignore patterns to Netrw/Vim regex patterns
|
||||
let escaped_lines = []
|
||||
for line in gitignore_lines
|
||||
let escaped = line
|
||||
let escaped = substitute(escaped, '\.', '\\.', 'g')
|
||||
let escaped = substitute(escaped, '*', '.*', 'g')
|
||||
let escaped_lines = add(escaped_lines, escaped)
|
||||
endfor
|
||||
|
||||
return join(escaped_lines, ',')
|
||||
endfunction
|
||||
@@ -36,6 +36,14 @@ Some attributes (e.g., bold) might be set in the defaults that you want
|
||||
removed in your color scheme. Use something like "gui=NONE" to remove the
|
||||
attributes.
|
||||
|
||||
In case you want to set 'background' depending on the colorscheme selected,
|
||||
this autocmd might be useful:
|
||||
autocmd SourcePre */colors/blue_sky.vim set background=dark
|
||||
Replace "blue_sky" with the name of the colorscheme.
|
||||
|
||||
In case you want to tweak a colorscheme after it was loaded, check out that
|
||||
ColorScheme autocmd event.
|
||||
|
||||
To see which highlight group is used where, find the help for
|
||||
"highlight-groups" and "group-name".
|
||||
|
||||
|
||||
@@ -25,10 +25,10 @@ CompilerSet errorformat=
|
||||
\%f:%l:\ %tarning:\ %m,
|
||||
\%f:%l:\ %m,
|
||||
\\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
|
||||
\%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
|
||||
\%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
|
||||
\%D%*\\a:\ Entering\ directory\ `%f',
|
||||
\%X%*\\a:\ Leaving\ directory\ `%f',
|
||||
\%D%*\\a[%*\\d]:\ Entering\ directory\ [`']%f',
|
||||
\%X%*\\a[%*\\d]:\ Leaving\ directory\ [`']%f',
|
||||
\%D%*\\a:\ Entering\ directory\ [`']%f',
|
||||
\%X%*\\a:\ Leaving\ directory\ [`']%f',
|
||||
\%DMaking\ %*\\a\ in\ %f
|
||||
|
||||
if exists('g:compiler_gcc_ignore_unmatched_lines')
|
||||
|
||||
+14
-2
@@ -1,4 +1,4 @@
|
||||
*autocmd.txt* For Vim version 7.4. Last change: 2013 Aug 04
|
||||
*autocmd.txt* For Vim version 7.4. Last change: 2014 Jan 23
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -304,6 +304,9 @@ Name triggered by ~
|
||||
|InsertCharPre| when a character was typed in Insert mode, before
|
||||
inserting it
|
||||
|
||||
|TextChanged| after a change was made to the text in Normal mode
|
||||
|TextChangedI| after a change was made to the text in Insert mode
|
||||
|
||||
|ColorScheme| after loading a color scheme
|
||||
|
||||
|RemoteReply| a reply from a server Vim was received
|
||||
@@ -480,6 +483,12 @@ CmdwinLeave Before leaving the command-line window.
|
||||
|cmdwin-char|
|
||||
*ColorScheme*
|
||||
ColorScheme After loading a color scheme. |:colorscheme|
|
||||
The pattern is matched against the
|
||||
colorscheme name. <afile> can be used for the
|
||||
name of the actual file where this option was
|
||||
set, and <amatch> for the new colorscheme
|
||||
name.
|
||||
|
||||
|
||||
*CompleteDone*
|
||||
CompleteDone After Insert mode completion is done. Either
|
||||
@@ -553,6 +562,9 @@ FileChangedRO Before making the first change to a read-only
|
||||
It is not allowed to change to another buffer
|
||||
here. You can reload the buffer but not edit
|
||||
another one.
|
||||
*E881*
|
||||
If the number of lines changes saving for undo
|
||||
may fail and the change will be aborted.
|
||||
*FileChangedShell*
|
||||
FileChangedShell When Vim notices that the modification time of
|
||||
a file has changed since editing started.
|
||||
@@ -731,7 +743,7 @@ QuickFixCmdPost Like QuickFixCmdPre, but after a quickfix
|
||||
command is run, before jumping to the first
|
||||
location. For |:cfile| and |:lfile| commands
|
||||
it is run after error file is read and before
|
||||
moving to the first error.
|
||||
moving to the first error.
|
||||
See |QuickFixCmdPost-example|.
|
||||
*QuitPre*
|
||||
QuitPre When using `:quit`, `:wq` or `:qall`, before
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*change.txt* For Vim version 7.4. Last change: 2013 Nov 05
|
||||
*change.txt* For Vim version 7.4. Last change: 2014 Jan 23
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -824,7 +824,7 @@ either the first or second pattern in parentheses did not match, so either
|
||||
<
|
||||
|
||||
Substitute with an expression *sub-replace-expression*
|
||||
*sub-replace-\=*
|
||||
*sub-replace-\=* *s/\=*
|
||||
When the substitute string starts with "\=" the remainder is interpreted as an
|
||||
expression. This does not work recursively: a |substitute()| function inside
|
||||
the expression cannot use "\=" for the substitute string.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*cmdline.txt* For Vim version 7.4. Last change: 2013 Mar 16
|
||||
*cmdline.txt* For Vim version 7.4. Last change: 2013 Nov 25
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -758,6 +758,7 @@ 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_#*
|
||||
This is remembered for every window.
|
||||
#n (where n is a number) is replaced with *:_#0* *:_#n*
|
||||
the file name of buffer n. "#0" is the same as "#". *c_#n*
|
||||
## Is replaced with all names in the argument list *:_##* *c_##*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*digraph.txt* For Vim version 7.4. Last change: 2011 Jan 15
|
||||
*digraph.txt* For Vim version 7.4. Last change: 2013 Dec 12
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -147,7 +147,7 @@ a standard meaning:
|
||||
Two 2 Hook
|
||||
Nine 9 Horn
|
||||
|
||||
Equals = Cyrillic
|
||||
Equals = Cyrillic (= used as second char)
|
||||
Asterisk * Greek
|
||||
Percent sign % Greek/Cyrillic special
|
||||
Plus + smalls: Arabic, capitals: Hebrew
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*editing.txt* For Vim version 7.4. Last change: 2013 Aug 03
|
||||
*editing.txt* For Vim version 7.4. Last change: 2013 Nov 25
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -38,6 +38,7 @@ If there already was a current file name, then that one becomes the alternate
|
||||
file name. It can be used with "#" on the command line |:_#| and you can use
|
||||
the |CTRL-^| command to toggle between the current and the alternate file.
|
||||
However, the alternate file name is not changed when |:keepalt| is used.
|
||||
An alternate file name is remembered for each window.
|
||||
|
||||
*:keepalt* *:keepa*
|
||||
:keepalt {cmd} Execute {cmd} while keeping the current alternate file
|
||||
|
||||
+19
-9
@@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 7.4. Last change: 2013 Nov 08
|
||||
*eval.txt* For Vim version 7.4. Last change: 2014 Feb 11
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -1519,6 +1519,7 @@ 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).
|
||||
When the |viminfo| file is not used the List is empty.
|
||||
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
|
||||
@@ -1744,7 +1745,7 @@ cscope_connection( [{num} , {dbpath} [, {prepend}]])
|
||||
cursor( {lnum}, {col} [, {coladd}])
|
||||
Number move cursor to {lnum}, {col}, {coladd}
|
||||
cursor( {list}) Number move cursor to position in {list}
|
||||
deepcopy( {expr}) any make a full copy of {expr}
|
||||
deepcopy( {expr} [, {noref}]) any make a full copy of {expr}
|
||||
delete( {fname}) Number delete file {fname}
|
||||
did_filetype() Number TRUE if FileType autocommand event used
|
||||
diff_filler( {lnum}) Number diff filler lines about {lnum}
|
||||
@@ -3200,7 +3201,7 @@ getchar([expr]) *getchar()*
|
||||
If [expr] is 1, only check if a character is available, it is
|
||||
not consumed. Return zero if no character available.
|
||||
|
||||
Without {expr} and when {expr} is 0 a whole character or
|
||||
Without [expr] and when [expr] is 0 a whole character or
|
||||
special key is returned. If it is an 8-bit character, the
|
||||
result is a number. Use nr2char() to convert it to a String.
|
||||
Otherwise a String is returned with the encoded character.
|
||||
@@ -3210,7 +3211,7 @@ getchar([expr]) *getchar()*
|
||||
String when a modifier (shift, control, alt) was used that is
|
||||
not included in the character.
|
||||
|
||||
When {expr} is 1 only the first byte is returned. For a
|
||||
When [expr] is 1 only the first byte is returned. For a
|
||||
one-byte character it is the character itself as a number.
|
||||
Use nr2char() to convert it to a String.
|
||||
|
||||
@@ -3460,7 +3461,7 @@ getregtype([{regname}]) *getregtype()*
|
||||
"v" for |characterwise| text
|
||||
"V" for |linewise| text
|
||||
"<CTRL-V>{width}" for |blockwise-visual| text
|
||||
0 for an empty or unknown register
|
||||
"" for an empty or unknown register
|
||||
<CTRL-V> is one character with value 0x16.
|
||||
If {regname} is not specified, |v:register| is used.
|
||||
|
||||
@@ -4134,6 +4135,8 @@ maparg({name}[, {mode} [, {abbr} [, {dict}]]]) *maparg()*
|
||||
(|mapmode-ic|)
|
||||
"sid" The script local ID, used for <sid> mappings
|
||||
(|<SID>|).
|
||||
"nowait" Do not wait for other, longer mappings.
|
||||
(|:map-<nowait>|).
|
||||
|
||||
The mappings local to the current buffer are checked first,
|
||||
then the global mappings.
|
||||
@@ -4447,6 +4450,9 @@ getpos({expr}) Get the position for {expr}. For possible values of {expr}
|
||||
it is the offset in screen columns from the start of the
|
||||
character. E.g., a position within a <Tab> or after the last
|
||||
character.
|
||||
Note that for '< and '> Visual mode matters: when it is "V"
|
||||
(visual line mode) the column of '< is zero and the column of
|
||||
'> is a large number.
|
||||
This can be used to save and restore the cursor position: >
|
||||
let save_cursor = getpos(".")
|
||||
MoveTheCursorAround
|
||||
@@ -5270,6 +5276,10 @@ setpos({expr}, {list})
|
||||
character. E.g., a position within a <Tab> or after the last
|
||||
character.
|
||||
|
||||
Note that for '< and '> changing the line number may result in
|
||||
the marks to be effectively be swapped, so that '< is always
|
||||
before '>.
|
||||
|
||||
Returns 0 when the position could be set, -1 otherwise.
|
||||
An error message is given if {expr} is invalid.
|
||||
|
||||
@@ -5632,7 +5642,7 @@ strchars({expr}) *strchars()*
|
||||
|
||||
strdisplaywidth({expr}[, {col}]) *strdisplaywidth()*
|
||||
The result is a Number, which is the number of display cells
|
||||
String {expr} occupies on the screen.
|
||||
String {expr} occupies on the screen when it starts a {col}.
|
||||
When {col} is omitted zero is used. Otherwise it is the
|
||||
screen column where to start. This matters for Tab
|
||||
characters.
|
||||
@@ -6634,7 +6644,7 @@ See |:verbose-cmd| for more information.
|
||||
|
||||
For the {arguments} see |function-argument|.
|
||||
|
||||
*a:firstline* *a:lastline*
|
||||
*:func-range* *a:firstline* *a:lastline*
|
||||
When the [range] argument is added, the function is
|
||||
expected to take care of a range itself. The range is
|
||||
passed as "a:firstline" and "a:lastline". If [range]
|
||||
@@ -6643,10 +6653,10 @@ See |:verbose-cmd| for more information.
|
||||
of each line. See |function-range-example|.
|
||||
The cursor is still moved to the first line of the
|
||||
range, as is the case with all Ex commands.
|
||||
|
||||
*:func-abort*
|
||||
When the [abort] argument is added, the function will
|
||||
abort as soon as an error is detected.
|
||||
|
||||
*:func-dict*
|
||||
When the [dict] argument is added, the function must
|
||||
be invoked through an entry in a |Dictionary|. The
|
||||
local variable "self" will then be set to the
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*filetype.txt* For Vim version 7.4. Last change: 2013 May 25
|
||||
*filetype.txt* For Vim version 7.4. Last change: 2013 Dec 15
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -447,23 +447,25 @@ g:changelog_new_date_format
|
||||
%% insert a single '%' character
|
||||
%d insert the date from above
|
||||
%u insert the user from above
|
||||
%p insert result of b:changelog_entry_prefix
|
||||
%c where to position cursor when done
|
||||
The default is "%d %u\n\n\t* %c\n\n", which produces
|
||||
The default is "%d %u\n\n\t* %p%c\n\n", which produces
|
||||
something like (| is where cursor will be, unless at
|
||||
the start of the line where it denotes the beginning
|
||||
of the line) >
|
||||
|2003-01-14 Full Name <user@host>
|
||||
|
|
||||
| * |
|
||||
| * prefix|
|
||||
<
|
||||
g:changelog_new_entry_format
|
||||
The format used when creating a new entry.
|
||||
The following table describes special tokens in the
|
||||
string:
|
||||
%p insert result of b:changelog_entry_prefix
|
||||
%c where to position cursor when done
|
||||
The default is "\t*%c", which produces something
|
||||
similar to >
|
||||
| * |
|
||||
| * prefix|
|
||||
<
|
||||
g:changelog_date_entry_search
|
||||
The search pattern to use when searching for a
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*fold.txt* For Vim version 7.4. Last change: 2010 May 13
|
||||
*fold.txt* For Vim version 7.4. Last change: 2013 Dec 04
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -285,9 +285,10 @@ zF Create a fold for [count] lines. Works like "zf".
|
||||
*zd* *E351*
|
||||
zd Delete one fold at the cursor. When the cursor is on a folded
|
||||
line, that fold is deleted. Nested folds are moved one level
|
||||
up. In Visual mode all folds (partially) in the selected area
|
||||
are deleted. Careful: This easily deletes more folds than you
|
||||
expect and there is no undo.
|
||||
up. In Visual mode one level of all folds (partially) in the
|
||||
selected area are deleted.
|
||||
Careful: This easily deletes more folds than you expect and
|
||||
there is no undo for manual folding.
|
||||
This only works when 'foldmethod' is "manual" or "marker".
|
||||
Also see |fold-delete-marker|.
|
||||
|
||||
|
||||
+22
-2
@@ -598,7 +598,6 @@ without limits.
|
||||
" Default
|
||||
let g:clojure_maxlines = 100
|
||||
<
|
||||
|
||||
*g:clojure_fuzzy_indent*
|
||||
*g:clojure_fuzzy_indent_patterns*
|
||||
*g:clojure_fuzzy_indent_blacklist*
|
||||
@@ -652,7 +651,6 @@ default list below.
|
||||
let g:clojure_special_indent_words =
|
||||
\ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
|
||||
<
|
||||
|
||||
*g:clojure_align_multiline_strings*
|
||||
|
||||
Align subsequent lines in multiline strings to the column after the opening
|
||||
@@ -677,6 +675,28 @@ This option is off by default.
|
||||
" Default
|
||||
let g:clojure_align_multiline_strings = 0
|
||||
<
|
||||
*g:clojure_align_subforms*
|
||||
|
||||
By default, parenthesized compound forms that look like function calls and
|
||||
whose head subform is on its own line have subsequent subforms indented by
|
||||
two spaces relative to the opening paren:
|
||||
>
|
||||
(foo
|
||||
bar
|
||||
baz)
|
||||
<
|
||||
Setting this option changes this behavior so that all subforms are aligned to
|
||||
the same column:
|
||||
>
|
||||
(foo
|
||||
bar
|
||||
baz)
|
||||
<
|
||||
This option is off by default.
|
||||
>
|
||||
" Default
|
||||
let g:clojure_align_subforms = 0
|
||||
<
|
||||
|
||||
|
||||
FORTRAN *ft-fortran-indent*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*motion.txt* For Vim version 7.4. Last change: 2013 Jul 17
|
||||
*motion.txt* For Vim version 7.4. Last change: 2014 Feb 11
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -343,7 +343,7 @@ gg Goto line [count], default first line, on the first
|
||||
See also 'startofline' option. {not in Vi}
|
||||
|
||||
:[range]go[to] [count] *:go* *:goto* *go*
|
||||
[count]go Go to {count} byte in the buffer. Default [count] is
|
||||
[count]go Go to [count] byte in the buffer. Default [count] is
|
||||
one, start of the file. When giving [range], the
|
||||
last number in it used as the byte count. End-of-line
|
||||
characters are counted depending on the current
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*options.txt* For Vim version 7.4. Last change: 2013 Nov 12
|
||||
*options.txt* For Vim version 7.4. Last change: 2013 Dec 04
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -992,7 +992,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
|
||||
*'backupdir'* *'bdir'*
|
||||
'backupdir' 'bdir' string (default for Amiga: ".,t:",
|
||||
for MS-DOS and Win32: ".,c:/tmp,c:/temp"
|
||||
for MS-DOS and Win32: ".,$TEMP,c:/tmp,c:/temp"
|
||||
for Unix: ".,~/tmp,~/")
|
||||
global
|
||||
{not in Vi}
|
||||
@@ -2482,7 +2482,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
|
||||
*'directory'* *'dir'*
|
||||
'directory' 'dir' string (default for Amiga: ".,t:",
|
||||
for MS-DOS and Win32: ".,c:\tmp,c:\temp"
|
||||
for MS-DOS and Win32: ".,$TEMP,c:\tmp,c:\temp"
|
||||
for Unix: ".,~/tmp,/var/tmp,/tmp")
|
||||
global
|
||||
List of directory names for the swap file, separated with commas.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*pattern.txt* For Vim version 7.4. Last change: 2013 Nov 09
|
||||
*pattern.txt* For Vim version 7.4. Last change: 2014 Feb 08
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -192,10 +192,10 @@ affected.
|
||||
An example of how to search for matches with a pattern and change the match
|
||||
with another word: >
|
||||
/foo<CR> find "foo"
|
||||
c//e change until end of match
|
||||
c//e<CR> change until end of match
|
||||
bar<Esc> type replacement
|
||||
//<CR> go to start of next match
|
||||
c//e change until end of match
|
||||
c//e<CR> change until end of match
|
||||
beep<Esc> type another replacement
|
||||
etc.
|
||||
<
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*pi_getscript.txt* For Vim version 7.4. Last change: 2012 Apr 07
|
||||
*pi_getscript.txt* For Vim version 7.0. Last change: 2013 Nov 29
|
||||
>
|
||||
GETSCRIPT REFERENCE MANUAL by Charles E. Campbell
|
||||
<
|
||||
@@ -385,6 +385,10 @@ The AutoInstall process will:
|
||||
==============================================================================
|
||||
9. GetLatestVimScripts History *getscript-history* *glvs-hist* {{{1
|
||||
|
||||
v36 Apr 22, 2013 : * (glts) suggested use of plugin/**/*.vim instead of
|
||||
plugin/*.vim in globpath() call.
|
||||
* (Andy Wokula) got warning message when setting
|
||||
g:loaded_getscriptPlugin
|
||||
v35 Apr 07, 2012 : * (MengHuan Yu) pointed out that the script url has
|
||||
changed (somewhat). However, it doesn't work, and
|
||||
the original one does (under Linux). I'll make it
|
||||
|
||||
+196
-44
@@ -1,4 +1,4 @@
|
||||
*pi_netrw.txt* For Vim version 7.4. Last change: 2013 May 18
|
||||
*pi_netrw.txt* For Vim version 7.4. Last change: 2014 Jan 21
|
||||
|
||||
------------------------------------------------
|
||||
NETRW REFERENCE MANUAL by Charles E. Campbell
|
||||
@@ -6,7 +6,7 @@
|
||||
Author: Charles E. Campbell <NdrOchip@ScampbellPfamily.AbizM>
|
||||
(remove NOSPAM from Campbell's email first)
|
||||
|
||||
Copyright: Copyright (C) 1999-2013 Charles E Campbell *netrw-copyright*
|
||||
Copyright: Copyright (C) 1999-2014 Charles E Campbell *netrw-copyright*
|
||||
The VIM LICENSE applies to the files in this package, including
|
||||
netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and
|
||||
syntax/netrw.vim. Like anything else that's free, netrw.vim and its
|
||||
@@ -192,21 +192,22 @@ You may do so by placing the following two lines in your <.vimrc>: >
|
||||
|
||||
EXTERNAL APPLICATIONS AND PROTOCOLS *netrw-externapp* {{{2
|
||||
|
||||
Protocol Variable Default Value
|
||||
-------- ---------------- -------------
|
||||
dav: *g:netrw_dav_cmd* = "cadaver" if cadaver is executable
|
||||
dav: g:netrw_dav_cmd = "curl -o" elseif curl is available
|
||||
fetch: *g:netrw_fetch_cmd* = "fetch -o" if fetch is available
|
||||
ftp: *g:netrw_ftp_cmd* = "ftp"
|
||||
http: *g:netrw_http_cmd* = "elinks" if elinks is available
|
||||
http: g:netrw_http_cmd = "links" elseif links is available
|
||||
http: g:netrw_http_cmd = "curl" elseif curl is available
|
||||
http: g:netrw_http_cmd = "wget" elseif wget is available
|
||||
http: g:netrw_http_cmd = "fetch" elseif fetch is available
|
||||
rcp: *g:netrw_rcp_cmd* = "rcp"
|
||||
rsync: *g:netrw_rsync_cmd* = "rsync -a"
|
||||
scp: *g:netrw_scp_cmd* = "scp -q"
|
||||
sftp: *g:netrw_sftp_cmd* = "sftp"
|
||||
Protocol Variable Default Value
|
||||
-------- ---------------- -------------
|
||||
dav: *g:netrw_dav_cmd* = "cadaver" if cadaver is executable
|
||||
dav: g:netrw_dav_cmd = "curl -o" elseif curl is available
|
||||
fetch: *g:netrw_fetch_cmd* = "fetch -o" if fetch is available
|
||||
ftp: *g:netrw_ftp_cmd* = "ftp"
|
||||
http: *g:netrw_http_cmd* = "elinks" if elinks is available
|
||||
http: g:netrw_http_cmd = "links" elseif links is available
|
||||
http: g:netrw_http_cmd = "curl" elseif curl is available
|
||||
http: g:netrw_http_cmd = "wget" elseif wget is available
|
||||
http: g:netrw_http_cmd = "fetch" elseif fetch is available
|
||||
http: *g:netrw_http_put_cmd* = "curl -T"
|
||||
rcp: *g:netrw_rcp_cmd* = "rcp"
|
||||
rsync: *g:netrw_rsync_cmd* = "rsync -a"
|
||||
scp: *g:netrw_scp_cmd* = "scp -q"
|
||||
sftp: *g:netrw_sftp_cmd* = "sftp"
|
||||
|
||||
*g:netrw_http_xcmd* : the option string for http://... protocols are
|
||||
specified via this variable and may be independently overridden. By
|
||||
@@ -223,6 +224,9 @@ EXTERNAL APPLICATIONS AND PROTOCOLS *netrw-externapp* {{{2
|
||||
let g:netrw_http_xcmd= "-dump >"
|
||||
< in your .vimrc.
|
||||
|
||||
g:netrw_http_put_cmd: this option specifies both the executable and
|
||||
any needed options. This command does a PUT operation to the url.
|
||||
|
||||
|
||||
READING *netrw-read* *netrw-nread* {{{2
|
||||
|
||||
@@ -816,8 +820,7 @@ variables listed below, and may be modified by the user.
|
||||
------------------------
|
||||
Option Type Setting Meaning
|
||||
--------- -------- -------------- ---------------------------
|
||||
<
|
||||
netrw_ftp variable =doesn't exist userid set by "user userid"
|
||||
< netrw_ftp variable =doesn't exist userid set by "user userid"
|
||||
=0 userid set by "user userid"
|
||||
=1 userid set by "userid"
|
||||
NetReadFixup function =doesn't exist no change
|
||||
@@ -825,17 +828,18 @@ variables listed below, and may be modified by the user.
|
||||
read via ftp automatically
|
||||
transformed however they wish
|
||||
by NetReadFixup()
|
||||
g:netrw_dav_cmd variable ="cadaver" if cadaver is executable
|
||||
g:netrw_dav_cmd variable ="curl -o" elseif curl is executable
|
||||
g:netrw_fetch_cmd variable ="fetch -o" if fetch is available
|
||||
g:netrw_ftp_cmd variable ="ftp"
|
||||
g:netrw_http_cmd variable ="fetch -o" if fetch is available
|
||||
g:netrw_http_cmd variable ="wget -O" else if wget is available
|
||||
g:netrw_list_cmd variable ="ssh USEPORT HOSTNAME ls -Fa"
|
||||
g:netrw_rcp_cmd variable ="rcp"
|
||||
g:netrw_rsync_cmd variable ="rsync -a"
|
||||
g:netrw_scp_cmd variable ="scp -q"
|
||||
g:netrw_sftp_cmd variable ="sftp" >
|
||||
g:netrw_dav_cmd var ="cadaver" if cadaver is executable
|
||||
g:netrw_dav_cmd var ="curl -o" elseif curl is executable
|
||||
g:netrw_fetch_cmd var ="fetch -o" if fetch is available
|
||||
g:netrw_ftp_cmd var ="ftp"
|
||||
g:netrw_http_cmd var ="fetch -o" if fetch is available
|
||||
g:netrw_http_cmd var ="wget -O" else if wget is available
|
||||
g:netrw_http_put_cmd var ="curl -T"
|
||||
g:netrw_list_cmd var ="ssh USEPORT HOSTNAME ls -Fa"
|
||||
g:netrw_rcp_cmd var ="rcp"
|
||||
g:netrw_rsync_cmd var ="rsync -a"
|
||||
g:netrw_scp_cmd var ="scp -q"
|
||||
g:netrw_sftp_cmd var ="sftp" >
|
||||
-------------------------------------------------------------------------
|
||||
<
|
||||
*netrw-ftp*
|
||||
@@ -1097,16 +1101,20 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
|
||||
mapping defined before netrw is autoloaded,
|
||||
then a double clicked leftmouse button will return
|
||||
to the netrw browser window. See |g:netrw_retmap|.
|
||||
<s-leftmouse> (gvim only) like mf, will mark files
|
||||
<s-leftmouse> (gvim only) like mf, will mark files. Dragging
|
||||
the shifted leftmouse will mark multiple files.
|
||||
(see |netrw-mf|)
|
||||
|
||||
(to disable mouse buttons while browsing: |g:netrw_mousemaps|)
|
||||
|
||||
*netrw-quickcom* *netrw-quickcoms*
|
||||
QUICK REFERENCE: COMMANDS *netrw-explore-cmds* *netrw-browse-cmds* {{{2
|
||||
:NetrwClean[!] ...........................................|netrw-clean|
|
||||
:NetrwSettings ...........................................|netrw-settings|
|
||||
:NetrwClean[!]............................................|netrw-clean|
|
||||
:NetrwSettings............................................|netrw-settings|
|
||||
:Ntree....................................................|netrw-ntree|
|
||||
:Explore[!] [dir] Explore directory of current file......|netrw-explore|
|
||||
:Hexplore[!] [dir] Horizontal Split & Explore.............|netrw-explore|
|
||||
:Lexplore [dir] Left Explorer Toggle...................|netrw-explore|
|
||||
:Nexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
|
||||
:Pexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
|
||||
:Rexplore Return to Explorer.....................|netrw-explore|
|
||||
@@ -1321,6 +1329,17 @@ See |g:netrw_dirhistmax| for how to control the quantity of history stack
|
||||
slots.
|
||||
|
||||
|
||||
CHANGING TREE TOP *netrw-ntree* *:Ntree*
|
||||
|
||||
One may specify a new tree top for tree listings using >
|
||||
|
||||
:Ntree [dirname]
|
||||
|
||||
Without a "dirname", the current line is used (and any leading depth
|
||||
information is elided).
|
||||
With a "dirname", the specified directory name is used.
|
||||
|
||||
|
||||
NETRW CLEAN *netrw-clean* *:NetrwClean*
|
||||
|
||||
With :NetrwClean one may easily remove netrw from one's home directory;
|
||||
@@ -1458,7 +1477,7 @@ Associated setting variable: |g:netrw_localrmdir| |g:netrw_rm_cmd|
|
||||
|
||||
|
||||
*netrw-explore* *netrw-hexplore* *netrw-nexplore* *netrw-pexplore*
|
||||
*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore*
|
||||
*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore* *netrw-lexplore*
|
||||
DIRECTORY EXPLORATION COMMANDS {{{2
|
||||
|
||||
:[N]Explore[!] [dir]... Explore directory of current file *:Explore*
|
||||
@@ -1467,6 +1486,7 @@ DIRECTORY EXPLORATION COMMANDS {{{2
|
||||
:[N]Sexplore[!] [dir]... Split&Explore current file's directory *:Sexplore*
|
||||
:Texplore [dir]... Tab & Explore *:Texplore*
|
||||
:[N]Vexplore[!] [dir]... Vertical Split & Explore *:Vexplore*
|
||||
:Lexplore [dir]... Left Explorer Toggle *:Lexplore*
|
||||
|
||||
Used with :Explore **/pattern : (also see |netrw-starstar|)
|
||||
:Nexplore............. go to next matching file *:Nexplore*
|
||||
@@ -1478,6 +1498,9 @@ DIRECTORY EXPLORATION COMMANDS {{{2
|
||||
window will take over that window. Normally the splitting is taken
|
||||
horizontally.
|
||||
:Explore! is like :Explore, but will use vertical splitting.
|
||||
:Lexplore [dir] toggles an Explorer window on the left hand side
|
||||
of the current tab It will open a netrw window on the current
|
||||
directory if [dir] is omitted.
|
||||
:Sexplore will always split the window before invoking the local-directory
|
||||
browser. As with Explore, the splitting is normally done
|
||||
horizontally.
|
||||
@@ -1486,7 +1509,7 @@ DIRECTORY EXPLORATION COMMANDS {{{2
|
||||
:Hexplore! [dir] does an :Explore with |:aboveleft| horizontal splitting.
|
||||
:Vexplore [dir] does an :Explore with |:leftabove| vertical splitting.
|
||||
:Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting.
|
||||
:Texplore [dir] does a tabnew before generating the browser window
|
||||
:Texplore [dir] does a |:tabnew| before generating the browser window
|
||||
|
||||
By default, these commands use the current file's directory. However, one may
|
||||
explicitly provide a directory (path) to use.
|
||||
@@ -1505,6 +1528,8 @@ windows should have.
|
||||
of the <2-leftmouse> map (which is only available under gvim and
|
||||
cooperative terms).
|
||||
|
||||
Also see: |g:netrw_alto| |g:netrw_altv| |g:netrw_winsize|
|
||||
|
||||
|
||||
*netrw-star* *netrw-starpat* *netrw-starstar* *netrw-starstarpat*
|
||||
EXPLORING WITH STARS AND PATTERNS
|
||||
@@ -1696,9 +1721,36 @@ As a quick shortcut, one may press >
|
||||
to toggle between hiding files which begin with a period (dot) and not hiding
|
||||
them.
|
||||
|
||||
Associated setting variable: |g:netrw_list_hide| |g:netrw_hide|
|
||||
Associated setting variables: |g:netrw_list_hide| |g:netrw_hide|
|
||||
Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh|
|
||||
|
||||
*netrw-gitignore*
|
||||
Netrw provides a helper function 'netrw_gitignore#Hide()' that, when used with
|
||||
|g:netrw_list_hide| automatically hides all git-ignored files.
|
||||
|
||||
'netrw_gitignore#Hide' searches for patterns in the following files:
|
||||
'./.gitignore'
|
||||
'./.git/info/exclude'
|
||||
global gitignore file: `git config --global core.excludesfile`
|
||||
system gitignore file: `git config --system core.excludesfile`
|
||||
|
||||
Files that do not exist, are ignored.
|
||||
Git-ignore patterns are taken from existing files, and converted to patterns for
|
||||
hiding files. For example, if you had '*.log' in your '.gitignore' file, it
|
||||
would be converted to '.*\.log'.
|
||||
|
||||
To use this function, simply assign it's output to |g:netrw_list_hide| option.
|
||||
|
||||
Example: let g:netrw_list_hide= netrw_gitignore#Hide()
|
||||
Git-ignored files are hidden in Netrw.
|
||||
|
||||
Example: let g:netrw_list_hide= netrw_gitignore#Hide('my_gitignore_file')
|
||||
Function can take additional files with git-ignore patterns.
|
||||
|
||||
Example: g:netrw_list_hide= netrw_gitignore#Hide() . '.*\.swp$'
|
||||
Combining 'netrw_gitignore#Hide' with custom patterns.
|
||||
|
||||
|
||||
IMPROVING BROWSING *netrw-listhack* *netrw-ssh-hack* {{{2
|
||||
|
||||
Especially with the remote directory browser, constantly entering the password
|
||||
@@ -1778,6 +1830,15 @@ passwords:
|
||||
http://sial.org/howto/openssh/publickey-auth/
|
||||
|
||||
|
||||
Ssh hints:
|
||||
|
||||
Thomer Gil has provided a hint on how to speed up netrw+ssh:
|
||||
http://thomer.com/howtos/netrw_ssh.html
|
||||
|
||||
Alex Young has several hints on speeding ssh up:
|
||||
http://usevim.com/2012/03/16/editing-remote-files/
|
||||
|
||||
|
||||
LISTING BOOKMARKS AND HISTORY *netrw-qb* *netrw-listbookmark* {{{2
|
||||
|
||||
Pressing "qb" (query bookmarks) will list both the bookmarked directories and
|
||||
@@ -1800,8 +1861,8 @@ directory. Attempts to make a local directory that already exists (as either
|
||||
a file or a directory) will be detected, reported on, and ignored.
|
||||
|
||||
Related topics: |netrw-D|
|
||||
Associated setting variables: |g:netrw_localmkdir| |g:netrw_mkdir_cmd|
|
||||
|g:netrw_remote_mkdir|
|
||||
Associated setting variables: |g:netrw_localmkdir| |g:netrw_mkdir_cmd|
|
||||
|g:netrw_remote_mkdir| |netrw-%|
|
||||
|
||||
|
||||
MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY *netrw-c* {{{2
|
||||
@@ -1860,6 +1921,10 @@ like >
|
||||
<
|
||||
into $HOME/.vim/after/syntax/netrw.vim .
|
||||
|
||||
If the mouse is enabled and works with your vim, you may use <s-leftmouse> to
|
||||
mark one or more files. You may mark multiple files by dragging the shifted
|
||||
leftmouse. (see |netrw-mouse|)
|
||||
|
||||
*markfilelist* *global_markfilelist* *local_markfilelist*
|
||||
All marked files are entered onto the global marked file list; there is only
|
||||
one such list. In addition, every netrw buffer also has its own local marked
|
||||
@@ -2114,7 +2179,15 @@ your browsing preferences. (see also: |netrw-settings|)
|
||||
--- -----------
|
||||
Var Explanation
|
||||
--- -----------
|
||||
< *g:netrw_alto* change from above splitting to below splitting
|
||||
< *g:netrw_altfile* some like |CTRL-^| to return to the last
|
||||
edited file. Choose that by setting this
|
||||
parameter to 1.
|
||||
Others like |CTRL-^| to return to the
|
||||
netrw browsing buffer. Choose that by setting
|
||||
this parameter to 0.
|
||||
default: =0
|
||||
|
||||
*g:netrw_alto* change from above splitting to below splitting
|
||||
by setting this variable (see |netrw-o|)
|
||||
default: =&sb (see |'sb'|)
|
||||
|
||||
@@ -2142,6 +2215,10 @@ your browsing preferences. (see also: |netrw-settings|)
|
||||
to get vertical splitting instead of
|
||||
horizontal splitting.
|
||||
|
||||
Related topics:
|
||||
|netrw-cr| |netrw-C|
|
||||
|g:netrw_alto| |g:netrw_altv|
|
||||
|
||||
*g:netrw_browsex_viewer* specify user's preference for a viewer: >
|
||||
"kfmclient exec"
|
||||
"gnome-open"
|
||||
@@ -2303,10 +2380,19 @@ your browsing preferences. (see also: |netrw-settings|)
|
||||
stamp information and file size)
|
||||
= 2: wide listing (multiple files in columns)
|
||||
= 3: tree style listing
|
||||
|
||||
*g:netrw_list_hide* comma separated pattern list for hiding files
|
||||
Patterns are regular expressions (see |regexp|)
|
||||
Example: let g:netrw_list_hide= '.*\.swp$'
|
||||
default: ""
|
||||
There's some special support for git-ignore
|
||||
files: you may add the output from the helper
|
||||
function 'netrw_gitignore#Hide() automatically
|
||||
hiding all gitignored files.
|
||||
For more details see |netrw-gitignore|.
|
||||
|
||||
Examples:
|
||||
let g:netrw_list_hide= '.*\.swp$'
|
||||
let g:netrw_list_hide= netrw_gitignore#Hide().'.*\.swp$'
|
||||
default: ""
|
||||
|
||||
*g:netrw_localcopycmd* ="cp" Linux/Unix/MacOS/Cygwin
|
||||
="copy" Windows
|
||||
@@ -2551,6 +2637,8 @@ To open a file in netrw's current directory, press "%". This map will
|
||||
query the user for a new filename; an empty file by that name will be
|
||||
placed in the netrw's current directory (ie. b:netrw_curdir).
|
||||
|
||||
Related topics: |netrw-d|
|
||||
|
||||
|
||||
PREVIEW WINDOW *netrw-p* *netrw-preview* {{{2
|
||||
|
||||
@@ -2655,7 +2743,7 @@ One may select a netrw window for editing with the "C" mapping, or by setting
|
||||
g:netrw_chgwin to the selected window number. Subsequent selection of a file
|
||||
to edit (|netrw-cr|) will use that window.
|
||||
|
||||
Related topics: |netrw-cr|
|
||||
Related topics: |netrw-cr| |g:netrw_browse_split|
|
||||
Associated setting variables: |g:netrw_chgwin|
|
||||
|
||||
|
||||
@@ -2988,15 +3076,78 @@ which is loaded automatically at startup (assuming :set nocp).
|
||||
read/write your file over the network in a separate tab.
|
||||
|
||||
To save the file, use >
|
||||
|
||||
:tabnext
|
||||
:set bt=
|
||||
:w! DBG
|
||||
< Please send that information to <netrw.vim>'s maintainer, >
|
||||
|
||||
< Furthermore, it'd be helpful if you would type >
|
||||
:Dsep
|
||||
< after each command you issue, thereby making it easier to
|
||||
associate which part of the debugging trace is due to which
|
||||
command.
|
||||
|
||||
Please send that information to <netrw.vim>'s maintainer, >
|
||||
NdrOchip at ScampbellPfamily.AbizM - NOSPAM
|
||||
<
|
||||
==============================================================================
|
||||
12. History *netrw-history* {{{1
|
||||
|
||||
v150: Jul 12, 2013 * removed a "keepalt" to allow ":e #" to
|
||||
return to the netrw directory listing
|
||||
Jul 13, 2013 * (Jonas Diemer) suggested changing
|
||||
a <cWORD> to <cfile>.
|
||||
Jul 21, 2013 * (Yuri Kanivetsky) reported that netrw's
|
||||
use of mkdir did not produce directories
|
||||
following umask.
|
||||
Aug 27, 2013 * introduced |g:netrw_altfile| option
|
||||
Sep 05, 2013 * s:Strlen() now uses |strdisplaywidth()|
|
||||
when available, by default
|
||||
Sep 12, 2013 * (Selyano Baldo) reported that netrw wasn't
|
||||
opening some directories properly from the
|
||||
command line.
|
||||
Nov 09, 2013 * |:Lexplore| introduced
|
||||
* (Ondrej Platek) reported an issue with
|
||||
netrw's trees (P15). Fixed.
|
||||
* (Jorge Solis) reported that "t" in
|
||||
tree mode caused netrw to forget its
|
||||
line position.
|
||||
Dec 05, 2013 * Added <s-leftmouse> file marking
|
||||
(see |netrw-mf|)
|
||||
Dec 05, 2013 * (Yasuhiro Matsumoto) Explore should use
|
||||
strlen() instead s:Strlen() when handling
|
||||
multibyte chars with strpart()
|
||||
(ie. strpart() is byte oriented, not
|
||||
display-width oriented).
|
||||
Dec 09, 2013 * (Ken Takata) Provided a patch; File sizes
|
||||
and a portion of timestamps were wrongly
|
||||
highlighted with the directory color when
|
||||
setting `:let g:netrw_liststyle=1` on Windows.
|
||||
* (Paul Domaskis) noted that sometimes
|
||||
cursorline was activating in non-netrw
|
||||
windows. All but one setting of cursorline
|
||||
was done via setl; there was one that was
|
||||
overlooked. Fixed.
|
||||
Dec 24, 2013 * (esquifit) asked that netrw allow the
|
||||
/cygdrive prefix be a user-alterable
|
||||
parameter.
|
||||
Jan 02, 2014 * Fixed a problem with netrw-based ballon
|
||||
evaluation (ie. netrw#NetrwBaloonHelp()
|
||||
not having been loaded error messages)
|
||||
Jan 03, 2014 * Fixed a problem with tree listings
|
||||
* New command installed: |:Ntree|
|
||||
Jan 06, 2014 * (Ivan Brennan) reported a problem with
|
||||
|netrw-P|. Fixed.
|
||||
Jan 06, 2014 * Fixed a problem with |netrw-P| when the
|
||||
modified file was to be abandoned.
|
||||
Jan 15, 2014 * (Matteo Cavalleri) reported that when the
|
||||
banner is suppressed and tree listing is
|
||||
used, a blank line was left at the top of
|
||||
the display. Fixed.
|
||||
Jan 20, 2014 * (Gideon Go) reported that, in tree listing
|
||||
style, with a previous window open, that
|
||||
the wrong directory was being used to open
|
||||
a file. Fixed. (P21)
|
||||
v149: Apr 18, 2013 * in wide listing format, now have maps for
|
||||
w and b to move to next/previous file
|
||||
Apr 26, 2013 * one may now copy files in the same
|
||||
@@ -3009,7 +3160,8 @@ which is loaded automatically at startup (assuming :set nocp).
|
||||
May 01, 2013 * :Explore ftp://... wasn't working. Fixed.
|
||||
May 02, 2013 * introduced |g:netrw_bannerbackslash| as
|
||||
requested by Paul Domaskis.
|
||||
May 18, 2013 * More fixes for windows (not cygwin)
|
||||
Jul 03, 2013 * Explore now avoids splitting when a buffer
|
||||
will be hidden.
|
||||
v148: Apr 16, 2013 * changed Netrw's Style menu to allow direct
|
||||
choice of listing style, hiding style, and
|
||||
sorting style
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*repeat.txt* For Vim version 7.4. Last change: 2013 Jul 25
|
||||
*repeat.txt* For Vim version 7.4. Last change: 2014 Feb 11
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -26,10 +26,14 @@ Chapter 26 of the user manual introduces repeating |usr_26.txt|.
|
||||
|
||||
Simple changes can be repeated with the "." command. Without a count, the
|
||||
count of the last change is used. If you enter a count, it will replace the
|
||||
last one. If the last change included a specification of a numbered register,
|
||||
the register number will be incremented. See |redo-register| for an example
|
||||
how to use this. Note that when repeating a command that used a Visual
|
||||
selection, the same SIZE of area is used, see |visual-repeat|.
|
||||
last one. |v:count| and |v:count1| will be set.
|
||||
|
||||
If the last change included a specification of a numbered register, the
|
||||
register number will be incremented. See |redo-register| for an example how
|
||||
to use this.
|
||||
|
||||
Note that when repeating a command that used a Visual selection, the same SIZE
|
||||
of area is used, see |visual-repeat|.
|
||||
|
||||
*@:*
|
||||
@: Repeat last command-line [count] times.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*sign.txt* For Vim version 7.4. Last change: 2012 Jul 10
|
||||
*sign.txt* For Vim version 7.4. Last change: 2013 Nov 17
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Gordon Prieur
|
||||
@@ -173,7 +173,7 @@ REMOVING SIGNS *:sign-unplace* *E159*
|
||||
Remove the placed sign at the cursor position.
|
||||
|
||||
|
||||
LISTING PLACED SIGNS
|
||||
LISTING PLACED SIGNS *:sign-place-list*
|
||||
|
||||
:sign place file={fname}
|
||||
List signs placed in file {fname}.
|
||||
|
||||
@@ -1844,6 +1844,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
|
||||
:GnatPretty ft_ada.txt /*:GnatPretty*
|
||||
:GnatTags ft_ada.txt /*:GnatTags*
|
||||
:Hexplore pi_netrw.txt /*:Hexplore*
|
||||
:Lexplore pi_netrw.txt /*:Lexplore*
|
||||
:Man filetype.txt /*:Man*
|
||||
:MkVimball pi_vimball.txt /*:MkVimball*
|
||||
:N editing.txt /*:N*
|
||||
@@ -1855,6 +1856,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
|
||||
:Nread pi_netrw.txt /*:Nread*
|
||||
:Ns pi_netrw.txt /*:Ns*
|
||||
:Nsource pi_netrw.txt /*:Nsource*
|
||||
:Ntree pi_netrw.txt /*:Ntree*
|
||||
:Nw pi_netrw.txt /*:Nw*
|
||||
:Nwrite pi_netrw.txt /*:Nwrite*
|
||||
:P various.txt /*:P*
|
||||
@@ -2231,6 +2233,9 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
|
||||
:foldopen fold.txt /*:foldopen*
|
||||
:for eval.txt /*:for*
|
||||
:fu eval.txt /*:fu*
|
||||
:func-abort eval.txt /*:func-abort*
|
||||
:func-dict eval.txt /*:func-dict*
|
||||
:func-range eval.txt /*:func-range*
|
||||
:function eval.txt /*:function*
|
||||
:function-verbose eval.txt /*:function-verbose*
|
||||
:g repeat.txt /*:g*
|
||||
@@ -2763,6 +2768,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
|
||||
:sign-jump sign.txt /*:sign-jump*
|
||||
:sign-list sign.txt /*:sign-list*
|
||||
:sign-place sign.txt /*:sign-place*
|
||||
:sign-place-list sign.txt /*:sign-place-list*
|
||||
:sign-undefine sign.txt /*:sign-undefine*
|
||||
:sign-unplace sign.txt /*:sign-unplace*
|
||||
:sil various.txt /*:sil*
|
||||
@@ -4345,6 +4351,7 @@ E878 pattern.txt /*E878*
|
||||
E879 syntax.txt /*E879*
|
||||
E88 windows.txt /*E88*
|
||||
E880 if_pyth.txt /*E880*
|
||||
E881 autocmd.txt /*E881*
|
||||
E89 message.txt /*E89*
|
||||
E90 message.txt /*E90*
|
||||
E91 options.txt /*E91*
|
||||
@@ -5935,6 +5942,7 @@ g:ada_standard_types ft_ada.txt /*g:ada_standard_types*
|
||||
g:ada_with_gnat_project_files ft_ada.txt /*g:ada_with_gnat_project_files*
|
||||
g:ada_withuse_ordinary ft_ada.txt /*g:ada_withuse_ordinary*
|
||||
g:clojure_align_multiline_strings indent.txt /*g:clojure_align_multiline_strings*
|
||||
g:clojure_align_subforms indent.txt /*g:clojure_align_subforms*
|
||||
g:clojure_fuzzy_indent indent.txt /*g:clojure_fuzzy_indent*
|
||||
g:clojure_fuzzy_indent_blacklist indent.txt /*g:clojure_fuzzy_indent_blacklist*
|
||||
g:clojure_fuzzy_indent_patterns indent.txt /*g:clojure_fuzzy_indent_patterns*
|
||||
@@ -5983,6 +5991,7 @@ g:html_use_css syntax.txt /*g:html_use_css*
|
||||
g:html_use_encoding syntax.txt /*g:html_use_encoding*
|
||||
g:html_use_xhtml syntax.txt /*g:html_use_xhtml*
|
||||
g:html_whole_filler syntax.txt /*g:html_whole_filler*
|
||||
g:netrw_altfile pi_netrw.txt /*g:netrw_altfile*
|
||||
g:netrw_alto pi_netrw.txt /*g:netrw_alto*
|
||||
g:netrw_altv pi_netrw.txt /*g:netrw_altv*
|
||||
g:netrw_banner pi_netrw.txt /*g:netrw_banner*
|
||||
@@ -6017,6 +6026,7 @@ g:netrw_glob_escape pi_netrw.txt /*g:netrw_glob_escape*
|
||||
g:netrw_hide pi_netrw.txt /*g:netrw_hide*
|
||||
g:netrw_home pi_netrw.txt /*g:netrw_home*
|
||||
g:netrw_http_cmd pi_netrw.txt /*g:netrw_http_cmd*
|
||||
g:netrw_http_put_cmd pi_netrw.txt /*g:netrw_http_put_cmd*
|
||||
g:netrw_http_xcmd pi_netrw.txt /*g:netrw_http_xcmd*
|
||||
g:netrw_ignorenetrc pi_netrw.txt /*g:netrw_ignorenetrc*
|
||||
g:netrw_keepdir pi_netrw.txt /*g:netrw_keepdir*
|
||||
@@ -7074,6 +7084,7 @@ netrw-gd pi_netrw.txt /*netrw-gd*
|
||||
netrw-getftype pi_netrw.txt /*netrw-getftype*
|
||||
netrw-gf pi_netrw.txt /*netrw-gf*
|
||||
netrw-gh pi_netrw.txt /*netrw-gh*
|
||||
netrw-gitignore pi_netrw.txt /*netrw-gitignore*
|
||||
netrw-gp pi_netrw.txt /*netrw-gp*
|
||||
netrw-gx pi_netrw.txt /*netrw-gx*
|
||||
netrw-handler pi_netrw.txt /*netrw-handler*
|
||||
@@ -7088,6 +7099,7 @@ netrw-incompatible pi_netrw.txt /*netrw-incompatible*
|
||||
netrw-internal-variables pi_netrw.txt /*netrw-internal-variables*
|
||||
netrw-intro-browse pi_netrw.txt /*netrw-intro-browse*
|
||||
netrw-leftmouse pi_netrw.txt /*netrw-leftmouse*
|
||||
netrw-lexplore pi_netrw.txt /*netrw-lexplore*
|
||||
netrw-list pi_netrw.txt /*netrw-list*
|
||||
netrw-listbookmark pi_netrw.txt /*netrw-listbookmark*
|
||||
netrw-listhack pi_netrw.txt /*netrw-listhack*
|
||||
@@ -7118,6 +7130,7 @@ netrw-netrc pi_netrw.txt /*netrw-netrc*
|
||||
netrw-nexplore pi_netrw.txt /*netrw-nexplore*
|
||||
netrw-noload pi_netrw.txt /*netrw-noload*
|
||||
netrw-nread pi_netrw.txt /*netrw-nread*
|
||||
netrw-ntree pi_netrw.txt /*netrw-ntree*
|
||||
netrw-nwrite pi_netrw.txt /*netrw-nwrite*
|
||||
netrw-o pi_netrw.txt /*netrw-o*
|
||||
netrw-options pi_netrw.txt /*netrw-options*
|
||||
@@ -7674,6 +7687,7 @@ s/\2 change.txt /*s\/\\2*
|
||||
s/\3 change.txt /*s\/\\3*
|
||||
s/\9 change.txt /*s\/\\9*
|
||||
s/\<CR> change.txt /*s\/\\<CR>*
|
||||
s/\= change.txt /*s\/\\=*
|
||||
s/\E change.txt /*s\/\\E*
|
||||
s/\L change.txt /*s\/\\L*
|
||||
s/\U change.txt /*s\/\\U*
|
||||
|
||||
+147
-61
@@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 7.4. Last change: 2013 Nov 14
|
||||
*todo.txt* For Vim version 7.4. Last change: 2014 Feb 11
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -34,96 +34,133 @@ not be repeated below, unless there is extra information.
|
||||
*known-bugs*
|
||||
-------------------- Known bugs and current work -----------------------
|
||||
|
||||
Patch From Lech Lorens doesn't quite work:
|
||||
Problem: When using ":'<,'>del" errors may be given for the visual line
|
||||
numbers being out of range.
|
||||
Solution: Reset Visual mode in ":del". (Lech Lorens)
|
||||
Files: src/ex_docmd.c
|
||||
When 'paste' is changed with 'pastetoggle', the ruler doesn't reflect this
|
||||
right away. (Samuel Ferencik, 2010 Dec 7)
|
||||
Patch to fix that status line isn't redrawn when 'pastetoggle' is set.
|
||||
(Nobuhiro Takasaki, 2014 Feb 11)
|
||||
|
||||
|
||||
Using \1 in pattern goes one line too far. (Bohr Shaw, 2013 Sep 5)
|
||||
Column is OK. "/\v(^.+\n)\1/e" (John Little, Sep 5)
|
||||
Also, matches start of 2nd line, not the whole line.
|
||||
|
||||
NFA regexp doesn't handle backreference correctly. (Ryuichi Hayashida, 2013
|
||||
Oct 10)
|
||||
|
||||
Error for incomplete help argument. (John Beckett, 2013 Sep 12)
|
||||
|
||||
Should win_redr_custom() not be allowed to use recursively?
|
||||
(Yasuhiro Matsumoto, 2013 Aug 15)
|
||||
|
||||
NFA engine combining character mismatch. (glts, 2013 Aug 27)
|
||||
Remark Dominique, Aug 27
|
||||
Regexp problems:
|
||||
- NFA regexp doesn't count tab matches correctly. (Urtica Dioica / gaultheria
|
||||
Shallon, 2013 Nov 18)
|
||||
- After patch 7.4.100 there is still a difference between NFA and old engine.
|
||||
25 a's with pattern \v^(aa+)\1+$ (Urtica Dioica, 2013 Nov 21) Also: 9 a's
|
||||
with pattern \v^(a{-2,})\1+$ (Nov 23)
|
||||
- NFA engine combining character mismatch. (glts, 2013 Aug 27)
|
||||
Remark from Dominique, Aug 27
|
||||
- Issue 164: freeze on regexp search.
|
||||
- NFA problem with non-greedy match and branches. (Ingo Karkat, 2013 Nov 29)
|
||||
- Ignorecase not handled properly for multi-byte characters. (Axel Bender,
|
||||
2013 Dec 11)
|
||||
- Using \@> and \?. (Brett Stahlman, 2013 Dec 21) Remark from Marcin Szamotulski
|
||||
Remark from Brett 2014 Jan 6 and 7.
|
||||
- Bug with back references. (Lech Lorens, 2014 Feb 3)
|
||||
- Bug when using \>. (Ramel, 2014 Feb 2)
|
||||
|
||||
Problem that a previous silent ":throw" causes a following try/catch not to
|
||||
work. (ZyX, 2013 Sep 28)
|
||||
|
||||
Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
|
||||
":cd C:\Windows\System32\drivers\etc*" does not work, even though the
|
||||
directory exists. (Sergio Gallelli, 2013 Dec 29)
|
||||
|
||||
Issue 164: freeze on regexp search.
|
||||
Patch 7.4.085 breaks Visual insert in some situations. (Issue 193)
|
||||
Patch by Christian Brabandt, 2014 Jan 16.
|
||||
|
||||
Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
|
||||
|
||||
Update for Clojure ftplugin. (Sung Pae). Await discussion about formatting in
|
||||
ftplugins.
|
||||
|
||||
Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
|
||||
|
||||
Patch to support slices in Python vim.List. (ZyX, 2013 Oct 20)
|
||||
Patch to make "J" set '[ and '] marks. (Christian Brabandt, 2013 Dec 11)
|
||||
Any compatibility problems?
|
||||
|
||||
Patch to support iterator on Python vim.options. (ZyX, 2013 Nov 2)
|
||||
Patch to add :S modifier for excaping the current file name.
|
||||
(ZyX, 2013 Nov 30) Update Dec 5.
|
||||
|
||||
Patch to make Dictionary.update() work without arguments.
|
||||
(ZyX, 2013 Oct 19)
|
||||
|
||||
Patch for Cobol ftplugin. (ZyX, 2013 Oct 20)
|
||||
Await response from maintainer.
|
||||
|
||||
Include systemverilog file? Two votes yes.
|
||||
Issu 197: ]P doesn't paste over Visual selection. With patch from Christian
|
||||
Brabandt, Feb 6.
|
||||
|
||||
Problem with 'spellsuggest' file, only works for some words.
|
||||
(Cesar Romani, 2013 Aug 20) Depends on file name? (Aug 24)
|
||||
Additional remark by glts: the suggested words are marked bad?
|
||||
|
||||
8 non-ASCII font names don't work. Need to convert from 'encoding' and use
|
||||
the wide functions. Patch by Ken Takata, 2013 Dec 22.
|
||||
Update 2014 Jan 6.
|
||||
|
||||
Syntax highlighting slow (hangs) in SASS file. (Niek Bosch, 2013 Aug 21)
|
||||
|
||||
Patch for mksession. (Nobuhiro Takasaki, 2014 Jan 31)
|
||||
Also fixes another problem (following email)
|
||||
|
||||
Adding "~" to 'cdpath' doesn't work for completion? (Davido, 2013 Aug 19)
|
||||
|
||||
Crash with ":%s/\n//g" on long file. (Aidan Marlin, 2014 Jan 15)
|
||||
Christian Brabandt: patch to run this into a join. (2014 Jan 18)
|
||||
Suggestion to not save replaced line for undo: Yukihiro Nakadaira, 2014 Jan
|
||||
25.
|
||||
|
||||
Add digraph for Rouble: =P. What's the Unicode?
|
||||
|
||||
Issue 174: Detect Mason files.
|
||||
|
||||
Phpcomplete.vim update. (Complex, 2014 Jan 15)
|
||||
|
||||
PHP syntax is extremely slow. (Anhad Jai Singh, 2014 Jan 19)
|
||||
|
||||
Can we make ":unlet $VAR" use unsetenv() to delete the env var?
|
||||
What for systems that don't have unsetenv()?
|
||||
|
||||
spec ftplugin: patch from Igor Gnatenko, 2014 Jan 26.
|
||||
Include if maintainers don't respond.
|
||||
|
||||
Patch to make has() check for Vim version and patch at the same time.
|
||||
(Marc Weber, 2013 Jun 7)
|
||||
|
||||
Regression on pach 7.4.034. (Ingo Karkat, 2013 Nov 20)
|
||||
|
||||
Patch to include smack support (Linux security library). (Jose Bollo, 2014 Jan
|
||||
14) Update Jan 15.
|
||||
|
||||
Tag list, as used for :tjump, does not unescape regexp. (Gary Johnson, 2014 Jan
|
||||
6) With patch in another message.
|
||||
|
||||
VMS: Select() doesn't work properly, typing ESC may hang Vim. Use sys$qiow
|
||||
instead. (Samuel Ferencik, 2013 Sep 28)
|
||||
|
||||
Series of patches for NL vs NUL handling. (ZyX, 2013 Nov 3, Nov 9)
|
||||
|
||||
Patch to add flag to shortmess to avoid giving completion messages.
|
||||
(Shougo Matsu, 2014 Jan 6, update Jan 11)
|
||||
|
||||
Patch to add v:completed_item. (Shougo Matsu, 2013 Nov 29).
|
||||
|
||||
Patch to make test 100 work on MS-Windows. (Taro Muraoka, 2013 Dec 12)
|
||||
|
||||
Patch to define macros for hardcoded values. (Elias Diem, 2013 Dec 14)
|
||||
|
||||
Perl: support for Activestate perl 5.18: Issue 170.
|
||||
|
||||
Several syntax file match "^\s*" which may get underlined if that's in the
|
||||
highlight group. Add a "\zs" after it?
|
||||
|
||||
Patch to fix temp directories for Windows, so that it works without tweaking.
|
||||
Issue 28.
|
||||
|
||||
Go through more coverity reports.
|
||||
|
||||
Include Haiku port? (Adrien Destugues, Siarzhuk Zharski, 2013 Oct 24)
|
||||
|
||||
Updated spec ftplugin. (Matěj Cepl, 2013 Oct 16)
|
||||
|
||||
Patch to make ColorScheme autocommand match with the colorscheme name instead
|
||||
of the buffer name. (Christian Brabandt, 2013 Sep 25)
|
||||
|
||||
Patch to right-align signs. (James Kolb (email james), 2013 Sep 23)
|
||||
|
||||
Patch to handle integer overflow. (Aaron Burrow, 2013 Dec 12)
|
||||
|
||||
With "$" in 'cpoptions' the popup menu isn't fully drawn. (Matti Niemenmaa,
|
||||
2013 Sep 5)
|
||||
|
||||
"gUgn" cannot be repeated, while "dgn" can. (Dimitar Dimitrov)
|
||||
Patch by Christian Brabandt (2013 Aug 12)
|
||||
Also notes by Christian Wellenbrock, Nov 13.
|
||||
|
||||
Several Win32 functions are not using Unicode.
|
||||
Patches to fix this. (Ken Takata, 2013 Aug 9)
|
||||
|
||||
Patch to add item in 'listchars' to repeat first character. (Nathaniel Braun,
|
||||
pragm, 2013 Oct 13)
|
||||
|
||||
@@ -132,27 +169,56 @@ Undo message is not always properly displayed. Patch by Ken Takata, 2013 oct
|
||||
|
||||
/[b-a] gives error E16, should probably be E769.
|
||||
|
||||
7 Windows XP: When using "ClearType" for text smoothing, a column of yellow
|
||||
pixels remains when typing spaces in front of a "D" ('guifont' set to
|
||||
"lucida_console:h8").
|
||||
Patch by Thomas Tuegel, also for GTK, 2013 Nov 24
|
||||
|
||||
:help gives example for z?, but it does not work. m? and t? do work.
|
||||
|
||||
Python: Extended funcrefs: use func_T* structure in place of char_u* function
|
||||
names. (ZyX, 2013 Jul 15, update Sep 22, 24, 28)
|
||||
names.
|
||||
(ZyX, 2013 Jul 15, update Sep 22, 24, 28; Update 2013 Dec 15, 2014 Jan 6)
|
||||
Also fixes Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)
|
||||
|
||||
Patch to add funcref to Lua. (Luis Carvalho, 2013 Sep 4)
|
||||
With tests: Sep 5.
|
||||
|
||||
Patch to fix that on suckless Terminal mousewheel up does not work.
|
||||
(Ralph Eastwood, 2013 Nov 25)
|
||||
|
||||
Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
|
||||
|
||||
Patch to make external commands work with multi-byte characters on Win32 when
|
||||
'encoding' differs from the active codepage. (Yasuhiro Matsumoto, 2013 Aug 5)
|
||||
|
||||
Checking runtime scripts: Thilo Six, 2012 Jun 6.
|
||||
|
||||
When evaluating expression in backticks, autoload doesn't work.
|
||||
(Andy Wokula, 2013 Dec 14)
|
||||
|
||||
Using <nr>ifoobar<esc> can slow down Vim. Patch by Christian Brabandt, 2013
|
||||
Dec 13.
|
||||
|
||||
Fold can't be opened after ":move". (Ein Brown)
|
||||
Patch from Christian Brabandt doesn't fix it completely.
|
||||
|
||||
Patch from Christian Brabandt to preserve upper case marks when wiping out a
|
||||
buffer. (2013 Dec 9)
|
||||
|
||||
Patch for drag&drop reordering of GUI tab pages reordering.
|
||||
(Ken Takata, 2013 Nov 22, second one, also by Masamichi Abe)
|
||||
|
||||
":sign-jump" uses first window in buffer instead of current window.
|
||||
Patch by James McCoy, 2013 Nov 22.
|
||||
|
||||
GTK: problem with 'L' in 'guioptions' changing the window width.
|
||||
(Aaron Cornelius, 2012 Feb 6)
|
||||
|
||||
Patch to add option that tells whether small deletes go into the numbered
|
||||
registers. (Aryeh Leib Taurog, 2013 Nov 18)
|
||||
|
||||
Win32: use different args for SearchPath()? (Yasuhiro Matsumoto, 2009 Jan 30)
|
||||
Also fixes wrong result from executable().
|
||||
Update from Ken Takata, 2014 Jan 10.
|
||||
|
||||
Javascript file where indent gets stuck on: GalaxyMaster, 2012 May 3.
|
||||
|
||||
The BufUnload event is triggered when re-using the empty buffer.
|
||||
@@ -163,6 +229,10 @@ The CompleteDone autocommand needs some info passed to it:
|
||||
- The word that was selected (empty if abandoned complete)
|
||||
- Type of completion: tag, omnifunc, user func.
|
||||
|
||||
Patch to allow more types in remote_expr(). (Lech Lorens, 2014 Jan 5)
|
||||
Doesn't work for string in list. Other way to pass all types of variables
|
||||
reliably?
|
||||
|
||||
Using ":call foo#d.f()" doesn't autoload the "foo.vim" file.
|
||||
That is, calling a dictionary function on an autoloaded dict.
|
||||
Works OK for echo, just not for ":call" and ":call call()". (Ted, 2011 Mar
|
||||
@@ -177,6 +247,15 @@ Or should we add a more general mechanism, like lambda functions?
|
||||
Problem caused by patch 7.3.638: window->open does not update window
|
||||
correctly. Issue 91.
|
||||
|
||||
Patch to add {lhs} to :mapclear: clear all maps starting with {lhs}.
|
||||
(Christian Brabandt, 2013 Dec 9)
|
||||
|
||||
The garbage collector may use too much stack. Make set_ref_in_item()
|
||||
iterative instead of recursive. Test program by Marc Weber (2013 Dec 10)
|
||||
|
||||
Exception caused by argument of return is not caught by try/catch.
|
||||
(David Barnett, 2013 Nov 19)
|
||||
|
||||
8 'backupdir' and 'directory' should use $TMPDIR, $TMP and/or $TEMP when
|
||||
defined.
|
||||
Issue 28.
|
||||
@@ -243,8 +322,18 @@ a reboot.
|
||||
MS-Windows: Crash opening very long file name starting with "\\".
|
||||
(Christian Brock, 2012 Jun 29)
|
||||
|
||||
Patch to have text objects defined by arbitrary single characters. (Daniel
|
||||
Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31)
|
||||
Ben Fritz: problem with 'selection' set to "exclusive".
|
||||
|
||||
Patch to select the next or previous text object if there isn't one under the
|
||||
cursor. (Daniel Thau, 2013 Nov 20)
|
||||
|
||||
patch to add "combine" flag to syntax commands. (so8res, 2012 Dec 6)
|
||||
|
||||
Bug caused by patch 7.3.1288? Issue 183.
|
||||
I can't reproduce it.
|
||||
|
||||
Syntax update problem in one buffer opened in two windows, bottom window is
|
||||
not correctly updated. (Paul Harris, 2012 Feb 27)
|
||||
|
||||
@@ -370,6 +459,8 @@ Patch to add digraph() function. (Christian Brabandt, 2013 Aug 22, update Aug
|
||||
|
||||
Patch for input method status. (Hirohito Higashi, 2012 Apr 18)
|
||||
|
||||
Update Vim app icon (for Gnome). (Jakub Steiner, 2013 Dec 6)
|
||||
|
||||
Patch to use .png icons for the toolbar on MS-Windows. (Martin Gieseking, 2013
|
||||
Apr 18)
|
||||
|
||||
@@ -388,8 +479,6 @@ And one for gui_x11.txt.
|
||||
finddir() has the same problem. (Yukihiro Nakadaira, 2012 Jan 10)
|
||||
Requires a rewrite of the file_file_in_path code.
|
||||
|
||||
Problem with l: dictionary being locked in a function. (ZyX, 2011 Jul 21)
|
||||
|
||||
Should use has("browsefilter") in ftplugins. Requires patch 7.3.593.
|
||||
|
||||
Update for vim2html.pl. (Tyru, 2013 Feb 22)
|
||||
@@ -471,8 +560,6 @@ When using a Vim server, a # in the path causes an error message.
|
||||
Setting $HOME on MS-Windows is not very well documented. Suggestion by Ben
|
||||
Fritz (2011 Oct 27).
|
||||
|
||||
Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)
|
||||
|
||||
Bug: Windows 7 64 bit system freezes when 'clipboard' set to "unnamed" and
|
||||
doing ":g/test/d". Putting every delete on the clipboard? (Robert Chan, 2011
|
||||
Jun 17)
|
||||
@@ -516,6 +603,8 @@ following "redir" command gives an error for not being able to access s:foo.
|
||||
When setqflist() uses a filename that triggers a BufReadCmd autocommand Vim
|
||||
doesn't jump to the correct line with :cfirst. (ZyX, 2011 Sep 18)
|
||||
|
||||
Behavior of i" and a" text objects isn't logical. (Ben Fritz, 2013 Nov 19)
|
||||
|
||||
7 Make "ga" show the digraph for a character, if it exists.
|
||||
Patch from Christian Brabandt, 2011 Aug 19.
|
||||
|
||||
@@ -656,7 +745,7 @@ Assume the system converts between the actual encoding of the filesystem to
|
||||
the system encoding (usually utf-8).
|
||||
|
||||
Patch to add GUI colors to the terminal, when it supports it. (ZyX, 2013 Jan
|
||||
26)
|
||||
26, update 2013 Dec 14)
|
||||
|
||||
Problem producing tags file when hebrew.frx is present. It has a BOM.
|
||||
Results in E670. (Tony Mechelynck, 2010 May 2)
|
||||
@@ -694,9 +783,6 @@ C-indenting: A matching { in a comment is ignored, but intermediate { are not
|
||||
checked to be in a comment. Implement FM_SKIPCOMM flag of findmatchlimit().
|
||||
Issue 46.
|
||||
|
||||
When 'paste' is changed with 'pastetoggle', the ruler doesn't reflect this
|
||||
right away. (Samuel Ferencik, 2010 Dec 7)
|
||||
|
||||
Mac with X11: clipboard doesn't work properly. (Raf, 2010 Aug 16)
|
||||
|
||||
Using CompilerSet doesn't record where an option was set from. E.g., in the
|
||||
@@ -934,8 +1020,6 @@ system when 'encoding' is "utf-8".
|
||||
Win32 GUI: last message from startup doesn't show up when there is an echoerr
|
||||
command. (Cyril Slobin, 2009 Mar 13)
|
||||
|
||||
Win32: use different args for SearchPath()? (Yasuhiro Matsumoto, 2009 Jan 30)
|
||||
|
||||
Win32: completion of file name ":e c:\!test" results in ":e c:\\!test", which
|
||||
does not work. (Nieko Maatjes, 2009 Jan 8, Ingo Karkat, 2009 Jan 22)
|
||||
|
||||
@@ -1399,6 +1483,10 @@ Does the conversion in the other direction work when 'fileencodings' is set
|
||||
properly?
|
||||
|
||||
Add a few features to xxd. (Vadim Vygonets, 2013 Nov 11)
|
||||
Patches: 2013 Nov 19
|
||||
1: Add -e: little endian hexdump
|
||||
2: Add -o: add offset to displayed position
|
||||
3: Change displayed file position width to 8 chars
|
||||
|
||||
Cursor displayed in the wrong position when using 'numberwidth'. (James Vega,
|
||||
2007 Jun 21)
|
||||
@@ -1555,6 +1643,9 @@ Completing with 'wildmenu' and using <Up> and <Down> to move through directory
|
||||
tree stops unexpectedly when using ":cd " and entering a directory that
|
||||
doesn't contain other directories.
|
||||
|
||||
Default for 'background' is wrong when using xterm with 256 colors.
|
||||
Table with estimates from Matteo Cavalleri, 2014 Jan 10.
|
||||
|
||||
Setting 'background' resets the Normal background color:
|
||||
highlight Normal ctermbg=DarkGray
|
||||
set background=dark
|
||||
@@ -1960,8 +2051,6 @@ GTK+ GUI known bugs:
|
||||
Win32 GUI known bugs:
|
||||
- Win32: tearoff menu window should have a scrollbar when it's taller than
|
||||
the screen.
|
||||
8 non-ASCII font names don't work. Need to convert from 'encoding' and use
|
||||
the wide functions.
|
||||
8 On Windows 98 the unicows library is needed to support functions with UCS2
|
||||
file names. Can we load unicows.dll dynamically?
|
||||
8 The -P argument doesn't work very well with many MDI applications.
|
||||
@@ -1969,9 +2058,6 @@ Win32 GUI known bugs:
|
||||
Tutorial: http://win32assembly.online.fr/tut32.html
|
||||
8 In eval.c, io.h is included when MSWIN32 is defined. Shouldn't this be
|
||||
WIN32? Or can including io.h be moved to vim.h? (Dan Sharp)
|
||||
7 Windows XP: When using "ClearType" for text smoothing, a column of yellow
|
||||
pixels remains when typing spaces in front of a "D" ('guifont' set to
|
||||
"lucida_console:h8").
|
||||
6 Win32 GUI: With "-u NONE -U NONE" and doing "CTRL-W v" "CTRL-W o", the ":"
|
||||
of ":only" is highlighted like the cursor. (Lipelis)
|
||||
8 When 'encoding' is "utf-8", should use 'guifont' for both normal and wide
|
||||
|
||||
+22
-2
@@ -1,4 +1,4 @@
|
||||
*usr_41.txt* For Vim version 7.4. Last change: 2013 Feb 20
|
||||
*usr_41.txt* For Vim version 7.4. Last change: 2014 Jan 10
|
||||
|
||||
VIM USER MANUAL - by Bram Moolenaar
|
||||
|
||||
@@ -595,13 +595,17 @@ String manipulation: *string-functions*
|
||||
matchlist() like matchstr() and also return submatches
|
||||
stridx() first index of a short string in a long string
|
||||
strridx() last index of a short string in a long string
|
||||
strlen() length of a string
|
||||
strlen() length of a string in bytes
|
||||
strchars() length of a string in characters
|
||||
strwidth() size of string when displayed
|
||||
strdisplaywidth() size of string when displayed, deals with tabs
|
||||
substitute() substitute a pattern match with a string
|
||||
submatch() get a specific match in ":s" and substitute()
|
||||
strpart() get part of a string
|
||||
expand() expand special keywords
|
||||
iconv() convert text from one encoding to another
|
||||
byteidx() byte index of a character in a string
|
||||
byteidxcomp() like byteidx() but count composing characters
|
||||
repeat() repeat a string multiple times
|
||||
eval() evaluate a string expression
|
||||
|
||||
@@ -656,6 +660,9 @@ Floating point computation: *float-functions*
|
||||
ceil() round up
|
||||
floor() round down
|
||||
trunc() remove value after decimal point
|
||||
fmod() remainder of division
|
||||
exp() exponential
|
||||
log() natural logarithm (logarithm to base e)
|
||||
log10() logarithm to base 10
|
||||
pow() value of x to the exponent y
|
||||
sqrt() square root
|
||||
@@ -675,6 +682,7 @@ Other computation: *bitwise-function*
|
||||
invert() bitwise invert
|
||||
or() bitwise OR
|
||||
xor() bitwise XOR
|
||||
sha256() SHA-256 hash
|
||||
|
||||
Variables: *var-functions*
|
||||
type() type of a variable
|
||||
@@ -697,11 +705,15 @@ Cursor and mark position: *cursor-functions* *mark-functions*
|
||||
wincol() window column number of the cursor
|
||||
winline() window line number of the cursor
|
||||
cursor() position the cursor at a line/column
|
||||
screencol() get screen column of the cursor
|
||||
screenrow() get screen row of the cursor
|
||||
getpos() get position of cursor, mark, etc.
|
||||
setpos() set position of cursor, mark, etc.
|
||||
byte2line() get line number at a specific byte count
|
||||
line2byte() byte count at a specific line
|
||||
diff_filler() get the number of filler lines above a line
|
||||
screenattr() get attribute at a screen line/row
|
||||
screenchar() get character code at a screen line/row
|
||||
|
||||
Working with text in the current buffer: *text-functions*
|
||||
getline() get a line or list of lines from the buffer
|
||||
@@ -883,14 +895,22 @@ Various: *various-functions*
|
||||
libcall() call a function in an external library
|
||||
libcallnr() idem, returning a number
|
||||
|
||||
undofile() get the name of the undo file
|
||||
undotree() return the state of the undo tree
|
||||
|
||||
getreg() get contents of a register
|
||||
getregtype() get type of a register
|
||||
setreg() set contents and type of a register
|
||||
|
||||
shiftwidth() effective value of 'shiftwidth'
|
||||
|
||||
taglist() get list of matching tags
|
||||
tagfiles() get a list of tags files
|
||||
|
||||
luaeval() evaluate Lua expression
|
||||
mzeval() evaluate |MzScheme| expression
|
||||
py3eval() evaluate Python expression (|+python3|)
|
||||
pyeval() evaluate Python expression (|+python|)
|
||||
|
||||
==============================================================================
|
||||
*41.7* Defining a function
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*version7.txt* For Vim version 7.4. Last change: 2013 Sep 03
|
||||
*version7.txt* For Vim version 7.4. Last change: 2013 Nov 18
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -7190,7 +7190,7 @@ More encryption *new-more-encryption*
|
||||
---------------
|
||||
|
||||
Support for Blowfish encryption. Added the 'cryptmethod' option.
|
||||
Mostly by Moshin Ahmed.
|
||||
Mostly by Mohsin Ahmed.
|
||||
|
||||
Also encrypt the text in the swap file and the undo file.
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2013 Nov 13
|
||||
" Last Change: 2014 Feb 11
|
||||
|
||||
" Listen very carefully, I will say this only once
|
||||
if exists("did_load_filetypes")
|
||||
@@ -106,6 +106,9 @@ au BufNewFile,BufRead *.run setf ampl
|
||||
" Ant
|
||||
au BufNewFile,BufRead build.xml setf ant
|
||||
|
||||
" Arduino
|
||||
au BufNewFile,BufRead *.ino,*.pde setf arduino
|
||||
|
||||
" Apache style config file
|
||||
au BufNewFile,BufRead proftpd.conf* call s:StarSetf('apachestyle')
|
||||
|
||||
@@ -2240,6 +2243,9 @@ au BufNewFile,BufRead *.v setf verilog
|
||||
" Verilog-AMS HDL
|
||||
au BufNewFile,BufRead *.va,*.vams setf verilogams
|
||||
|
||||
" SystemVerilog
|
||||
au BufNewFile,BufRead *.sv setf systemverilog
|
||||
|
||||
" VHDL
|
||||
au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl
|
||||
au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl')
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: generic Changelog file
|
||||
" Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||
" Latest Revision: 2012-08-23
|
||||
" Latest Revision: 2014-01-10
|
||||
" Variables:
|
||||
" g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) -
|
||||
" description: the timeformat used in ChangeLog entries.
|
||||
@@ -122,12 +122,12 @@ if &filetype == 'changelog'
|
||||
|
||||
" Format used for new date entries.
|
||||
if !exists('g:changelog_new_date_format')
|
||||
let g:changelog_new_date_format = "%d %u\n\n\t* %c\n\n"
|
||||
let g:changelog_new_date_format = "%d %u\n\n\t* %p%c\n\n"
|
||||
endif
|
||||
|
||||
" Format used for new entries to current date entry.
|
||||
if !exists('g:changelog_new_entry_format')
|
||||
let g:changelog_new_entry_format = "\t* %c"
|
||||
let g:changelog_new_entry_format = "\t* %p%c"
|
||||
endif
|
||||
|
||||
" Regular expression used to find a given date entry.
|
||||
@@ -143,16 +143,16 @@ if &filetype == 'changelog'
|
||||
|
||||
" Substitutes specific items in new date-entry formats and search strings.
|
||||
" Can be done with substitute of course, but unclean, and need \@! then.
|
||||
function! s:substitute_items(str, date, user)
|
||||
function! s:substitute_items(str, date, user, prefix)
|
||||
let str = a:str
|
||||
let middles = {'%': '%', 'd': a:date, 'u': a:user, 'c': '{cursor}'}
|
||||
let middles = {'%': '%', 'd': a:date, 'u': a:user, 'p': a:prefix, 'c': '{cursor}'}
|
||||
let i = stridx(str, '%')
|
||||
while i != -1
|
||||
let inc = 0
|
||||
if has_key(middles, str[i + 1])
|
||||
let mid = middles[str[i + 1]]
|
||||
let str = strpart(str, 0, i) . mid . strpart(str, i + 2)
|
||||
let inc = strlen(mid)
|
||||
let inc = strlen(mid) - 1
|
||||
endif
|
||||
let i = stridx(str, '%', i + 1 + inc)
|
||||
endwhile
|
||||
@@ -171,7 +171,7 @@ if &filetype == 'changelog'
|
||||
endfunction
|
||||
|
||||
" Internal function to create a new entry in the ChangeLog.
|
||||
function! s:new_changelog_entry()
|
||||
function! s:new_changelog_entry(prefix)
|
||||
" Deal with 'paste' option.
|
||||
let save_paste = &paste
|
||||
let &paste = 1
|
||||
@@ -179,7 +179,7 @@ if &filetype == 'changelog'
|
||||
" Look for an entry for today by our user.
|
||||
let date = strftime(g:changelog_dateformat)
|
||||
let search = s:substitute_items(g:changelog_date_entry_search, date,
|
||||
\ s:username())
|
||||
\ s:username(), a:prefix)
|
||||
if search(search) > 0
|
||||
" Ok, now we look for the end of the date entry, and add an entry.
|
||||
call cursor(nextnonblank(line('.') + 1), 1)
|
||||
@@ -188,7 +188,7 @@ if &filetype == 'changelog'
|
||||
else
|
||||
let p = line('.')
|
||||
endif
|
||||
let ls = split(s:substitute_items(g:changelog_new_entry_format, '', ''),
|
||||
let ls = split(s:substitute_items(g:changelog_new_entry_format, '', '', a:prefix),
|
||||
\ '\n')
|
||||
call append(p, ls)
|
||||
call cursor(p + 1, 1)
|
||||
@@ -198,7 +198,7 @@ if &filetype == 'changelog'
|
||||
|
||||
" No entry today, so create a date-user header and insert an entry.
|
||||
let todays_entry = s:substitute_items(g:changelog_new_date_format,
|
||||
\ date, s:username())
|
||||
\ date, s:username(), a:prefix)
|
||||
" Make sure we have a cursor positioning.
|
||||
if stridx(todays_entry, '{cursor}') == -1
|
||||
let todays_entry = todays_entry . '{cursor}'
|
||||
@@ -206,7 +206,7 @@ if &filetype == 'changelog'
|
||||
|
||||
" Now do the work.
|
||||
call append(0, split(todays_entry, '\n'))
|
||||
|
||||
|
||||
" Remove empty lines at end of file.
|
||||
if remove_empty
|
||||
$-/^\s*$/-1,$delete
|
||||
@@ -223,8 +223,8 @@ if &filetype == 'changelog'
|
||||
endfunction
|
||||
|
||||
if exists(":NewChangelogEntry") != 2
|
||||
noremap <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry()<CR>
|
||||
command! -nargs=0 NewChangelogEntry call s:new_changelog_entry()
|
||||
noremap <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry('')<CR>
|
||||
command! -nargs=0 NewChangelogEntry call s:new_changelog_entry('')
|
||||
endif
|
||||
|
||||
let b:undo_ftplugin = "setl com< fo< et< ai<"
|
||||
@@ -277,10 +277,7 @@ else
|
||||
if exists('b:changelog_entry_prefix')
|
||||
let prefix = call(b:changelog_entry_prefix, [])
|
||||
else
|
||||
let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "") . ':'
|
||||
endif
|
||||
if !empty(prefix)
|
||||
let prefix = ' ' . prefix
|
||||
let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "")
|
||||
endif
|
||||
|
||||
let buf = bufnr(changelog)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: cobol
|
||||
" Author: Tim Pope <vimNOSPAM@tpope.info>
|
||||
" $Id: cobol.vim,v 1.1 2007/05/05 17:24:38 vimboss Exp $
|
||||
" Last Update: By ZyX: use shiftwidth()
|
||||
|
||||
" Insert mode mappings: <C-T> <C-D> <Tab>
|
||||
" Normal mode mappings: < > << >> [[ ]] [] ][
|
||||
@@ -113,7 +113,7 @@ endfunction
|
||||
|
||||
function! s:increase(...)
|
||||
let lnum = '.'
|
||||
let sw = &shiftwidth
|
||||
let sw = shiftwidth()
|
||||
let i = a:0 ? a:1 : indent(lnum)
|
||||
if i >= 11
|
||||
return sw - (i - 11) % sw
|
||||
@@ -128,7 +128,7 @@ endfunction
|
||||
|
||||
function! s:decrease(...)
|
||||
let lnum = '.'
|
||||
let sw = &shiftwidth
|
||||
let sw = shiftwidth()
|
||||
let i = indent(a:0 ? a:1 : lnum)
|
||||
if i >= 11 + sw
|
||||
return 1 + (i + 12) % sw
|
||||
@@ -147,7 +147,7 @@ function! CobolIndentBlock(shift)
|
||||
let head = strpart(getline('.'),0,7)
|
||||
let tail = strpart(getline('.'),7)
|
||||
let indent = match(tail,'[^ ]')
|
||||
let sw = &shiftwidth
|
||||
let sw = shiftwidth()
|
||||
let shift = a:shift
|
||||
if shift > 0
|
||||
if indent < 4
|
||||
@@ -221,7 +221,8 @@ endfunction
|
||||
function! s:Tab()
|
||||
if (strpart(getline('.'),0,col('.')-1) =~ '^\s*$' && &sta)
|
||||
return s:IncreaseIndent()
|
||||
elseif &sts == &sw && &sts != 8 && &et
|
||||
" &softtabstop < 0: &softtabstop follows &shiftwidth
|
||||
elseif (&sts < 0 || &sts == shiftwidth()) && &sts != 8 && &et
|
||||
return s:repeat(" ",s:increase(col('.')-1))
|
||||
else
|
||||
return "\<Tab>"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
|
||||
" Former Maintainers: Michael Piefel <piefel@informatik.hu-berlin.de>
|
||||
" Stefano Zacchiroli <zack@debian.org>
|
||||
" Last Change: 2012-01-31
|
||||
" Last Change: 2014-01-31
|
||||
" License: Vim License
|
||||
" URL: http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/debchangelog.vim
|
||||
|
||||
@@ -152,7 +152,7 @@ function CloseBug()
|
||||
endfunction
|
||||
|
||||
function Distribution(dist)
|
||||
call setline(1, substitute(getline(1), ") [[:lower:] ]*;", ") " . a:dist . ";", ""))
|
||||
call setline(1, substitute(getline(1), ') *\%(UNRELEASED\|\l\+\);', ") " . a:dist . ";", ""))
|
||||
endfunction
|
||||
|
||||
function Urgency(urg)
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
" Vim filetype plugin
|
||||
" Language: Java properties file
|
||||
" Maintainer: David Bürgin <676c7473@gmail.com>
|
||||
" Last Change: 2013-11-19
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
setlocal formatoptions-=t
|
||||
setlocal comments=:#,:!
|
||||
setlocal commentstring=#\ %s
|
||||
|
||||
let b:undo_ftplugin = "setl cms< com< fo<"
|
||||
+18
-18
@@ -1,7 +1,7 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: python
|
||||
" Maintainer: Johannes Zellner <johannes@zellner.org>
|
||||
" Last Change: 2013 Sep 25
|
||||
" Last Change: 2014 Feb 09
|
||||
" Last Change By Johannes: Wed, 21 Apr 2004 13:13:08 CEST
|
||||
|
||||
if exists("b:did_ftplugin") | finish | endif
|
||||
@@ -11,11 +11,11 @@ set cpo&vim
|
||||
|
||||
setlocal cinkeys-=0#
|
||||
setlocal indentkeys-=0#
|
||||
setlocal include=\s*\\(from\\\|import\\)
|
||||
setlocal include=^\\s*\\(from\\\|import\\)
|
||||
setlocal includeexpr=substitute(v:fname,'\\.','/','g')
|
||||
setlocal suffixesadd=.py
|
||||
setlocal comments-=:%
|
||||
setlocal commentstring=#%s
|
||||
setlocal comments=b:#,fb:-
|
||||
setlocal commentstring=#\ %s
|
||||
|
||||
setlocal omnifunc=pythoncomplete#Complete
|
||||
|
||||
@@ -26,21 +26,21 @@ nnoremap <silent> <buffer> [[ :call <SID>Python_jump('?^\(class\\|def\)')<cr>
|
||||
nnoremap <silent> <buffer> ]m :call <SID>Python_jump('/^\s*\(class\\|def\)')<cr>
|
||||
nnoremap <silent> <buffer> [m :call <SID>Python_jump('?^\s*\(class\\|def\)')<cr>
|
||||
|
||||
if exists('*<SID>Python_jump') | finish | endif
|
||||
if !exists('*<SID>Python_jump')
|
||||
fun! <SID>Python_jump(motion) range
|
||||
let cnt = v:count1
|
||||
let save = @/ " save last search pattern
|
||||
mark '
|
||||
while cnt > 0
|
||||
silent! exe a:motion
|
||||
let cnt = cnt - 1
|
||||
endwhile
|
||||
call histdel('/', -1)
|
||||
let @/ = save " restore last search pattern
|
||||
endfun
|
||||
endif
|
||||
|
||||
fun! <SID>Python_jump(motion) range
|
||||
let cnt = v:count1
|
||||
let save = @/ " save last search pattern
|
||||
mark '
|
||||
while cnt > 0
|
||||
silent! exe a:motion
|
||||
let cnt = cnt - 1
|
||||
endwhile
|
||||
call histdel('/', -1)
|
||||
let @/ = save " restore last search pattern
|
||||
endfun
|
||||
|
||||
if has("gui_win32") && !exists("b:browsefilter")
|
||||
if has("browsefilter") && !exists("b:browsefilter")
|
||||
let b:browsefilter = "Python Files (*.py)\t*.py\n" .
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
endif
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: Windows Registry export with regedit (*.reg)
|
||||
" Maintainer: Cade Forester <ahx2323@gmail.com>
|
||||
" Latest Revision: 2014-01-09
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
let b:undo_ftplugin =
|
||||
\ 'let b:browsefilter = "" | ' .
|
||||
\ 'setlocal ' .
|
||||
\ 'comments< '.
|
||||
\ 'commentstring< ' .
|
||||
\ 'formatoptions< '
|
||||
|
||||
|
||||
if has( 'gui_win32' )
|
||||
\ && !exists( 'b:browsefilter' )
|
||||
let b:browsefilter =
|
||||
\ 'registry files (*.reg)\t*.reg\n' .
|
||||
\ 'All files (*.*)\t*.*\n'
|
||||
endif
|
||||
|
||||
setlocal comments=:;
|
||||
setlocal commentstring=;\ %s
|
||||
|
||||
setlocal formatoptions-=t
|
||||
setlocal formatoptions+=croql
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
@@ -0,0 +1,11 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: SystemVerilog
|
||||
" Maintainer: kocha <kocha.lsifrontend@gmail.com>
|
||||
" Last Change: 12-Aug-2013.
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Behaves just like Verilog
|
||||
runtime! ftplugin/verilog.vim
|
||||
@@ -6,7 +6,7 @@
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 08 September 2013
|
||||
" Last Change: 16 December 2013
|
||||
|
||||
" TODO: Indenting after multibyte characters is broken:
|
||||
" (let [Δ (if foo
|
||||
@@ -53,6 +53,10 @@ if exists("*searchpairpos")
|
||||
let g:clojure_align_multiline_strings = 0
|
||||
endif
|
||||
|
||||
if !exists('g:clojure_align_subforms')
|
||||
let g:clojure_align_subforms = 0
|
||||
endif
|
||||
|
||||
function! s:SynIdName()
|
||||
return synIDattr(synID(line("."), col("."), 0), "name")
|
||||
endfunction
|
||||
@@ -284,7 +288,7 @@ if exists("*searchpairpos")
|
||||
call search('\v\_s', 'cW')
|
||||
call search('\v\S', 'W')
|
||||
if paren[0] < line(".")
|
||||
return paren[1] + &shiftwidth - 1
|
||||
return paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)
|
||||
endif
|
||||
|
||||
call search('\v\S', 'bW')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
" Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr>
|
||||
" URL: http://www.2072productions.com/vim/indent/php.vim
|
||||
" Home: https://github.com/2072/PHP-Indenting-for-VIm
|
||||
" Last Change: 2013 August 7th
|
||||
" Last Change: 2014 Jan 21
|
||||
" Version: 1.39
|
||||
"
|
||||
"
|
||||
@@ -642,7 +642,7 @@ function! GetPhpIndent()
|
||||
if previous_line =~ '^\s*}\|;\s*}'.endline " XXX
|
||||
|
||||
call cursor(last_line_num, 1)
|
||||
call search('}\|;\s*}'.endline, 'W')
|
||||
call search('}\|;\s*}'.endline, 'cW')
|
||||
let oldLastLine = last_line_num
|
||||
let last_line_num = searchpair('{', '', '}', 'bW', 'Skippmatch()')
|
||||
|
||||
|
||||
+13
-2
@@ -1,7 +1,8 @@
|
||||
" Vim indent file
|
||||
" Language: Shell Script
|
||||
" Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||
" Latest Revision: 2010-01-06
|
||||
" Maintainer: Peter Aronoff <telemachus@arpinum.org>
|
||||
" Original Author: Nikolai Weibull <now@bitwi.se>
|
||||
" Latest Revision: 2013-11-28
|
||||
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
@@ -77,6 +78,8 @@ function! GetShIndent()
|
||||
let line = getline(v:lnum)
|
||||
if line =~ '^\s*\%(then\|do\|else\|elif\|fi\|done\)\>' || line =~ '^\s*}'
|
||||
let ind -= s:indent_value('default')
|
||||
elseif line =~ '^\s*esac\>' && s:is_case_empty(getline(v:lnum - 1))
|
||||
let ind -= s:indent_value('default')
|
||||
elseif line =~ '^\s*esac\>'
|
||||
let ind -= (s:is_case_label(pine, lnum) && s:is_case_ended(pine) ?
|
||||
\ 0 : s:indent_value('case-statements')) +
|
||||
@@ -154,5 +157,13 @@ function! s:is_case_ended(line)
|
||||
return s:is_case_break(a:line) || a:line =~ ';[;&]\s*\%(#.*\)\=$'
|
||||
endfunction
|
||||
|
||||
function! s:is_case_empty(line)
|
||||
if a:line =~ '^\s*$' || a:line =~ '^\s*#'
|
||||
return s:is_case_empty(getline(v:lnum - 1))
|
||||
else
|
||||
return a:line =~ '^\s*case\>'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
" Vim indent file
|
||||
" Language: SystemVerilog
|
||||
" Maintainer: kocha <kocha.lsifrontend@gmail.com>
|
||||
" Last Change: 12-Aug-2013.
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
let b:did_indent = 1
|
||||
|
||||
setlocal indentexpr=SystemVerilogIndent()
|
||||
setlocal indentkeys=!^F,o,O,0),0},=begin,=end,=join,=endcase,=join_any,=join_none
|
||||
setlocal indentkeys+==endmodule,=endfunction,=endtask,=endspecify
|
||||
setlocal indentkeys+==endclass,=endpackage,=endsequence,=endclocking
|
||||
setlocal indentkeys+==endinterface,=endgroup,=endprogram,=endproperty,=endchecker
|
||||
setlocal indentkeys+==`else,=`endif
|
||||
|
||||
" Only define the function once.
|
||||
if exists("*SystemVerilogIndent")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
function SystemVerilogIndent()
|
||||
|
||||
if exists('b:systemverilog_indent_width')
|
||||
let offset = b:systemverilog_indent_width
|
||||
else
|
||||
let offset = &sw
|
||||
endif
|
||||
if exists('b:systemverilog_indent_modules')
|
||||
let indent_modules = offset
|
||||
else
|
||||
let indent_modules = 0
|
||||
endif
|
||||
|
||||
" Find a non-blank line above the current line.
|
||||
let lnum = prevnonblank(v:lnum - 1)
|
||||
|
||||
" At the start of the file use zero indent.
|
||||
if lnum == 0
|
||||
return 0
|
||||
endif
|
||||
|
||||
let lnum2 = prevnonblank(lnum - 1)
|
||||
let curr_line = getline(v:lnum)
|
||||
let last_line = getline(lnum)
|
||||
let last_line2 = getline(lnum2)
|
||||
let ind = indent(lnum)
|
||||
let ind2 = indent(lnum - 1)
|
||||
let offset_comment1 = 1
|
||||
" Define the condition of an open statement
|
||||
" Exclude the match of //, /* or */
|
||||
let sv_openstat = '\(\<or\>\|\([*/]\)\@<![*(,{><+-/%^&|!=?:]\([*/]\)\@!\)'
|
||||
" Define the condition when the statement ends with a one-line comment
|
||||
let sv_comment = '\(//.*\|/\*.*\*/\s*\)'
|
||||
if exists('b:verilog_indent_verbose')
|
||||
let vverb_str = 'INDENT VERBOSE:'
|
||||
let vverb = 1
|
||||
else
|
||||
let vverb = 0
|
||||
endif
|
||||
|
||||
" Indent accoding to last line
|
||||
" End of multiple-line comment
|
||||
if last_line =~ '\*/\s*$' && last_line !~ '/\*.\{-}\*/'
|
||||
let ind = ind - offset_comment1
|
||||
if vverb
|
||||
echo vverb_str "De-indent after a multiple-line comment."
|
||||
endif
|
||||
|
||||
" Indent after if/else/for/case/always/initial/specify/fork blocks
|
||||
elseif last_line =~ '`\@<!\<\(if\|else\)\>' ||
|
||||
\ last_line =~ '^\s*\<\(for\|case\%[[zx]]\|do\|foreach\|randcase\)\>' ||
|
||||
\ last_line =~ '^\s*\<\(always\|always_comb\|always_ff\|always_latch\)\>' ||
|
||||
\ last_line =~ '^\s*\<\(initial\|specify\|fork\|final\)\>'
|
||||
if last_line !~ '\(;\|\<end\>\)\s*' . sv_comment . '*$' ||
|
||||
\ last_line =~ '\(//\|/\*\).*\(;\|\<end\>\)\s*' . sv_comment . '*$'
|
||||
let ind = ind + offset
|
||||
if vverb | echo vverb_str "Indent after a block statement." | endif
|
||||
endif
|
||||
" Indent after function/task/class/package/sequence/clocking/
|
||||
" interface/covergroup/property/checkerprogram blocks
|
||||
elseif last_line =~ '^\s*\<\(function\|task\|class\|package\)\>' ||
|
||||
\ last_line =~ '^\s*\<\(sequence\|clocking\|interface\)\>' ||
|
||||
\ last_line =~ '^\s*\(\w\+\s*:\)\=\s*\<covergroup\>' ||
|
||||
\ last_line =~ '^\s*\<\(property\|checker\|program\)\>'
|
||||
if last_line !~ '\<end\>\s*' . sv_comment . '*$' ||
|
||||
\ last_line =~ '\(//\|/\*\).*\(;\|\<end\>\)\s*' . sv_comment . '*$'
|
||||
let ind = ind + offset
|
||||
if vverb
|
||||
echo vverb_str "Indent after function/task/class block statement."
|
||||
endif
|
||||
endif
|
||||
|
||||
" Indent after module/function/task/specify/fork blocks
|
||||
elseif last_line =~ '^\s*\(\<extern\>\s*\)\=\<module\>'
|
||||
let ind = ind + indent_modules
|
||||
if vverb && indent_modules
|
||||
echo vverb_str "Indent after module statement."
|
||||
endif
|
||||
if last_line =~ '[(,]\s*' . sv_comment . '*$' &&
|
||||
\ last_line !~ '\(//\|/\*\).*[(,]\s*' . sv_comment . '*$'
|
||||
let ind = ind + offset
|
||||
if vverb
|
||||
echo vverb_str "Indent after a multiple-line module statement."
|
||||
endif
|
||||
endif
|
||||
|
||||
" Indent after a 'begin' statement
|
||||
elseif last_line =~ '\(\<begin\>\)\(\s*:\s*\w\+\)*' . sv_comment . '*$' &&
|
||||
\ last_line !~ '\(//\|/\*\).*\(\<begin\>\)' &&
|
||||
\ ( last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$' ||
|
||||
\ last_line2 =~ '^\s*[^=!]\+\s*:\s*' . sv_comment . '*$' )
|
||||
let ind = ind + offset
|
||||
if vverb | echo vverb_str "Indent after begin statement." | endif
|
||||
|
||||
" Indent after a '{' or a '('
|
||||
elseif last_line =~ '[{(]' . sv_comment . '*$' &&
|
||||
\ last_line !~ '\(//\|/\*\).*[{(]' &&
|
||||
\ ( last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$' ||
|
||||
\ last_line2 =~ '^\s*[^=!]\+\s*:\s*' . sv_comment . '*$' )
|
||||
let ind = ind + offset
|
||||
if vverb | echo vverb_str "Indent after begin statement." | endif
|
||||
|
||||
" De-indent for the end of one-line block
|
||||
elseif ( last_line !~ '\<begin\>' ||
|
||||
\ last_line =~ '\(//\|/\*\).*\<begin\>' ) &&
|
||||
\ last_line2 =~ '\<\(`\@<!if\|`\@<!else\|for\|always\|initial\|do\|foreach\|final\)\>.*' .
|
||||
\ sv_comment . '*$' &&
|
||||
\ last_line2 !~ '\(//\|/\*\).*\<\(`\@<!if\|`\@<!else\|for\|always\|initial\|do\|foreach\|final\)\>' &&
|
||||
\ last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$' &&
|
||||
\ ( last_line2 !~ '\<begin\>' ||
|
||||
\ last_line2 =~ '\(//\|/\*\).*\<begin\>' )
|
||||
let ind = ind - offset
|
||||
if vverb
|
||||
echo vverb_str "De-indent after the end of one-line statement."
|
||||
endif
|
||||
|
||||
" Multiple-line statement (including case statement)
|
||||
" Open statement
|
||||
" Ident the first open line
|
||||
elseif last_line =~ sv_openstat . '\s*' . sv_comment . '*$' &&
|
||||
\ last_line !~ '\(//\|/\*\).*' . sv_openstat . '\s*$' &&
|
||||
\ last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$'
|
||||
let ind = ind + offset
|
||||
if vverb | echo vverb_str "Indent after an open statement." | endif
|
||||
|
||||
" Close statement
|
||||
" De-indent for an optional close parenthesis and a semicolon, and only
|
||||
" if there exists precedent non-whitespace char
|
||||
elseif last_line =~ ')*\s*;\s*' . sv_comment . '*$' &&
|
||||
\ last_line !~ '^\s*)*\s*;\s*' . sv_comment . '*$' &&
|
||||
\ last_line !~ '\(//\|/\*\).*\S)*\s*;\s*' . sv_comment . '*$' &&
|
||||
\ ( last_line2 =~ sv_openstat . '\s*' . sv_comment . '*$' &&
|
||||
\ last_line2 !~ ';\s*//.*$') &&
|
||||
\ last_line2 !~ '^\s*' . sv_comment . '$'
|
||||
let ind = ind - offset
|
||||
if vverb | echo vverb_str "De-indent after a close statement." | endif
|
||||
|
||||
" `ifdef and `else
|
||||
elseif last_line =~ '^\s*`\<\(ifdef\|else\)\>'
|
||||
let ind = ind + offset
|
||||
if vverb
|
||||
echo vverb_str "Indent after a `ifdef or `else statement."
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
" Re-indent current line
|
||||
|
||||
" De-indent on the end of the block
|
||||
" join/end/endcase/endfunction/endtask/endspecify
|
||||
if curr_line =~ '^\s*\<\(join\|join_any\|join_none\|\|end\|endcase\|while\)\>' ||
|
||||
\ curr_line =~ '^\s*\<\(endfunction\|endtask\|endspecify\|endclass\)\>' ||
|
||||
\ curr_line =~ '^\s*\<\(endpackage\|endsequence\|endclocking\|endinterface\)\>' ||
|
||||
\ curr_line =~ '^\s*\<\(endgroup\|endproperty\|endchecker\|endprogram\)\>' ||
|
||||
\ curr_line =~ '^\s*}'
|
||||
let ind = ind - offset
|
||||
if vverb | echo vverb_str "De-indent the end of a block." | endif
|
||||
elseif curr_line =~ '^\s*\<endmodule\>'
|
||||
let ind = ind - indent_modules
|
||||
if vverb && indent_modules
|
||||
echo vverb_str "De-indent the end of a module."
|
||||
endif
|
||||
|
||||
" De-indent on a stand-alone 'begin'
|
||||
elseif curr_line =~ '^\s*\<begin\>'
|
||||
if last_line !~ '^\s*\<\(function\|task\|specify\|module\|class\|package\)\>' ||
|
||||
\ last_line !~ '^\s*\<\(sequence\|clocking\|interface\|covergroup\)\>' ||
|
||||
\ last_line !~ '^\s*\<\(property\|checker\|program\)\>' &&
|
||||
\ last_line !~ '^\s*\()*\s*;\|)\+\)\s*' . sv_comment . '*$' &&
|
||||
\ ( last_line =~
|
||||
\ '\<\(`\@<!if\|`\@<!else\|for\|case\%[[zx]]\|always\|initial\|do\|foreach\|randcase\|final\)\>' ||
|
||||
\ last_line =~ ')\s*' . sv_comment . '*$' ||
|
||||
\ last_line =~ sv_openstat . '\s*' . sv_comment . '*$' )
|
||||
let ind = ind - offset
|
||||
if vverb
|
||||
echo vverb_str "De-indent a stand alone begin statement."
|
||||
endif
|
||||
endif
|
||||
|
||||
" De-indent after the end of multiple-line statement
|
||||
elseif curr_line =~ '^\s*)' &&
|
||||
\ ( last_line =~ sv_openstat . '\s*' . sv_comment . '*$' ||
|
||||
\ last_line !~ sv_openstat . '\s*' . sv_comment . '*$' &&
|
||||
\ last_line2 =~ sv_openstat . '\s*' . sv_comment . '*$' )
|
||||
let ind = ind - offset
|
||||
if vverb
|
||||
echo vverb_str "De-indent the end of a multiple statement."
|
||||
endif
|
||||
|
||||
" De-indent `else and `endif
|
||||
elseif curr_line =~ '^\s*`\<\(else\|endif\)\>'
|
||||
let ind = ind - offset
|
||||
if vverb | echo vverb_str "De-indent `else and `endif statement." | endif
|
||||
|
||||
endif
|
||||
|
||||
" Return the indention
|
||||
return ind
|
||||
endfunction
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim:sw=2
|
||||
@@ -1,7 +1,7 @@
|
||||
" ---------------------------------------------------------------------
|
||||
" getscriptPlugin.vim
|
||||
" Author: Charles E. Campbell
|
||||
" Date: Jan 07, 2008
|
||||
" Date: Nov 29, 2013
|
||||
" Installing: :help glvs-install
|
||||
" Usage: :help glvs
|
||||
"
|
||||
@@ -13,13 +13,16 @@
|
||||
" Initialization: {{{1
|
||||
" if you're sourcing this file, surely you can't be
|
||||
" expecting vim to be in its vi-compatible mode
|
||||
if &cp || exists("g:loaded_getscriptPlugin")
|
||||
if exists("g:loaded_getscriptPlugin")
|
||||
finish
|
||||
endif
|
||||
if &cp
|
||||
if &verbose
|
||||
echo "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
|
||||
endif
|
||||
finish
|
||||
endif
|
||||
let g:loaded_getscriptPlugin = "v35"
|
||||
let g:loaded_getscriptPlugin = "v36"
|
||||
let s:keepcpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
|
||||
" PLUGIN SECTION
|
||||
" Date: Apr 30, 2013
|
||||
" Date: Dec 31, 2013
|
||||
" Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
|
||||
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
|
||||
" Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{1
|
||||
" Copyright: Copyright (C) 1999-2013 Charles E. Campbell {{{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,
|
||||
@@ -20,27 +20,33 @@
|
||||
if &cp || exists("g:loaded_netrwPlugin")
|
||||
finish
|
||||
endif
|
||||
"DechoTabOn
|
||||
let g:loaded_netrwPlugin = "v149"
|
||||
let g:loaded_netrwPlugin = "v150"
|
||||
if v:version < 702
|
||||
echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
|
||||
echohl WarningMsg
|
||||
echo "***warning*** you need vim version 7.2 for this version of netrw"
|
||||
echohl None
|
||||
finish
|
||||
endif
|
||||
if v:version < 703 || (v:version == 703 && !has("patch465"))
|
||||
echohl WarningMsg
|
||||
echo "***warning*** this version of netrw needs vim 7.3.465 or later"
|
||||
echohl Normal
|
||||
finish
|
||||
endif
|
||||
let s:keepcpo = &cpo
|
||||
set cpo&vim
|
||||
"DechoTabOn
|
||||
"DechoRemOn
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" Public Interface: {{{1
|
||||
|
||||
" Local Browsing: {{{2
|
||||
" Local Browsing Autocmds: {{{2
|
||||
augroup FileExplorer
|
||||
au!
|
||||
" SEE Benzinger problem...
|
||||
au BufEnter * sil! call s:LocalBrowse(expand("<amatch>"))
|
||||
au VimEnter * sil! call s:VimEnter(expand("<amatch>"))
|
||||
au BufEnter * sil call s:LocalBrowse(expand("<amatch>"))
|
||||
au VimEnter * sil call s:VimEnter(expand("<amatch>"))
|
||||
if has("win32") || has("win95") || has("win64") || has("win16")
|
||||
au BufEnter .* sil! call s:LocalBrowse(expand("<amatch>"))
|
||||
au BufEnter .* sil call s:LocalBrowse(expand("<amatch>"))
|
||||
endif
|
||||
augroup END
|
||||
|
||||
@@ -50,8 +56,8 @@ augroup Network
|
||||
au BufReadCmd file://* call netrw#FileUrlRead(expand("<amatch>"))
|
||||
au BufReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
|
||||
au FileReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>"))
|
||||
au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
|
||||
au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
|
||||
au BufWriteCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
|
||||
au FileWriteCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
|
||||
try
|
||||
au SourceCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>"))
|
||||
catch /^Vim\%((\a\+)\)\=:E216/
|
||||
@@ -64,8 +70,9 @@ com! -count=1 -nargs=* Nread call netrw#NetrwSavePosn()<bar>call netrw#NetRead(
|
||||
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()
|
||||
com! -nargs=? Ntree call netrw#NetrwSetTreetop(<q-args>)
|
||||
|
||||
" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
|
||||
" Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{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>)
|
||||
@@ -73,6 +80,7 @@ com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<cou
|
||||
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>)
|
||||
com! -nargs=* -bar -complete=dir Lexplore call netrw#Lexplore(<q-args>)
|
||||
|
||||
" Commands: NetrwSettings {{{2
|
||||
com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings()
|
||||
@@ -83,46 +91,61 @@ if !exists("g:netrw_nogx") && maparg('gx','n') == ""
|
||||
if !hasmapto('<Plug>NetrwBrowseX')
|
||||
nmap <unique> gx <Plug>NetrwBrowseX
|
||||
endif
|
||||
nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
|
||||
nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cfile>"),0)<cr>
|
||||
endif
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" LocalBrowse: {{{2
|
||||
" LocalBrowse: invokes netrw#LocalBrowseCheck() on directory buffers {{{2
|
||||
fun! s:LocalBrowse(dirname)
|
||||
" unfortunate interaction -- debugging calls can't be used here;
|
||||
" the BufEnter event causes triggering when attempts to write to
|
||||
" Unfortunate interaction -- only DechoMsg debugging calls can be safely used here.
|
||||
" Otherwise, the BufEnter event gets triggered when attempts to write to
|
||||
" the DBG buffer are made.
|
||||
|
||||
if !exists("s:vimentered")
|
||||
" If s:vimentered doesn't exist, then the VimEnter event hasn't fired. It will,
|
||||
" and so s:VimEnter() will then be calling this routine, but this time with s:vimentered defined.
|
||||
" call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered doesn't exist)")
|
||||
" call Dret("s:LocalBrowse")
|
||||
return
|
||||
endif
|
||||
" call Decho("s:LocalBrowse(dirname<".a:dirname.">){")
|
||||
" echomsg "dirname<".a:dirname.">"
|
||||
|
||||
" call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered=".s:vimentered.")")
|
||||
|
||||
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.
|
||||
" call Decho("(LocalBrowse) dirname<".a:dirname."> (amiga)")
|
||||
" call Decho("(LocalBrowse) dirname<".a:dirname."> (isdirectory, amiga)")
|
||||
if a:dirname != '' && isdirectory(a:dirname)
|
||||
sil! call netrw#LocalBrowseCheck(a:dirname)
|
||||
endif
|
||||
|
||||
elseif isdirectory(a:dirname)
|
||||
" echomsg "dirname<".dirname."> isdir"
|
||||
" call Decho("(LocalBrowse) dirname<".a:dirname."> (not amiga)")
|
||||
" call Decho("(LocalBrowse) dirname<".a:dirname."> (isdirectory, not amiga)")
|
||||
sil! call netrw#LocalBrowseCheck(a:dirname)
|
||||
|
||||
else
|
||||
" not a directory, ignore it
|
||||
" call Decho("(LocalBrowse) dirname<".a:dirname."> not a directory, ignoring...")
|
||||
endif
|
||||
" not a directory, ignore it
|
||||
" call Decho("|return s:LocalBrowse }")
|
||||
|
||||
" call Dret("s:LocalBrowse")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" s:VimEnter: {{{2
|
||||
" s:VimEnter: after all vim startup stuff is done, this function is called. {{{2
|
||||
" Its purpose: to look over all windows and run s:LocalBrowse() on
|
||||
" them, which checks if they're directories and will create a directory
|
||||
" listing when appropriate.
|
||||
" It also sets s:vimentered, letting s:LocalBrowse() know that s:VimEnter()
|
||||
" has already been called.
|
||||
fun! s:VimEnter(dirname)
|
||||
" call Decho("VimEnter(dirname<".a:dirname.">){")
|
||||
" call Dfunc("s:VimEnter(dirname<".a:dirname.">) expand(%)<".expand("%").">")
|
||||
let curwin = winnr()
|
||||
let s:vimentered = 1
|
||||
windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
|
||||
windo call s:LocalBrowse(expand("%:p"))
|
||||
exe curwin."wincmd w"
|
||||
" call Decho("|return VimEnter }")
|
||||
" call Dret("s:VimEnter")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: xa 6502 cross assembler
|
||||
" Maintainer: Clemens Kirchgatterer <clemens@thf.ath.cx>
|
||||
" Last Change: 2003 May 03
|
||||
" Maintainer: Clemens Kirchgatterer <clemens@1541.org>
|
||||
" Last Change: 2014 Jan 05
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
" Vim syntax file
|
||||
" Language: Arduino
|
||||
" Maintainer: Johannes Hoff <johannes@johanneshoff.com>
|
||||
" Last Change: 2011 June 3
|
||||
" License: VIM license (:help license, replace vim by arduino.vim)
|
||||
|
||||
" Syntax highlighting like in the Arduino IDE
|
||||
" Keywords extracted from <arduino>/build/shared/lib/keywords.txt (arduino
|
||||
" version 0021)
|
||||
|
||||
" Thanks to Rik, Erik Nomitch, Adam Obeng and Graeme Cross for helpful feedback!
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Read the C syntax to start with
|
||||
if version < 600
|
||||
so <sfile>:p:h/cpp.vim
|
||||
else
|
||||
runtime! syntax/cpp.vim
|
||||
endif
|
||||
|
||||
syn keyword arduinoConstant HIGH LOW INPUT OUTPUT
|
||||
syn keyword arduinoConstant DEC BIN HEX OCT BYTE
|
||||
syn keyword arduinoConstant PI HALF_PI TWO_PI
|
||||
syn keyword arduinoConstant LSBFIRST MSBFIRST
|
||||
syn keyword arduinoConstant CHANGE FALLING RISING
|
||||
syn keyword arduinoConstant SERIAL DISPLAY
|
||||
syn keyword arduinoConstant DEFAULT EXTERNAL INTERNAL INTERNAL1V1 INTERNAL2V56
|
||||
|
||||
syn keyword arduinoStdFunc abs acos asin atan atan2 ceil constrain
|
||||
syn keyword arduinoStdFunc cos degrees exp floor log
|
||||
syn keyword arduinoStdFunc map max min pow radians
|
||||
syn keyword arduinoStdFunc round sin sq sqrt tan
|
||||
syn keyword arduinoStdFunc randomSeed random
|
||||
|
||||
syn keyword arduinoFunc analogReference analogRead analogWrite
|
||||
syn keyword arduinoFunc attachInterrupt detachInterrupt interrupts noInterrupts
|
||||
syn keyword arduinoFunc lowByte highByte bitRead bitWrite bitSet bitClear
|
||||
syn keyword arduinoFunc millis micros delay delayMicroseconds
|
||||
syn keyword arduinoFunc pinMode digitalWrite digitalRead
|
||||
syn keyword arduinoFunc tone noTone pulseIn shiftOut
|
||||
|
||||
syn keyword arduinoMethod setup loop
|
||||
syn keyword arduinoMethod begin end available read flush print println write peek
|
||||
|
||||
syn keyword arduinoType boolean byte word String
|
||||
|
||||
syn keyword arduinoModule Serial Serial1 Serial2 Serial3
|
||||
|
||||
hi def link arduinoType Type
|
||||
hi def link arduinoConstant Constant
|
||||
hi def link arduinoStdFunc Function
|
||||
hi def link arduinoFunc Function
|
||||
hi def link arduinoMethod Function
|
||||
hi def link arduinoModule Identifier
|
||||
@@ -3,7 +3,7 @@
|
||||
" Maintainer: Erik Wognsen <erik.wognsen@gmail.com>
|
||||
" Previous maintainer:
|
||||
" Kevin Dahlhausen <kdahlhaus@yahoo.com>
|
||||
" Last Change: 2012 Apr 09
|
||||
" Last Change: 2014 Feb 04
|
||||
|
||||
" Thanks to Ori Avtalion for feedback on the comment markers!
|
||||
|
||||
@@ -93,7 +93,11 @@ syn match asmCond "\.endif"
|
||||
syn match asmMacro "\.macro"
|
||||
syn match asmMacro "\.endm"
|
||||
|
||||
syn match asmDirective "\.[a-z][a-z]\+"
|
||||
" Assembler directives start with a '.' and may contain upper case (e.g.,
|
||||
" .ABORT), numbers (e.g., .p2align), dash (e.g., .app-file) and underscore in
|
||||
" CFI directives (e.g., .cfi_startproc). This will also match labels starting
|
||||
" with '.', including the GCC auto-generated '.L' labels.
|
||||
syn match asmDirective "\.[A-Za-z][0-9A-Za-z-_]*"
|
||||
|
||||
|
||||
syn case match
|
||||
|
||||
+44
-44
File diff suppressed because one or more lines are too long
+46
-31
@@ -6,7 +6,7 @@
|
||||
" Nikolai Weibull (Add CSS2 support)
|
||||
" Maintainer: Jules Wang <w.jq0722@gmail.com>
|
||||
" URL: https://github.com/JulesWang/css.vim
|
||||
" Last Change: 2013 Sep 24
|
||||
" Last Change: 2013 Nov.27
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
@@ -58,7 +58,8 @@ syn match cssSelectorOp2 "[~|^$*]\?=" contained
|
||||
syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ
|
||||
|
||||
" .class and #id
|
||||
syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
|
||||
syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+" contains=cssClassNameDot
|
||||
syn match cssClassNameDot contained '\.'
|
||||
|
||||
try
|
||||
syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*"
|
||||
@@ -74,13 +75,14 @@ syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)" cont
|
||||
syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)" contains=cssUnitDecorators
|
||||
syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)" contains=cssUnitDecorators
|
||||
|
||||
|
||||
syn match cssIncludeKeyword /@\(-[a-z]+-\)\=\(media\|keyframes\|import\|charset\|namespace\|page\)/ contained
|
||||
" @media
|
||||
syn match cssMedia "@media\>" nextgroup=cssMediaQuery,cssMediaBlock skipwhite skipnl
|
||||
syn match cssMediaQuery /\(only\|not\)\=\s*[a-z]*\(\s\|,\)\@=\(\(\s\+and\)\=\s\+(.\{-})\)*/ contained skipwhite skipnl contains=cssMediaProp,cssValueLength,cssMediaKeyword,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType nextgroup=cssMediaBlock,cssMediaComma
|
||||
syn region cssInclude start=/@media\>/ end=/\ze{/ skipwhite skipnl contains=cssMediaProp,cssValueLength,cssMediaKeyword,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType,cssIncludeKeyword,cssMediaComma,cssComment nextgroup=cssMediaBlock
|
||||
syn keyword cssMediaType contained screen print aural braille embossed handheld projection tty tv speech all contained skipwhite skipnl
|
||||
syn keyword cssMediaKeyword only not and contained
|
||||
syn region cssMediaBlock transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition,cssTagName,cssClassName,cssIdentifier,cssPseudoClass,cssSelectorOp,cssSelectorOp2,cssAttributeSelector fold
|
||||
syn match cssMediaComma "," nextgroup=cssMediaQuery skipwhite skipnl contained
|
||||
syn match cssMediaComma "," skipwhite skipnl contained
|
||||
|
||||
" Reference: http://www.w3.org/TR/css3-mediaqueries/
|
||||
syn keyword cssMediaProp contained width height orientation scan grid
|
||||
@@ -91,21 +93,25 @@ syn match cssMediaProp contained /\(\(max\|min\)-\)\=\(height\|width\|resolution
|
||||
syn keyword cssMediaAttr contained portrait landscape progressive interlace
|
||||
|
||||
" @page
|
||||
syn match cssPage "@page\>" nextgroup=cssPagePseudo,cssDefinition skipwhite skipnl
|
||||
syn match cssPagePseudo /:\(left\|right\|first\|\)/ nextgroup=cssDefinition contained skipwhite skipnl
|
||||
syn match cssPageHeaderProp /@\(\(top\|left\|right\|bottom\)-\(left\|center\|right\|middle\|bottom\)\)\(-corner\)\=/ contained
|
||||
syn keyword cssPageProp content size contained
|
||||
" http://www.w3.org/TR/css3-page/
|
||||
syn match cssPage "@page\>[^{]*{\@=" contains=cssPagePseudo,cssIncludeKeyword nextgroup=cssPageWrap transparent skipwhite skipnl
|
||||
syn match cssPagePseudo /:\(left\|right\|first\|blank\)/ contained skipwhite skipnl
|
||||
syn region cssPageWrap contained transparent matchgroup=cssBraces start="{" end="}" contains=cssPageMargin,cssPageProp,cssAttrRegion,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition,cssHacks
|
||||
syn match cssPageMargin /@\(\(top\|left\|right\|bottom\)-\(left\|center\|right\|middle\|bottom\)\)\(-corner\)\=/ contained nextgroup=cssDefinition skipwhite skipnl
|
||||
syn keyword cssPageProp contained content size
|
||||
" http://www.w3.org/TR/CSS2/page.html#break-inside
|
||||
syn keyword cssPageProp contained orphans widows
|
||||
|
||||
" @keyframe
|
||||
syn match cssKeyFrame "@\(-[a-z]*-\)\=keyframes\>\(\s*\<\S*\>\)\=" nextgroup=cssKeyFrameBlock contains=cssVendor skipwhite skipnl
|
||||
syn region cssKeyFrameBlock contained transparent matchgroup=cssBraces start="{" end="}" contains=cssKeyFrameSelector,cssDefinition
|
||||
syn match cssKeyFrameSelector /\(\d*%\|from\|to\)\=/ contained skipwhite skipnl
|
||||
" http://www.w3.org/TR/css3-animations/#keyframes
|
||||
syn match cssKeyFrame "@\(-[a-z]+-\)\=keyframes\>[^{]*{\@=" nextgroup=cssKeyFrameWrap contains=cssVendor,cssIncludeKeyword skipwhite skipnl transparent
|
||||
syn region cssKeyFrameWrap contained transparent matchgroup=cssBraces start="{" end="}" contains=cssKeyFrameSelector
|
||||
syn match cssKeyFrameSelector /\(\d*%\|from\|to\)\=/ contained skipwhite skipnl nextgroup=cssDefinition
|
||||
|
||||
" @import
|
||||
syn region cssInclude start=/@import\>/ end=/\ze;/ contains=cssComment,cssURL,cssUnicodeEscape,cssMediaQuery,cssStringQ,cssStringQQ,cssIncludeKeyword
|
||||
syn region cssInclude start=/@charset\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
|
||||
syn region cssInclude start=/@namespace\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
|
||||
syn match cssIncludeKeyword /\(@import\|@charset\|@namespace\)/ contained
|
||||
syn region cssInclude start=/@import\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword,cssURL,cssMediaProp,cssValueLength,cssMediaKeyword,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType
|
||||
syn region cssInclude start=/@charset\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
|
||||
syn region cssInclude start=/@namespace\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
|
||||
|
||||
" @font-face
|
||||
" http://www.w3.org/TR/css3-fonts/#at-font-face-rule
|
||||
@@ -179,7 +185,7 @@ syn keyword cssCommonAttr contained top bottom center stretch hidden visible
|
||||
"------------------------------------------------
|
||||
" CSS Animations
|
||||
" http://www.w3.org/TR/css3-animations/
|
||||
syn match cssAnimationProp contained "\<animation\(-\(delay\|direction\|duration\|fill-mode\|name\|play-state\|timing-function\)\)\=\>"
|
||||
syn match cssAnimationProp contained "\<animation\(-\(delay\|direction\|duration\|fill-mode\|name\|play-state\|timing-function\|iteration-count\)\)\=\>"
|
||||
|
||||
" animation-direction attributes
|
||||
syn keyword cssAnimationAttr contained alternate reverse
|
||||
@@ -215,7 +221,7 @@ syn match cssBorderProp contained "\<box-decoration-break\>"
|
||||
syn match cssBorderProp contained "\<box-shadow\>"
|
||||
|
||||
" border-image attributes
|
||||
syn keyword cssBorderAttr contained stretch repeat round space fill
|
||||
syn keyword cssBorderAttr contained stretch round space fill
|
||||
|
||||
" border-style attributes
|
||||
syn keyword cssBorderAttr contained dotted dashed solid double groove ridge inset outset
|
||||
@@ -230,7 +236,7 @@ syn keyword cssBorderAttr contained clone slice
|
||||
syn match cssBoxProp contained "\<padding\(-\(top\|right\|bottom\|left\)\)\=\>"
|
||||
syn match cssBoxProp contained "\<margin\(-\(top\|right\|bottom\|left\)\)\=\>"
|
||||
syn match cssBoxProp contained "\<overflow\(-\(x\|y\|style\)\)\=\>"
|
||||
syn match cssBoxProp contained "\<rotation\(-point\)=\>"
|
||||
syn match cssBoxProp contained "\<rotation\(-point\)\=\>"
|
||||
syn keyword cssBoxAttr contained visible hidden scroll auto
|
||||
syn match cssBoxAttr contained "\<no-\(display\|content\)\>"
|
||||
|
||||
@@ -289,13 +295,26 @@ syn keyword cssFontAttr contained bold bolder lighter
|
||||
syn match cssFontProp contained "\<font-smooth\>"
|
||||
syn match cssFontAttr contained "\<\(subpixel-\)\=\antialiased\>"
|
||||
|
||||
|
||||
" CSS Multi-column Layout Module
|
||||
" http://www.w3.org/TR/css3-multicol/
|
||||
syn match cssMultiColumnProp contained "\<break-\(after\|before\|inside\)\>"
|
||||
syn match cssMultiColumnProp contained "\<column-\(count\|fill\|gap\|rule\(-\(color\|style\|width\)\)\=\|span\|width\)\>"
|
||||
syn keyword cssMultiColumnProp contained columns
|
||||
syn keyword cssMultiColumnAttr contained balance medium
|
||||
syn keyword cssMultiColumnAttr contained always avoid left right page column
|
||||
syn match cssMultiColumnAttr contained "\<avoid-\(page\|column\)\>"
|
||||
|
||||
" http://www.w3.org/TR/css3-break/#page-break
|
||||
syn match cssMultiColumnProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
|
||||
|
||||
" TODO find following items in w3c docs.
|
||||
syn keyword cssGeneratedContentProp contained quotes crop
|
||||
syn match cssGeneratedContentProp contained "\<counter-\(reset\|increment\)\>"
|
||||
syn match cssGeneratedContentProp contained "\<move-to\>"
|
||||
syn match cssGeneratedContentProp contained "\<page-policy\>"
|
||||
syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>"
|
||||
|
||||
|
||||
syn match cssGridProp contained "\<grid-\(columns\|rows\)\>"
|
||||
|
||||
syn match cssHyerlinkProp contained "\<target\(-\(name\|new\|position\)\)\=\>"
|
||||
@@ -307,8 +326,6 @@ syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic
|
||||
syn keyword cssListAttr contained disc circle square hebrew armenian georgian
|
||||
syn keyword cssListAttr contained inside outside
|
||||
|
||||
syn match cssMultiColumnProp contained "\<column\(-\(\break-\(after\|before\)\|count\|gap\|rule\(-\(color\|style\|width\)\)\=\)\|span\|width\)\=\>"
|
||||
|
||||
syn keyword cssPositioningProp contained bottom clear clip display float left
|
||||
syn keyword cssPositioningProp contained position right top visibility
|
||||
syn match cssPositioningProp contained "\<z-index\>"
|
||||
@@ -319,8 +336,6 @@ syn match cssPositioningAttr contained "\<list-item\>"
|
||||
syn match cssPositioningAttr contained "\<inline\(-\(block\|box\|table\)\)\=\>"
|
||||
syn keyword cssPositioningAttr contained static relative absolute fixed
|
||||
|
||||
syn match cssPrintProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
|
||||
syn keyword cssPrintProp contained orphans widows
|
||||
syn keyword cssPrintAttr contained landscape portrait crop cross always avoid
|
||||
|
||||
syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>"
|
||||
@@ -394,7 +409,7 @@ syn keyword cssUIAttr contained both horizontal vertical
|
||||
syn match cssUIProp contained "\<text-overflow\>"
|
||||
syn keyword cssUIAttr contained clip ellipsis
|
||||
|
||||
" Already highlighted Props: font content
|
||||
" Already highlighted Props: font content
|
||||
"------------------------------------------------
|
||||
" Webkit/iOS specific attributes
|
||||
syn match cssUIAttr contained '\(preserve-3d\)'
|
||||
@@ -456,8 +471,8 @@ syn match cssPseudoClassId contained "\<\(input-\)\=placeholder\>"
|
||||
syn region cssComment start="/\*" end="\*/" contains=@Spell fold
|
||||
|
||||
syn match cssUnicodeEscape "\\\x\{1,6}\s\?"
|
||||
syn match cssSpecialCharQQ +\\"+ contained
|
||||
syn match cssSpecialCharQ +\\'+ contained
|
||||
syn match cssSpecialCharQQ +\\\\\|\\"+ contained
|
||||
syn match cssSpecialCharQ +\\\\\|\\'+ contained
|
||||
syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ
|
||||
syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ
|
||||
|
||||
@@ -478,11 +493,11 @@ syntax match cssNoise contained /\(:\|;\|\/\)/
|
||||
|
||||
" Attr Enhance
|
||||
" Some keywords are both Prop and Attr, so we have to handle them
|
||||
syn region cssAttrRegion start=/:/ end=/;/ contained keepend contains=css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssTransitionHackProp,cssAttrComma,cssNoise
|
||||
syn region cssAttrRegion start=/:/ end=/;/ contained keepend contains=css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise
|
||||
|
||||
" Hack for transition
|
||||
" The 'transition' Prop has Props after ':'.
|
||||
syn region cssAttrRegion start=/transition\s*:/ end=/;/ contained keepend contains=css.*Prop,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssTransitionHackProp,cssAttrComma,cssNoise
|
||||
syn region cssAttrRegion start=/transition\s*:/ end=/;/ contained keepend contains=css.*Prop,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise
|
||||
|
||||
|
||||
if main_syntax == "css"
|
||||
@@ -593,7 +608,6 @@ if version >= 508 || !exists("did_css_syn_inits")
|
||||
HiLink cssBraces Function
|
||||
HiLink cssBraceError Error
|
||||
HiLink cssError Error
|
||||
HiLink cssInclude Include
|
||||
HiLink cssUnicodeEscape Special
|
||||
HiLink cssStringQQ String
|
||||
HiLink cssStringQ String
|
||||
@@ -606,7 +620,7 @@ if version >= 508 || !exists("did_css_syn_inits")
|
||||
HiLink cssMediaAttr cssAttr
|
||||
HiLink cssPage atKeyword
|
||||
HiLink cssPagePseudo PreProc
|
||||
HiLink cssPageHeaderProp PreProc
|
||||
HiLink cssPageMargin atKeyword
|
||||
HiLink cssPageProp cssProp
|
||||
HiLink cssKeyFrame atKeyword
|
||||
HiLink cssKeyFrameSelector Constant
|
||||
@@ -616,6 +630,7 @@ if version >= 508 || !exists("did_css_syn_inits")
|
||||
HiLink cssFontDescriptorAttr cssAttr
|
||||
HiLink cssUnicodeRange Constant
|
||||
HiLink cssClassName Function
|
||||
HiLink cssClassNameDot Function
|
||||
HiLink cssProp StorageClass
|
||||
HiLink cssAttr Constant
|
||||
HiLink cssUnitDecorators Number
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
|
||||
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
|
||||
" Wichert Akkerman <wakkerma@debian.org>
|
||||
" Last Change: 2013 May 05
|
||||
" Last Change: 2014 Jan 20
|
||||
" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debchangelog.vim
|
||||
|
||||
" Standard syntax initialization
|
||||
@@ -19,7 +19,7 @@ syn case ignore
|
||||
" Define some common expressions we can use later on
|
||||
syn match debchangelogName contained "^[[:alnum:]][[:alnum:].+-]\+ "
|
||||
syn match debchangelogUrgency contained "; urgency=\(low\|medium\|high\|critical\|emergency\)\( \S.*\)\="
|
||||
syn match debchangelogTarget contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(lucid|precise|quantal|raring|saucy)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
|
||||
syn match debchangelogTarget contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(lucid|precise|quantal|saucy|trusty)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
|
||||
syn match debchangelogVersion contained "(.\{-})"
|
||||
syn match debchangelogCloses contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
|
||||
syn match debchangelogLP contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
|
||||
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
|
||||
" Wichert Akkerman <wakkerma@debian.org>
|
||||
" Last Change: 2013 May 05
|
||||
" Last Change: 2013 Oct 28
|
||||
" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debcontrol.vim
|
||||
|
||||
" Standard syntax initialization
|
||||
@@ -24,7 +24,7 @@ syn match debControlComma ", *"
|
||||
syn match debControlSpace " "
|
||||
|
||||
" Define some common expressions we can use later on
|
||||
syn match debcontrolArchitecture contained "\%(all\|linux-any\|\%(any-\)\=\%(alpha\|amd64\|arm\%(e[bl]\|hf\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\)\|hurd-\%(i386\|any\)\|kfreebsd-\%(i386\|amd64\|any\)\|knetbsd-\%(i386\|any\)\|kopensolaris-\%(i386\|any\)\|netbsd-\%(alpha\|i386\|any\)\|any\)"
|
||||
syn match debcontrolArchitecture contained "\%(all\|linux-any\|\%(any-\)\=\%(alpha\|amd64\|arm\%(e[bl]\|hf\|64\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\%(spe\)\=\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\)\|x32\|hurd-\%(i386\|any\)\|kfreebsd-\%(i386\|amd64\|any\)\|knetbsd-\%(i386\|any\)\|kopensolaris-\%(i386\|any\)\|netbsd-\%(alpha\|i386\|any\)\|any\)"
|
||||
syn match debcontrolMultiArch contained "\%(no\|foreign\|allowed\|same\)"
|
||||
syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
|
||||
syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
" Language: Debian sources.list
|
||||
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
|
||||
" Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
|
||||
" Last Change: 2013 May 05
|
||||
" Last Change: 2014 Jan 20
|
||||
" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debsources.vim
|
||||
|
||||
" Standard syntax initialization
|
||||
@@ -23,7 +23,7 @@ syn match debsourcesComment /#.*/ contains=@Spell
|
||||
|
||||
" Match uri's
|
||||
syn match debsourcesUri +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' <>"]\++
|
||||
syn match debsourcesDistrKeyword +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|raring\|saucy\)\([-[:alnum:]_./]*\)+
|
||||
syn match debsourcesDistrKeyword +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|saucy\|trusty\)\([-[:alnum:]_./]*\)+
|
||||
|
||||
" Associate our matches and regions with pretty colours
|
||||
hi def link debsourcesLine Error
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: Vim help file
|
||||
" Maintainer: Bram Moolenaar (Bram@vim.org)
|
||||
" Last Change: 2013 Sep 05
|
||||
" Last Change: 2013 Nov 17
|
||||
|
||||
" Quit when a (custom) syntax file was already loaded
|
||||
if exists("b:current_syntax")
|
||||
@@ -153,7 +153,7 @@ syn sync minlines=40
|
||||
" Define the default highlighting.
|
||||
" Only used when an item doesn't have highlighting yet
|
||||
hi def link helpIgnore Ignore
|
||||
hi def link helpHyperTextJump Subtitle
|
||||
hi def link helpHyperTextJump Identifier
|
||||
hi def link helpBar Ignore
|
||||
hi def link helpBacktick Ignore
|
||||
hi def link helpStar Ignore
|
||||
@@ -168,7 +168,6 @@ hi def link helpOption Type
|
||||
hi def link helpNotVi Special
|
||||
hi def link helpSpecial Special
|
||||
hi def link helpNote Todo
|
||||
hi def link Subtitle Identifier
|
||||
|
||||
hi def link helpComment Comment
|
||||
hi def link helpConstant Constant
|
||||
|
||||
@@ -19,11 +19,12 @@ syn cluster NetrwTreeGroup contains=netrwDir,netrwSymLink,netrwExe
|
||||
syn match netrwPlain "\(\S\+ \)*\S\+" contains=@NoSpell
|
||||
syn match netrwSpecial "\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)" contains=netrwClassify,@NoSpell
|
||||
syn match netrwDir "\.\{1,2}/" contains=netrwClassify,@NoSpell
|
||||
syn match netrwDir "\%(\S\+ \)*\S\+/" contains=netrwClassify,@NoSpell
|
||||
"syn match netrwDir "\%(\S\+ \)*\S\+/" contains=netrwClassify,@NoSpell
|
||||
syn match netrwDir "\%(\S\+ \)*\S\+/\ze\%(\s\{2,}\|$\)" contains=netrwClassify,@NoSpell
|
||||
syn match netrwSizeDate "\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s" skipwhite contains=netrwDateSep,@NoSpell nextgroup=netrwTime
|
||||
syn match netrwSymLink "\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)" contains=netrwClassify,@NoSpell
|
||||
syn match netrwExe "\%(\S\+ \)*\S*[^~]\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify,@NoSpell
|
||||
syn match netrwTreeBar "^\%([-+|] \)\+" contains=netrwTreeBarSpace nextgroup=@netrwTreeGroup
|
||||
syn match netrwTreeBar "^\%([-+|│] \)\+" contains=netrwTreeBarSpace nextgroup=@netrwTreeGroup
|
||||
syn match netrwTreeBarSpace " " contained
|
||||
|
||||
syn match netrwClassify "[*=|@/]\ze\%(\s\{2,}\|$\)" contained
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: reStructuredText documentation format
|
||||
" Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||
" Latest Revision: 2013-06-03
|
||||
" Latest Revision: 2013-11-26
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
@@ -152,7 +152,7 @@ for code in g:rst_syntax_code_list
|
||||
exe 'syn region rstDirective'.code.' matchgroup=rstDirective fold '
|
||||
\.'start=#\%(sourcecode\|code\%(-block\)\=\)::\s\+'.code.'\s*$# '
|
||||
\.'skip=#^$# '
|
||||
\.'end=#^\s\@!# contains=@NoSpell,@rst'.code
|
||||
\.'end=#^\s\@!# contains=@NoSpell,@rst'.code.' keepend'
|
||||
exe 'syn cluster rstDirectives add=rstDirective'.code
|
||||
endfor
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
" Vim syntax file
|
||||
" Language: SystemVerilog
|
||||
" Maintainer: kocha <kocha.lsifrontend@gmail.com>
|
||||
" Last Change: 12-Aug-2013.
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Read in Verilog syntax files
|
||||
if version < 600
|
||||
so <sfile>:p:h/verilog.vim
|
||||
else
|
||||
runtime! syntax/verilog.vim
|
||||
unlet b:current_syntax
|
||||
endif
|
||||
|
||||
" IEEE1800-2005
|
||||
syn keyword systemverilogStatement always_comb always_ff always_latch
|
||||
syn keyword systemverilogStatement class endclass new
|
||||
syn keyword systemverilogStatement virtual local const protected
|
||||
syn keyword systemverilogStatement package endpackage
|
||||
syn keyword systemverilogStatement rand randc constraint randomize
|
||||
syn keyword systemverilogStatement with inside dist
|
||||
syn keyword systemverilogStatement sequence endsequence randsequence
|
||||
syn keyword systemverilogStatement srandom
|
||||
syn keyword systemverilogStatement logic bit byte
|
||||
syn keyword systemverilogStatement int longint shortint
|
||||
syn keyword systemverilogStatement struct packed
|
||||
syn keyword systemverilogStatement final
|
||||
syn keyword systemverilogStatement import export
|
||||
syn keyword systemverilogStatement context pure
|
||||
syn keyword systemverilogStatement void shortreal chandle string
|
||||
syn keyword systemverilogStatement clocking endclocking iff
|
||||
syn keyword systemverilogStatement interface endinterface modport
|
||||
syn keyword systemverilogStatement cover covergroup coverpoint endgroup
|
||||
syn keyword systemverilogStatement property endproperty
|
||||
syn keyword systemverilogStatement program endprogram
|
||||
syn keyword systemverilogStatement bins binsof illegal_bins ignore_bins
|
||||
syn keyword systemverilogStatement alias matches solve static assert
|
||||
syn keyword systemverilogStatement assume super before expect bind
|
||||
syn keyword systemverilogStatement extends null tagged extern this
|
||||
syn keyword systemverilogStatement first_match throughout timeprecision
|
||||
syn keyword systemverilogStatement timeunit type union
|
||||
syn keyword systemverilogStatement uwire var cross ref wait_order intersect
|
||||
syn keyword systemverilogStatement wildcard within
|
||||
|
||||
syn keyword systemverilogTypeDef typedef enum
|
||||
|
||||
syn keyword systemverilogConditional randcase
|
||||
syn keyword systemverilogConditional unique priority
|
||||
|
||||
syn keyword systemverilogRepeat return break continue
|
||||
syn keyword systemverilogRepeat do foreach
|
||||
|
||||
syn keyword systemverilogLabel join_any join_none forkjoin
|
||||
|
||||
" IEEE1800-2009 add
|
||||
syn keyword systemverilogStatement checker endchecker
|
||||
syn keyword systemverilogStatement accept_on reject_on
|
||||
syn keyword systemverilogStatement sync_accept_on sync_reject_on
|
||||
syn keyword systemverilogStatement eventually nexttime until until_with
|
||||
syn keyword systemverilogStatement s_always s_eventually s_nexttime s_until s_until_with
|
||||
syn keyword systemverilogStatement let untyped
|
||||
syn keyword systemverilogStatement strong weak
|
||||
syn keyword systemverilogStatement restrict global implies
|
||||
|
||||
syn keyword systemverilogConditional unique0
|
||||
|
||||
" IEEE1800-2012 add
|
||||
syn keyword systemverilogStatement implements
|
||||
syn keyword systemverilogStatement interconnect soft nettype
|
||||
|
||||
" Define the default highlighting.
|
||||
if version >= 508 || !exists("did_systemverilog_syn_inits")
|
||||
if version < 508
|
||||
let did_systemverilog_syn_inits = 1
|
||||
command -nargs=+ HiLink hi link <args>
|
||||
else
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
endif
|
||||
|
||||
" The default highlighting.
|
||||
HiLink systemverilogStatement Statement
|
||||
HiLink systemverilogTypeDef TypeDef
|
||||
HiLink systemverilogConditional Conditional
|
||||
HiLink systemverilogRepeat Repeat
|
||||
HiLink systemverilogLabel Label
|
||||
HiLink systemverilogGlobal Define
|
||||
HiLink systemverilogNumber Number
|
||||
|
||||
delcommand HiLink
|
||||
endif
|
||||
|
||||
let b:current_syntax = "systemverilog"
|
||||
|
||||
" vim: ts=8
|
||||
+2
-2
@@ -55,8 +55,8 @@ NOTE: The cursor keys should also work. But using hjkl you will be able to
|
||||
2. Type: :q! <ENTER>.
|
||||
This exits the editor, DISCARDING any changes you have made.
|
||||
|
||||
3. When you see the shell prompt, type the command that got you into this
|
||||
tutor. That would be: vimtutor <ENTER>
|
||||
3. Get back here by executing the command that got you into this tutor. That
|
||||
might be: vimtutor <ENTER>
|
||||
|
||||
4. If you have these steps memorized and are confident, execute steps
|
||||
1 through 3 to exit and re-enter the editor.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" An example for a vimrc file.
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last change: 2011 Apr 15
|
||||
" Last change: 2014 Feb 05
|
||||
"
|
||||
" To use it, copy it to
|
||||
" for Unix and OS/2: ~/.vimrc
|
||||
@@ -24,7 +24,8 @@ set backspace=indent,eol,start
|
||||
if has("vms")
|
||||
set nobackup " do not keep a backup file, use versions instead
|
||||
else
|
||||
set backup " keep a backup file
|
||||
set backup " keep a backup file (restore to previous version)
|
||||
set undofile " keep an undo file (undo changes after closing)
|
||||
endif
|
||||
set history=50 " keep 50 lines of command line history
|
||||
set ruler " show the cursor position all the time
|
||||
|
||||
+1
-1
@@ -419,7 +419,7 @@ CPUARG = -$(CPUNR)
|
||||
ALIGNARG = -a$(ALIGN)
|
||||
#
|
||||
!if ("$(DEBUG)"=="yes")
|
||||
DEFINES=$(DEFINES) -DDEBUG
|
||||
DEFINES=$(DEFINES) -DDEBUG -D_DEBUG
|
||||
!endif
|
||||
#
|
||||
!if ("$(OLE)"=="yes")
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Makefile for VIM on Win32, using Cygnus gcc
|
||||
# Last updated by Dan Sharp. Last Change: 2013 Sep 19
|
||||
# Last updated by Dan Sharp. Last Change: 2013 Dec 11
|
||||
#
|
||||
# Also read INSTALLpc.txt!
|
||||
#
|
||||
@@ -155,7 +155,7 @@ endif
|
||||
ifeq (yes, $(DYNAMIC_PERL))
|
||||
DEFINES += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
|
||||
else
|
||||
EXTRA_LIBS += $(PERL)/lib/CORE/perl$(PERL_VER).lib
|
||||
EXTRA_LIBS += -L$(PERL)/lib/CORE -lperl$(PERL_VER)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -272,7 +272,7 @@ ifeq (yes, $(DYNAMIC_RUBY))
|
||||
DEFINES += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
|
||||
DEFINES += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
|
||||
else
|
||||
EXTRA_LIBS += $(RUBY)/lib/$(RUBY_INSTALL_NAME).lib
|
||||
EXTRA_LIBS += $(RUBY)/lib/$(RUBY_INSTALL_NAME)
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
+5
-3
@@ -359,6 +359,7 @@ WINDRES_CC = $(CC)
|
||||
|
||||
CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
|
||||
WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
|
||||
EXTRA_LIBS =
|
||||
|
||||
ifdef GETTEXT
|
||||
DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
|
||||
@@ -377,9 +378,10 @@ endif
|
||||
endif
|
||||
|
||||
ifdef PERL
|
||||
CFLAGS += -I$(PERLLIBS) -DFEAT_PERL -L$(PERLLIBS)
|
||||
CFLAGS += -I$(PERLLIBS) -DFEAT_PERL
|
||||
ifeq (yes, $(DYNAMIC_PERL))
|
||||
CFLAGS += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
|
||||
EXTRA_LIBS += -L$(PERLLIBS) -lperl$(PERL_VER)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -596,7 +598,7 @@ ifdef XPM
|
||||
ifeq (yes, $(GUI))
|
||||
OBJ += $(OUTDIR)/xpm_w32.o
|
||||
# You'll need libXpm.a from http://gnuwin32.sf.net
|
||||
LIB += -L $(XPM)/lib -lXpm
|
||||
LIB += -L$(XPM)/lib -lXpm
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -632,7 +634,7 @@ endif
|
||||
|
||||
ifdef PERL
|
||||
ifeq (no, $(DYNAMIC_PERL))
|
||||
LIB += -lperl$(PERL_VER)
|
||||
LIB += -L$(PERLLIBS) -lperl$(PERL_VER)
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
@@ -424,6 +424,9 @@ MSVCVER = 11.0
|
||||
!if "$(_NMAKE_VER)" == "11.00.60610.1"
|
||||
MSVCVER = 11.0
|
||||
!endif
|
||||
!if "$(_NMAKE_VER)" == "11.00.61030.0"
|
||||
MSVCVER = 11.0
|
||||
!endif
|
||||
!if "$(_NMAKE_VER)" == "12.00.21005.1"
|
||||
MSVCVER = 12.0
|
||||
!endif
|
||||
@@ -825,7 +828,12 @@ PERL_INCDIR = $(PERL)\Lib$(PERL_ARCH)\Core
|
||||
PERL_LIB = $(PERL_INCDIR)\perl.lib
|
||||
!else
|
||||
PERL_DLL = perl$(PERL_VER).dll
|
||||
!if exist($(PERL_INCDIR)\perl$(PERL_VER).lib)
|
||||
PERL_LIB = $(PERL_INCDIR)\perl$(PERL_VER).lib
|
||||
!else
|
||||
# For ActivePerl 5.18 and later
|
||||
PERL_LIB = $(PERL_INCDIR)\libperl$(PERL_VER).a
|
||||
!endif
|
||||
!endif
|
||||
|
||||
CFLAGS = $(CFLAGS) -DFEAT_PERL
|
||||
|
||||
@@ -2397,6 +2397,7 @@ shadow: runtime pixmaps
|
||||
../../testdir/*.in \
|
||||
../../testdir/*.vim \
|
||||
../../testdir/python* \
|
||||
../../testdir/sautest \
|
||||
../../testdir/test83-tags? \
|
||||
../../testdir/*.ok .
|
||||
|
||||
|
||||
+20
-20
@@ -6,7 +6,7 @@
|
||||
* Do ":help credits" in Vim to see a list of people who contributed.
|
||||
* See README.txt for an overview of the Vim source code.
|
||||
*
|
||||
* Blowfish encryption for Vim; in Blowfish output feedback mode.
|
||||
* Blowfish encryption for Vim; in Blowfish cipher feedback mode.
|
||||
* Contributed by Mohsin Ahmed, http://www.cs.albany.edu/~mosh
|
||||
* Based on http://www.schneier.com/blowfish.html by Bruce Schneier.
|
||||
*/
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#define BF_BLOCK 8
|
||||
#define BF_BLOCK_MASK 7
|
||||
#define BF_OFB_LEN (8*(BF_BLOCK))
|
||||
#define BF_CFB_LEN (8*(BF_BLOCK))
|
||||
|
||||
typedef union {
|
||||
UINT32_T ul[2];
|
||||
@@ -554,42 +554,42 @@ bf_self_test()
|
||||
return err > 0 ? FAIL : OK;
|
||||
}
|
||||
|
||||
/* Output feedback mode. */
|
||||
/* Cipher feedback mode. */
|
||||
static int randbyte_offset = 0;
|
||||
static int update_offset = 0;
|
||||
static char_u ofb_buffer[BF_OFB_LEN]; /* 64 bytes */
|
||||
static char_u cfb_buffer[BF_CFB_LEN]; /* 64 bytes */
|
||||
|
||||
/*
|
||||
* Initialize with seed "iv[iv_len]".
|
||||
*/
|
||||
void
|
||||
bf_ofb_init(iv, iv_len)
|
||||
bf_cfb_init(iv, iv_len)
|
||||
char_u *iv;
|
||||
int iv_len;
|
||||
{
|
||||
int i, mi;
|
||||
|
||||
randbyte_offset = update_offset = 0;
|
||||
vim_memset(ofb_buffer, 0, BF_OFB_LEN);
|
||||
vim_memset(cfb_buffer, 0, BF_CFB_LEN);
|
||||
if (iv_len > 0)
|
||||
{
|
||||
mi = iv_len > BF_OFB_LEN ? iv_len : BF_OFB_LEN;
|
||||
mi = iv_len > BF_CFB_LEN ? iv_len : BF_CFB_LEN;
|
||||
for (i = 0; i < mi; i++)
|
||||
ofb_buffer[i % BF_OFB_LEN] ^= iv[i % iv_len];
|
||||
cfb_buffer[i % BF_CFB_LEN] ^= iv[i % iv_len];
|
||||
}
|
||||
}
|
||||
|
||||
#define BF_OFB_UPDATE(c) { \
|
||||
ofb_buffer[update_offset] ^= (char_u)c; \
|
||||
if (++update_offset == BF_OFB_LEN) \
|
||||
#define BF_CFB_UPDATE(c) { \
|
||||
cfb_buffer[update_offset] ^= (char_u)c; \
|
||||
if (++update_offset == BF_CFB_LEN) \
|
||||
update_offset = 0; \
|
||||
}
|
||||
|
||||
#define BF_RANBYTE(t) { \
|
||||
if ((randbyte_offset & BF_BLOCK_MASK) == 0) \
|
||||
bf_e_cblock(&ofb_buffer[randbyte_offset]); \
|
||||
t = ofb_buffer[randbyte_offset]; \
|
||||
if (++randbyte_offset == BF_OFB_LEN) \
|
||||
bf_e_cblock(&cfb_buffer[randbyte_offset]); \
|
||||
t = cfb_buffer[randbyte_offset]; \
|
||||
if (++randbyte_offset == BF_CFB_LEN) \
|
||||
randbyte_offset = 0; \
|
||||
}
|
||||
|
||||
@@ -610,7 +610,7 @@ bf_crypt_encode(from, len, to)
|
||||
{
|
||||
ztemp = from[i];
|
||||
BF_RANBYTE(t);
|
||||
BF_OFB_UPDATE(ztemp);
|
||||
BF_CFB_UPDATE(ztemp);
|
||||
to[i] = t ^ ztemp;
|
||||
}
|
||||
}
|
||||
@@ -630,7 +630,7 @@ bf_crypt_decode(ptr, len)
|
||||
{
|
||||
BF_RANBYTE(t);
|
||||
*p ^= t;
|
||||
BF_OFB_UPDATE(*p);
|
||||
BF_CFB_UPDATE(*p);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -646,13 +646,13 @@ bf_crypt_init_keys(passwd)
|
||||
|
||||
for (p = passwd; *p != NUL; ++p)
|
||||
{
|
||||
BF_OFB_UPDATE(*p);
|
||||
BF_CFB_UPDATE(*p);
|
||||
}
|
||||
}
|
||||
|
||||
static int save_randbyte_offset;
|
||||
static int save_update_offset;
|
||||
static char_u save_ofb_buffer[BF_OFB_LEN];
|
||||
static char_u save_cfb_buffer[BF_CFB_LEN];
|
||||
static UINT32_T save_pax[18];
|
||||
static UINT32_T save_sbx[4][256];
|
||||
|
||||
@@ -665,7 +665,7 @@ bf_crypt_save()
|
||||
{
|
||||
save_randbyte_offset = randbyte_offset;
|
||||
save_update_offset = update_offset;
|
||||
mch_memmove(save_ofb_buffer, ofb_buffer, BF_OFB_LEN);
|
||||
mch_memmove(save_cfb_buffer, cfb_buffer, BF_CFB_LEN);
|
||||
mch_memmove(save_pax, pax, 4 * 18);
|
||||
mch_memmove(save_sbx, sbx, 4 * 4 * 256);
|
||||
}
|
||||
@@ -679,7 +679,7 @@ bf_crypt_restore()
|
||||
{
|
||||
randbyte_offset = save_randbyte_offset;
|
||||
update_offset = save_update_offset;
|
||||
mch_memmove(ofb_buffer, save_ofb_buffer, BF_OFB_LEN);
|
||||
mch_memmove(cfb_buffer, save_cfb_buffer, BF_CFB_LEN);
|
||||
mch_memmove(pax, save_pax, 4 * 18);
|
||||
mch_memmove(sbx, save_sbx, 4 * 4 * 256);
|
||||
}
|
||||
|
||||
+54
-26
@@ -998,6 +998,50 @@ do_bufdel(command, arg, addr_count, start_bnr, end_bnr, forceit)
|
||||
#if defined(FEAT_LISTCMDS) || defined(FEAT_PYTHON) \
|
||||
|| defined(FEAT_PYTHON3) || defined(PROTO)
|
||||
|
||||
static int empty_curbuf __ARGS((int close_others, int forceit, int action));
|
||||
|
||||
/*
|
||||
* Make the current buffer empty.
|
||||
* Used when it is wiped out and it's the last buffer.
|
||||
*/
|
||||
static int
|
||||
empty_curbuf(close_others, forceit, action)
|
||||
int close_others;
|
||||
int forceit;
|
||||
int action;
|
||||
{
|
||||
int retval;
|
||||
buf_T *buf = curbuf;
|
||||
|
||||
if (action == DOBUF_UNLOAD)
|
||||
{
|
||||
EMSG(_("E90: Cannot unload last buffer"));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
if (close_others)
|
||||
{
|
||||
/* Close any other windows on this buffer, then make it empty. */
|
||||
#ifdef FEAT_WINDOWS
|
||||
close_windows(buf, TRUE);
|
||||
#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
|
||||
* the old one. But do_ecmd() may have done that already, check
|
||||
* if the buffer still exists.
|
||||
*/
|
||||
if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
|
||||
close_buffer(NULL, buf, action, FALSE);
|
||||
if (!close_others)
|
||||
need_fileinfo = FALSE;
|
||||
return retval;
|
||||
}
|
||||
/*
|
||||
* Implementation of the commands for the buffer list.
|
||||
*
|
||||
@@ -1118,7 +1162,6 @@ do_buffer(action, start, dir, count, forceit)
|
||||
if (unload)
|
||||
{
|
||||
int forward;
|
||||
int retval;
|
||||
|
||||
/* When unloading or deleting a buffer that's already unloaded and
|
||||
* unlisted: fail silently. */
|
||||
@@ -1159,30 +1202,7 @@ do_buffer(action, start, dir, count, forceit)
|
||||
if (bp->b_p_bl && bp != buf)
|
||||
break;
|
||||
if (bp == NULL && buf == curbuf)
|
||||
{
|
||||
if (action == DOBUF_UNLOAD)
|
||||
{
|
||||
EMSG(_("E90: Cannot unload last buffer"));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/* Close any other windows on this buffer, then make it empty. */
|
||||
#ifdef FEAT_WINDOWS
|
||||
close_windows(buf, TRUE);
|
||||
#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
|
||||
* the old one. But do_ecmd() may have done that already, check
|
||||
* if the buffer still exists.
|
||||
*/
|
||||
if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
|
||||
close_buffer(NULL, buf, action, FALSE);
|
||||
return retval;
|
||||
}
|
||||
return empty_curbuf(TRUE, forceit, action);
|
||||
|
||||
#ifdef FEAT_WINDOWS
|
||||
/*
|
||||
@@ -1216,7 +1236,8 @@ do_buffer(action, start, dir, count, forceit)
|
||||
|
||||
/*
|
||||
* Deleting the current buffer: Need to find another buffer to go to.
|
||||
* There must be another, otherwise it would have been handled above.
|
||||
* There should be another, otherwise it would have been handled
|
||||
* above. However, autocommands may have deleted all buffers.
|
||||
* First use au_new_curbuf, if it is valid.
|
||||
* Then prefer the buffer we most recently visited.
|
||||
* Else try to find one that is loaded, after the current buffer,
|
||||
@@ -1315,6 +1336,13 @@ do_buffer(action, start, dir, count, forceit)
|
||||
}
|
||||
}
|
||||
|
||||
if (buf == NULL)
|
||||
{
|
||||
/* Autocommands must have wiped out all other buffers. Only option
|
||||
* now is to make the current buffer empty. */
|
||||
return empty_curbuf(FALSE, forceit, action);
|
||||
}
|
||||
|
||||
/*
|
||||
* make buf current buffer
|
||||
*/
|
||||
|
||||
@@ -816,9 +816,19 @@ if test "$enable_mzschemeinterp" = "yes"; then
|
||||
AC_MSG_CHECKING(for mzscheme_base.c)
|
||||
if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
|
||||
MZSCHEME_EXTRA="mzscheme_base.c"
|
||||
MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
|
||||
MZSCHEME_MOD="++lib scheme/base"
|
||||
else
|
||||
if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
|
||||
MZSCHEME_EXTRA="mzscheme_base.c"
|
||||
MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
|
||||
MZSCHEME_MOD="++lib scheme/base"
|
||||
else
|
||||
if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
|
||||
MZSCHEME_EXTRA="mzscheme_base.c"
|
||||
MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
|
||||
MZSCHEME_MOD=""
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "X$MZSCHEME_EXTRA" != "X" ; then
|
||||
|
||||
+81
-72
@@ -1566,87 +1566,89 @@ ins_redraw(ready)
|
||||
int conceal_update_lines = FALSE;
|
||||
#endif
|
||||
|
||||
if (!char_avail())
|
||||
{
|
||||
if (char_avail())
|
||||
return;
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_CONCEAL)
|
||||
/* Trigger CursorMoved if the cursor moved. Not when the popup menu is
|
||||
* visible, the command might delete it. */
|
||||
if (ready && (
|
||||
/* Trigger CursorMoved if the cursor moved. Not when the popup menu is
|
||||
* visible, the command might delete it. */
|
||||
if (ready && (
|
||||
# ifdef FEAT_AUTOCMD
|
||||
has_cursormovedI()
|
||||
has_cursormovedI()
|
||||
# endif
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_CONCEAL)
|
||||
||
|
||||
||
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
curwin->w_p_cole > 0
|
||||
curwin->w_p_cole > 0
|
||||
# endif
|
||||
)
|
||||
&& !equalpos(last_cursormoved, curwin->w_cursor)
|
||||
)
|
||||
&& !equalpos(last_cursormoved, curwin->w_cursor)
|
||||
# ifdef FEAT_INS_EXPAND
|
||||
&& !pum_visible()
|
||||
# endif
|
||||
)
|
||||
{
|
||||
# ifdef FEAT_SYN_HL
|
||||
/* Need to update the screen first, to make sure syntax
|
||||
* highlighting is correct after making a change (e.g., inserting
|
||||
* a "(". The autocommand may also require a redraw, so it's done
|
||||
* again below, unfortunately. */
|
||||
if (syntax_present(curwin) && must_redraw)
|
||||
update_screen(0);
|
||||
# endif
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (has_cursormovedI())
|
||||
apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf);
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
if (curwin->w_p_cole > 0)
|
||||
{
|
||||
conceal_old_cursor_line = last_cursormoved.lnum;
|
||||
conceal_new_cursor_line = curwin->w_cursor.lnum;
|
||||
conceal_update_lines = TRUE;
|
||||
}
|
||||
# endif
|
||||
last_cursormoved = curwin->w_cursor;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger TextChangedI if b_changedtick differs. */
|
||||
if (ready && has_textchangedI()
|
||||
&& last_changedtick != curbuf->b_changedtick
|
||||
# ifdef FEAT_INS_EXPAND
|
||||
&& !pum_visible()
|
||||
# endif
|
||||
)
|
||||
{
|
||||
# ifdef FEAT_SYN_HL
|
||||
/* Need to update the screen first, to make sure syntax
|
||||
* highlighting is correct after making a change (e.g., inserting
|
||||
* a "(". The autocommand may also require a redraw, so it's done
|
||||
* again below, unfortunately. */
|
||||
if (syntax_present(curwin) && must_redraw)
|
||||
update_screen(0);
|
||||
# endif
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (has_cursormovedI())
|
||||
apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf);
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
if (curwin->w_p_cole > 0)
|
||||
{
|
||||
conceal_old_cursor_line = last_cursormoved.lnum;
|
||||
conceal_new_cursor_line = curwin->w_cursor.lnum;
|
||||
conceal_update_lines = TRUE;
|
||||
}
|
||||
# endif
|
||||
last_cursormoved = curwin->w_cursor;
|
||||
}
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger TextChangedI if b_changedtick differs. */
|
||||
if (!ready && has_textchangedI()
|
||||
&& last_changedtick != curbuf->b_changedtick
|
||||
# ifdef FEAT_INS_EXPAND
|
||||
&& !pum_visible()
|
||||
# endif
|
||||
)
|
||||
{
|
||||
if (last_changedtick_buf == curbuf)
|
||||
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
|
||||
last_changedtick_buf = curbuf;
|
||||
last_changedtick = curbuf->b_changedtick;
|
||||
}
|
||||
#endif
|
||||
if (must_redraw)
|
||||
update_screen(0);
|
||||
else if (clear_cmdline || redraw_cmdline)
|
||||
showmode(); /* clear cmdline and show mode */
|
||||
# if defined(FEAT_CONCEAL)
|
||||
if ((conceal_update_lines
|
||||
&& (conceal_old_cursor_line != conceal_new_cursor_line
|
||||
|| conceal_cursor_line(curwin)))
|
||||
|| need_cursor_line_redraw)
|
||||
{
|
||||
if (conceal_old_cursor_line != conceal_new_cursor_line)
|
||||
update_single_line(curwin, conceal_old_cursor_line);
|
||||
update_single_line(curwin, conceal_new_cursor_line == 0
|
||||
? curwin->w_cursor.lnum : conceal_new_cursor_line);
|
||||
curwin->w_valid &= ~VALID_CROW;
|
||||
}
|
||||
# endif
|
||||
showruler(FALSE);
|
||||
setcursor();
|
||||
emsg_on_display = FALSE; /* may remove error message now */
|
||||
)
|
||||
{
|
||||
if (last_changedtick_buf == curbuf)
|
||||
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
|
||||
last_changedtick_buf = curbuf;
|
||||
last_changedtick = curbuf->b_changedtick;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (must_redraw)
|
||||
update_screen(0);
|
||||
else if (clear_cmdline || redraw_cmdline)
|
||||
showmode(); /* clear cmdline and show mode */
|
||||
# if defined(FEAT_CONCEAL)
|
||||
if ((conceal_update_lines
|
||||
&& (conceal_old_cursor_line != conceal_new_cursor_line
|
||||
|| conceal_cursor_line(curwin)))
|
||||
|| need_cursor_line_redraw)
|
||||
{
|
||||
if (conceal_old_cursor_line != conceal_new_cursor_line)
|
||||
update_single_line(curwin, conceal_old_cursor_line);
|
||||
update_single_line(curwin, conceal_new_cursor_line == 0
|
||||
? curwin->w_cursor.lnum : conceal_new_cursor_line);
|
||||
curwin->w_valid &= ~VALID_CROW;
|
||||
}
|
||||
# endif
|
||||
showruler(FALSE);
|
||||
setcursor();
|
||||
emsg_on_display = FALSE; /* may remove error message now */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -4193,6 +4195,7 @@ ins_compl_get_exp(ini)
|
||||
char_u *dict = NULL;
|
||||
int dict_f = 0;
|
||||
compl_T *old_match;
|
||||
int set_match_pos;
|
||||
|
||||
if (!compl_started)
|
||||
{
|
||||
@@ -4211,6 +4214,7 @@ ins_compl_get_exp(ini)
|
||||
for (;;)
|
||||
{
|
||||
found_new_match = FAIL;
|
||||
set_match_pos = FALSE;
|
||||
|
||||
/* For ^N/^P pick a new entry from e_cpt if compl_started is off,
|
||||
* or if found_all says this entry is done. For ^X^L only use the
|
||||
@@ -4230,6 +4234,10 @@ ins_compl_get_exp(ini)
|
||||
dec(&first_match_pos);
|
||||
last_match_pos = first_match_pos;
|
||||
type = 0;
|
||||
|
||||
/* Remember the first match so that the loop stops when we
|
||||
* wrap and come back there a second time. */
|
||||
set_match_pos = TRUE;
|
||||
}
|
||||
else if (vim_strchr((char_u *)"buwU", *e_cpt) != NULL
|
||||
&& (ins_buf = ins_compl_next_buf(ins_buf, *e_cpt)) != curbuf)
|
||||
@@ -4394,7 +4402,7 @@ ins_compl_get_exp(ini)
|
||||
if (ins_buf->b_p_inf)
|
||||
p_scs = FALSE;
|
||||
|
||||
/* buffers other than curbuf are scanned from the beginning or the
|
||||
/* Buffers other than curbuf are scanned from the beginning or the
|
||||
* end but never from the middle, thus setting nowrapscan in this
|
||||
* buffers is a good idea, on the other hand, we always set
|
||||
* wrapscan for curbuf to avoid missing matches -- Acevedo,Webb */
|
||||
@@ -4421,12 +4429,13 @@ ins_compl_get_exp(ini)
|
||||
compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
|
||||
RE_LAST, (linenr_T)0, NULL);
|
||||
--msg_silent;
|
||||
if (!compl_started)
|
||||
if (!compl_started || set_match_pos)
|
||||
{
|
||||
/* set "compl_started" even on fail */
|
||||
compl_started = TRUE;
|
||||
first_match_pos = *pos;
|
||||
last_match_pos = *pos;
|
||||
set_match_pos = FALSE;
|
||||
}
|
||||
else if (first_match_pos.lnum == last_match_pos.lnum
|
||||
&& first_match_pos.col == last_match_pos.col)
|
||||
|
||||
+83
-64
@@ -125,9 +125,6 @@ static dictitem_T globvars_var; /* variable used for g: */
|
||||
*/
|
||||
static hashtab_T compat_hashtab;
|
||||
|
||||
/* When using exists() don't auto-load a script. */
|
||||
static int no_autoload = FALSE;
|
||||
|
||||
/*
|
||||
* When recursively copying lists and dicts we need to remember which ones we
|
||||
* have done to avoid endless recursiveness. This unique ID is used for that.
|
||||
@@ -156,6 +153,11 @@ static int echo_attr = 0; /* attributes used for ":echo" */
|
||||
/* Values for trans_function_name() argument: */
|
||||
#define TFN_INT 1 /* internal function name OK */
|
||||
#define TFN_QUIET 2 /* no error messages */
|
||||
#define TFN_NO_AUTOLOAD 4 /* do not use script autoloading */
|
||||
|
||||
/* Values for get_lval() flags argument: */
|
||||
#define GLV_QUIET TFN_QUIET /* no error messages */
|
||||
#define GLV_NO_AUTOLOAD TFN_NO_AUTOLOAD /* do not use script autoloading */
|
||||
|
||||
/*
|
||||
* Structure to hold info for a user function.
|
||||
@@ -390,7 +392,7 @@ static void list_func_vars __ARGS((int *first));
|
||||
static char_u *list_arg_vars __ARGS((exarg_T *eap, char_u *arg, int *first));
|
||||
static char_u *ex_let_one __ARGS((char_u *arg, typval_T *tv, int copy, char_u *endchars, char_u *op));
|
||||
static int check_changedtick __ARGS((char_u *arg));
|
||||
static char_u *get_lval __ARGS((char_u *name, typval_T *rettv, lval_T *lp, int unlet, int skip, int quiet, int fne_flags));
|
||||
static char_u *get_lval __ARGS((char_u *name, typval_T *rettv, lval_T *lp, int unlet, int skip, int flags, int fne_flags));
|
||||
static void clear_lval __ARGS((lval_T *lp));
|
||||
static void set_var_lval __ARGS((lval_T *lp, char_u *endp, typval_T *rettv, int copy, char_u *op));
|
||||
static int tv_op __ARGS((typval_T *tv1, typval_T *tv2, char_u *op));
|
||||
@@ -445,7 +447,7 @@ static int string2float __ARGS((char_u *text, float_T *value));
|
||||
#endif
|
||||
static int get_env_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
|
||||
static int find_internal_func __ARGS((char_u *name));
|
||||
static char_u *deref_func_name __ARGS((char_u *name, int *lenp));
|
||||
static char_u *deref_func_name __ARGS((char_u *name, int *lenp, int no_autoload));
|
||||
static int get_func_tv __ARGS((char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
|
||||
static int call_func __ARGS((char_u *funcname, int len, typval_T *rettv, int argcount, typval_T *argvars, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
|
||||
static void emsg_funcname __ARGS((char *ermsg, char_u *name));
|
||||
@@ -770,7 +772,7 @@ static char_u *find_name_end __ARGS((char_u *arg, char_u **expr_start, char_u **
|
||||
static char_u * make_expanded_name __ARGS((char_u *in_start, char_u *expr_start, char_u *expr_end, char_u *in_end));
|
||||
static int eval_isnamec __ARGS((int c));
|
||||
static int eval_isnamec1 __ARGS((int c));
|
||||
static int get_var_tv __ARGS((char_u *name, int len, typval_T *rettv, int verbose));
|
||||
static int get_var_tv __ARGS((char_u *name, int len, typval_T *rettv, int verbose, int no_autoload));
|
||||
static int handle_subscript __ARGS((char_u **arg, typval_T *rettv, int evaluate, int verbose));
|
||||
static typval_T *alloc_tv __ARGS((void));
|
||||
static typval_T *alloc_string_tv __ARGS((char_u *string));
|
||||
@@ -781,8 +783,8 @@ static linenr_T get_tv_lnum_buf __ARGS((typval_T *argvars, buf_T *buf));
|
||||
static char_u *get_tv_string __ARGS((typval_T *varp));
|
||||
static char_u *get_tv_string_buf __ARGS((typval_T *varp, char_u *buf));
|
||||
static char_u *get_tv_string_buf_chk __ARGS((typval_T *varp, char_u *buf));
|
||||
static dictitem_T *find_var __ARGS((char_u *name, hashtab_T **htp));
|
||||
static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, int htname, char_u *varname, int writing));
|
||||
static dictitem_T *find_var __ARGS((char_u *name, hashtab_T **htp, int no_autoload));
|
||||
static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, int htname, char_u *varname, int no_autoload));
|
||||
static hashtab_T *find_var_ht __ARGS((char_u *name, char_u **varname));
|
||||
static void vars_clear_ext __ARGS((hashtab_T *ht, int free_val));
|
||||
static void delete_var __ARGS((hashtab_T *ht, hashitem_T *hi));
|
||||
@@ -1059,7 +1061,7 @@ var_redir_start(name, append)
|
||||
ga_init2(&redir_ga, (int)sizeof(char), 500);
|
||||
|
||||
/* Parse the variable name (can be a dict or list entry). */
|
||||
redir_endp = get_lval(redir_varname, NULL, redir_lval, FALSE, FALSE, FALSE,
|
||||
redir_endp = get_lval(redir_varname, NULL, redir_lval, FALSE, FALSE, 0,
|
||||
FNE_CHECK_START);
|
||||
if (redir_endp == NULL || redir_lval->ll_name == NULL || *redir_endp != NUL)
|
||||
{
|
||||
@@ -1150,7 +1152,7 @@ var_redir_stop()
|
||||
/* Call get_lval() again, if it's inside a Dict or List it may
|
||||
* have changed. */
|
||||
redir_endp = get_lval(redir_varname, NULL, redir_lval,
|
||||
FALSE, FALSE, FALSE, FNE_CHECK_START);
|
||||
FALSE, FALSE, 0, FNE_CHECK_START);
|
||||
if (redir_endp != NULL && redir_lval->ll_name != NULL)
|
||||
set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)".");
|
||||
clear_lval(redir_lval);
|
||||
@@ -2239,7 +2241,7 @@ list_arg_vars(eap, arg, first)
|
||||
{
|
||||
if (tofree != NULL)
|
||||
name = tofree;
|
||||
if (get_var_tv(name, len, &tv, TRUE) == FAIL)
|
||||
if (get_var_tv(name, len, &tv, TRUE, FALSE) == FAIL)
|
||||
error = TRUE;
|
||||
else
|
||||
{
|
||||
@@ -2474,7 +2476,7 @@ ex_let_one(arg, tv, copy, endchars, op)
|
||||
{
|
||||
lval_T lv;
|
||||
|
||||
p = get_lval(arg, tv, &lv, FALSE, FALSE, FALSE, FNE_CHECK_START);
|
||||
p = get_lval(arg, tv, &lv, FALSE, FALSE, 0, FNE_CHECK_START);
|
||||
if (p != NULL && lv.ll_name != NULL)
|
||||
{
|
||||
if (endchars != NULL && vim_strchr(endchars, *skipwhite(p)) == NULL)
|
||||
@@ -2519,18 +2521,22 @@ check_changedtick(arg)
|
||||
* "unlet" is TRUE for ":unlet": slightly different behavior when something is
|
||||
* wrong; must end in space or cmd separator.
|
||||
*
|
||||
* flags:
|
||||
* GLV_QUIET: do not give error messages
|
||||
* GLV_NO_AUTOLOAD: do not use script autoloading
|
||||
*
|
||||
* Returns a pointer to just after the name, including indexes.
|
||||
* When an evaluation error occurs "lp->ll_name" is NULL;
|
||||
* Returns NULL for a parsing error. Still need to free items in "lp"!
|
||||
*/
|
||||
static char_u *
|
||||
get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
|
||||
get_lval(name, rettv, lp, unlet, skip, flags, fne_flags)
|
||||
char_u *name;
|
||||
typval_T *rettv;
|
||||
lval_T *lp;
|
||||
int unlet;
|
||||
int skip;
|
||||
int quiet; /* don't give error messages */
|
||||
int flags; /* GLV_ values */
|
||||
int fne_flags; /* flags for find_name_end() */
|
||||
{
|
||||
char_u *p;
|
||||
@@ -2544,6 +2550,7 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
|
||||
char_u *key = NULL;
|
||||
int len;
|
||||
hashtab_T *ht;
|
||||
int quiet = flags & GLV_QUIET;
|
||||
|
||||
/* Clear everything in "lp". */
|
||||
vim_memset(lp, 0, sizeof(lval_T));
|
||||
@@ -2591,7 +2598,7 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
|
||||
|
||||
cc = *p;
|
||||
*p = NUL;
|
||||
v = find_var(lp->ll_name, &ht);
|
||||
v = find_var(lp->ll_name, &ht, flags & GLV_NO_AUTOLOAD);
|
||||
if (v == NULL && !quiet)
|
||||
EMSG2(_(e_undefvar), lp->ll_name);
|
||||
*p = cc;
|
||||
@@ -2904,7 +2911,7 @@ set_var_lval(lp, endp, rettv, copy, op)
|
||||
|
||||
/* handle +=, -= and .= */
|
||||
if (get_var_tv(lp->ll_name, (int)STRLEN(lp->ll_name),
|
||||
&tv, TRUE) == OK)
|
||||
&tv, TRUE, FALSE) == OK)
|
||||
{
|
||||
if (tv_op(&tv, rettv, op) == OK)
|
||||
set_var(lp->ll_name, &tv, FALSE);
|
||||
@@ -3425,7 +3432,7 @@ ex_call(eap)
|
||||
|
||||
/* If it is the name of a variable of type VAR_FUNC use its contents. */
|
||||
len = (int)STRLEN(tofree);
|
||||
name = deref_func_name(tofree, &len);
|
||||
name = deref_func_name(tofree, &len, FALSE);
|
||||
|
||||
/* Skip white space to allow ":call func ()". Not good, but required for
|
||||
* backward compatibility. */
|
||||
@@ -3556,7 +3563,7 @@ ex_unletlock(eap, argstart, deep)
|
||||
do
|
||||
{
|
||||
/* Parse the name and find the end. */
|
||||
name_end = get_lval(arg, NULL, &lv, TRUE, eap->skip || error, FALSE,
|
||||
name_end = get_lval(arg, NULL, &lv, TRUE, eap->skip || error, 0,
|
||||
FNE_CHECK_START);
|
||||
if (lv.ll_name == NULL)
|
||||
error = TRUE; /* error but continue parsing */
|
||||
@@ -3709,7 +3716,7 @@ do_lock_var(lp, name_end, deep, lock)
|
||||
ret = FAIL;
|
||||
else
|
||||
{
|
||||
di = find_var(lp->ll_name, NULL);
|
||||
di = find_var(lp->ll_name, NULL, TRUE);
|
||||
if (di == NULL)
|
||||
ret = FAIL;
|
||||
else
|
||||
@@ -5152,7 +5159,7 @@ eval7(arg, rettv, evaluate, want_string)
|
||||
{
|
||||
/* If "s" is the name of a variable of type VAR_FUNC
|
||||
* use its contents. */
|
||||
s = deref_func_name(s, &len);
|
||||
s = deref_func_name(s, &len, !evaluate);
|
||||
|
||||
/* Invoke the function. */
|
||||
ret = get_func_tv(s, len, rettv, arg,
|
||||
@@ -5179,7 +5186,7 @@ eval7(arg, rettv, evaluate, want_string)
|
||||
}
|
||||
}
|
||||
else if (evaluate)
|
||||
ret = get_var_tv(s, len, rettv, TRUE);
|
||||
ret = get_var_tv(s, len, rettv, TRUE, FALSE);
|
||||
else
|
||||
ret = OK;
|
||||
}
|
||||
@@ -6419,6 +6426,16 @@ list_insert_tv(l, tv, item)
|
||||
if (ni == NULL)
|
||||
return FAIL;
|
||||
copy_tv(tv, &ni->li_tv);
|
||||
list_insert(l, ni, item);
|
||||
return OK;
|
||||
}
|
||||
|
||||
void
|
||||
list_insert(l, ni, item)
|
||||
list_T *l;
|
||||
listitem_T *ni;
|
||||
listitem_T *item;
|
||||
{
|
||||
if (item == NULL)
|
||||
/* Append new item at end of list. */
|
||||
list_append(l, ni);
|
||||
@@ -6440,7 +6457,6 @@ list_insert_tv(l, tv, item)
|
||||
item->li_prev = ni;
|
||||
++l->lv_len;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -8276,16 +8292,17 @@ find_internal_func(name)
|
||||
* name it contains, otherwise return "name".
|
||||
*/
|
||||
static char_u *
|
||||
deref_func_name(name, lenp)
|
||||
deref_func_name(name, lenp, no_autoload)
|
||||
char_u *name;
|
||||
int *lenp;
|
||||
int no_autoload;
|
||||
{
|
||||
dictitem_T *v;
|
||||
int cc;
|
||||
|
||||
cc = name[*lenp];
|
||||
name[*lenp] = NUL;
|
||||
v = find_var(name, NULL);
|
||||
v = find_var(name, NULL, no_autoload);
|
||||
name[*lenp] = cc;
|
||||
if (v != NULL && v->di_tv.v_type == VAR_FUNC)
|
||||
{
|
||||
@@ -10040,8 +10057,6 @@ f_exists(argvars, rettv)
|
||||
int n = FALSE;
|
||||
int len = 0;
|
||||
|
||||
no_autoload = TRUE;
|
||||
|
||||
p = get_tv_string(&argvars[0]);
|
||||
if (*p == '$') /* environment variable */
|
||||
{
|
||||
@@ -10092,7 +10107,7 @@ f_exists(argvars, rettv)
|
||||
{
|
||||
if (tofree != NULL)
|
||||
name = tofree;
|
||||
n = (get_var_tv(name, len, &tv, FALSE) == OK);
|
||||
n = (get_var_tv(name, len, &tv, FALSE, TRUE) == OK);
|
||||
if (n)
|
||||
{
|
||||
/* handle d.key, l[idx], f(expr) */
|
||||
@@ -10108,8 +10123,6 @@ f_exists(argvars, rettv)
|
||||
}
|
||||
|
||||
rettv->vval.v_number = n;
|
||||
|
||||
no_autoload = FALSE;
|
||||
}
|
||||
|
||||
#ifdef FEAT_FLOAT
|
||||
@@ -11120,6 +11133,8 @@ get_buffer_lines(buf, start, end, retlist, rettv)
|
||||
{
|
||||
char_u *p;
|
||||
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = NULL;
|
||||
if (retlist && rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
|
||||
@@ -11132,8 +11147,6 @@ get_buffer_lines(buf, start, end, retlist, rettv)
|
||||
p = ml_get_buf(buf, start, FALSE);
|
||||
else
|
||||
p = (char_u *)"";
|
||||
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = vim_strsave(p);
|
||||
}
|
||||
else
|
||||
@@ -13364,8 +13377,8 @@ f_islocked(argvars, rettv)
|
||||
dictitem_T *di;
|
||||
|
||||
rettv->vval.v_number = -1;
|
||||
end = get_lval(get_tv_string(&argvars[0]), NULL, &lv, FALSE, FALSE, FALSE,
|
||||
FNE_CHECK_START);
|
||||
end = get_lval(get_tv_string(&argvars[0]), NULL, &lv, FALSE, FALSE,
|
||||
GLV_NO_AUTOLOAD, FNE_CHECK_START);
|
||||
if (end != NULL && lv.ll_name != NULL)
|
||||
{
|
||||
if (*end != NUL)
|
||||
@@ -13378,7 +13391,7 @@ f_islocked(argvars, rettv)
|
||||
rettv->vval.v_number = 1; /* always locked */
|
||||
else
|
||||
{
|
||||
di = find_var(lv.ll_name, NULL);
|
||||
di = find_var(lv.ll_name, NULL, TRUE);
|
||||
if (di != NULL)
|
||||
{
|
||||
/* Consider a variable locked when:
|
||||
@@ -14161,8 +14174,8 @@ f_matcharg(argvars, rettv)
|
||||
}
|
||||
else
|
||||
{
|
||||
list_append_string(rettv->vval.v_list, NUL, -1);
|
||||
list_append_string(rettv->vval.v_list, NUL, -1);
|
||||
list_append_string(rettv->vval.v_list, NULL, -1);
|
||||
list_append_string(rettv->vval.v_list, NULL, -1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -19802,11 +19815,12 @@ set_cmdarg(eap, oldarg)
|
||||
* Return OK or FAIL.
|
||||
*/
|
||||
static int
|
||||
get_var_tv(name, len, rettv, verbose)
|
||||
get_var_tv(name, len, rettv, verbose, no_autoload)
|
||||
char_u *name;
|
||||
int len; /* length of "name" */
|
||||
typval_T *rettv; /* NULL when only checking existence */
|
||||
int verbose; /* may give error message */
|
||||
int no_autoload; /* do not use script autoloading */
|
||||
{
|
||||
int ret = OK;
|
||||
typval_T *tv = NULL;
|
||||
@@ -19833,7 +19847,7 @@ get_var_tv(name, len, rettv, verbose)
|
||||
*/
|
||||
else
|
||||
{
|
||||
v = find_var(name, NULL);
|
||||
v = find_var(name, NULL, no_autoload);
|
||||
if (v != NULL)
|
||||
tv = &v->di_tv;
|
||||
}
|
||||
@@ -20235,9 +20249,10 @@ get_tv_string_buf_chk(varp, buf)
|
||||
* hashtab_T used.
|
||||
*/
|
||||
static dictitem_T *
|
||||
find_var(name, htp)
|
||||
find_var(name, htp, no_autoload)
|
||||
char_u *name;
|
||||
hashtab_T **htp;
|
||||
int no_autoload;
|
||||
{
|
||||
char_u *varname;
|
||||
hashtab_T *ht;
|
||||
@@ -20247,7 +20262,7 @@ find_var(name, htp)
|
||||
*htp = ht;
|
||||
if (ht == NULL)
|
||||
return NULL;
|
||||
return find_var_in_ht(ht, *name, varname, htp != NULL);
|
||||
return find_var_in_ht(ht, *name, varname, no_autoload || htp != NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -20255,11 +20270,11 @@ find_var(name, htp)
|
||||
* Returns NULL if not found.
|
||||
*/
|
||||
static dictitem_T *
|
||||
find_var_in_ht(ht, htname, varname, writing)
|
||||
find_var_in_ht(ht, htname, varname, no_autoload)
|
||||
hashtab_T *ht;
|
||||
int htname;
|
||||
char_u *varname;
|
||||
int writing;
|
||||
int no_autoload;
|
||||
{
|
||||
hashitem_T *hi;
|
||||
|
||||
@@ -20291,7 +20306,7 @@ find_var_in_ht(ht, htname, varname, writing)
|
||||
* worked find the variable again. Don't auto-load a script if it was
|
||||
* loaded already, otherwise it would be loaded every time when
|
||||
* checking if a function name is a Funcref variable. */
|
||||
if (ht == &globvarht && !writing)
|
||||
if (ht == &globvarht && !no_autoload)
|
||||
{
|
||||
/* Note: script_autoload() may make "hi" invalid. It must either
|
||||
* be obtained again or not used. */
|
||||
@@ -20371,7 +20386,7 @@ get_var_value(name)
|
||||
{
|
||||
dictitem_T *v;
|
||||
|
||||
v = find_var(name, NULL);
|
||||
v = find_var(name, NULL, FALSE);
|
||||
if (v == NULL)
|
||||
return NULL;
|
||||
return get_tv_string(&v->di_tv);
|
||||
@@ -21700,7 +21715,7 @@ ex_function(eap)
|
||||
*/
|
||||
if (fudi.fd_dict == NULL)
|
||||
{
|
||||
v = find_var(name, &ht);
|
||||
v = find_var(name, &ht, FALSE);
|
||||
if (v != NULL && v->di_tv.v_type == VAR_FUNC)
|
||||
{
|
||||
emsg_funcname(N_("E707: Function name conflicts with variable: %s"),
|
||||
@@ -21858,8 +21873,9 @@ ret_free:
|
||||
* Also handles a Funcref in a List or Dictionary.
|
||||
* Returns the function name in allocated memory, or NULL for failure.
|
||||
* flags:
|
||||
* TFN_INT: internal function name OK
|
||||
* TFN_QUIET: be quiet
|
||||
* TFN_INT: internal function name OK
|
||||
* TFN_QUIET: be quiet
|
||||
* TFN_NO_AUTOLOAD: do not use script autoloading
|
||||
* Advances "pp" to just after the function name (if no error).
|
||||
*/
|
||||
static char_u *
|
||||
@@ -21897,7 +21913,8 @@ trans_function_name(pp, skip, flags, fdp)
|
||||
if (lead > 2)
|
||||
start += lead;
|
||||
|
||||
end = get_lval(start, NULL, &lv, FALSE, skip, flags & TFN_QUIET,
|
||||
/* Note that TFN_ flags use the same values as GLV_ flags. */
|
||||
end = get_lval(start, NULL, &lv, FALSE, skip, flags,
|
||||
lead > 2 ? 0 : FNE_CHECK_START);
|
||||
if (end == start)
|
||||
{
|
||||
@@ -21959,14 +21976,14 @@ trans_function_name(pp, skip, flags, fdp)
|
||||
if (lv.ll_exp_name != NULL)
|
||||
{
|
||||
len = (int)STRLEN(lv.ll_exp_name);
|
||||
name = deref_func_name(lv.ll_exp_name, &len);
|
||||
name = deref_func_name(lv.ll_exp_name, &len, flags & TFN_NO_AUTOLOAD);
|
||||
if (name == lv.ll_exp_name)
|
||||
name = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = (int)(end - *pp);
|
||||
name = deref_func_name(*pp, &len);
|
||||
name = deref_func_name(*pp, &len, flags & TFN_NO_AUTOLOAD);
|
||||
if (name == *pp)
|
||||
name = NULL;
|
||||
}
|
||||
@@ -22174,7 +22191,8 @@ function_exists(name)
|
||||
char_u *p;
|
||||
int n = FALSE;
|
||||
|
||||
p = trans_function_name(&nm, FALSE, TFN_INT|TFN_QUIET, NULL);
|
||||
p = trans_function_name(&nm, FALSE, TFN_INT|TFN_QUIET|TFN_NO_AUTOLOAD,
|
||||
NULL);
|
||||
nm = skipwhite(nm);
|
||||
|
||||
/* Only accept "funcname", "funcname ", "funcname (..." and
|
||||
@@ -22421,10 +22439,6 @@ script_autoload(name, reload)
|
||||
int ret = FALSE;
|
||||
int i;
|
||||
|
||||
/* Return quickly when autoload disabled. */
|
||||
if (no_autoload)
|
||||
return FALSE;
|
||||
|
||||
/* If there is no '#' after name[0] there is no package name. */
|
||||
p = vim_strchr(name, AUTOLOAD_CHAR);
|
||||
if (p == NULL || p == name)
|
||||
@@ -24379,7 +24393,7 @@ do_string_sub(str, pat, sub, flags)
|
||||
garray_T ga;
|
||||
char_u *ret;
|
||||
char_u *save_cpo;
|
||||
int zero_width;
|
||||
char_u *zero_width = NULL;
|
||||
|
||||
/* Make 'cpoptions' empty, so that the 'l' flag doesn't work here */
|
||||
save_cpo = p_cpo;
|
||||
@@ -24396,6 +24410,19 @@ do_string_sub(str, pat, sub, flags)
|
||||
tail = str;
|
||||
while (vim_regexec_nl(®match, str, (colnr_T)(tail - str)))
|
||||
{
|
||||
/* Skip empty match except for first match. */
|
||||
if (regmatch.startp[0] == regmatch.endp[0])
|
||||
{
|
||||
if (zero_width == regmatch.startp[0])
|
||||
{
|
||||
/* avoid getting stuck on a match with an empty string */
|
||||
*((char_u *)ga.ga_data + ga.ga_len) = *tail++;
|
||||
++ga.ga_len;
|
||||
continue;
|
||||
}
|
||||
zero_width = regmatch.startp[0];
|
||||
}
|
||||
|
||||
/*
|
||||
* Get some space for a temporary buffer to do the substitution
|
||||
* into. It will contain:
|
||||
@@ -24418,17 +24445,9 @@ do_string_sub(str, pat, sub, flags)
|
||||
(void)vim_regsub(®match, sub, (char_u *)ga.ga_data
|
||||
+ ga.ga_len + i, TRUE, TRUE, FALSE);
|
||||
ga.ga_len += i + sublen - 1;
|
||||
zero_width = (tail == regmatch.endp[0]
|
||||
|| regmatch.startp[0] == regmatch.endp[0]);
|
||||
tail = regmatch.endp[0];
|
||||
if (*tail == NUL)
|
||||
break;
|
||||
if (zero_width)
|
||||
{
|
||||
/* avoid getting stuck on a match with an empty string */
|
||||
*((char_u *)ga.ga_data + ga.ga_len) = *tail++;
|
||||
++ga.ga_len;
|
||||
}
|
||||
if (!do_all)
|
||||
break;
|
||||
}
|
||||
|
||||
+7
-3
@@ -5936,14 +5936,18 @@ find_help_tags(arg, num_matches, matches, keep_lang)
|
||||
"?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
|
||||
"/\\?", "/\\z(\\)", "\\=", ":s\\=",
|
||||
"[count]", "[quotex]", "[range]",
|
||||
"[pattern]", "\\|", "\\%$"};
|
||||
"[pattern]", "\\|", "\\%$",
|
||||
"s/\\~", "s/\\U", "s/\\L",
|
||||
"s/\\1", "s/\\2", "s/\\3", "s/\\9"};
|
||||
static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
|
||||
"/star", "/\\\\star", "quotestar", "starstar",
|
||||
"cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
|
||||
"?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
|
||||
"/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
|
||||
"\\[count]", "\\[quotex]", "\\[range]",
|
||||
"\\[pattern]", "\\\\bar", "/\\\\%\\$"};
|
||||
"\\[pattern]", "\\\\bar", "/\\\\%\\$",
|
||||
"s/\\\\\\~", "s/\\\\U", "s/\\\\L",
|
||||
"s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
|
||||
int flags;
|
||||
|
||||
d = IObuff; /* assume IObuff is long enough! */
|
||||
@@ -5982,7 +5986,7 @@ find_help_tags(arg, num_matches, matches, keep_lang)
|
||||
/* Replace:
|
||||
* "[:...:]" with "\[:...:]"
|
||||
* "[++...]" with "\[++...]"
|
||||
* "\{" with "\\{"
|
||||
* "\{" with "\\{" -- matching "} \}"
|
||||
*/
|
||||
if ((arg[0] == '[' && (arg[1] == ':'
|
||||
|| (arg[1] == '+' && arg[2] == '+')))
|
||||
|
||||
+12
-5
@@ -3268,7 +3268,11 @@ set_one_cmd_context(xp, buff)
|
||||
++p;
|
||||
/* for python 3.x: ":py3*" commands completion */
|
||||
if (cmd[0] == 'p' && cmd[1] == 'y' && p == cmd + 2 && *p == '3')
|
||||
{
|
||||
++p;
|
||||
while (ASCII_ISALPHA(*p) || *p == '*')
|
||||
++p;
|
||||
}
|
||||
len = (int)(p - cmd);
|
||||
|
||||
if (len == 0)
|
||||
@@ -8069,6 +8073,8 @@ ex_syncbind(eap)
|
||||
{
|
||||
#ifdef FEAT_SCROLLBIND
|
||||
win_T *wp;
|
||||
win_T *save_curwin = curwin;
|
||||
buf_T *save_curbuf = curbuf;
|
||||
long topline;
|
||||
long y;
|
||||
linenr_T old_linenr = curwin->w_cursor.lnum;
|
||||
@@ -8100,13 +8106,13 @@ ex_syncbind(eap)
|
||||
|
||||
|
||||
/*
|
||||
* set all scrollbind windows to the same topline
|
||||
* Set all scrollbind windows to the same topline.
|
||||
*/
|
||||
wp = curwin;
|
||||
for (curwin = firstwin; curwin; curwin = curwin->w_next)
|
||||
{
|
||||
if (curwin->w_p_scb)
|
||||
{
|
||||
curbuf = curwin->w_buffer;
|
||||
y = topline - curwin->w_topline;
|
||||
if (y > 0)
|
||||
scrollup(y, TRUE);
|
||||
@@ -8120,7 +8126,8 @@ ex_syncbind(eap)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
curwin = wp;
|
||||
curwin = save_curwin;
|
||||
curbuf = save_curbuf;
|
||||
if (curwin->w_p_scb)
|
||||
{
|
||||
did_syncbind = TRUE;
|
||||
@@ -8240,6 +8247,7 @@ post_chdir(local)
|
||||
int local;
|
||||
{
|
||||
vim_free(curwin->w_localdir);
|
||||
curwin->w_localdir = NULL;
|
||||
if (local)
|
||||
{
|
||||
/* If still in global directory, need to remember current
|
||||
@@ -8256,7 +8264,6 @@ post_chdir(local)
|
||||
* name. */
|
||||
vim_free(globaldir);
|
||||
globaldir = NULL;
|
||||
curwin->w_localdir = NULL;
|
||||
}
|
||||
|
||||
shorten_fnames(TRUE);
|
||||
@@ -8383,7 +8390,7 @@ ex_sleep(eap)
|
||||
{
|
||||
n = W_WINROW(curwin) + curwin->w_wrow - msg_scrolled;
|
||||
if (n >= 0)
|
||||
windgoto((int)n, curwin->w_wcol);
|
||||
windgoto((int)n, W_WINCOL(curwin) + curwin->w_wcol);
|
||||
}
|
||||
|
||||
len = eap->line2;
|
||||
|
||||
+83
-49
@@ -320,6 +320,17 @@ free_msglist(l)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Free global "*msg_list" and the messages it contains, then set "*msg_list"
|
||||
* to NULL.
|
||||
*/
|
||||
void
|
||||
free_global_msglist()
|
||||
{
|
||||
free_msglist(*msg_list);
|
||||
*msg_list = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Throw the message specified in the call to cause_errthrow() above as an
|
||||
* error exception. If cstack is NULL, postpone the throw until do_cmdline()
|
||||
@@ -410,66 +421,41 @@ do_intthrow(cstack)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Throw a new exception. Return FAIL when out of memory or it was tried to
|
||||
* throw an illegal user exception. "value" is the exception string for a user
|
||||
* or interrupt exception, or points to a message list in case of an error
|
||||
* exception.
|
||||
* Get an exception message that is to be stored in current_exception->value.
|
||||
*/
|
||||
static int
|
||||
throw_exception(value, type, cmdname)
|
||||
char_u *
|
||||
get_exception_string(value, type, cmdname, should_free)
|
||||
void *value;
|
||||
int type;
|
||||
char_u *cmdname;
|
||||
int *should_free;
|
||||
{
|
||||
except_T *excp;
|
||||
char_u *p, *mesg, *val;
|
||||
char_u *ret, *mesg;
|
||||
int cmdlen;
|
||||
|
||||
/*
|
||||
* Disallow faking Interrupt or error exceptions as user exceptions. They
|
||||
* would be treated differently from real interrupt or error exceptions when
|
||||
* no active try block is found, see do_cmdline().
|
||||
*/
|
||||
if (type == ET_USER)
|
||||
{
|
||||
if (STRNCMP((char_u *)value, "Vim", 3) == 0 &&
|
||||
(((char_u *)value)[3] == NUL || ((char_u *)value)[3] == ':' ||
|
||||
((char_u *)value)[3] == '('))
|
||||
{
|
||||
EMSG(_("E608: Cannot :throw exceptions with 'Vim' prefix"));
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
excp = (except_T *)alloc((unsigned)sizeof(except_T));
|
||||
if (excp == NULL)
|
||||
goto nomem;
|
||||
char_u *p, *val;
|
||||
|
||||
if (type == ET_ERROR)
|
||||
{
|
||||
/* Store the original message and prefix the exception value with
|
||||
* "Vim:" or, if a command name is given, "Vim(cmdname):". */
|
||||
excp->messages = (struct msglist *)value;
|
||||
mesg = excp->messages->throw_msg;
|
||||
*should_free = FALSE;
|
||||
mesg = ((struct msglist *)value)->throw_msg;
|
||||
if (cmdname != NULL && *cmdname != NUL)
|
||||
{
|
||||
cmdlen = (int)STRLEN(cmdname);
|
||||
excp->value = vim_strnsave((char_u *)"Vim(",
|
||||
ret = vim_strnsave((char_u *)"Vim(",
|
||||
4 + cmdlen + 2 + (int)STRLEN(mesg));
|
||||
if (excp->value == NULL)
|
||||
goto nomem;
|
||||
STRCPY(&excp->value[4], cmdname);
|
||||
STRCPY(&excp->value[4 + cmdlen], "):");
|
||||
val = excp->value + 4 + cmdlen + 2;
|
||||
if (ret == NULL)
|
||||
return ret;
|
||||
STRCPY(&ret[4], cmdname);
|
||||
STRCPY(&ret[4 + cmdlen], "):");
|
||||
val = ret + 4 + cmdlen + 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
excp->value = vim_strnsave((char_u *)"Vim:", 4 + (int)STRLEN(mesg));
|
||||
if (excp->value == NULL)
|
||||
goto nomem;
|
||||
val = excp->value + 4;
|
||||
ret = vim_strnsave((char_u *)"Vim:", 4 + (int)STRLEN(mesg));
|
||||
if (ret == NULL)
|
||||
return ret;
|
||||
val = ret + 4;
|
||||
}
|
||||
|
||||
/* msg_add_fname may have been used to prefix the message with a file
|
||||
@@ -506,14 +492,65 @@ throw_exception(value, type, cmdname)
|
||||
}
|
||||
}
|
||||
else
|
||||
excp->value = value;
|
||||
{
|
||||
*should_free = FALSE;
|
||||
ret = (char_u *) value;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Throw a new exception. Return FAIL when out of memory or it was tried to
|
||||
* throw an illegal user exception. "value" is the exception string for a
|
||||
* user or interrupt exception, or points to a message list in case of an
|
||||
* error exception.
|
||||
*/
|
||||
static int
|
||||
throw_exception(value, type, cmdname)
|
||||
void *value;
|
||||
int type;
|
||||
char_u *cmdname;
|
||||
{
|
||||
except_T *excp;
|
||||
int should_free;
|
||||
|
||||
/*
|
||||
* Disallow faking Interrupt or error exceptions as user exceptions. They
|
||||
* would be treated differently from real interrupt or error exceptions
|
||||
* when no active try block is found, see do_cmdline().
|
||||
*/
|
||||
if (type == ET_USER)
|
||||
{
|
||||
if (STRNCMP((char_u *)value, "Vim", 3) == 0
|
||||
&& (((char_u *)value)[3] == NUL || ((char_u *)value)[3] == ':'
|
||||
|| ((char_u *)value)[3] == '('))
|
||||
{
|
||||
EMSG(_("E608: Cannot :throw exceptions with 'Vim' prefix"));
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
excp = (except_T *)alloc((unsigned)sizeof(except_T));
|
||||
if (excp == NULL)
|
||||
goto nomem;
|
||||
|
||||
if (type == ET_ERROR)
|
||||
/* Store the original message and prefix the exception value with
|
||||
* "Vim:" or, if a command name is given, "Vim(cmdname):". */
|
||||
excp->messages = (struct msglist *)value;
|
||||
|
||||
excp->value = get_exception_string(value, type, cmdname, &should_free);
|
||||
if (excp->value == NULL && should_free)
|
||||
goto nomem;
|
||||
|
||||
excp->type = type;
|
||||
excp->throw_name = vim_strsave(sourcing_name == NULL
|
||||
? (char_u *)"" : sourcing_name);
|
||||
if (excp->throw_name == NULL)
|
||||
{
|
||||
if (type == ET_ERROR)
|
||||
if (should_free)
|
||||
vim_free(excp->value);
|
||||
goto nomem;
|
||||
}
|
||||
@@ -2033,10 +2070,7 @@ leave_cleanup(csp)
|
||||
/* If an error was about to be converted to an exception when
|
||||
* enter_cleanup() was called, free the message list. */
|
||||
if (msg_list != NULL)
|
||||
{
|
||||
free_msglist(*msg_list);
|
||||
*msg_list = NULL;
|
||||
}
|
||||
free_global_msglist();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+9
-6
@@ -2973,7 +2973,7 @@ check_for_cryptkey(cryptkey, ptr, sizep, filesizep, newfile, fname, did_ask)
|
||||
else
|
||||
{
|
||||
bf_key_init(cryptkey, ptr + CRYPT_MAGIC_LEN, salt_len);
|
||||
bf_ofb_init(ptr + CRYPT_MAGIC_LEN + salt_len, seed_len);
|
||||
bf_cfb_init(ptr + CRYPT_MAGIC_LEN + salt_len, seed_len);
|
||||
}
|
||||
|
||||
/* Remove magic number from the text */
|
||||
@@ -3025,7 +3025,7 @@ prepare_crypt_read(fp)
|
||||
if (fread(buffer, salt_len + seed_len, 1, fp) != 1)
|
||||
return FAIL;
|
||||
bf_key_init(curbuf->b_p_key, buffer, salt_len);
|
||||
bf_ofb_init(buffer + salt_len, seed_len);
|
||||
bf_cfb_init(buffer + salt_len, seed_len);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
@@ -3064,7 +3064,7 @@ prepare_crypt_write(buf, lenp)
|
||||
seed = salt + salt_len;
|
||||
sha2_seed(salt, salt_len, seed, seed_len);
|
||||
bf_key_init(buf->b_p_key, salt, salt_len);
|
||||
bf_ofb_init(seed, seed_len);
|
||||
bf_cfb_init(seed, seed_len);
|
||||
}
|
||||
}
|
||||
*lenp = CRYPT_MAGIC_LEN + salt_len + seed_len;
|
||||
@@ -9368,7 +9368,9 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
|
||||
*/
|
||||
if (fname_io == NULL)
|
||||
{
|
||||
if (fname != NULL && *fname != NUL)
|
||||
if (event == EVENT_COLORSCHEME)
|
||||
autocmd_fname = NULL;
|
||||
else if (fname != NULL && *fname != NUL)
|
||||
autocmd_fname = fname;
|
||||
else if (buf != NULL)
|
||||
autocmd_fname = buf->b_ffname;
|
||||
@@ -9421,14 +9423,15 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
|
||||
else
|
||||
{
|
||||
sfname = vim_strsave(fname);
|
||||
/* Don't try expanding FileType, Syntax, FuncUndefined, WindowID or
|
||||
* QuickFixCmd* */
|
||||
/* Don't try expanding FileType, Syntax, FuncUndefined, WindowID,
|
||||
* ColorScheme or QuickFixCmd* */
|
||||
if (event == EVENT_FILETYPE
|
||||
|| event == EVENT_SYNTAX
|
||||
|| event == EVENT_FUNCUNDEFINED
|
||||
|| event == EVENT_REMOTEREPLY
|
||||
|| event == EVENT_SPELLFILEMISSING
|
||||
|| event == EVENT_QUICKFIXCMDPRE
|
||||
|| event == EVENT_COLORSCHEME
|
||||
|| event == EVENT_QUICKFIXCMDPOST)
|
||||
fname = vim_strsave(fname);
|
||||
else
|
||||
|
||||
+104
-59
@@ -40,13 +40,13 @@
|
||||
|
||||
#define MINIMAL_SIZE 20 /* minimal size for b_str */
|
||||
|
||||
static struct buffheader redobuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
static struct buffheader old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
static buffheader_T redobuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
static buffheader_T old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
|
||||
static struct buffheader save_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
static struct buffheader save_old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
static buffheader_T save_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
static buffheader_T save_old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
#endif
|
||||
static struct buffheader recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
static buffheader_T recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
|
||||
static int typeahead_char = 0; /* typeahead char that's not flushed */
|
||||
|
||||
@@ -112,11 +112,12 @@ static char_u noremapbuf_init[TYPELEN_INIT]; /* initial typebuf.tb_noremap */
|
||||
|
||||
static int last_recorded_len = 0; /* number of last recorded chars */
|
||||
|
||||
static char_u *get_buffcont __ARGS((struct buffheader *, int));
|
||||
static void add_buff __ARGS((struct buffheader *, char_u *, long n));
|
||||
static void add_num_buff __ARGS((struct buffheader *, long));
|
||||
static void add_char_buff __ARGS((struct buffheader *, int));
|
||||
static int read_stuff __ARGS((int advance));
|
||||
static char_u *get_buffcont __ARGS((buffheader_T *, int));
|
||||
static void add_buff __ARGS((buffheader_T *, char_u *, long n));
|
||||
static void add_num_buff __ARGS((buffheader_T *, long));
|
||||
static void add_char_buff __ARGS((buffheader_T *, int));
|
||||
static int read_readbuffers __ARGS((int advance));
|
||||
static int read_readbuf __ARGS((buffheader_T *buf, int advance));
|
||||
static void start_stuff __ARGS((void));
|
||||
static int read_redo __ARGS((int, int));
|
||||
static void copy_redo __ARGS((int));
|
||||
@@ -137,9 +138,9 @@ static char_u *eval_map_expr __ARGS((char_u *str, int c));
|
||||
*/
|
||||
void
|
||||
free_buff(buf)
|
||||
struct buffheader *buf;
|
||||
buffheader_T *buf;
|
||||
{
|
||||
struct buffblock *p, *np;
|
||||
buffblock_T *p, *np;
|
||||
|
||||
for (p = buf->bh_first.b_next; p != NULL; p = np)
|
||||
{
|
||||
@@ -155,14 +156,14 @@ free_buff(buf)
|
||||
*/
|
||||
static char_u *
|
||||
get_buffcont(buffer, dozero)
|
||||
struct buffheader *buffer;
|
||||
buffheader_T *buffer;
|
||||
int dozero; /* count == zero is not an error */
|
||||
{
|
||||
long_u count = 0;
|
||||
char_u *p = NULL;
|
||||
char_u *p2;
|
||||
char_u *str;
|
||||
struct buffblock *bp;
|
||||
buffblock_T *bp;
|
||||
|
||||
/* compute the total length of the string */
|
||||
for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
|
||||
@@ -230,11 +231,11 @@ get_inserted()
|
||||
*/
|
||||
static void
|
||||
add_buff(buf, s, slen)
|
||||
struct buffheader *buf;
|
||||
buffheader_T *buf;
|
||||
char_u *s;
|
||||
long slen; /* length of "s" or -1 */
|
||||
{
|
||||
struct buffblock *p;
|
||||
buffblock_T *p;
|
||||
long_u len;
|
||||
|
||||
if (slen < 0)
|
||||
@@ -270,7 +271,7 @@ add_buff(buf, s, slen)
|
||||
len = MINIMAL_SIZE;
|
||||
else
|
||||
len = slen;
|
||||
p = (struct buffblock *)lalloc((long_u)(sizeof(struct buffblock) + len),
|
||||
p = (buffblock_T *)lalloc((long_u)(sizeof(buffblock_T) + len),
|
||||
TRUE);
|
||||
if (p == NULL)
|
||||
return; /* no space, just forget it */
|
||||
@@ -289,7 +290,7 @@ add_buff(buf, s, slen)
|
||||
*/
|
||||
static void
|
||||
add_num_buff(buf, n)
|
||||
struct buffheader *buf;
|
||||
buffheader_T *buf;
|
||||
long n;
|
||||
{
|
||||
char_u number[32];
|
||||
@@ -304,7 +305,7 @@ add_num_buff(buf, n)
|
||||
*/
|
||||
static void
|
||||
add_char_buff(buf, c)
|
||||
struct buffheader *buf;
|
||||
buffheader_T *buf;
|
||||
int c;
|
||||
{
|
||||
#ifdef FEAT_MBYTE
|
||||
@@ -354,46 +355,71 @@ add_char_buff(buf, c)
|
||||
#endif
|
||||
}
|
||||
|
||||
/* First read ahead buffer. Used for translated commands. */
|
||||
static buffheader_T readbuf1 = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
|
||||
/* Second read ahead buffer. Used for redo. */
|
||||
static buffheader_T readbuf2 = {{NULL, {NUL}}, NULL, 0, 0};
|
||||
|
||||
/*
|
||||
* Get one byte from the stuff buffer.
|
||||
* Get one byte from the read buffers. Use readbuf1 one first, use readbuf2
|
||||
* if that one is empty.
|
||||
* If advance == TRUE go to the next char.
|
||||
* No translation is done K_SPECIAL and CSI are escaped.
|
||||
*/
|
||||
static int
|
||||
read_stuff(advance)
|
||||
read_readbuffers(advance)
|
||||
int advance;
|
||||
{
|
||||
char_u c;
|
||||
struct buffblock *curr;
|
||||
int c;
|
||||
|
||||
if (stuffbuff.bh_first.b_next == NULL) /* buffer is empty */
|
||||
c = read_readbuf(&readbuf1, advance);
|
||||
if (c == NUL)
|
||||
c = read_readbuf(&readbuf2, advance);
|
||||
return c;
|
||||
}
|
||||
|
||||
static int
|
||||
read_readbuf(buf, advance)
|
||||
buffheader_T *buf;
|
||||
int advance;
|
||||
{
|
||||
char_u c;
|
||||
buffblock_T *curr;
|
||||
|
||||
if (buf->bh_first.b_next == NULL) /* buffer is empty */
|
||||
return NUL;
|
||||
|
||||
curr = stuffbuff.bh_first.b_next;
|
||||
c = curr->b_str[stuffbuff.bh_index];
|
||||
curr = buf->bh_first.b_next;
|
||||
c = curr->b_str[buf->bh_index];
|
||||
|
||||
if (advance)
|
||||
{
|
||||
if (curr->b_str[++stuffbuff.bh_index] == NUL)
|
||||
if (curr->b_str[++buf->bh_index] == NUL)
|
||||
{
|
||||
stuffbuff.bh_first.b_next = curr->b_next;
|
||||
buf->bh_first.b_next = curr->b_next;
|
||||
vim_free(curr);
|
||||
stuffbuff.bh_index = 0;
|
||||
buf->bh_index = 0;
|
||||
}
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
/*
|
||||
* Prepare the stuff buffer for reading (if it contains something).
|
||||
* Prepare the read buffers for reading (if they contain something).
|
||||
*/
|
||||
static void
|
||||
start_stuff()
|
||||
{
|
||||
if (stuffbuff.bh_first.b_next != NULL)
|
||||
if (readbuf1.bh_first.b_next != NULL)
|
||||
{
|
||||
stuffbuff.bh_curr = &(stuffbuff.bh_first);
|
||||
stuffbuff.bh_space = 0;
|
||||
readbuf1.bh_curr = &(readbuf1.bh_first);
|
||||
readbuf1.bh_space = 0;
|
||||
}
|
||||
if (readbuf2.bh_first.b_next != NULL)
|
||||
{
|
||||
readbuf2.bh_curr = &(readbuf2.bh_first);
|
||||
readbuf2.bh_space = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -403,7 +429,18 @@ start_stuff()
|
||||
int
|
||||
stuff_empty()
|
||||
{
|
||||
return (stuffbuff.bh_first.b_next == NULL);
|
||||
return (readbuf1.bh_first.b_next == NULL
|
||||
&& readbuf2.bh_first.b_next == NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return TRUE if readbuf1 is empty. There may still be redo characters in
|
||||
* redbuf2.
|
||||
*/
|
||||
int
|
||||
readbuf1_empty()
|
||||
{
|
||||
return (readbuf1.bh_first.b_next == NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -428,7 +465,7 @@ flush_buffers(flush_typeahead)
|
||||
init_typebuf();
|
||||
|
||||
start_stuff();
|
||||
while (read_stuff(TRUE) != NUL)
|
||||
while (read_readbuffers(TRUE) != NUL)
|
||||
;
|
||||
|
||||
if (flush_typeahead) /* remove all typeahead */
|
||||
@@ -483,7 +520,7 @@ CancelRedo()
|
||||
redobuff = old_redobuff;
|
||||
old_redobuff.bh_first.b_next = NULL;
|
||||
start_stuff();
|
||||
while (read_stuff(TRUE) != NUL)
|
||||
while (read_readbuffers(TRUE) != NUL)
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -638,7 +675,7 @@ AppendNumberToRedobuff(n)
|
||||
stuffReadbuff(s)
|
||||
char_u *s;
|
||||
{
|
||||
add_buff(&stuffbuff, s, -1L);
|
||||
add_buff(&readbuf1, s, -1L);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -646,7 +683,7 @@ stuffReadbuffLen(s, len)
|
||||
char_u *s;
|
||||
long len;
|
||||
{
|
||||
add_buff(&stuffbuff, s, len);
|
||||
add_buff(&readbuf1, s, len);
|
||||
}
|
||||
|
||||
#if defined(FEAT_EVAL) || defined(PROTO)
|
||||
@@ -692,7 +729,7 @@ stuffReadbuffSpec(s)
|
||||
stuffcharReadbuff(c)
|
||||
int c;
|
||||
{
|
||||
add_char_buff(&stuffbuff, c);
|
||||
add_char_buff(&readbuf1, c);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -702,7 +739,7 @@ stuffcharReadbuff(c)
|
||||
stuffnumReadbuff(n)
|
||||
long n;
|
||||
{
|
||||
add_num_buff(&stuffbuff, n);
|
||||
add_num_buff(&readbuf1, n);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -718,13 +755,13 @@ read_redo(init, old_redo)
|
||||
int init;
|
||||
int old_redo;
|
||||
{
|
||||
static struct buffblock *bp;
|
||||
static char_u *p;
|
||||
int c;
|
||||
static buffblock_T *bp;
|
||||
static char_u *p;
|
||||
int c;
|
||||
#ifdef FEAT_MBYTE
|
||||
int n;
|
||||
char_u buf[MB_MAXBYTES + 1];
|
||||
int i;
|
||||
int n;
|
||||
char_u buf[MB_MAXBYTES + 1];
|
||||
int i;
|
||||
#endif
|
||||
|
||||
if (init)
|
||||
@@ -795,11 +832,11 @@ copy_redo(old_redo)
|
||||
int c;
|
||||
|
||||
while ((c = read_redo(FALSE, old_redo)) != NUL)
|
||||
stuffcharReadbuff(c);
|
||||
add_char_buff(&readbuf2, c);
|
||||
}
|
||||
|
||||
/*
|
||||
* Stuff the redo buffer into the stuffbuff.
|
||||
* Stuff the redo buffer into readbuf2.
|
||||
* Insert the redo count into the command.
|
||||
* If "old_redo" is TRUE, the last but one command is repeated
|
||||
* instead of the last command (inserting text). This is used for
|
||||
@@ -823,13 +860,13 @@ start_redo(count, old_redo)
|
||||
/* copy the buffer name, if present */
|
||||
if (c == '"')
|
||||
{
|
||||
add_buff(&stuffbuff, (char_u *)"\"", 1L);
|
||||
add_buff(&readbuf2, (char_u *)"\"", 1L);
|
||||
c = read_redo(FALSE, old_redo);
|
||||
|
||||
/* if a numbered buffer is used, increment the number */
|
||||
if (c >= '1' && c < '9')
|
||||
++c;
|
||||
add_char_buff(&stuffbuff, c);
|
||||
add_char_buff(&readbuf2, c);
|
||||
c = read_redo(FALSE, old_redo);
|
||||
}
|
||||
|
||||
@@ -850,18 +887,18 @@ start_redo(count, old_redo)
|
||||
{
|
||||
while (VIM_ISDIGIT(c)) /* skip "old" count */
|
||||
c = read_redo(FALSE, old_redo);
|
||||
add_num_buff(&stuffbuff, count);
|
||||
add_num_buff(&readbuf2, count);
|
||||
}
|
||||
|
||||
/* copy from the redo buffer into the stuff buffer */
|
||||
add_char_buff(&stuffbuff, c);
|
||||
add_char_buff(&readbuf2, c);
|
||||
copy_redo(old_redo);
|
||||
return OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Repeat the last insert (R, o, O, a, A, i or I command) by stuffing
|
||||
* the redo buffer into the stuffbuff.
|
||||
* the redo buffer into readbuf2.
|
||||
* return FAIL for failure, OK otherwise
|
||||
*/
|
||||
int
|
||||
@@ -879,7 +916,7 @@ start_redo_ins()
|
||||
if (vim_strchr((char_u *)"AaIiRrOo", c) != NULL)
|
||||
{
|
||||
if (c == 'O' || c == 'o')
|
||||
stuffReadbuff(NL_STR);
|
||||
add_buff(&readbuf2, NL_STR, -1L);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1360,8 +1397,10 @@ save_typeahead(tp)
|
||||
tp->old_mod_mask = old_mod_mask;
|
||||
old_char = -1;
|
||||
|
||||
tp->save_stuffbuff = stuffbuff;
|
||||
stuffbuff.bh_first.b_next = NULL;
|
||||
tp->save_readbuf1 = readbuf1;
|
||||
readbuf1.bh_first.b_next = NULL;
|
||||
tp->save_readbuf2 = readbuf2;
|
||||
readbuf2.bh_first.b_next = NULL;
|
||||
# ifdef USE_INPUT_BUF
|
||||
tp->save_inputbuf = get_input_buf();
|
||||
# endif
|
||||
@@ -1384,8 +1423,10 @@ restore_typeahead(tp)
|
||||
old_char = tp->old_char;
|
||||
old_mod_mask = tp->old_mod_mask;
|
||||
|
||||
free_buff(&stuffbuff);
|
||||
stuffbuff = tp->save_stuffbuff;
|
||||
free_buff(&readbuf1);
|
||||
readbuf1 = tp->save_readbuf1;
|
||||
free_buff(&readbuf2);
|
||||
readbuf2 = tp->save_readbuf2;
|
||||
# ifdef USE_INPUT_BUF
|
||||
set_input_buf(tp->save_inputbuf);
|
||||
# endif
|
||||
@@ -1992,7 +2033,7 @@ vgetorpeek(advance)
|
||||
typeahead_char = 0;
|
||||
}
|
||||
else
|
||||
c = read_stuff(advance);
|
||||
c = read_readbuffers(advance);
|
||||
if (c != NUL && !got_int)
|
||||
{
|
||||
if (advance)
|
||||
@@ -2261,6 +2302,10 @@ vgetorpeek(advance)
|
||||
msg_row = Rows - 1;
|
||||
msg_clr_eos(); /* clear ruler */
|
||||
}
|
||||
#ifdef FEAT_WINDOWS
|
||||
status_redraw_all();
|
||||
redraw_statuslines();
|
||||
#endif
|
||||
showmode();
|
||||
setcursor();
|
||||
continue;
|
||||
|
||||
@@ -981,11 +981,6 @@ EXTERN int RedrawingDisabled INIT(= 0);
|
||||
EXTERN int readonlymode INIT(= FALSE); /* Set to TRUE for "view" */
|
||||
EXTERN int recoverymode INIT(= FALSE); /* Set to TRUE for "-r" option */
|
||||
|
||||
EXTERN struct buffheader stuffbuff /* stuff buffer */
|
||||
#ifdef DO_INIT
|
||||
= {{NULL, {NUL}}, NULL, 0, 0}
|
||||
#endif
|
||||
;
|
||||
EXTERN typebuf_T typebuf /* typeahead buffer */
|
||||
#ifdef DO_INIT
|
||||
= {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}
|
||||
|
||||
+43
-11
@@ -14,7 +14,8 @@
|
||||
#define IN_PERL_FILE /* don't include if_perl.pro from proto.h */
|
||||
|
||||
/*
|
||||
* Currently 32-bit version of ActivePerl is built with VC6.
|
||||
* Currently 32-bit version of ActivePerl is built with VC6 (or MinGW since
|
||||
* ActivePerl 5.18).
|
||||
* (http://community.activestate.com/faq/windows-compilers-perl-modules)
|
||||
* It means that time_t should be 32-bit. However the default size of
|
||||
* time_t is 64-bit since VC8. So we have to define _USE_32BIT_TIME_T.
|
||||
@@ -23,8 +24,31 @@
|
||||
# define _USE_32BIT_TIME_T
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Prevent including winsock.h. perl.h tries to detect whether winsock.h is
|
||||
* already included before including winsock2.h, because winsock2.h isn't
|
||||
* compatible with winsock.h. However the detection doesn't work with some
|
||||
* versions of MinGW. If WIN32_LEAN_AND_MEAN is defined, windows.h will not
|
||||
* include winsock.h.
|
||||
*/
|
||||
#ifdef WIN32
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
#include "vim.h"
|
||||
|
||||
/* Work around for perl-5.18.
|
||||
* Don't include "perl\lib\CORE\inline.h" for now,
|
||||
* include it after Perl_sv_free2 is defined. */
|
||||
#ifdef DYNAMIC_PERL
|
||||
# define PERL_NO_INLINE_FUNCTIONS
|
||||
#endif
|
||||
|
||||
/* Work around for using MSVC and ActivePerl 5.18. */
|
||||
#ifdef _MSC_VER
|
||||
# define __inline__ __inline
|
||||
#endif
|
||||
|
||||
#include <EXTERN.h>
|
||||
#include <perl.h>
|
||||
#include <XSUB.h>
|
||||
@@ -81,10 +105,6 @@
|
||||
# define PERL5101_OR_LATER
|
||||
#endif
|
||||
|
||||
#if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
|
||||
# define PERL5180_OR_LATER
|
||||
#endif
|
||||
|
||||
#ifndef pTHX
|
||||
# define pTHX void
|
||||
# define pTHX_
|
||||
@@ -145,11 +165,9 @@ typedef int perl_key;
|
||||
# define perl_free dll_perl_free
|
||||
# define Perl_get_context dll_Perl_get_context
|
||||
# define Perl_croak dll_Perl_croak
|
||||
# ifndef PERL5180_OR_LATER
|
||||
# ifdef PERL5101_OR_LATER
|
||||
# define Perl_croak_xs_usage dll_Perl_croak_xs_usage
|
||||
# endif
|
||||
# endif
|
||||
# ifndef PROTO
|
||||
# define Perl_croak_nocontext dll_Perl_croak_nocontext
|
||||
# define Perl_call_argv dll_Perl_call_argv
|
||||
@@ -262,10 +280,13 @@ static int (*perl_run)(PerlInterpreter*);
|
||||
static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
|
||||
static void* (*Perl_get_context)(void);
|
||||
static void (*Perl_croak)(pTHX_ const char*, ...);
|
||||
#ifndef PERL5180_OR_LATER
|
||||
#ifdef PERL5101_OR_LATER
|
||||
/* Perl-5.18 has a different Perl_croak_xs_usage signature. */
|
||||
# if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
|
||||
static void (*Perl_croak_xs_usage)(const CV *const, const char *const params);
|
||||
# else
|
||||
static void (*Perl_croak_xs_usage)(pTHX_ const CV *const, const char *const params);
|
||||
#endif
|
||||
# endif
|
||||
#endif
|
||||
static void (*Perl_croak_nocontext)(const char*, ...);
|
||||
static I32 (*Perl_dowantarray)(pTHX);
|
||||
@@ -337,7 +358,12 @@ static SV** (*Perl_TSv_ptr)(register PerlInterpreter*);
|
||||
static XPV** (*Perl_TXpv_ptr)(register PerlInterpreter*);
|
||||
static STRLEN* (*Perl_Tna_ptr)(register PerlInterpreter*);
|
||||
#else
|
||||
/* Perl-5.18 has a different Perl_sv_free2 signature. */
|
||||
# if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
|
||||
static void (*Perl_sv_free2)(pTHX_ SV*, const U32);
|
||||
# else
|
||||
static void (*Perl_sv_free2)(pTHX_ SV*);
|
||||
# endif
|
||||
static void (*Perl_sys_init)(int* argc, char*** argv);
|
||||
static void (*Perl_sys_term)(void);
|
||||
static void (*Perl_call_list)(pTHX_ I32, AV*);
|
||||
@@ -384,10 +410,8 @@ static struct {
|
||||
{"perl_parse", (PERL_PROC*)&perl_parse},
|
||||
{"Perl_get_context", (PERL_PROC*)&Perl_get_context},
|
||||
{"Perl_croak", (PERL_PROC*)&Perl_croak},
|
||||
#ifndef PERL5180_OR_LATER
|
||||
#ifdef PERL5101_OR_LATER
|
||||
{"Perl_croak_xs_usage", (PERL_PROC*)&Perl_croak_xs_usage},
|
||||
#endif
|
||||
#endif
|
||||
{"Perl_croak_nocontext", (PERL_PROC*)&Perl_croak_nocontext},
|
||||
{"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray},
|
||||
@@ -492,6 +516,14 @@ static struct {
|
||||
{"", NULL},
|
||||
};
|
||||
|
||||
/* Work around for perl-5.18.
|
||||
* The definitions of S_SvREFCNT_inc and S_SvREFCNT_dec are needed, so include
|
||||
* "perl\lib\CORE\inline.h", after Perl_sv_free2 is defined.
|
||||
* The linker won't complain about undefined __impl_Perl_sv_free2. */
|
||||
#if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
|
||||
# include <inline.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Make all runtime-links of perl.
|
||||
*
|
||||
|
||||
+512
-198
@@ -13,6 +13,11 @@
|
||||
* Common code for if_python.c and if_python3.c.
|
||||
*/
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
/* Disable Warning W8060: Possibly incorrect assignment in function ... */
|
||||
# pragma warn -8060
|
||||
#endif
|
||||
|
||||
static char_u e_py_systemexit[] = "E880: Can't handle SystemExit of %s exception in vim";
|
||||
|
||||
#if PY_VERSION_HEX < 0x02050000
|
||||
@@ -31,8 +36,9 @@ static const char *vim_special_path = "_vim_path_";
|
||||
#define PyErr_SET_STRING(exc, str) PyErr_SetString(exc, _(str))
|
||||
#define PyErr_SetVim(str) PyErr_SetString(VimError, str)
|
||||
#define PyErr_SET_VIM(str) PyErr_SET_STRING(VimError, str)
|
||||
#define PyErr_FORMAT(exc, str, tail) PyErr_Format(exc, _(str), tail)
|
||||
#define PyErr_VIM_FORMAT(str, tail) PyErr_FORMAT(VimError, str, tail)
|
||||
#define PyErr_FORMAT(exc, str, arg) PyErr_Format(exc, _(str), arg)
|
||||
#define PyErr_FORMAT2(exc, str, arg1, arg2) PyErr_Format(exc, _(str), arg1,arg2)
|
||||
#define PyErr_VIM_FORMAT(str, arg) PyErr_FORMAT(VimError, str, arg)
|
||||
|
||||
#define Py_TYPE_NAME(obj) (obj->ob_type->tp_name == NULL \
|
||||
? "(NULL)" \
|
||||
@@ -558,23 +564,40 @@ VimTryEnd(void)
|
||||
/* Keyboard interrupt should be preferred over anything else */
|
||||
if (got_int)
|
||||
{
|
||||
if (current_exception != NULL)
|
||||
if (did_throw)
|
||||
discard_current_exception();
|
||||
else
|
||||
need_rethrow = did_throw = FALSE;
|
||||
got_int = FALSE;
|
||||
PyErr_SetNone(PyExc_KeyboardInterrupt);
|
||||
return -1;
|
||||
}
|
||||
else if (msg_list != NULL && *msg_list != NULL)
|
||||
{
|
||||
int should_free;
|
||||
char_u *msg;
|
||||
|
||||
msg = get_exception_string(*msg_list, ET_ERROR, NULL, &should_free);
|
||||
|
||||
if (msg == NULL)
|
||||
{
|
||||
PyErr_NoMemory();
|
||||
return -1;
|
||||
}
|
||||
|
||||
PyErr_SetVim((char *) msg);
|
||||
|
||||
free_global_msglist();
|
||||
|
||||
if (should_free)
|
||||
vim_free(msg);
|
||||
|
||||
return -1;
|
||||
}
|
||||
else if (!did_throw)
|
||||
return (PyErr_Occurred() ? -1 : 0);
|
||||
/* Python exception is preferred over vim one; unlikely to occur though */
|
||||
else if (PyErr_Occurred())
|
||||
{
|
||||
if (current_exception != NULL)
|
||||
discard_current_exception();
|
||||
else
|
||||
need_rethrow = did_throw = FALSE;
|
||||
discard_current_exception();
|
||||
return -1;
|
||||
}
|
||||
/* Finally transform VimL exception to python one */
|
||||
@@ -1594,8 +1617,9 @@ _DictionaryItem(DictionaryObject *self, PyObject *args, int flags)
|
||||
}
|
||||
else if (flags & DICT_FLAG_RETURN_BOOL)
|
||||
{
|
||||
Py_INCREF(Py_True);
|
||||
return Py_True;
|
||||
ret = Py_True;
|
||||
Py_INCREF(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
di = dict_lookup(hi);
|
||||
@@ -1895,11 +1919,17 @@ DictionaryUpdate(DictionaryObject *self, PyObject *args, PyObject *kwargs)
|
||||
}
|
||||
else
|
||||
{
|
||||
PyObject *obj;
|
||||
PyObject *obj = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O", &obj))
|
||||
if (!PyArg_ParseTuple(args, "|O", &obj))
|
||||
return NULL;
|
||||
|
||||
if (obj == NULL)
|
||||
{
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
if (PyObject_HasAttrString(obj, "keys"))
|
||||
return DictionaryUpdate(self, NULL, obj);
|
||||
else
|
||||
@@ -2081,8 +2111,6 @@ static struct PyMethodDef DictionaryMethods[] = {
|
||||
};
|
||||
|
||||
static PyTypeObject ListType;
|
||||
static PySequenceMethods ListAsSeq;
|
||||
static PyMappingMethods ListAsMapping;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -2226,7 +2254,7 @@ ListLength(ListObject *self)
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
ListItem(ListObject *self, Py_ssize_t index)
|
||||
ListIndex(ListObject *self, Py_ssize_t index)
|
||||
{
|
||||
listitem_T *li;
|
||||
|
||||
@@ -2246,53 +2274,389 @@ ListItem(ListObject *self, Py_ssize_t index)
|
||||
return ConvertToPyObject(&li->li_tv);
|
||||
}
|
||||
|
||||
#define PROC_RANGE \
|
||||
if (last < 0) {\
|
||||
if (last < -size) \
|
||||
last = 0; \
|
||||
else \
|
||||
last += size; \
|
||||
} \
|
||||
if (first < 0) \
|
||||
first = 0; \
|
||||
if (first > size) \
|
||||
first = size; \
|
||||
if (last > size) \
|
||||
last = size;
|
||||
|
||||
static PyObject *
|
||||
ListSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last)
|
||||
ListSlice(ListObject *self, Py_ssize_t first, Py_ssize_t step,
|
||||
Py_ssize_t slicelen)
|
||||
{
|
||||
PyInt i;
|
||||
PyInt size = ListLength(self);
|
||||
PyInt n;
|
||||
PyObject *list;
|
||||
int reversed = 0;
|
||||
|
||||
PROC_RANGE
|
||||
if (first >= last)
|
||||
first = last;
|
||||
if (step == 0)
|
||||
{
|
||||
PyErr_SET_STRING(PyExc_ValueError, N_("slice step cannot be zero"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
n = last-first;
|
||||
list = PyList_New(n);
|
||||
list = PyList_New(slicelen);
|
||||
if (list == NULL)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < n; ++i)
|
||||
for (i = 0; i < slicelen; ++i)
|
||||
{
|
||||
PyObject *item = ListItem(self, first + i);
|
||||
PyObject *item;
|
||||
|
||||
item = ListIndex(self, first + i*step);
|
||||
if (item == NULL)
|
||||
{
|
||||
Py_DECREF(list);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyList_SET_ITEM(list, ((reversed)?(n-i-1):(i)), item);
|
||||
PyList_SET_ITEM(list, i, item);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
ListItem(ListObject *self, PyObject* idx)
|
||||
{
|
||||
#if PY_MAJOR_VERSION < 3
|
||||
if (PyInt_Check(idx))
|
||||
{
|
||||
long _idx = PyInt_AsLong(idx);
|
||||
return ListIndex(self, _idx);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (PyLong_Check(idx))
|
||||
{
|
||||
long _idx = PyLong_AsLong(idx);
|
||||
return ListIndex(self, _idx);
|
||||
}
|
||||
else if (PySlice_Check(idx))
|
||||
{
|
||||
Py_ssize_t start, stop, step, slicelen;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)idx, ListLength(self),
|
||||
&start, &stop, &step, &slicelen) < 0)
|
||||
return NULL;
|
||||
return ListSlice(self, start, step, slicelen);
|
||||
}
|
||||
else
|
||||
{
|
||||
RAISE_INVALID_INDEX_TYPE(idx);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
list_restore(Py_ssize_t numadded, Py_ssize_t numreplaced, Py_ssize_t slicelen,
|
||||
list_T *l, listitem_T **lis, listitem_T *lastaddedli)
|
||||
{
|
||||
while (numreplaced--)
|
||||
{
|
||||
list_insert(l, lis[numreplaced], lis[slicelen + numreplaced]);
|
||||
listitem_remove(l, lis[slicelen + numreplaced]);
|
||||
}
|
||||
while (numadded--)
|
||||
{
|
||||
listitem_T *next;
|
||||
|
||||
next = lastaddedli->li_prev;
|
||||
listitem_remove(l, lastaddedli);
|
||||
lastaddedli = next;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
ListAssSlice(ListObject *self, Py_ssize_t first,
|
||||
Py_ssize_t step, Py_ssize_t slicelen, PyObject *obj)
|
||||
{
|
||||
PyObject *iterator;
|
||||
PyObject *item;
|
||||
listitem_T *li;
|
||||
listitem_T *lastaddedli = NULL;
|
||||
listitem_T *next;
|
||||
typval_T v;
|
||||
list_T *l = self->list;
|
||||
PyInt i;
|
||||
PyInt j;
|
||||
PyInt numreplaced = 0;
|
||||
PyInt numadded = 0;
|
||||
PyInt size;
|
||||
listitem_T **lis = NULL;
|
||||
|
||||
size = ListLength(self);
|
||||
|
||||
if (l->lv_lock)
|
||||
{
|
||||
RAISE_LOCKED_LIST;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (step == 0)
|
||||
{
|
||||
PyErr_SET_STRING(PyExc_ValueError, N_("slice step cannot be zero"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (step != 1 && slicelen == 0)
|
||||
{
|
||||
/* Nothing to do. Only error out if obj has some items. */
|
||||
int ret = 0;
|
||||
|
||||
if (obj == NULL)
|
||||
return 0;
|
||||
|
||||
if (!(iterator = PyObject_GetIter(obj)))
|
||||
return -1;
|
||||
|
||||
if ((item = PyIter_Next(iterator)))
|
||||
{
|
||||
PyErr_FORMAT(PyExc_ValueError,
|
||||
N_("attempt to assign sequence of size greater then %d "
|
||||
"to extended slice"), 0);
|
||||
Py_DECREF(item);
|
||||
ret = -1;
|
||||
}
|
||||
Py_DECREF(iterator);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (obj != NULL)
|
||||
/* XXX May allocate zero bytes. */
|
||||
if (!(lis = PyMem_New(listitem_T *, slicelen * 2)))
|
||||
{
|
||||
PyErr_NoMemory();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (first == size)
|
||||
li = NULL;
|
||||
else
|
||||
{
|
||||
li = list_find(l, (long) first);
|
||||
if (li == NULL)
|
||||
{
|
||||
PyErr_VIM_FORMAT(N_("internal error: no vim list item %d"),
|
||||
(int)first);
|
||||
if (obj != NULL)
|
||||
PyMem_Free(lis);
|
||||
return -1;
|
||||
}
|
||||
i = slicelen;
|
||||
while (i-- && li != NULL)
|
||||
{
|
||||
j = step;
|
||||
next = li;
|
||||
if (step > 0)
|
||||
while (next != NULL && ((next = next->li_next) != NULL) && --j);
|
||||
else
|
||||
while (next != NULL && ((next = next->li_prev) != NULL) && ++j);
|
||||
|
||||
if (obj == NULL)
|
||||
listitem_remove(l, li);
|
||||
else
|
||||
lis[slicelen - i - 1] = li;
|
||||
|
||||
li = next;
|
||||
}
|
||||
if (li == NULL && i != -1)
|
||||
{
|
||||
PyErr_SET_VIM(N_("internal error: not enough list items"));
|
||||
if (obj != NULL)
|
||||
PyMem_Free(lis);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (obj == NULL)
|
||||
return 0;
|
||||
|
||||
if (!(iterator = PyObject_GetIter(obj)))
|
||||
{
|
||||
PyMem_Free(lis);
|
||||
return -1;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
while ((item = PyIter_Next(iterator)))
|
||||
{
|
||||
if (ConvertFromPyObject(item, &v) == -1)
|
||||
{
|
||||
Py_DECREF(iterator);
|
||||
Py_DECREF(item);
|
||||
PyMem_Free(lis);
|
||||
return -1;
|
||||
}
|
||||
Py_DECREF(item);
|
||||
if (list_insert_tv(l, &v, numreplaced < slicelen
|
||||
? lis[numreplaced]
|
||||
: li) == FAIL)
|
||||
{
|
||||
clear_tv(&v);
|
||||
PyErr_SET_VIM(N_("internal error: failed to add item to list"));
|
||||
list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
|
||||
PyMem_Free(lis);
|
||||
return -1;
|
||||
}
|
||||
if (numreplaced < slicelen)
|
||||
{
|
||||
lis[slicelen + numreplaced] = lis[numreplaced]->li_prev;
|
||||
list_remove(l, lis[numreplaced], lis[numreplaced]);
|
||||
numreplaced++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (li)
|
||||
lastaddedli = li->li_prev;
|
||||
else
|
||||
lastaddedli = l->lv_last;
|
||||
numadded++;
|
||||
}
|
||||
clear_tv(&v);
|
||||
if (step != 1 && i >= slicelen)
|
||||
{
|
||||
Py_DECREF(iterator);
|
||||
PyErr_FORMAT(PyExc_ValueError,
|
||||
N_("attempt to assign sequence of size greater then %d "
|
||||
"to extended slice"), (int) slicelen);
|
||||
list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
|
||||
PyMem_Free(lis);
|
||||
return -1;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
Py_DECREF(iterator);
|
||||
|
||||
if (step != 1 && i != slicelen)
|
||||
{
|
||||
PyErr_FORMAT2(PyExc_ValueError,
|
||||
N_("attempt to assign sequence of size %d to extended slice "
|
||||
"of size %d"), (int) i, (int) slicelen);
|
||||
list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
|
||||
PyMem_Free(lis);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (PyErr_Occurred())
|
||||
{
|
||||
list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
|
||||
PyMem_Free(lis);
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < numreplaced; i++)
|
||||
listitem_free(lis[i]);
|
||||
if (step == 1)
|
||||
for (i = numreplaced; i < slicelen; i++)
|
||||
listitem_remove(l, lis[i]);
|
||||
|
||||
PyMem_Free(lis);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ListAssIndex(ListObject *self, Py_ssize_t index, PyObject *obj)
|
||||
{
|
||||
typval_T tv;
|
||||
list_T *l = self->list;
|
||||
listitem_T *li;
|
||||
Py_ssize_t length = ListLength(self);
|
||||
|
||||
if (l->lv_lock)
|
||||
{
|
||||
RAISE_LOCKED_LIST;
|
||||
return -1;
|
||||
}
|
||||
if (index > length || (index == length && obj == NULL))
|
||||
{
|
||||
PyErr_SET_STRING(PyExc_IndexError, N_("list index out of range"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (obj == NULL)
|
||||
{
|
||||
li = list_find(l, (long) index);
|
||||
list_remove(l, li, li);
|
||||
clear_tv(&li->li_tv);
|
||||
vim_free(li);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ConvertFromPyObject(obj, &tv) == -1)
|
||||
return -1;
|
||||
|
||||
if (index == length)
|
||||
{
|
||||
if (list_append_tv(l, &tv) == FAIL)
|
||||
{
|
||||
clear_tv(&tv);
|
||||
PyErr_SET_VIM(N_("failed to add item to list"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
li = list_find(l, (long) index);
|
||||
clear_tv(&li->li_tv);
|
||||
copy_tv(&tv, &li->li_tv);
|
||||
clear_tv(&tv);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Py_ssize_t
|
||||
ListAssItem(ListObject *self, PyObject *idx, PyObject *obj)
|
||||
{
|
||||
#if PY_MAJOR_VERSION < 3
|
||||
if (PyInt_Check(idx))
|
||||
{
|
||||
long _idx = PyInt_AsLong(idx);
|
||||
return ListAssIndex(self, _idx, obj);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (PyLong_Check(idx))
|
||||
{
|
||||
long _idx = PyLong_AsLong(idx);
|
||||
return ListAssIndex(self, _idx, obj);
|
||||
}
|
||||
else if (PySlice_Check(idx))
|
||||
{
|
||||
Py_ssize_t start, stop, step, slicelen;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)idx, ListLength(self),
|
||||
&start, &stop, &step, &slicelen) < 0)
|
||||
return -1;
|
||||
return ListAssSlice(self, start, step, slicelen,
|
||||
obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
RAISE_INVALID_INDEX_TYPE(idx);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
ListConcatInPlace(ListObject *self, PyObject *obj)
|
||||
{
|
||||
list_T *l = self->list;
|
||||
PyObject *lookup_dict;
|
||||
|
||||
if (l->lv_lock)
|
||||
{
|
||||
RAISE_LOCKED_LIST;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(lookup_dict = PyDict_New()))
|
||||
return NULL;
|
||||
|
||||
if (list_py_concat(l, obj, lookup_dict) == -1)
|
||||
{
|
||||
Py_DECREF(lookup_dict);
|
||||
return NULL;
|
||||
}
|
||||
Py_DECREF(lookup_dict);
|
||||
|
||||
Py_INCREF(self);
|
||||
return (PyObject *)(self);
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
listwatch_T lw;
|
||||
@@ -2343,156 +2707,6 @@ ListIter(ListObject *self)
|
||||
NULL, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
ListAssItem(ListObject *self, Py_ssize_t index, PyObject *obj)
|
||||
{
|
||||
typval_T tv;
|
||||
list_T *l = self->list;
|
||||
listitem_T *li;
|
||||
Py_ssize_t length = ListLength(self);
|
||||
|
||||
if (l->lv_lock)
|
||||
{
|
||||
RAISE_LOCKED_LIST;
|
||||
return -1;
|
||||
}
|
||||
if (index > length || (index == length && obj == NULL))
|
||||
{
|
||||
PyErr_SET_STRING(PyExc_IndexError, N_("list index out of range"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (obj == NULL)
|
||||
{
|
||||
li = list_find(l, (long) index);
|
||||
list_remove(l, li, li);
|
||||
clear_tv(&li->li_tv);
|
||||
vim_free(li);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ConvertFromPyObject(obj, &tv) == -1)
|
||||
return -1;
|
||||
|
||||
if (index == length)
|
||||
{
|
||||
if (list_append_tv(l, &tv) == FAIL)
|
||||
{
|
||||
clear_tv(&tv);
|
||||
PyErr_SET_VIM(N_("failed to add item to list"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
li = list_find(l, (long) index);
|
||||
clear_tv(&li->li_tv);
|
||||
copy_tv(&tv, &li->li_tv);
|
||||
clear_tv(&tv);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ListAssSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj)
|
||||
{
|
||||
PyInt size = ListLength(self);
|
||||
PyObject *iterator;
|
||||
PyObject *item;
|
||||
listitem_T *li;
|
||||
listitem_T *next;
|
||||
typval_T v;
|
||||
list_T *l = self->list;
|
||||
PyInt i;
|
||||
|
||||
if (l->lv_lock)
|
||||
{
|
||||
RAISE_LOCKED_LIST;
|
||||
return -1;
|
||||
}
|
||||
|
||||
PROC_RANGE
|
||||
|
||||
if (first == size)
|
||||
li = NULL;
|
||||
else
|
||||
{
|
||||
li = list_find(l, (long) first);
|
||||
if (li == NULL)
|
||||
{
|
||||
PyErr_VIM_FORMAT(N_("internal error: no vim list item %d"),
|
||||
(int)first);
|
||||
return -1;
|
||||
}
|
||||
if (last > first)
|
||||
{
|
||||
i = last - first;
|
||||
while (i-- && li != NULL)
|
||||
{
|
||||
next = li->li_next;
|
||||
listitem_remove(l, li);
|
||||
li = next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (obj == NULL)
|
||||
return 0;
|
||||
|
||||
if (!(iterator = PyObject_GetIter(obj)))
|
||||
return -1;
|
||||
|
||||
while ((item = PyIter_Next(iterator)))
|
||||
{
|
||||
if (ConvertFromPyObject(item, &v) == -1)
|
||||
{
|
||||
Py_DECREF(iterator);
|
||||
Py_DECREF(item);
|
||||
return -1;
|
||||
}
|
||||
Py_DECREF(item);
|
||||
if (list_insert_tv(l, &v, li) == FAIL)
|
||||
{
|
||||
clear_tv(&v);
|
||||
PyErr_SET_VIM(N_("internal error: failed to add item to list"));
|
||||
return -1;
|
||||
}
|
||||
clear_tv(&v);
|
||||
}
|
||||
Py_DECREF(iterator);
|
||||
|
||||
if (PyErr_Occurred())
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
ListConcatInPlace(ListObject *self, PyObject *obj)
|
||||
{
|
||||
list_T *l = self->list;
|
||||
PyObject *lookup_dict;
|
||||
|
||||
if (l->lv_lock)
|
||||
{
|
||||
RAISE_LOCKED_LIST;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(lookup_dict = PyDict_New()))
|
||||
return NULL;
|
||||
|
||||
if (list_py_concat(l, obj, lookup_dict) == -1)
|
||||
{
|
||||
Py_DECREF(lookup_dict);
|
||||
return NULL;
|
||||
}
|
||||
Py_DECREF(lookup_dict);
|
||||
|
||||
Py_INCREF(self);
|
||||
return (PyObject *)(self);
|
||||
}
|
||||
|
||||
static char *ListAttrs[] = {
|
||||
"locked",
|
||||
NULL
|
||||
@@ -2540,6 +2754,25 @@ ListSetattr(ListObject *self, char *name, PyObject *valObject)
|
||||
}
|
||||
}
|
||||
|
||||
static PySequenceMethods ListAsSeq = {
|
||||
(lenfunc) ListLength, /* sq_length, len(x) */
|
||||
(binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
|
||||
0, /* RangeRepeat, sq_repeat, x*n */
|
||||
(PyIntArgFunc) ListIndex, /* sq_item, x[i] */
|
||||
0, /* was_sq_slice, x[i:j] */
|
||||
(PyIntObjArgProc) ListAssIndex, /* sq_as_item, x[i]=v */
|
||||
0, /* was_sq_ass_slice, x[i:j]=v */
|
||||
0, /* sq_contains */
|
||||
(binaryfunc) ListConcatInPlace,/* sq_inplace_concat */
|
||||
0, /* sq_inplace_repeat */
|
||||
};
|
||||
|
||||
static PyMappingMethods ListAsMapping = {
|
||||
/* mp_length */ (lenfunc) ListLength,
|
||||
/* mp_subscript */ (binaryfunc) ListItem,
|
||||
/* mp_ass_subscript */ (objobjargproc) ListAssItem,
|
||||
};
|
||||
|
||||
static struct PyMethodDef ListMethods[] = {
|
||||
{"extend", (PyCFunction)ListConcatInPlace, METH_O, ""},
|
||||
{"__dir__", (PyCFunction)ListDir, METH_NOARGS, ""},
|
||||
@@ -2718,10 +2951,10 @@ typedef int (*checkfun)(void *);
|
||||
typedef struct
|
||||
{
|
||||
PyObject_HEAD
|
||||
int opt_type;
|
||||
void *from;
|
||||
checkfun Check;
|
||||
PyObject *fromObj;
|
||||
int opt_type;
|
||||
void *from;
|
||||
checkfun Check;
|
||||
PyObject *fromObj;
|
||||
} OptionsObject;
|
||||
|
||||
static int
|
||||
@@ -2840,6 +3073,69 @@ OptionsItem(OptionsObject *self, PyObject *keyObject)
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
OptionsContains(OptionsObject *self, PyObject *keyObject)
|
||||
{
|
||||
char_u *key;
|
||||
PyObject *todecref;
|
||||
|
||||
if (!(key = StringToChars(keyObject, &todecref)))
|
||||
return -1;
|
||||
|
||||
if (*key == NUL)
|
||||
{
|
||||
Py_XDECREF(todecref);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (get_option_value_strict(key, NULL, NULL, self->opt_type, NULL))
|
||||
{
|
||||
Py_XDECREF(todecref);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Py_XDECREF(todecref);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void *lastoption;
|
||||
int opt_type;
|
||||
} optiterinfo_T;
|
||||
|
||||
static PyObject *
|
||||
OptionsIterNext(optiterinfo_T **oii)
|
||||
{
|
||||
char_u *name;
|
||||
|
||||
if ((name = option_iter_next(&((*oii)->lastoption), (*oii)->opt_type)))
|
||||
return PyString_FromString((char *)name);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
OptionsIter(OptionsObject *self)
|
||||
{
|
||||
optiterinfo_T *oii;
|
||||
|
||||
if (!(oii = PyMem_New(optiterinfo_T, 1)))
|
||||
{
|
||||
PyErr_NoMemory();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
oii->opt_type = self->opt_type;
|
||||
oii->lastoption = NULL;
|
||||
|
||||
return IterNew(oii,
|
||||
(destructorfun) PyMem_Free, (nextfun) OptionsIterNext,
|
||||
NULL, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
set_option_value_err(char_u *key, int numval, char_u *stringval, int opt_flags)
|
||||
{
|
||||
@@ -2983,11 +3279,14 @@ OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject)
|
||||
else
|
||||
{
|
||||
char_u *val;
|
||||
PyObject *todecref;
|
||||
PyObject *todecref2;
|
||||
|
||||
if ((val = StringToChars(valObject, &todecref)))
|
||||
if ((val = StringToChars(valObject, &todecref2)))
|
||||
{
|
||||
ret = set_option_value_for(key, 0, val, opt_flags,
|
||||
self->opt_type, self->from);
|
||||
Py_XDECREF(todecref2);
|
||||
}
|
||||
else
|
||||
ret = -1;
|
||||
}
|
||||
@@ -2997,6 +3296,19 @@ OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static PySequenceMethods OptionsAsSeq = {
|
||||
0, /* sq_length */
|
||||
0, /* sq_concat */
|
||||
0, /* sq_repeat */
|
||||
0, /* sq_item */
|
||||
0, /* sq_slice */
|
||||
0, /* sq_ass_item */
|
||||
0, /* sq_ass_slice */
|
||||
(objobjproc) OptionsContains, /* sq_contains */
|
||||
0, /* sq_inplace_concat */
|
||||
0, /* sq_inplace_repeat */
|
||||
};
|
||||
|
||||
static PyMappingMethods OptionsAsMapping = {
|
||||
(lenfunc) NULL,
|
||||
(binaryfunc) OptionsItem,
|
||||
@@ -5887,8 +6199,10 @@ init_structs(void)
|
||||
vim_memset(&OptionsType, 0, sizeof(OptionsType));
|
||||
OptionsType.tp_name = "vim.options";
|
||||
OptionsType.tp_basicsize = sizeof(OptionsObject);
|
||||
OptionsType.tp_as_sequence = &OptionsAsSeq;
|
||||
OptionsType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
|
||||
OptionsType.tp_doc = "object for manipulating options";
|
||||
OptionsType.tp_iter = (getiterfunc)OptionsIter;
|
||||
OptionsType.tp_as_mapping = &OptionsAsMapping;
|
||||
OptionsType.tp_dealloc = (destructor)OptionsDestructor;
|
||||
OptionsType.tp_traverse = (traverseproc)OptionsTraverse;
|
||||
|
||||
+8
-15
@@ -200,6 +200,7 @@ struct PyMethodDef { Py_ssize_t a; };
|
||||
# define PyTuple_Size dll_PyTuple_Size
|
||||
# define PyTuple_GetItem dll_PyTuple_GetItem
|
||||
# define PyTuple_Type (*dll_PyTuple_Type)
|
||||
# define PySlice_GetIndicesEx dll_PySlice_GetIndicesEx
|
||||
# define PyImport_ImportModule dll_PyImport_ImportModule
|
||||
# define PyDict_New dll_PyDict_New
|
||||
# define PyDict_GetItemString dll_PyDict_GetItemString
|
||||
@@ -245,6 +246,7 @@ struct PyMethodDef { Py_ssize_t a; };
|
||||
# define PySys_GetObject dll_PySys_GetObject
|
||||
# define PySys_SetArgv dll_PySys_SetArgv
|
||||
# define PyType_Type (*dll_PyType_Type)
|
||||
# define PySlice_Type (*dll_PySlice_Type)
|
||||
# define PyType_Ready (*dll_PyType_Ready)
|
||||
# define PyType_GenericAlloc dll_PyType_GenericAlloc
|
||||
# define Py_BuildValue dll_Py_BuildValue
|
||||
@@ -345,6 +347,9 @@ static PyObject*(*dll_PySequence_Fast)(PyObject *, const char *);
|
||||
static PyInt(*dll_PyTuple_Size)(PyObject *);
|
||||
static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt);
|
||||
static PyTypeObject* dll_PyTuple_Type;
|
||||
static int (*dll_PySlice_GetIndicesEx)(PySliceObject *r, PyInt length,
|
||||
PyInt *start, PyInt *stop, PyInt *step,
|
||||
PyInt *slicelen);
|
||||
static PyObject*(*dll_PyImport_ImportModule)(const char *);
|
||||
static PyObject*(*dll_PyDict_New)(void);
|
||||
static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
|
||||
@@ -386,6 +391,7 @@ static int(*dll_PySys_SetObject)(char *, PyObject *);
|
||||
static PyObject *(*dll_PySys_GetObject)(char *);
|
||||
static int(*dll_PySys_SetArgv)(int, char **);
|
||||
static PyTypeObject* dll_PyType_Type;
|
||||
static PyTypeObject* dll_PySlice_Type;
|
||||
static int (*dll_PyType_Ready)(PyTypeObject *type);
|
||||
static PyObject* (*dll_PyType_GenericAlloc)(PyTypeObject *type, PyInt nitems);
|
||||
static PyObject*(*dll_Py_BuildValue)(char *, ...);
|
||||
@@ -525,6 +531,7 @@ static struct
|
||||
{"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem},
|
||||
{"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size},
|
||||
{"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type},
|
||||
{"PySlice_GetIndicesEx", (PYTHON_PROC*)&dll_PySlice_GetIndicesEx},
|
||||
{"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule},
|
||||
{"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString},
|
||||
{"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
|
||||
@@ -566,6 +573,7 @@ static struct
|
||||
{"PySys_GetObject", (PYTHON_PROC*)&dll_PySys_GetObject},
|
||||
{"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
|
||||
{"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
|
||||
{"PySlice_Type", (PYTHON_PROC*)&dll_PySlice_Type},
|
||||
{"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
|
||||
{"PyType_GenericAlloc", (PYTHON_PROC*)&dll_PyType_GenericAlloc},
|
||||
{"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
|
||||
@@ -1476,21 +1484,6 @@ DictionaryGetattr(PyObject *self, char *name)
|
||||
return Py_FindMethod(DictionaryMethods, self, name);
|
||||
}
|
||||
|
||||
static PySequenceMethods ListAsSeq = {
|
||||
(PyInquiry) ListLength,
|
||||
(binaryfunc) 0,
|
||||
(PyIntArgFunc) 0,
|
||||
(PyIntArgFunc) ListItem,
|
||||
(PyIntIntArgFunc) ListSlice,
|
||||
(PyIntObjArgProc) ListAssItem,
|
||||
(PyIntIntObjArgProc) ListAssSlice,
|
||||
(objobjproc) 0,
|
||||
#if PY_MAJOR_VERSION >= 2
|
||||
(binaryfunc) ListConcatInPlace,
|
||||
0,
|
||||
#endif
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
ListGetattr(PyObject *self, char *name)
|
||||
{
|
||||
|
||||
+10
-76
@@ -97,6 +97,9 @@
|
||||
#define Py_ssize_t_fmt "n"
|
||||
#define Py_bytes_fmt "y"
|
||||
|
||||
#define PyIntArgFunc ssizeargfunc
|
||||
#define PyIntObjArgProc ssizeobjargproc
|
||||
|
||||
#if defined(DYNAMIC_PYTHON3) || defined(PROTO)
|
||||
|
||||
# ifndef WIN3264
|
||||
@@ -291,8 +294,9 @@ static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
|
||||
static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
|
||||
static int (*py3_PyMapping_Check)(PyObject *);
|
||||
static PyObject* (*py3_PyMapping_Keys)(PyObject *);
|
||||
static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
|
||||
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
|
||||
static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
|
||||
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
|
||||
Py_ssize_t *slicelen);
|
||||
static PyObject* (*py3_PyErr_NoMemory)(void);
|
||||
static void (*py3_Py_Finalize)(void);
|
||||
static void (*py3_PyErr_SetString)(PyObject *, const char *);
|
||||
@@ -1186,7 +1190,7 @@ BufferSubscript(PyObject *self, PyObject* idx)
|
||||
if (CheckBuffer((BufferObject *) self))
|
||||
return NULL;
|
||||
|
||||
if (PySlice_GetIndicesEx((PyObject *)idx,
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)idx,
|
||||
(Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
|
||||
&start, &stop,
|
||||
&step, &slicelen) < 0)
|
||||
@@ -1218,7 +1222,7 @@ BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
|
||||
if (CheckBuffer((BufferObject *) self))
|
||||
return -1;
|
||||
|
||||
if (PySlice_GetIndicesEx((PyObject *)idx,
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)idx,
|
||||
(Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
|
||||
&start, &stop,
|
||||
&step, &slicelen) < 0)
|
||||
@@ -1302,7 +1306,7 @@ RangeSubscript(PyObject *self, PyObject* idx)
|
||||
{
|
||||
Py_ssize_t start, stop, step, slicelen;
|
||||
|
||||
if (PySlice_GetIndicesEx((PyObject *)idx,
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)idx,
|
||||
((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
|
||||
&start, &stop,
|
||||
&step, &slicelen) < 0)
|
||||
@@ -1329,7 +1333,7 @@ RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
|
||||
{
|
||||
Py_ssize_t start, stop, step, slicelen;
|
||||
|
||||
if (PySlice_GetIndicesEx((PyObject *)idx,
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)idx,
|
||||
((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
|
||||
&start, &stop,
|
||||
&step, &slicelen) < 0)
|
||||
@@ -1478,76 +1482,6 @@ DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
|
||||
/* List object - Definitions
|
||||
*/
|
||||
|
||||
static PySequenceMethods ListAsSeq = {
|
||||
(lenfunc) ListLength, /* sq_length, len(x) */
|
||||
(binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
|
||||
(ssizeargfunc) 0, /* RangeRepeat, sq_repeat, x*n */
|
||||
(ssizeargfunc) ListItem, /* sq_item, x[i] */
|
||||
(void *) 0, /* was_sq_slice, x[i:j] */
|
||||
(ssizeobjargproc) ListAssItem, /* sq_as_item, x[i]=v */
|
||||
(void *) 0, /* was_sq_ass_slice, x[i:j]=v */
|
||||
0, /* sq_contains */
|
||||
(binaryfunc) ListConcatInPlace,/* sq_inplace_concat */
|
||||
0, /* sq_inplace_repeat */
|
||||
};
|
||||
|
||||
static PyObject *ListSubscript(PyObject *, PyObject *);
|
||||
static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
|
||||
|
||||
static PyMappingMethods ListAsMapping = {
|
||||
/* mp_length */ (lenfunc) ListLength,
|
||||
/* mp_subscript */ (binaryfunc) ListSubscript,
|
||||
/* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
ListSubscript(PyObject *self, PyObject* idx)
|
||||
{
|
||||
if (PyLong_Check(idx))
|
||||
{
|
||||
long _idx = PyLong_AsLong(idx);
|
||||
return ListItem((ListObject *)(self), _idx);
|
||||
}
|
||||
else if (PySlice_Check(idx))
|
||||
{
|
||||
Py_ssize_t start, stop, step, slicelen;
|
||||
|
||||
if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
|
||||
&start, &stop, &step, &slicelen) < 0)
|
||||
return NULL;
|
||||
return ListSlice((ListObject *)(self), start, stop);
|
||||
}
|
||||
else
|
||||
{
|
||||
RAISE_INVALID_INDEX_TYPE(idx);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static Py_ssize_t
|
||||
ListAsSubscript(PyObject *self, PyObject *idx, PyObject *obj)
|
||||
{
|
||||
if (PyLong_Check(idx))
|
||||
{
|
||||
long _idx = PyLong_AsLong(idx);
|
||||
return ListAssItem((ListObject *)(self), _idx, obj);
|
||||
}
|
||||
else if (PySlice_Check(idx))
|
||||
{
|
||||
Py_ssize_t start, stop, step, slicelen;
|
||||
|
||||
if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
|
||||
&start, &stop, &step, &slicelen) < 0)
|
||||
return -1;
|
||||
return ListAssSlice((ListObject *)(self), start, stop, obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
RAISE_INVALID_INDEX_TYPE(idx);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
ListGetattro(PyObject *self, PyObject *nameobj)
|
||||
{
|
||||
|
||||
@@ -96,6 +96,12 @@
|
||||
# define rb_num2int rb_num2int_stub
|
||||
#endif
|
||||
|
||||
# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 21
|
||||
/* Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses
|
||||
* rb_gc_writebarrier_unprotect_promoted if USE_RGENGC */
|
||||
# define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub
|
||||
# endif
|
||||
|
||||
#ifdef FEAT_GUI_MACVIM
|
||||
# include <Ruby/ruby.h>
|
||||
#else
|
||||
@@ -381,6 +387,10 @@ static VALUE (*dll_rb_require) (const char*);
|
||||
static void* (*ruby_process_options)(int, char**);
|
||||
# endif
|
||||
|
||||
# if defined(USE_RGENGC) && USE_RGENGC
|
||||
static void (*dll_rb_gc_writebarrier_unprotect_promoted)(VALUE);
|
||||
# endif
|
||||
|
||||
# if defined(RUBY19_OR_LATER) && !defined(PROTO)
|
||||
SIGNED_VALUE rb_num2long_stub(VALUE x)
|
||||
{
|
||||
@@ -414,6 +424,13 @@ VALUE rb_num2ulong(VALUE x)
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if defined(USE_RGENGC) && USE_RGENGC
|
||||
void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
|
||||
{
|
||||
return dll_rb_gc_writebarrier_unprotect_promoted(obj);
|
||||
}
|
||||
# endif
|
||||
|
||||
static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
|
||||
|
||||
/*
|
||||
@@ -528,6 +545,9 @@ static struct
|
||||
{"rb_ia64_bsp", (RUBY_PROC*)&dll_rb_ia64_bsp},
|
||||
# endif
|
||||
{"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
|
||||
# endif
|
||||
# if defined(USE_RGENGC) && USE_RGENGC
|
||||
{"rb_gc_writebarrier_unprotect_promoted", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect_promoted},
|
||||
# endif
|
||||
{"", NULL},
|
||||
};
|
||||
|
||||
+6
-1
@@ -718,6 +718,11 @@ vim_main2(int argc UNUSED, char **argv UNUSED)
|
||||
TIME_MSG("reading viminfo");
|
||||
}
|
||||
#endif
|
||||
#ifdef FEAT_EVAL
|
||||
/* It's better to make v:oldfiles an empty list than NULL. */
|
||||
if (get_vim_var_list(VV_OLDFILES) == NULL)
|
||||
set_vim_var_list(VV_OLDFILES, list_alloc());
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_QUICKFIX
|
||||
/*
|
||||
@@ -1105,7 +1110,7 @@ main_loop(cmdwin, noexmode)
|
||||
/* Setup to catch a terminating error from the X server. Just ignore
|
||||
* it, restore the state and continue. This might not always work
|
||||
* properly, but at least we don't exit unexpectedly when the X server
|
||||
* exists while Vim is running in a console. */
|
||||
* exits while Vim is running in a console. */
|
||||
if (!cmdwin && !noexmode && SETJMP(x_jump_env))
|
||||
{
|
||||
State = NORMAL;
|
||||
|
||||
+10
-2
@@ -83,10 +83,18 @@
|
||||
# ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# endif
|
||||
# include <windows.h>
|
||||
# if defined(FEAT_GUI) || defined(FEAT_XCLIPBOARD)
|
||||
# include <X11/Xwindows.h>
|
||||
# define WINBYTE wBYTE
|
||||
# else
|
||||
# include <windows.h>
|
||||
# define WINBYTE BYTE
|
||||
# endif
|
||||
# ifdef WIN32
|
||||
# undef WIN32 /* Some windows.h define WIN32, we don't want that here. */
|
||||
# endif
|
||||
#else
|
||||
# define WINBYTE BYTE
|
||||
#endif
|
||||
|
||||
#if (defined(WIN3264) || defined(WIN32UNIX)) && !defined(__MINGW32__)
|
||||
@@ -698,7 +706,7 @@ codepage_invalid:
|
||||
/* enc_dbcs is set by setting 'fileencoding'. It becomes a Windows
|
||||
* CodePage identifier, which we can pass directly in to Windows
|
||||
* API */
|
||||
n = IsDBCSLeadByteEx(enc_dbcs, (BYTE)i) ? 2 : 1;
|
||||
n = IsDBCSLeadByteEx(enc_dbcs, (WINBYTE)i) ? 2 : 1;
|
||||
#else
|
||||
# if defined(MACOS) || defined(__amigaos4__)
|
||||
/*
|
||||
|
||||
+5
-2
@@ -841,8 +841,11 @@ ml_close_all(del_file)
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
ml_close(buf, del_file && ((buf->b_flags & BF_PRESERVED) == 0
|
||||
|| vim_strchr(p_cpo, CPO_PRESERVE) == NULL));
|
||||
#ifdef FEAT_SPELL
|
||||
spell_delete_wordlist(); /* delete the internal wordlist */
|
||||
#endif
|
||||
#ifdef TEMPDIRNAMES
|
||||
vim_deltempdir(); /* delete created temp directory */
|
||||
vim_deltempdir(); /* delete created temp directory */
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -4911,7 +4914,7 @@ ml_crypt_prepare(mfp, offset, reading)
|
||||
* block for the salt. */
|
||||
vim_snprintf((char *)salt, sizeof(salt), "%ld", (long)offset);
|
||||
bf_key_init(key, salt, (int)STRLEN(salt));
|
||||
bf_ofb_init(seed, MF_SEED_LEN);
|
||||
bf_cfb_init(seed, MF_SEED_LEN);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -487,7 +487,7 @@ get_cursor_rel_lnum(wp, lnum)
|
||||
{
|
||||
while (lnum > cursor)
|
||||
{
|
||||
(void)hasFolding(lnum, &lnum, NULL);
|
||||
(void)hasFoldingWin(wp, lnum, &lnum, NULL, TRUE, NULL);
|
||||
/* if lnum and cursor are in the same fold,
|
||||
* now lnum <= cursor */
|
||||
if (lnum > cursor)
|
||||
@@ -499,7 +499,7 @@ get_cursor_rel_lnum(wp, lnum)
|
||||
{
|
||||
while (lnum < cursor)
|
||||
{
|
||||
(void)hasFolding(lnum, NULL, &lnum);
|
||||
(void)hasFoldingWin(wp, lnum, NULL, &lnum, TRUE, NULL);
|
||||
/* if lnum and cursor are in the same fold,
|
||||
* now lnum >= cursor */
|
||||
if (lnum < cursor)
|
||||
@@ -4701,8 +4701,8 @@ vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what,
|
||||
else
|
||||
{
|
||||
char_u *p = gettail(search_ctx->ffsc_fix_path);
|
||||
char_u *wc_path = NUL;
|
||||
char_u *temp = NUL;
|
||||
char_u *wc_path = NULL;
|
||||
char_u *temp = NULL;
|
||||
int len = 0;
|
||||
|
||||
if (p > search_ctx->ffsc_fix_path)
|
||||
|
||||
@@ -2101,6 +2101,9 @@ scroll_cursor_halfway(atend)
|
||||
int used;
|
||||
lineoff_T loff;
|
||||
lineoff_T boff;
|
||||
#ifdef FEAT_DIFF
|
||||
linenr_T old_topline = curwin->w_topline;
|
||||
#endif
|
||||
|
||||
loff.lnum = boff.lnum = curwin->w_cursor.lnum;
|
||||
#ifdef FEAT_FOLDING
|
||||
@@ -2156,6 +2159,8 @@ scroll_cursor_halfway(atend)
|
||||
curwin->w_topline = topline;
|
||||
#ifdef FEAT_DIFF
|
||||
curwin->w_topfill = topfill;
|
||||
if (old_topline > curwin->w_topline + curwin->w_height)
|
||||
curwin->w_botfill = FALSE;
|
||||
check_topfill(curwin, FALSE);
|
||||
#endif
|
||||
curwin->w_valid &= ~(VALID_WROW|VALID_CROW|VALID_BOTLINE|VALID_BOTLINE_AP);
|
||||
|
||||
+16
-14
@@ -655,8 +655,8 @@ normal_cmd(oap, toplevel)
|
||||
#ifdef FEAT_EVAL
|
||||
/* Set v:count here, when called from main() and not a stuffed
|
||||
* command, so that v:count can be used in an expression mapping
|
||||
* when there is no count. */
|
||||
if (toplevel && stuff_empty())
|
||||
* when there is no count. Do set it for redo. */
|
||||
if (toplevel && readbuf1_empty())
|
||||
set_vcount_ca(&ca, &set_prevcount);
|
||||
#endif
|
||||
|
||||
@@ -736,8 +736,8 @@ getcount:
|
||||
#ifdef FEAT_EVAL
|
||||
/* Set v:count here, when called from main() and not a stuffed
|
||||
* command, so that v:count can be used in an expression mapping
|
||||
* right after the count. */
|
||||
if (toplevel && stuff_empty())
|
||||
* right after the count. Do set it for redo. */
|
||||
if (toplevel && readbuf1_empty())
|
||||
set_vcount_ca(&ca, &set_prevcount);
|
||||
#endif
|
||||
if (ctrl_w)
|
||||
@@ -819,8 +819,9 @@ getcount:
|
||||
#ifdef FEAT_EVAL
|
||||
/*
|
||||
* Only set v:count when called from main() and not a stuffed command.
|
||||
* Do set it for redo.
|
||||
*/
|
||||
if (toplevel && stuff_empty())
|
||||
if (toplevel && readbuf1_empty())
|
||||
set_vcount(ca.count0, ca.count1, set_prevcount);
|
||||
#endif
|
||||
|
||||
@@ -962,11 +963,8 @@ getcount:
|
||||
#ifdef FEAT_CMDL_INFO
|
||||
need_flushbuf |= add_to_showcmd(ca.nchar);
|
||||
#endif
|
||||
/* For "gn" from redo, need to get one more char to determine the
|
||||
* operator */
|
||||
if (ca.nchar == 'r' || ca.nchar == '\'' || ca.nchar == '`'
|
||||
|| ca.nchar == Ctrl_BSL
|
||||
|| ((ca.nchar == 'n' || ca.nchar == 'N') && !stuff_empty()))
|
||||
|| ca.nchar == Ctrl_BSL)
|
||||
{
|
||||
cp = &ca.extra_char; /* need to get a third character */
|
||||
if (ca.nchar != 'r')
|
||||
@@ -1797,10 +1795,9 @@ do_pending_operator(cap, old_col, gui_yank)
|
||||
* otherwise it might be the second char of the operator. */
|
||||
if (cap->cmdchar == 'g' && (cap->nchar == 'n'
|
||||
|| cap->nchar == 'N'))
|
||||
/* "gn" and "gN" are a bit different */
|
||||
prep_redo(oap->regname, 0L, NUL, cap->cmdchar, cap->nchar,
|
||||
get_op_char(oap->op_type),
|
||||
get_extra_op_char(oap->op_type));
|
||||
prep_redo(oap->regname, cap->count0,
|
||||
get_op_char(oap->op_type), get_extra_op_char(oap->op_type),
|
||||
oap->motion_force, cap->cmdchar, cap->nchar);
|
||||
else if (cap->cmdchar != ':')
|
||||
prep_redo(oap->regname, 0L, NUL, 'v',
|
||||
get_op_char(oap->op_type),
|
||||
@@ -4030,6 +4027,8 @@ add_to_showcmd(c)
|
||||
#endif
|
||||
|
||||
p = transchar(c);
|
||||
if (*p == ' ')
|
||||
STRCPY(p, "<20>");
|
||||
old_len = (int)STRLEN(showcmd_buf);
|
||||
extra_len = (int)STRLEN(p);
|
||||
overflow = old_len + extra_len - SHOWCMD_COLS;
|
||||
@@ -4651,7 +4650,10 @@ nv_screengo(oap, dir, dist)
|
||||
}
|
||||
#endif
|
||||
|
||||
coladvance(curwin->w_curswant);
|
||||
if (virtual_active() && atend)
|
||||
coladvance(MAXCOL);
|
||||
else
|
||||
coladvance(curwin->w_curswant);
|
||||
|
||||
#if defined(FEAT_LINEBREAK) || defined(FEAT_MBYTE)
|
||||
if (curwin->w_cursor.col > 0 && curwin->w_p_wrap)
|
||||
|
||||
@@ -4452,6 +4452,12 @@ do_join(count, insert_space, save_undo, use_formatoptions)
|
||||
for (t = 0; t < count; ++t)
|
||||
{
|
||||
curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
|
||||
if (t == 0)
|
||||
{
|
||||
/* Set the '[ mark. */
|
||||
curwin->w_buffer->b_op_start.lnum = curwin->w_cursor.lnum;
|
||||
curwin->w_buffer->b_op_start.col = (colnr_T)STRLEN(curr);
|
||||
}
|
||||
#if defined(FEAT_COMMENTS) || defined(PROTO)
|
||||
if (remove_comments)
|
||||
{
|
||||
@@ -4568,6 +4574,10 @@ do_join(count, insert_space, save_undo, use_formatoptions)
|
||||
}
|
||||
ml_replace(curwin->w_cursor.lnum, newp, FALSE);
|
||||
|
||||
/* Set the '] mark. */
|
||||
curwin->w_buffer->b_op_end.lnum = curwin->w_cursor.lnum;
|
||||
curwin->w_buffer->b_op_end.col = (colnr_T)STRLEN(newp);
|
||||
|
||||
/* Only report the change in the first line here, del_lines() will report
|
||||
* the deleted line. */
|
||||
changed_lines(curwin->w_cursor.lnum, currsize,
|
||||
@@ -6240,7 +6250,9 @@ get_reg_type(regname, reglen)
|
||||
regname = may_get_selection(regname);
|
||||
#endif
|
||||
|
||||
/* Should we check for a valid name? */
|
||||
if (regname != NUL && !valid_yank_reg(regname, FALSE))
|
||||
return MAUTO;
|
||||
|
||||
get_yank_register(regname, FALSE);
|
||||
|
||||
if (y_current->y_array != NULL)
|
||||
|
||||
+65
-2
@@ -8999,7 +8999,7 @@ get_option_value(name, numval, stringval, opt_flags)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
||||
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
|
||||
/*
|
||||
* Returns the option attributes and its value. Unlike the above function it
|
||||
* will return either global value or local value of the option depending on
|
||||
@@ -9012,7 +9012,8 @@ get_option_value(name, numval, stringval, opt_flags)
|
||||
* opt_type). Uses
|
||||
*
|
||||
* Returned flags:
|
||||
* 0 hidden or unknown option
|
||||
* 0 hidden or unknown option, also option that does not have requested
|
||||
* type (see SREQ_* in vim.h)
|
||||
* see SOPT_* in vim.h for other flags
|
||||
*
|
||||
* Possible opt_type values: see SREQ_* in vim.h
|
||||
@@ -9135,6 +9136,68 @@ get_option_value_strict(name, numval, stringval, opt_type, from)
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Iterate over options. First argument is a pointer to a pointer to a structure
|
||||
* inside options[] array, second is option type like in the above function.
|
||||
*
|
||||
* If first argument points to NULL it is assumed that iteration just started
|
||||
* and caller needs the very first value.
|
||||
* If first argument points to the end marker function returns NULL and sets
|
||||
* first argument to NULL.
|
||||
*
|
||||
* Returns full option name for current option on each call.
|
||||
*/
|
||||
char_u *
|
||||
option_iter_next(option, opt_type)
|
||||
void **option;
|
||||
int opt_type;
|
||||
{
|
||||
struct vimoption *ret = NULL;
|
||||
do
|
||||
{
|
||||
if (*option == NULL)
|
||||
*option = (void *) options;
|
||||
else if (((struct vimoption *) (*option))->fullname == NULL)
|
||||
{
|
||||
*option = NULL;
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
*option = (void *) (((struct vimoption *) (*option)) + 1);
|
||||
|
||||
ret = ((struct vimoption *) (*option));
|
||||
|
||||
/* Hidden option */
|
||||
if (ret->var == NULL)
|
||||
{
|
||||
ret = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (opt_type)
|
||||
{
|
||||
case SREQ_GLOBAL:
|
||||
if (!(ret->indir == PV_NONE || ret->indir & PV_BOTH))
|
||||
ret = NULL;
|
||||
break;
|
||||
case SREQ_BUF:
|
||||
if (!(ret->indir & PV_BUF))
|
||||
ret = NULL;
|
||||
break;
|
||||
case SREQ_WIN:
|
||||
if (!(ret->indir & PV_WIN))
|
||||
ret = NULL;
|
||||
break;
|
||||
default:
|
||||
EMSG2(_(e_intern2), "option_iter_next()");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
while (ret == NULL);
|
||||
|
||||
return (char_u *)ret->fullname;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
+2
-2
@@ -31,9 +31,9 @@
|
||||
# define DFLT_EFM "%A%p^,%C%%CC-%t-%m,%Cat line number %l in file %f,%f|%l| %m"
|
||||
# else /* Unix, probably */
|
||||
# ifdef EBCDIC
|
||||
#define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
|
||||
#define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory %*[`']%f',%X%*\\a[%*\\d]: Leaving directory %*[`']%f',%DMaking %*\\a in %f,%f|%l| %m"
|
||||
# else
|
||||
#define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
|
||||
#define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory %*[`']%f',%X%*\\a[%*\\d]: Leaving directory %*[`']%f',%D%*\\a: Entering directory %*[`']%f',%X%*\\a: Leaving directory %*[`']%f',%DMaking %*\\a in %f,%f|%l| %m"
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
||||
+2
-2
@@ -109,7 +109,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef DFLT_BDIR
|
||||
# define DFLT_BDIR ".,c:\\tmp,c:\\temp" /* default for 'backupdir' */
|
||||
# define DFLT_BDIR ".,$TEMP,c:\\tmp,c:\\temp" /* default for 'backupdir' */
|
||||
#endif
|
||||
|
||||
#ifndef DFLT_VDIR
|
||||
@@ -117,7 +117,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef DFLT_DIR
|
||||
# define DFLT_DIR ".,c:\\tmp,c:\\temp" /* default for 'directory' */
|
||||
# define DFLT_DIR ".,$TEMP,c:\\tmp,c:\\temp" /* default for 'directory' */
|
||||
#endif
|
||||
|
||||
#define DFLT_ERRORFILE "errors.err"
|
||||
|
||||
+19
-6
@@ -498,7 +498,7 @@ slash_adjust(p)
|
||||
}
|
||||
}
|
||||
|
||||
#if (_MSC_VER >= 1300)
|
||||
#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__MINGW32__)
|
||||
# define OPEN_OH_ARGTYPE intptr_t
|
||||
#else
|
||||
# define OPEN_OH_ARGTYPE long
|
||||
@@ -617,8 +617,22 @@ vim_stat(const char *name, struct stat *stp)
|
||||
p = buf + strlen(buf);
|
||||
if (p > buf)
|
||||
mb_ptr_back(buf, p);
|
||||
|
||||
/* Remove trailing '\\' except root path. */
|
||||
if (p > buf && (*p == '\\' || *p == '/') && p[-1] != ':')
|
||||
*p = NUL;
|
||||
|
||||
if ((buf[0] == '\\' && buf[1] == '\\') || (buf[0] == '/' && buf[1] == '/'))
|
||||
{
|
||||
/* UNC root path must be followed by '\\'. */
|
||||
p = vim_strpbrk(buf + 2, "\\/");
|
||||
if (p != NULL)
|
||||
{
|
||||
p = vim_strpbrk(p + 1, "\\/");
|
||||
if (p == NULL)
|
||||
STRCAT(buf, "\\");
|
||||
}
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage
|
||||
# ifdef __BORLANDC__
|
||||
@@ -634,7 +648,7 @@ vim_stat(const char *name, struct stat *stp)
|
||||
{
|
||||
n = wstat_symlink_aware(wp, (struct _stat *)stp);
|
||||
vim_free(wp);
|
||||
if (n >= 0)
|
||||
if (n >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
|
||||
return n;
|
||||
/* Retry with non-wide function (for Windows 98). Can't use
|
||||
* GetLastError() here and it's unclear what errno gets set to if
|
||||
@@ -801,8 +815,8 @@ mch_chdir(char *path)
|
||||
{
|
||||
n = _wchdir(p);
|
||||
vim_free(p);
|
||||
if (n == 0)
|
||||
return 0;
|
||||
if (n == 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
|
||||
return n;
|
||||
/* Retry with non-wide function (for Windows 98). */
|
||||
}
|
||||
}
|
||||
@@ -1928,8 +1942,7 @@ mch_resolve_shortcut(char_u *fname)
|
||||
|
||||
shortcut_errorw:
|
||||
vim_free(p);
|
||||
if (hr == S_OK)
|
||||
goto shortcut_end;
|
||||
goto shortcut_end;
|
||||
}
|
||||
}
|
||||
/* Retry with non-wide function (for Windows 98). */
|
||||
|
||||
+3
-12
@@ -168,7 +168,7 @@ typedef int waitstatus;
|
||||
static pid_t wait4pid __ARGS((pid_t, waitstatus *));
|
||||
|
||||
static int WaitForChar __ARGS((long));
|
||||
#if defined(__BEOS__)
|
||||
#if defined(__BEOS__) || defined(VMS)
|
||||
int RealWaitForChar __ARGS((int, long, int *));
|
||||
#else
|
||||
static int RealWaitForChar __ARGS((int, long, int *));
|
||||
@@ -435,7 +435,6 @@ mch_inchar(buf, maxlen, wtime, tb_change_cnt)
|
||||
/* Process the queued netbeans messages. */
|
||||
netbeans_parse_messages();
|
||||
#endif
|
||||
#ifndef VMS /* VMS: must try reading, WaitForChar() does nothing. */
|
||||
/*
|
||||
* We want to be interrupted by the winch signal
|
||||
* or by an event on the monitored file descriptors.
|
||||
@@ -446,7 +445,6 @@ mch_inchar(buf, maxlen, wtime, tb_change_cnt)
|
||||
handle_resize();
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If input was put directly in typeahead buffer bail out here. */
|
||||
if (typebuf_changed(tb_change_cnt))
|
||||
@@ -5061,6 +5059,7 @@ WaitForChar(msec)
|
||||
return avail;
|
||||
}
|
||||
|
||||
#ifndef VMS
|
||||
/*
|
||||
* Wait "msec" msec until a character is available from file descriptor "fd".
|
||||
* "msec" == 0 will check for characters once.
|
||||
@@ -5360,13 +5359,7 @@ select_eintr:
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifdef OLD_VMS
|
||||
/* Old VMS as v6.2 and older have broken select(). It waits more than
|
||||
* required. Should not be used */
|
||||
ret = 0;
|
||||
# else
|
||||
ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
|
||||
# endif
|
||||
# ifdef EINTR
|
||||
if (ret == -1 && errno == EINTR)
|
||||
{
|
||||
@@ -5488,8 +5481,6 @@ select_eintr:
|
||||
return (ret > 0);
|
||||
}
|
||||
|
||||
#ifndef VMS
|
||||
|
||||
#ifndef NO_EXPANDPATH
|
||||
/*
|
||||
* Expand a path into all matching files and/or directories. Handles "*",
|
||||
@@ -6012,7 +6003,7 @@ mch_expand_wildcards(num_pat, pat, num_file, file, flags)
|
||||
{
|
||||
/* If there is a NUL, set did_find_nul, else set check_spaces */
|
||||
buffer[len] = NUL;
|
||||
if (len && (int)STRLEN(buffer) < (int)len - 1)
|
||||
if (len && (int)STRLEN(buffer) < (int)len)
|
||||
did_find_nul = TRUE;
|
||||
else
|
||||
check_spaces = TRUE;
|
||||
|
||||
@@ -225,6 +225,8 @@
|
||||
# include <starlet.h>
|
||||
# include <socket.h>
|
||||
# include <lib$routines.h>
|
||||
# include <libdef.h>
|
||||
# include <libdtdef.h>
|
||||
|
||||
# ifdef FEAT_GUI_GTK
|
||||
# include "gui_gtk_vms.h"
|
||||
|
||||
+106
@@ -11,6 +11,23 @@
|
||||
|
||||
#include "vim.h"
|
||||
|
||||
/* define _generic_64 for use in time functions */
|
||||
#ifndef VAX
|
||||
# include <gen64def.h>
|
||||
#else
|
||||
/* based on Alpha's gen64def.h; the file is absent on VAX */
|
||||
typedef struct _generic_64 {
|
||||
# pragma __nomember_alignment
|
||||
__union { /* You can treat me as... */
|
||||
/* long long is not available on VAXen */
|
||||
/* unsigned __int64 gen64$q_quadword; ...a single 64-bit value, or */
|
||||
|
||||
unsigned int gen64$l_longword [2]; /* ...two 32-bit values, or */
|
||||
unsigned short int gen64$w_word [4]; /* ...four 16-bit values */
|
||||
} gen64$r_quad_overlay;
|
||||
} GENERIC_64;
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char class;
|
||||
@@ -669,3 +686,92 @@ vms_remove_version(void * fname)
|
||||
}
|
||||
return ;
|
||||
}
|
||||
|
||||
struct typeahead_st {
|
||||
unsigned short numchars;
|
||||
unsigned char firstchar;
|
||||
unsigned char reserved0;
|
||||
unsigned long reserved1;
|
||||
} typeahead;
|
||||
|
||||
/*
|
||||
* Wait "msec" msec until a character is available from file descriptor "fd".
|
||||
* "msec" == 0 will check for characters once.
|
||||
* "msec" == -1 will block until a character is available.
|
||||
*/
|
||||
int
|
||||
RealWaitForChar(fd, msec, check_for_gpm)
|
||||
int fd UNUSED; /* always read from iochan */
|
||||
long msec;
|
||||
int *check_for_gpm UNUSED;
|
||||
{
|
||||
int status;
|
||||
struct _generic_64 time_curr;
|
||||
struct _generic_64 time_diff;
|
||||
struct _generic_64 time_out;
|
||||
unsigned int convert_operation = LIB$K_DELTA_SECONDS_F;
|
||||
float sec = (float) msec / 1000;
|
||||
|
||||
/* make sure the iochan is set */
|
||||
if (!iochan)
|
||||
get_tty();
|
||||
|
||||
if (msec > 0) {
|
||||
/* time-out specified; convert it to absolute time */
|
||||
|
||||
/* get current time (number of 100ns ticks since the VMS Epoch) */
|
||||
status = sys$gettim(&time_curr);
|
||||
if (status != SS$_NORMAL)
|
||||
return 0; /* error */
|
||||
|
||||
/* construct the delta time */
|
||||
status = lib$cvtf_to_internal_time(
|
||||
&convert_operation, &sec, &time_diff);
|
||||
if (status != LIB$_NORMAL)
|
||||
return 0; /* error */
|
||||
|
||||
/* add them up */
|
||||
status = lib$add_times(
|
||||
&time_curr,
|
||||
&time_diff,
|
||||
&time_out);
|
||||
if (status != LIB$_NORMAL)
|
||||
return 0; /* error */
|
||||
}
|
||||
|
||||
while (TRUE) {
|
||||
/* select() */
|
||||
status = sys$qiow(0, iochan, IO$_SENSEMODE | IO$M_TYPEAHDCNT, iosb,
|
||||
0, 0, &typeahead, 8, 0, 0, 0, 0);
|
||||
if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL)
|
||||
return 0; /* error */
|
||||
|
||||
if (typeahead.numchars)
|
||||
return 1; /* ready to read */
|
||||
|
||||
/* there's nothing to read; what now? */
|
||||
if (msec == 0) {
|
||||
/* immediate time-out; return impatiently */
|
||||
return 0;
|
||||
}
|
||||
else if (msec < 0) {
|
||||
/* no time-out; wait on indefinitely */
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
/* time-out needs to be checked */
|
||||
status = sys$gettim(&time_curr);
|
||||
if (status != SS$_NORMAL)
|
||||
return 0; /* error */
|
||||
|
||||
status = lib$sub_times(
|
||||
&time_out,
|
||||
&time_curr,
|
||||
&time_diff);
|
||||
if (status != LIB$_NORMAL)
|
||||
return 0; /* error, incl. time_diff < 0 (i.e. time-out) */
|
||||
|
||||
/* otherwise wait some more */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+234
-65
@@ -232,6 +232,94 @@ static int suppress_winsize = 1; /* don't fiddle with console */
|
||||
|
||||
static char_u *exe_path = NULL;
|
||||
|
||||
static BOOL win8_or_later = FALSE;
|
||||
|
||||
/*
|
||||
* Version of ReadConsoleInput() that works with IME.
|
||||
* Works around problems on Windows 8.
|
||||
*/
|
||||
static BOOL
|
||||
read_console_input(
|
||||
HANDLE hInput,
|
||||
INPUT_RECORD *lpBuffer,
|
||||
DWORD nLength,
|
||||
LPDWORD lpEvents)
|
||||
{
|
||||
enum
|
||||
{
|
||||
IRSIZE = 10
|
||||
};
|
||||
static INPUT_RECORD s_irCache[IRSIZE];
|
||||
static DWORD s_dwIndex = 0;
|
||||
static DWORD s_dwMax = 0;
|
||||
DWORD dwEvents;
|
||||
int head;
|
||||
int tail;
|
||||
int i;
|
||||
|
||||
if (!win8_or_later)
|
||||
{
|
||||
if (nLength == -1)
|
||||
return PeekConsoleInput(hInput, lpBuffer, 1, lpEvents);
|
||||
return ReadConsoleInput(hInput, lpBuffer, 1, &dwEvents);
|
||||
}
|
||||
|
||||
if (s_dwMax == 0)
|
||||
{
|
||||
if (nLength == -1)
|
||||
return PeekConsoleInput(hInput, lpBuffer, 1, lpEvents);
|
||||
if (!ReadConsoleInput(hInput, s_irCache, IRSIZE, &dwEvents))
|
||||
return FALSE;
|
||||
s_dwIndex = 0;
|
||||
s_dwMax = dwEvents;
|
||||
if (dwEvents == 0)
|
||||
{
|
||||
*lpEvents = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (s_dwMax > 1)
|
||||
{
|
||||
head = 0;
|
||||
tail = s_dwMax - 1;
|
||||
while (head != tail)
|
||||
{
|
||||
if (s_irCache[head].EventType == WINDOW_BUFFER_SIZE_EVENT
|
||||
&& s_irCache[head + 1].EventType
|
||||
== WINDOW_BUFFER_SIZE_EVENT)
|
||||
{
|
||||
/* Remove duplicate event to avoid flicker. */
|
||||
for (i = head; i < tail; ++i)
|
||||
s_irCache[i] = s_irCache[i + 1];
|
||||
--tail;
|
||||
continue;
|
||||
}
|
||||
head++;
|
||||
}
|
||||
s_dwMax = tail + 1;
|
||||
}
|
||||
}
|
||||
|
||||
*lpBuffer = s_irCache[s_dwIndex];
|
||||
if (nLength != -1 && ++s_dwIndex >= s_dwMax)
|
||||
s_dwMax = 0;
|
||||
*lpEvents = 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Version of PeekConsoleInput() that works with IME.
|
||||
*/
|
||||
static BOOL
|
||||
peek_console_input(
|
||||
HANDLE hInput,
|
||||
INPUT_RECORD *lpBuffer,
|
||||
DWORD nLength,
|
||||
LPDWORD lpEvents)
|
||||
{
|
||||
return read_console_input(hInput, lpBuffer, -1, lpEvents);
|
||||
}
|
||||
|
||||
static void
|
||||
get_exe_name(void)
|
||||
{
|
||||
@@ -516,10 +604,10 @@ static PSETHANDLEINFORMATION pSetHandleInformation;
|
||||
static BOOL
|
||||
win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
|
||||
{
|
||||
BOOL bResult;
|
||||
LUID luid;
|
||||
HANDLE hToken;
|
||||
TOKEN_PRIVILEGES tokenPrivileges;
|
||||
BOOL bResult;
|
||||
LUID luid;
|
||||
HANDLE hToken;
|
||||
TOKEN_PRIVILEGES tokenPrivileges;
|
||||
|
||||
if (!OpenProcessToken(GetCurrentProcess(),
|
||||
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
|
||||
@@ -563,6 +651,10 @@ PlatformId(void)
|
||||
|
||||
g_PlatformId = ovi.dwPlatformId;
|
||||
|
||||
if ((ovi.dwMajorVersion == 6 && ovi.dwMinorVersion >= 2)
|
||||
|| ovi.dwMajorVersion > 6)
|
||||
win8_or_later = TRUE;
|
||||
|
||||
#ifdef HAVE_ACL
|
||||
/*
|
||||
* Load the ADVAPI runtime if we are on anything
|
||||
@@ -1117,7 +1209,7 @@ decode_mouse_event(
|
||||
INPUT_RECORD ir;
|
||||
MOUSE_EVENT_RECORD* pmer2 = &ir.Event.MouseEvent;
|
||||
|
||||
PeekConsoleInput(g_hConIn, &ir, 1, &cRecords);
|
||||
peek_console_input(g_hConIn, &ir, 1, &cRecords);
|
||||
|
||||
if (cRecords == 0 || ir.EventType != MOUSE_EVENT
|
||||
|| !(pmer2->dwButtonState & LEFT_RIGHT))
|
||||
@@ -1126,7 +1218,7 @@ decode_mouse_event(
|
||||
{
|
||||
if (pmer2->dwEventFlags != MOUSE_MOVED)
|
||||
{
|
||||
ReadConsoleInput(g_hConIn, &ir, 1, &cRecords);
|
||||
read_console_input(g_hConIn, &ir, 1, &cRecords);
|
||||
|
||||
return decode_mouse_event(pmer2);
|
||||
}
|
||||
@@ -1134,10 +1226,10 @@ decode_mouse_event(
|
||||
s_yOldMouse == pmer2->dwMousePosition.Y)
|
||||
{
|
||||
/* throw away spurious mouse move */
|
||||
ReadConsoleInput(g_hConIn, &ir, 1, &cRecords);
|
||||
read_console_input(g_hConIn, &ir, 1, &cRecords);
|
||||
|
||||
/* are there any more mouse events in queue? */
|
||||
PeekConsoleInput(g_hConIn, &ir, 1, &cRecords);
|
||||
peek_console_input(g_hConIn, &ir, 1, &cRecords);
|
||||
|
||||
if (cRecords==0 || ir.EventType != MOUSE_EVENT)
|
||||
break;
|
||||
@@ -1374,7 +1466,7 @@ WaitForChar(long msec)
|
||||
}
|
||||
|
||||
cRecords = 0;
|
||||
PeekConsoleInput(g_hConIn, &ir, 1, &cRecords);
|
||||
peek_console_input(g_hConIn, &ir, 1, &cRecords);
|
||||
|
||||
#ifdef FEAT_MBYTE_IME
|
||||
if (State & CMDLINE && msg_row == Rows - 1)
|
||||
@@ -1405,7 +1497,7 @@ WaitForChar(long msec)
|
||||
if (ir.Event.KeyEvent.uChar.UnicodeChar == 0
|
||||
&& ir.Event.KeyEvent.wVirtualKeyCode == 13)
|
||||
{
|
||||
ReadConsoleInput(g_hConIn, &ir, 1, &cRecords);
|
||||
read_console_input(g_hConIn, &ir, 1, &cRecords);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
@@ -1414,7 +1506,7 @@ WaitForChar(long msec)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
ReadConsoleInput(g_hConIn, &ir, 1, &cRecords);
|
||||
read_console_input(g_hConIn, &ir, 1, &cRecords);
|
||||
|
||||
if (ir.EventType == FOCUS_EVENT)
|
||||
handle_focus_event(ir);
|
||||
@@ -1484,7 +1576,7 @@ tgetch(int *pmodifiers, char_u *pch2)
|
||||
return 0;
|
||||
# endif
|
||||
#endif
|
||||
if (ReadConsoleInput(g_hConIn, &ir, 1, &cRecords) == 0)
|
||||
if (read_console_input(g_hConIn, &ir, 1, &cRecords) == 0)
|
||||
{
|
||||
if (did_create_conin)
|
||||
read_error_exit();
|
||||
@@ -2509,7 +2601,7 @@ fname_casew(
|
||||
WCHAR *porig, *porigPrev;
|
||||
int flen;
|
||||
WIN32_FIND_DATAW fb;
|
||||
HANDLE hFind;
|
||||
HANDLE hFind = INVALID_HANDLE_VALUE;
|
||||
int c;
|
||||
int slen;
|
||||
|
||||
@@ -2528,8 +2620,8 @@ fname_casew(
|
||||
/* copy leading drive letter */
|
||||
*ptrue++ = *porig++;
|
||||
*ptrue++ = *porig++;
|
||||
*ptrue = NUL; /* in case nothing follows */
|
||||
}
|
||||
*ptrue = NUL; /* in case nothing follows */
|
||||
|
||||
while (*porig != NUL)
|
||||
{
|
||||
@@ -2673,8 +2765,8 @@ fname_case(
|
||||
/* copy leading drive letter */
|
||||
*ptrue++ = *porig++;
|
||||
*ptrue++ = *porig++;
|
||||
*ptrue = NUL; /* in case nothing follows */
|
||||
}
|
||||
*ptrue = NUL; /* in case nothing follows */
|
||||
|
||||
while (*porig != NUL)
|
||||
{
|
||||
@@ -2768,6 +2860,28 @@ mch_get_user_name(
|
||||
char szUserName[256 + 1]; /* UNLEN is 256 */
|
||||
DWORD cch = sizeof szUserName;
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
|
||||
{
|
||||
WCHAR wszUserName[256 + 1]; /* UNLEN is 256 */
|
||||
DWORD wcch = sizeof(wszUserName) / sizeof(WCHAR);
|
||||
|
||||
if (GetUserNameW(wszUserName, &wcch))
|
||||
{
|
||||
char_u *p = utf16_to_enc(wszUserName, NULL);
|
||||
|
||||
if (p != NULL)
|
||||
{
|
||||
vim_strncpy(s, p, len - 1);
|
||||
vim_free(p);
|
||||
return OK;
|
||||
}
|
||||
}
|
||||
else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
|
||||
return FAIL;
|
||||
/* Retry with non-wide function (for Windows 98). */
|
||||
}
|
||||
#endif
|
||||
if (GetUserName(szUserName, &cch))
|
||||
{
|
||||
vim_strncpy(s, szUserName, len - 1);
|
||||
@@ -2788,6 +2902,28 @@ mch_get_host_name(
|
||||
{
|
||||
DWORD cch = len;
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
|
||||
{
|
||||
WCHAR wszHostName[256 + 1];
|
||||
DWORD wcch = sizeof(wszHostName) / sizeof(WCHAR);
|
||||
|
||||
if (GetComputerNameW(wszHostName, &wcch))
|
||||
{
|
||||
char_u *p = utf16_to_enc(wszHostName, NULL);
|
||||
|
||||
if (p != NULL)
|
||||
{
|
||||
vim_strncpy(s, p, len - 1);
|
||||
vim_free(p);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
|
||||
return;
|
||||
/* Retry with non-wide function (for Windows 98). */
|
||||
}
|
||||
#endif
|
||||
if (!GetComputerName(s, &cch))
|
||||
vim_strncpy(s, "PC (Win32 Vim)", len - 1);
|
||||
}
|
||||
@@ -2834,6 +2970,8 @@ mch_dirname(
|
||||
return OK;
|
||||
}
|
||||
}
|
||||
else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
|
||||
return FAIL;
|
||||
/* Retry with non-wide function (for Windows 98). */
|
||||
}
|
||||
#endif
|
||||
@@ -2850,11 +2988,8 @@ mch_getperm(char_u *name)
|
||||
struct stat st;
|
||||
int n;
|
||||
|
||||
if (name[0] == '\\' && name[1] == '\\')
|
||||
/* UNC path */
|
||||
return (long)win32_getattrs(name);
|
||||
n = mch_stat(name, &st);
|
||||
return n == 0 ? (long)st.st_mode : -1L;
|
||||
return n == 0 ? (long)(unsigned short)st.st_mode : -1L;
|
||||
}
|
||||
|
||||
|
||||
@@ -2877,7 +3012,7 @@ mch_setperm(char_u *name, long perm)
|
||||
{
|
||||
n = _wchmod(p, perm);
|
||||
vim_free(p);
|
||||
if (n == -1 && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
|
||||
if (n == -1 && g_PlatformId == VER_PLATFORM_WIN32_NT)
|
||||
return FAIL;
|
||||
/* Retry with non-wide function (for Windows 98). */
|
||||
}
|
||||
@@ -3788,6 +3923,50 @@ mch_set_winsize_now(void)
|
||||
}
|
||||
#endif /* FEAT_GUI_W32 */
|
||||
|
||||
static BOOL
|
||||
vim_create_process(
|
||||
char *cmd,
|
||||
BOOL inherit_handles,
|
||||
DWORD flags,
|
||||
STARTUPINFO *si,
|
||||
PROCESS_INFORMATION *pi)
|
||||
{
|
||||
# ifdef FEAT_MBYTE
|
||||
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
|
||||
{
|
||||
WCHAR *wcmd = enc_to_utf16(cmd, NULL);
|
||||
|
||||
if (wcmd != NULL)
|
||||
{
|
||||
BOOL ret;
|
||||
ret = CreateProcessW(
|
||||
NULL, /* Executable name */
|
||||
wcmd, /* Command to execute */
|
||||
NULL, /* Process security attributes */
|
||||
NULL, /* Thread security attributes */
|
||||
inherit_handles, /* Inherit handles */
|
||||
flags, /* Creation flags */
|
||||
NULL, /* Environment */
|
||||
NULL, /* Current directory */
|
||||
(LPSTARTUPINFOW)si, /* Startup information */
|
||||
pi); /* Process information */
|
||||
vim_free(wcmd);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return CreateProcess(
|
||||
NULL, /* Executable name */
|
||||
cmd, /* Command to execute */
|
||||
NULL, /* Process security attributes */
|
||||
NULL, /* Thread security attributes */
|
||||
inherit_handles, /* Inherit handles */
|
||||
flags, /* Creation flags */
|
||||
NULL, /* Environment */
|
||||
NULL, /* Current directory */
|
||||
si, /* Startup information */
|
||||
pi); /* Process information */
|
||||
}
|
||||
|
||||
|
||||
#if defined(FEAT_GUI_W32) || defined(PROTO)
|
||||
@@ -3834,18 +4013,8 @@ mch_system_classic(char *cmd, int options)
|
||||
cmd += 3;
|
||||
|
||||
/* Now, run the command */
|
||||
CreateProcess(NULL, /* Executable name */
|
||||
cmd, /* Command to execute */
|
||||
NULL, /* Process security attributes */
|
||||
NULL, /* Thread security attributes */
|
||||
FALSE, /* Inherit handles */
|
||||
CREATE_DEFAULT_ERROR_MODE | /* Creation flags */
|
||||
CREATE_NEW_CONSOLE,
|
||||
NULL, /* Environment */
|
||||
NULL, /* Current directory */
|
||||
&si, /* Startup information */
|
||||
&pi); /* Process information */
|
||||
|
||||
vim_create_process(cmd, FALSE,
|
||||
CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, &si, &pi);
|
||||
|
||||
/* Wait for the command to terminate before continuing */
|
||||
if (g_PlatformId != VER_PLATFORM_WIN32s)
|
||||
@@ -4177,22 +4346,11 @@ mch_system_piped(char *cmd, int options)
|
||||
p = cmd;
|
||||
}
|
||||
|
||||
/* Now, run the command */
|
||||
CreateProcess(NULL, /* Executable name */
|
||||
p, /* Command to execute */
|
||||
NULL, /* Process security attributes */
|
||||
NULL, /* Thread security attributes */
|
||||
|
||||
// this command can be litigious, handle inheritance was
|
||||
// deactivated for pending temp file, but, if we deactivate
|
||||
// it, the pipes don't work for some reason.
|
||||
TRUE, /* Inherit handles, first deactivated,
|
||||
* but needed */
|
||||
CREATE_DEFAULT_ERROR_MODE, /* Creation flags */
|
||||
NULL, /* Environment */
|
||||
NULL, /* Current directory */
|
||||
&si, /* Startup information */
|
||||
&pi); /* Process information */
|
||||
/* Now, run the command.
|
||||
* About "Inherit handles" being TRUE: this command can be litigious,
|
||||
* handle inheritance was deactivated for pending temp file, but, if we
|
||||
* deactivate it, the pipes don't work for some reason. */
|
||||
vim_create_process(p, TRUE, CREATE_DEFAULT_ERROR_MODE, &si, &pi);
|
||||
|
||||
if (p != cmd)
|
||||
vim_free(p);
|
||||
@@ -4219,10 +4377,10 @@ mch_system_piped(char *cmd, int options)
|
||||
{
|
||||
MSG msg;
|
||||
|
||||
if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
|
||||
if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
pDispatchMessage(&msg);
|
||||
}
|
||||
|
||||
/* write pipe information in the window */
|
||||
@@ -4410,7 +4568,25 @@ mch_system(char *cmd, int options)
|
||||
}
|
||||
#else
|
||||
|
||||
# define mch_system(c, o) system(c)
|
||||
# ifdef FEAT_MBYTE
|
||||
static int
|
||||
mch_system(char *cmd, int options)
|
||||
{
|
||||
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
|
||||
{
|
||||
WCHAR *wcmd = enc_to_utf16(cmd, NULL);
|
||||
if (wcmd != NULL)
|
||||
{
|
||||
int ret = _wsystem(wcmd);
|
||||
vim_free(wcmd);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return system(cmd);
|
||||
}
|
||||
# else
|
||||
# define mch_system(c, o) system(c)
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4495,6 +4671,7 @@ mch_call_shell(
|
||||
DWORD flags = CREATE_NEW_CONSOLE;
|
||||
char_u *p;
|
||||
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
si.cb = sizeof(si);
|
||||
si.lpReserved = NULL;
|
||||
si.lpDesktop = NULL;
|
||||
@@ -4578,16 +4755,7 @@ mch_call_shell(
|
||||
* inherit our handles which causes unpleasant dangling swap
|
||||
* files if we exit before the spawned process
|
||||
*/
|
||||
if (CreateProcess(NULL, // Executable name
|
||||
newcmd, // Command to execute
|
||||
NULL, // Process security attributes
|
||||
NULL, // Thread security attributes
|
||||
FALSE, // Inherit handles
|
||||
flags, // Creation flags
|
||||
NULL, // Environment
|
||||
NULL, // Current directory
|
||||
&si, // Startup information
|
||||
&pi)) // Process information
|
||||
if (vim_create_process(newcmd, FALSE, flags, &si, &pi))
|
||||
x = 0;
|
||||
else
|
||||
{
|
||||
@@ -4600,9 +4768,9 @@ mch_call_shell(
|
||||
if (newcmd != cmdbase)
|
||||
vim_free(newcmd);
|
||||
|
||||
if (si.hStdInput != NULL)
|
||||
if (si.dwFlags == STARTF_USESTDHANDLES && si.hStdInput != NULL)
|
||||
{
|
||||
/* Close the handle to \\.\NUL */
|
||||
/* Close the handle to \\.\NUL created above. */
|
||||
CloseHandle(si.hStdInput);
|
||||
}
|
||||
/* Close the handles to the subprocess, so that it goes away */
|
||||
@@ -5886,7 +6054,7 @@ mch_open(char *name, int flags, int mode)
|
||||
{
|
||||
f = _wopen(wn, flags, mode);
|
||||
vim_free(wn);
|
||||
if (f >= 0)
|
||||
if (f >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
|
||||
return f;
|
||||
/* Retry with non-wide function (for Windows 98). Can't use
|
||||
* GetLastError() here and it's unclear what errno gets set to if
|
||||
@@ -5937,7 +6105,7 @@ mch_fopen(char *name, char *mode)
|
||||
_set_fmode(oldMode);
|
||||
# endif
|
||||
|
||||
if (f != NULL)
|
||||
if (f != NULL || g_PlatformId == VER_PLATFORM_WIN32_NT)
|
||||
return f;
|
||||
/* Retry with non-wide function (for Windows 98). Can't use
|
||||
* GetLastError() here and it's unclear what errno gets set to if
|
||||
@@ -6272,6 +6440,7 @@ get_cmd_argsW(char ***argvp)
|
||||
while (i > 0)
|
||||
free(argv[--i]);
|
||||
free(argv);
|
||||
argv = NULL;
|
||||
argc = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* blowfish.c */
|
||||
void bf_key_init __ARGS((char_u *password, char_u *salt, int salt_len));
|
||||
void bf_ofb_init __ARGS((char_u *iv, int iv_len));
|
||||
void bf_cfb_init __ARGS((char_u *iv, int iv_len));
|
||||
void bf_crypt_encode __ARGS((char_u *from, size_t len, char_u *to));
|
||||
void bf_crypt_decode __ARGS((char_u *ptr, long len));
|
||||
void bf_crypt_init_keys __ARGS((char_u *passwd));
|
||||
|
||||
@@ -60,6 +60,7 @@ 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 list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
|
||||
void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
|
||||
void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
|
||||
int garbage_collect __ARGS((void));
|
||||
void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
|
||||
void set_ref_in_list __ARGS((list_T *l, int copyID));
|
||||
|
||||
@@ -4,8 +4,10 @@ void update_force_abort __ARGS((void));
|
||||
int should_abort __ARGS((int retcode));
|
||||
int aborted_in_try __ARGS((void));
|
||||
int cause_errthrow __ARGS((char_u *mesg, int severe, int *ignore));
|
||||
void free_global_msglist __ARGS((void));
|
||||
void do_errthrow __ARGS((struct condstack *cstack, char_u *cmdname));
|
||||
int do_intthrow __ARGS((struct condstack *cstack));
|
||||
char_u *get_exception_string __ARGS((void *value, int type, char_u *cmdname, int *should_free));
|
||||
void discard_current_exception __ARGS((void));
|
||||
void report_make_pending __ARGS((int pending, void *value));
|
||||
void report_resume_pending __ARGS((int pending, void *value));
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
/* getchar.c */
|
||||
void free_buff __ARGS((struct buffheader *buf));
|
||||
void free_buff __ARGS((buffheader_T *buf));
|
||||
char_u *get_recorded __ARGS((void));
|
||||
char_u *get_inserted __ARGS((void));
|
||||
int stuff_empty __ARGS((void));
|
||||
int readbuf1_empty __ARGS((void));
|
||||
void typeahead_noflush __ARGS((int c));
|
||||
void flush_buffers __ARGS((int flush_typeahead));
|
||||
void ResetRedobuff __ARGS((void));
|
||||
|
||||
@@ -23,6 +23,7 @@ char_u *check_colorcolumn __ARGS((win_T *wp));
|
||||
char_u *check_stl_option __ARGS((char_u *s));
|
||||
int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
|
||||
int get_option_value_strict __ARGS((char_u *name, long *numval, char_u **stringval, int opt_type, void *from));
|
||||
char_u *option_iter_next __ARGS((void **option, int opt_type));
|
||||
char_u *set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
|
||||
char_u *get_term_code __ARGS((char_u *tname));
|
||||
char_u *get_highlight_default __ARGS((void));
|
||||
|
||||
@@ -3,6 +3,7 @@ int spell_check __ARGS((win_T *wp, char_u *ptr, hlf_T *attrp, int *capcol, int d
|
||||
int spell_move_to __ARGS((win_T *wp, int dir, int allwords, int curline, hlf_T *attrp));
|
||||
void spell_cat_line __ARGS((char_u *buf, char_u *line, int maxlen));
|
||||
char_u *did_set_spelllang __ARGS((win_T *wp));
|
||||
void spell_delete_wordlist __ARGS((void));
|
||||
void spell_free_all __ARGS((void));
|
||||
void spell_reload __ARGS((void));
|
||||
int spell_check_msm __ARGS((void));
|
||||
|
||||
+13
-2
@@ -239,7 +239,9 @@ static int nfa_classcodes[] = {
|
||||
NFA_UPPER, NFA_NUPPER
|
||||
};
|
||||
|
||||
static char_u e_nul_found[] = N_("E865: (NFA) Regexp end encountered prematurely");
|
||||
static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
|
||||
static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld");
|
||||
|
||||
/* NFA regexp \ze operator encountered. */
|
||||
static int nfa_has_zend;
|
||||
@@ -1137,7 +1139,7 @@ nfa_regatom()
|
||||
switch (c)
|
||||
{
|
||||
case NUL:
|
||||
EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely"));
|
||||
EMSG_RET_FAIL(_(e_nul_found));
|
||||
|
||||
case Magic('^'):
|
||||
EMIT(NFA_BOL);
|
||||
@@ -1160,6 +1162,9 @@ nfa_regatom()
|
||||
|
||||
case Magic('_'):
|
||||
c = no_Magic(getchr());
|
||||
if (c == NUL)
|
||||
EMSG_RET_FAIL(_(e_nul_found));
|
||||
|
||||
if (c == '^') /* "\_^" is start-of-line */
|
||||
{
|
||||
EMIT(NFA_BOL);
|
||||
@@ -1216,6 +1221,12 @@ nfa_regatom()
|
||||
p = vim_strchr(classchars, no_Magic(c));
|
||||
if (p == NULL)
|
||||
{
|
||||
if (extra == NFA_ADD_NL)
|
||||
{
|
||||
EMSGN(_(e_ill_char_class), c);
|
||||
rc_did_emsg = TRUE;
|
||||
return FAIL;
|
||||
}
|
||||
EMSGN("INTERNAL: Unknown character class char: %ld", c);
|
||||
return FAIL;
|
||||
}
|
||||
@@ -4733,7 +4744,7 @@ check_char_class(class, c)
|
||||
|
||||
default:
|
||||
/* should not be here :P */
|
||||
EMSGN("E877: (NFA regexp) Invalid character class: %ld", class);
|
||||
EMSGN(_(e_ill_char_class), class);
|
||||
return FAIL;
|
||||
}
|
||||
return FAIL;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user