mirror of
https://github.com/zoriya/vim.git
synced 2025-12-13 02:36:16 +00:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c4a249a736 | ||
|
|
432c839ebd | ||
|
|
a4c906a4a1 | ||
|
|
c593fee0e5 | ||
|
|
85b5743d3e | ||
|
|
d58f03b1c2 | ||
|
|
6fe2eb43d2 | ||
|
|
c625155ea4 | ||
|
|
a58883b4ea | ||
|
|
d297f35eb0 | ||
|
|
80627cf51f | ||
|
|
ddf662a1c8 | ||
|
|
24c2e48ef8 | ||
|
|
dea2570740 | ||
|
|
2f72c70657 | ||
|
|
c9b56b2ceb | ||
|
|
e0b66da691 | ||
|
|
690afe1fef | ||
|
|
3a29abcb61 | ||
|
|
f13e00b2cf | ||
|
|
c7b831ca15 | ||
|
|
36ae89c550 | ||
|
|
4019cf90b8 | ||
|
|
f42dd3c390 | ||
|
|
0c0590d982 | ||
|
|
4bc2f2e9fd | ||
|
|
45600ce8f2 | ||
|
|
aed6d0b81a | ||
|
|
3a118be150 | ||
|
|
16038d50c4 | ||
|
|
d9c60648e5 | ||
|
|
cc5b22b3bf | ||
|
|
65c836e600 | ||
|
|
52c0de1de1 | ||
|
|
4f7090b93d |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -81,3 +81,4 @@ src/testdir/viminfo
|
|||||||
src/memfile_test
|
src/memfile_test
|
||||||
src/json_test
|
src/json_test
|
||||||
src/message_test
|
src/message_test
|
||||||
|
src/kword_test
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ env:
|
|||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
git:
|
git:
|
||||||
depth: 1
|
depth: 10
|
||||||
|
|
||||||
# instead of a 2*2*8 matrix (2*os + 2*compiler + 8*env),
|
# instead of a 2*2*8 matrix (2*os + 2*compiler + 8*env),
|
||||||
# exclude some builds on mac os x and linux
|
# exclude some builds on mac os x and linux
|
||||||
@@ -75,8 +75,10 @@ addons:
|
|||||||
- cscope
|
- cscope
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- pip install --user cpp-coveralls
|
- if [ "$COVERAGE" = "yes" ]; then pip install --user cpp-coveralls; fi
|
||||||
- pip install --user requests[security]
|
# needed for https support for coveralls
|
||||||
|
# building cffi only works with gcc, not with clang
|
||||||
|
- if [ "$COVERAGE" = "yes" ]; then CC=gcc pip install --user pyopenssl ndg-httpsclient pyasn1; fi
|
||||||
# Lua is not installed on Travis OSX
|
# Lua is not installed on Travis OSX
|
||||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install lua; export LUA_PREFIX=/usr/local; fi
|
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install lua; export LUA_PREFIX=/usr/local; fi
|
||||||
|
|
||||||
|
|||||||
2
Filelist
2
Filelist
@@ -45,6 +45,7 @@ SRC_ALL = \
|
|||||||
src/hashtab.c \
|
src/hashtab.c \
|
||||||
src/json.c \
|
src/json.c \
|
||||||
src/json_test.c \
|
src/json_test.c \
|
||||||
|
src/kword_test.c \
|
||||||
src/list.c \
|
src/list.c \
|
||||||
src/keymap.h \
|
src/keymap.h \
|
||||||
src/macros.h \
|
src/macros.h \
|
||||||
@@ -122,6 +123,7 @@ SRC_ALL = \
|
|||||||
src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py \
|
src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py \
|
||||||
src/testdir/python_after/*.py \
|
src/testdir/python_after/*.py \
|
||||||
src/testdir/python_before/*.py \
|
src/testdir/python_before/*.py \
|
||||||
|
src/testdir/pyxfile/*.py \
|
||||||
src/testdir/bench*.in \
|
src/testdir/bench*.in \
|
||||||
src/testdir/bench*.vim \
|
src/testdir/bench*.vim \
|
||||||
src/testdir/samples/*.txt \
|
src/testdir/samples/*.txt \
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*eval.txt* For Vim version 8.0. Last change: 2017 Jan 14
|
*eval.txt* For Vim version 8.0. Last change: 2017 Jan 28
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -2222,8 +2222,8 @@ matchstr({expr}, {pat}[, {start}[, {count}]])
|
|||||||
String {count}'th match of {pat} in {expr}
|
String {count}'th match of {pat} in {expr}
|
||||||
matchstrpos({expr}, {pat}[, {start}[, {count}]])
|
matchstrpos({expr}, {pat}[, {start}[, {count}]])
|
||||||
List {count}'th match of {pat} in {expr}
|
List {count}'th match of {pat} in {expr}
|
||||||
max({list}) Number maximum value of items in {list}
|
max({expr}) Number maximum value of items in {expr}
|
||||||
min({list}) Number minimum value of items in {list}
|
min({expr}) Number minimum value of items in {expr}
|
||||||
mkdir({name} [, {path} [, {prot}]])
|
mkdir({name} [, {path} [, {prot}]])
|
||||||
Number create directory {name}
|
Number create directory {name}
|
||||||
mode([expr]) String current editing mode
|
mode([expr]) String current editing mode
|
||||||
@@ -2239,6 +2239,7 @@ printf({fmt}, {expr1}...) String format text
|
|||||||
pumvisible() Number whether popup menu is visible
|
pumvisible() Number whether popup menu is visible
|
||||||
pyeval({expr}) any evaluate |Python| expression
|
pyeval({expr}) any evaluate |Python| expression
|
||||||
py3eval({expr}) any evaluate |python3| expression
|
py3eval({expr}) any evaluate |python3| expression
|
||||||
|
pyxeval({expr}) any evaluate |python_x| expression
|
||||||
range({expr} [, {max} [, {stride}]])
|
range({expr} [, {max} [, {stride}]])
|
||||||
List items from {expr} to {max}
|
List items from {expr} to {max}
|
||||||
readfile({fname} [, {binary} [, {max}]])
|
readfile({fname} [, {binary} [, {max}]])
|
||||||
@@ -4171,6 +4172,10 @@ getchar([expr]) *getchar()*
|
|||||||
exe "normal " . v:mouse_col . "|"
|
exe "normal " . v:mouse_col . "|"
|
||||||
endif
|
endif
|
||||||
<
|
<
|
||||||
|
When using bracketed paste only the first character is
|
||||||
|
returned, the rest of the pasted text is dropped.
|
||||||
|
|xterm-bracketed-paste|.
|
||||||
|
|
||||||
There is no prompt, you will somehow have to make clear to the
|
There is no prompt, you will somehow have to make clear to the
|
||||||
user that a character has to be typed.
|
user that a character has to be typed.
|
||||||
There is no mapping for the character.
|
There is no mapping for the character.
|
||||||
@@ -5796,16 +5801,20 @@ matchstrpos({expr}, {pat}[, {start}[, {count}]]) *matchstrpos()*
|
|||||||
The type isn't changed, it's not necessarily a String.
|
The type isn't changed, it's not necessarily a String.
|
||||||
|
|
||||||
*max()*
|
*max()*
|
||||||
max({list}) Return the maximum value of all items in {list}.
|
max({expr}) Return the maximum value of all items in {expr}.
|
||||||
If {list} is not a list or one of the items in {list} cannot
|
{expr} can be a list or a dictionary. For a dictionary,
|
||||||
be used as a Number this results in an error.
|
it returns the maximum of all values in the dictionary.
|
||||||
An empty |List| results in zero.
|
If {expr} is neither a list nor a dictionary, or one of the
|
||||||
|
items in {expr} cannot be used as a Number this results in
|
||||||
|
an error. An empty |List| or |Dictionary| results in zero.
|
||||||
|
|
||||||
*min()*
|
*min()*
|
||||||
min({list}) Return the minimum value of all items in {list}.
|
min({expr}) Return the minimum value of all items in {expr}.
|
||||||
If {list} is not a list or one of the items in {list} cannot
|
{expr} can be a list or a dictionary. For a dictionary,
|
||||||
be used as a Number this results in an error.
|
it returns the minimum of all values in the dictionary.
|
||||||
An empty |List| results in zero.
|
If {expr} is neither a list nor a dictionary, or one of the
|
||||||
|
items in {expr} cannot be used as a Number this results in
|
||||||
|
an error. An empty |List| or |Dictionary| results in zero.
|
||||||
|
|
||||||
*mkdir()* *E739*
|
*mkdir()* *E739*
|
||||||
mkdir({name} [, {path} [, {prot}]])
|
mkdir({name} [, {path} [, {prot}]])
|
||||||
@@ -6163,6 +6172,14 @@ pyeval({expr}) *pyeval()*
|
|||||||
non-string keys result in error.
|
non-string keys result in error.
|
||||||
{only available when compiled with the |+python| feature}
|
{only available when compiled with the |+python| feature}
|
||||||
|
|
||||||
|
pyxeval({expr}) *pyxeval()*
|
||||||
|
Evaluate Python expression {expr} and return its result
|
||||||
|
converted to Vim data structures.
|
||||||
|
Uses Python 2 or 3, see |python_x| and 'pyxversion'.
|
||||||
|
See also: |pyeval()|, |py3eval()|
|
||||||
|
{only available when compiled with the |+python| or the
|
||||||
|
|+python3| feature}
|
||||||
|
|
||||||
*E726* *E727*
|
*E726* *E727*
|
||||||
range({expr} [, {max} [, {stride}]]) *range()*
|
range({expr} [, {max} [, {stride}]]) *range()*
|
||||||
Returns a |List| with Numbers:
|
Returns a |List| with Numbers:
|
||||||
@@ -6789,10 +6806,12 @@ setpos({expr}, {list})
|
|||||||
[bufnum, lnum, col, off, curswant]
|
[bufnum, lnum, col, off, curswant]
|
||||||
|
|
||||||
"bufnum" is the buffer number. Zero can be used for the
|
"bufnum" is the buffer number. Zero can be used for the
|
||||||
current buffer. Setting the cursor is only possible for
|
current buffer. When setting an uppercase mark "bufnum" is
|
||||||
the current buffer. To set a mark in another buffer you can
|
used for the mark position. For other marks it specifies the
|
||||||
use the |bufnr()| function to turn a file name into a buffer
|
buffer to set the mark in. You can use the |bufnr()| function
|
||||||
number.
|
to turn a file name into a buffer number.
|
||||||
|
For setting the cursor and the ' mark "bufnum" is ignored,
|
||||||
|
since these are associated with a window, not a buffer.
|
||||||
Does not change the jumplist.
|
Does not change the jumplist.
|
||||||
|
|
||||||
"lnum" and "col" are the position in the buffer. The first
|
"lnum" and "col" are the position in the buffer. The first
|
||||||
@@ -8135,7 +8154,7 @@ winnr([{arg}]) The result is a Number, which is the number of the current
|
|||||||
is returned.
|
is returned.
|
||||||
The number can be used with |CTRL-W_w| and ":wincmd w"
|
The number can be used with |CTRL-W_w| and ":wincmd w"
|
||||||
|:wincmd|.
|
|:wincmd|.
|
||||||
Also see |tabpagewinnr()|.
|
Also see |tabpagewinnr()| and |win_getid()|.
|
||||||
|
|
||||||
*winrestcmd()*
|
*winrestcmd()*
|
||||||
winrestcmd() Returns a sequence of |:resize| commands that should restore
|
winrestcmd() Returns a sequence of |:resize| commands that should restore
|
||||||
@@ -8402,6 +8421,7 @@ printer Compiled with |:hardcopy| support.
|
|||||||
profile Compiled with |:profile| support.
|
profile Compiled with |:profile| support.
|
||||||
python Compiled with Python 2.x interface. |has-python|
|
python Compiled with Python 2.x interface. |has-python|
|
||||||
python3 Compiled with Python 3.x interface. |has-python|
|
python3 Compiled with Python 3.x interface. |has-python|
|
||||||
|
pythonx Compiled with |python_x| interface. |has-pythonx|
|
||||||
qnx QNX version of Vim.
|
qnx QNX version of Vim.
|
||||||
quickfix Compiled with |quickfix| support.
|
quickfix Compiled with |quickfix| support.
|
||||||
reltime Compiled with |reltime()| support.
|
reltime Compiled with |reltime()| support.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*if_pyth.txt* For Vim version 8.0. Last change: 2016 Sep 17
|
*if_pyth.txt* For Vim version 8.0. Last change: 2017 Jan 28
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Paul Moore
|
VIM REFERENCE MANUAL by Paul Moore
|
||||||
@@ -16,6 +16,7 @@ The Python Interface to Vim *python* *Python*
|
|||||||
8. pyeval(), py3eval() Vim functions |python-pyeval|
|
8. pyeval(), py3eval() Vim functions |python-pyeval|
|
||||||
9. Dynamic loading |python-dynamic|
|
9. Dynamic loading |python-dynamic|
|
||||||
10. Python 3 |python3|
|
10. Python 3 |python3|
|
||||||
|
11. Python X |python_x|
|
||||||
|
|
||||||
{Vi does not have any of these commands}
|
{Vi does not have any of these commands}
|
||||||
|
|
||||||
@@ -711,6 +712,7 @@ vim.Function object *python-Function*
|
|||||||
|
|
||||||
To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
|
To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
|
||||||
functions to evaluate Python expressions and pass their values to VimL.
|
functions to evaluate Python expressions and pass their values to VimL.
|
||||||
|
|pyxeval()| is also available.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
9. Dynamic loading *python-dynamic*
|
9. Dynamic loading *python-dynamic*
|
||||||
@@ -811,5 +813,69 @@ dynamically, these has() calls will try to load them. If only one can be
|
|||||||
loaded at a time, just checking if Python 2 or 3 are available will prevent
|
loaded at a time, just checking if Python 2 or 3 are available will prevent
|
||||||
the other one from being available.
|
the other one from being available.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
11. Python X *python_x* *pythonx*
|
||||||
|
|
||||||
|
Because most python code can be written so that it works with python 2.6+ and
|
||||||
|
python 3 the pyx* functions and commands have been writen. They work exactly
|
||||||
|
the same as the Python 2 and 3 variants, but select the Python version using
|
||||||
|
the 'pyxversion' setting.
|
||||||
|
|
||||||
|
You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
|
||||||
|
for Python commands. If you change this setting at runtime you may risk that
|
||||||
|
state of plugins (such as initialization) may be lost.
|
||||||
|
|
||||||
|
If you want to use a module, you can put it in the {rtp}/pythonx directory.
|
||||||
|
See |pythonx-directory|.
|
||||||
|
|
||||||
|
*:pyx* *:pythonx*
|
||||||
|
The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check
|
||||||
|
if the `:pyx` command is working: >
|
||||||
|
:pyx print("Hello")
|
||||||
|
|
||||||
|
To see what version of Python is being used: >
|
||||||
|
:pyx import sys
|
||||||
|
:pyx print(sys.version)
|
||||||
|
<
|
||||||
|
*:pyxfile* *python_x-special-comments*
|
||||||
|
The `:pyxfile` command works similar to `:pyfile`. However you can add one of
|
||||||
|
these comments to force Vim using `:pyfile` or `:py3file`: >
|
||||||
|
#!/any string/python2 " Shebang. Must be the first line of the file.
|
||||||
|
#!/any string/python3 " Shebang. Must be the first line of the file.
|
||||||
|
# requires python 2.x " Maximum lines depend on 'modelines'.
|
||||||
|
# requires python 3.x " Maximum lines depend on 'modelines'.
|
||||||
|
Unlike normal modelines, the bottom of the file is not checked.
|
||||||
|
If none of them are found, the 'pyxversion' setting is used.
|
||||||
|
*W20* *W21*
|
||||||
|
If Vim does not support the selected Python version a silent message will be
|
||||||
|
printed. Use `:messages` to read them.
|
||||||
|
|
||||||
|
*:pyxdo*
|
||||||
|
The `:pyxdo` command works similar to `:pydo`.
|
||||||
|
|
||||||
|
*has-pythonx*
|
||||||
|
You can test if pyx* commands are available with: >
|
||||||
|
if has('pythonx')
|
||||||
|
echo 'pyx* commands are available. (Python ' . &pyx . ')'
|
||||||
|
endif
|
||||||
|
|
||||||
|
When compiled with only one of |+python| or |+python3|, the has() returns 1.
|
||||||
|
When compiled with both |+python| and |+python3|, the test depends on the
|
||||||
|
'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if
|
||||||
|
it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only
|
||||||
|
Python 2 or 3 respectively.
|
||||||
|
|
||||||
|
Note that for has('pythonx') to work it may try to dynamically load Python 3
|
||||||
|
or 2. This may have side effects, especially when Vim can only load one of
|
||||||
|
the two.
|
||||||
|
|
||||||
|
If a user prefers Python 2 and want to fallback to Python 3, he needs to set
|
||||||
|
'pyxversion' explicitly in his |.vimrc|. E.g.: >
|
||||||
|
if has('python')
|
||||||
|
set pyx=2
|
||||||
|
elseif has('python3')
|
||||||
|
set pyx=3
|
||||||
|
endif
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
|||||||
@@ -1440,6 +1440,10 @@ tag command action ~
|
|||||||
|:python| :py[thon] execute Python command
|
|:python| :py[thon] execute Python command
|
||||||
|:pydo| :pyd[o] execute Python command for each line
|
|:pydo| :pyd[o] execute Python command for each line
|
||||||
|:pyfile| :pyf[ile] execute Python script file
|
|:pyfile| :pyf[ile] execute Python script file
|
||||||
|
|:pyx| :pyx execute |python_x| command
|
||||||
|
|:pythonx| :pythonx same as :pyx
|
||||||
|
|:pyxdo| :pyxd[o] execute |python_x| command for each line
|
||||||
|
|:pyxfile| :pyxf[ile] execute |python_x| script file
|
||||||
|:quit| :q[uit] quit current window (when one window quit Vim)
|
|:quit| :q[uit] quit current window (when one window quit Vim)
|
||||||
|:quitall| :quita[ll] quit Vim
|
|:quitall| :quita[ll] quit Vim
|
||||||
|:qall| :qa[ll] quit Vim
|
|:qall| :qa[ll] quit Vim
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*options.txt* For Vim version 8.0. Last change: 2017 Jan 15
|
*options.txt* For Vim version 8.0. Last change: 2017 Jan 28
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -5786,6 +5786,34 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
Specifies the name of the Python 3 shared library. The default is
|
Specifies the name of the Python 3 shared library. The default is
|
||||||
DYNAMIC_PYTHON3_DLL, which was specified at compile time.
|
DYNAMIC_PYTHON3_DLL, which was specified at compile time.
|
||||||
Environment variables are expanded |:set_env|.
|
Environment variables are expanded |:set_env|.
|
||||||
|
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
|
security reasons.
|
||||||
|
|
||||||
|
*'pyxversion'* *'pyx'*
|
||||||
|
'pyxversion' 'pyx' number (default depends on the build)
|
||||||
|
global
|
||||||
|
{not in Vi}
|
||||||
|
{only available when compiled with the |+python| or
|
||||||
|
the |+python3| feature}
|
||||||
|
Specifies the python version used for pyx* functions and commands
|
||||||
|
|python_x|. The default value is as follows:
|
||||||
|
|
||||||
|
Compiled with Default ~
|
||||||
|
|+python| and |+python3| 0
|
||||||
|
only |+python| 2
|
||||||
|
only |+python3| 3
|
||||||
|
|
||||||
|
Available values are 0, 2 and 3.
|
||||||
|
If 'pyxversion' is 0, it is set to 2 or 3 after the first execution of
|
||||||
|
any python2/3 commands or functions. E.g. `:py` sets to 2, and `:py3`
|
||||||
|
sets to 3. `:pyx` sets it to 3 if Python 3 is available, otherwise sets
|
||||||
|
to 2 if Python 2 is available.
|
||||||
|
See also: |has-pythonx|
|
||||||
|
|
||||||
|
If Vim is compiled with only |+python| or |+python3| setting
|
||||||
|
'pyxversion' has no effect. The pyx* functions and commands are
|
||||||
|
always the same as the compiled version.
|
||||||
|
|
||||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
|
|||||||
@@ -835,6 +835,7 @@ Short explanation of each option: *option-list*
|
|||||||
'pumheight' 'ph' maximum height of the popup menu
|
'pumheight' 'ph' maximum height of the popup menu
|
||||||
'pythondll' name of the Python 2 dynamic library
|
'pythondll' name of the Python 2 dynamic library
|
||||||
'pythonthreedll' name of the Python 3 dynamic library
|
'pythonthreedll' name of the Python 3 dynamic library
|
||||||
|
'pyxversion' 'pyx' Python version used for pyx* commands
|
||||||
'quoteescape' 'qe' escape characters used in a string
|
'quoteescape' 'qe' escape characters used in a string
|
||||||
'readonly' 'ro' disallow writing the buffer
|
'readonly' 'ro' disallow writing the buffer
|
||||||
'redrawtime' 'rdt' timeout for 'hlsearch' and |:match| highlighting
|
'redrawtime' 'rdt' timeout for 'hlsearch' and |:match| highlighting
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*syntax.txt* For Vim version 8.0. Last change: 2016 Oct 30
|
*syntax.txt* For Vim version 8.0. Last change: 2017 Jan 17
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -3479,6 +3479,8 @@ DEFINING CASE *:syn-case* *E390*
|
|||||||
"ignore". Note that any items before this are not affected, and all
|
"ignore". Note that any items before this are not affected, and all
|
||||||
items until the next ":syntax case" command are affected.
|
items until the next ":syntax case" command are affected.
|
||||||
|
|
||||||
|
:sy[ntax] case
|
||||||
|
Show either "syntax case match" or "syntax case ignore" (translated).
|
||||||
|
|
||||||
SPELL CHECKING *:syn-spell*
|
SPELL CHECKING *:syn-spell*
|
||||||
|
|
||||||
@@ -3496,6 +3498,11 @@ SPELL CHECKING *:syn-spell*
|
|||||||
|
|
||||||
To activate spell checking the 'spell' option must be set.
|
To activate spell checking the 'spell' option must be set.
|
||||||
|
|
||||||
|
:sy[ntax] spell
|
||||||
|
Show either "syntax spell toplevel", "syntax spell notoplevel" or
|
||||||
|
"syntax spell default" (translated).
|
||||||
|
|
||||||
|
|
||||||
SYNTAX ISKEYWORD SETTING *:syn-iskeyword*
|
SYNTAX ISKEYWORD SETTING *:syn-iskeyword*
|
||||||
|
|
||||||
:sy[ntax] iskeyword [clear | {option}]
|
:sy[ntax] iskeyword [clear | {option}]
|
||||||
@@ -4089,6 +4096,9 @@ IMPLICIT CONCEAL *:syn-conceal-implicit*
|
|||||||
off" returns to the normal state where the "conceal" flag must be
|
off" returns to the normal state where the "conceal" flag must be
|
||||||
given explicitly.
|
given explicitly.
|
||||||
|
|
||||||
|
:sy[ntax] conceal
|
||||||
|
Show either "syntax conceal on" or "syntax conceal off" (translated).
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
7. Syntax patterns *:syn-pattern* *E401* *E402*
|
7. Syntax patterns *:syn-pattern* *E401* *E402*
|
||||||
|
|
||||||
|
|||||||
@@ -774,6 +774,8 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
|
|||||||
'pvw' options.txt /*'pvw'*
|
'pvw' options.txt /*'pvw'*
|
||||||
'pythondll' options.txt /*'pythondll'*
|
'pythondll' options.txt /*'pythondll'*
|
||||||
'pythonthreedll' options.txt /*'pythonthreedll'*
|
'pythonthreedll' options.txt /*'pythonthreedll'*
|
||||||
|
'pyx' options.txt /*'pyx'*
|
||||||
|
'pyxversion' options.txt /*'pyxversion'*
|
||||||
'qe' options.txt /*'qe'*
|
'qe' options.txt /*'qe'*
|
||||||
'quote motion.txt /*'quote*
|
'quote motion.txt /*'quote*
|
||||||
'quoteescape' options.txt /*'quoteescape'*
|
'quoteescape' options.txt /*'quoteescape'*
|
||||||
@@ -923,6 +925,8 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
|
|||||||
't_AB' term.txt /*'t_AB'*
|
't_AB' term.txt /*'t_AB'*
|
||||||
't_AF' term.txt /*'t_AF'*
|
't_AF' term.txt /*'t_AF'*
|
||||||
't_AL' term.txt /*'t_AL'*
|
't_AL' term.txt /*'t_AL'*
|
||||||
|
't_BD' term.txt /*'t_BD'*
|
||||||
|
't_BE' term.txt /*'t_BE'*
|
||||||
't_CS' term.txt /*'t_CS'*
|
't_CS' term.txt /*'t_CS'*
|
||||||
't_CV' term.txt /*'t_CV'*
|
't_CV' term.txt /*'t_CV'*
|
||||||
't_Ce' term.txt /*'t_Ce'*
|
't_Ce' term.txt /*'t_Ce'*
|
||||||
@@ -2722,6 +2726,10 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
|
|||||||
:pyfile if_pyth.txt /*:pyfile*
|
:pyfile if_pyth.txt /*:pyfile*
|
||||||
:python if_pyth.txt /*:python*
|
:python if_pyth.txt /*:python*
|
||||||
:python3 if_pyth.txt /*:python3*
|
:python3 if_pyth.txt /*:python3*
|
||||||
|
:pythonx if_pyth.txt /*:pythonx*
|
||||||
|
:pyx if_pyth.txt /*:pyx*
|
||||||
|
:pyxdo if_pyth.txt /*:pyxdo*
|
||||||
|
:pyxfile if_pyth.txt /*:pyxfile*
|
||||||
:q editing.txt /*:q*
|
:q editing.txt /*:q*
|
||||||
:qa editing.txt /*:qa*
|
:qa editing.txt /*:qa*
|
||||||
:qall editing.txt /*:qall*
|
:qall editing.txt /*:qall*
|
||||||
@@ -4770,6 +4778,8 @@ W16 message.txt /*W16*
|
|||||||
W17 arabic.txt /*W17*
|
W17 arabic.txt /*W17*
|
||||||
W18 syntax.txt /*W18*
|
W18 syntax.txt /*W18*
|
||||||
W19 autocmd.txt /*W19*
|
W19 autocmd.txt /*W19*
|
||||||
|
W20 if_pyth.txt /*W20*
|
||||||
|
W21 if_pyth.txt /*W21*
|
||||||
WORD motion.txt /*WORD*
|
WORD motion.txt /*WORD*
|
||||||
WWW intro.txt /*WWW*
|
WWW intro.txt /*WWW*
|
||||||
Win32 os_win32.txt /*Win32*
|
Win32 os_win32.txt /*Win32*
|
||||||
@@ -6603,6 +6613,7 @@ hangulin.txt hangulin.txt /*hangulin.txt*
|
|||||||
has() eval.txt /*has()*
|
has() eval.txt /*has()*
|
||||||
has-patch eval.txt /*has-patch*
|
has-patch eval.txt /*has-patch*
|
||||||
has-python if_pyth.txt /*has-python*
|
has-python if_pyth.txt /*has-python*
|
||||||
|
has-pythonx if_pyth.txt /*has-pythonx*
|
||||||
has_key() eval.txt /*has_key()*
|
has_key() eval.txt /*has_key()*
|
||||||
haskell.vim syntax.txt /*haskell.vim*
|
haskell.vim syntax.txt /*haskell.vim*
|
||||||
haslocaldir() eval.txt /*haslocaldir()*
|
haslocaldir() eval.txt /*haslocaldir()*
|
||||||
@@ -7901,7 +7912,11 @@ python.vim syntax.txt /*python.vim*
|
|||||||
python2-directory if_pyth.txt /*python2-directory*
|
python2-directory if_pyth.txt /*python2-directory*
|
||||||
python3 if_pyth.txt /*python3*
|
python3 if_pyth.txt /*python3*
|
||||||
python3-directory if_pyth.txt /*python3-directory*
|
python3-directory if_pyth.txt /*python3-directory*
|
||||||
|
python_x if_pyth.txt /*python_x*
|
||||||
|
python_x-special-comments if_pyth.txt /*python_x-special-comments*
|
||||||
|
pythonx if_pyth.txt /*pythonx*
|
||||||
pythonx-directory if_pyth.txt /*pythonx-directory*
|
pythonx-directory if_pyth.txt /*pythonx-directory*
|
||||||
|
pyxeval() eval.txt /*pyxeval()*
|
||||||
q repeat.txt /*q*
|
q repeat.txt /*q*
|
||||||
q/ cmdline.txt /*q\/*
|
q/ cmdline.txt /*q\/*
|
||||||
q: cmdline.txt /*q:*
|
q: cmdline.txt /*q:*
|
||||||
@@ -8443,6 +8458,8 @@ t_@7 term.txt /*t_@7*
|
|||||||
t_AB term.txt /*t_AB*
|
t_AB term.txt /*t_AB*
|
||||||
t_AF term.txt /*t_AF*
|
t_AF term.txt /*t_AF*
|
||||||
t_AL term.txt /*t_AL*
|
t_AL term.txt /*t_AL*
|
||||||
|
t_BD term.txt /*t_BD*
|
||||||
|
t_BE term.txt /*t_BE*
|
||||||
t_CS term.txt /*t_CS*
|
t_CS term.txt /*t_CS*
|
||||||
t_CV term.txt /*t_CV*
|
t_CV term.txt /*t_CV*
|
||||||
t_Ce term.txt /*t_Ce*
|
t_Ce term.txt /*t_Ce*
|
||||||
@@ -8481,6 +8498,8 @@ t_KI term.txt /*t_KI*
|
|||||||
t_KJ term.txt /*t_KJ*
|
t_KJ term.txt /*t_KJ*
|
||||||
t_KK term.txt /*t_KK*
|
t_KK term.txt /*t_KK*
|
||||||
t_KL term.txt /*t_KL*
|
t_KL term.txt /*t_KL*
|
||||||
|
t_PE term.txt /*t_PE*
|
||||||
|
t_PS term.txt /*t_PS*
|
||||||
t_RB term.txt /*t_RB*
|
t_RB term.txt /*t_RB*
|
||||||
t_RI term.txt /*t_RI*
|
t_RI term.txt /*t_RI*
|
||||||
t_RV term.txt /*t_RV*
|
t_RV term.txt /*t_RV*
|
||||||
@@ -9332,6 +9351,7 @@ xterm-8-bit term.txt /*xterm-8-bit*
|
|||||||
xterm-8bit term.txt /*xterm-8bit*
|
xterm-8bit term.txt /*xterm-8bit*
|
||||||
xterm-blink syntax.txt /*xterm-blink*
|
xterm-blink syntax.txt /*xterm-blink*
|
||||||
xterm-blinking-cursor syntax.txt /*xterm-blinking-cursor*
|
xterm-blinking-cursor syntax.txt /*xterm-blinking-cursor*
|
||||||
|
xterm-bracketed-paste term.txt /*xterm-bracketed-paste*
|
||||||
xterm-clipboard term.txt /*xterm-clipboard*
|
xterm-clipboard term.txt /*xterm-clipboard*
|
||||||
xterm-codes term.txt /*xterm-codes*
|
xterm-codes term.txt /*xterm-codes*
|
||||||
xterm-color syntax.txt /*xterm-color*
|
xterm-color syntax.txt /*xterm-color*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*term.txt* For Vim version 8.0. Last change: 2016 Sep 02
|
*term.txt* For Vim version 8.0. Last change: 2017 Jan 27
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -99,7 +99,12 @@ is used.
|
|||||||
|
|
||||||
Note that in some situations Vim will not recognize the bracketed paste and
|
Note that in some situations Vim will not recognize the bracketed paste and
|
||||||
you will get the raw text. In other situations Vim will only get the first
|
you will get the raw text. In other situations Vim will only get the first
|
||||||
pasted character and drop the rest, e.g. when using the "r" command.
|
pasted character and drop the rest, e.g. when using the "r" command. If you
|
||||||
|
have a problem with this, disable bracketed paste by putting this in your
|
||||||
|
.vimrc: >
|
||||||
|
set t_BE=
|
||||||
|
If this is done while Vim is running the 't_BD' will be sent to the terminal
|
||||||
|
to disable bracketed paste.
|
||||||
|
|
||||||
*cs7-problem*
|
*cs7-problem*
|
||||||
Note: If the terminal settings are changed after running Vim, you might have
|
Note: If the terminal settings are changed after running Vim, you might have
|
||||||
@@ -414,7 +419,7 @@ Note: Use the <> form if possible
|
|||||||
t_KK <k8> keypad 8 *<k8>* *t_KK* *'t_KK'*
|
t_KK <k8> keypad 8 *<k8>* *t_KK* *'t_KK'*
|
||||||
t_KL <k9> keypad 9 *<k9>* *t_KL* *'t_KL'*
|
t_KL <k9> keypad 9 *<k9>* *t_KL* *'t_KL'*
|
||||||
<Mouse> leader of mouse code *<Mouse>*
|
<Mouse> leader of mouse code *<Mouse>*
|
||||||
t_PS start of brackted paste |xterm-bracketed-paste| *t_PS* 't_PS'
|
t_PS start of bracketed paste |xterm-bracketed-paste| *t_PS* 't_PS'
|
||||||
t_PE end of bracketed paste |xterm-bracketed-paste| *t_PE* 't_PE'
|
t_PE end of bracketed paste |xterm-bracketed-paste| *t_PE* 't_PE'
|
||||||
|
|
||||||
Note about t_so and t_mr: When the termcap entry "so" is not present the
|
Note about t_so and t_mr: When the termcap entry "so" is not present the
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*todo.txt* For Vim version 8.0. Last change: 2017 Jan 16
|
*todo.txt* For Vim version 8.0. Last change: 2017 Jan 28
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -35,8 +35,6 @@ entered there will not be repeated below, unless there is extra information.
|
|||||||
*known-bugs*
|
*known-bugs*
|
||||||
-------------------- Known bugs and current work -----------------------
|
-------------------- Known bugs and current work -----------------------
|
||||||
|
|
||||||
get_syn_options() does not respect skip in else part. (Zyx)
|
|
||||||
|
|
||||||
+channel:
|
+channel:
|
||||||
- Try out background make plugin:
|
- Try out background make plugin:
|
||||||
https://github.com/AndrewVos/vim-make-background
|
https://github.com/AndrewVos/vim-make-background
|
||||||
@@ -60,6 +58,7 @@ get_syn_options() does not respect skip in else part. (Zyx)
|
|||||||
connecting in the main loop with zero timeout.
|
connecting in the main loop with zero timeout.
|
||||||
- job_start(): run job in a newly opened terminal.
|
- job_start(): run job in a newly opened terminal.
|
||||||
With xterm could use -S{pty}.
|
With xterm could use -S{pty}.
|
||||||
|
Although user could use "xterm -e 'cmd arg'".
|
||||||
|
|
||||||
Regexp problems:
|
Regexp problems:
|
||||||
- Since 7.4.704 the old regex engine fails to match [[:print:]] in 0xf6.
|
- Since 7.4.704 the old regex engine fails to match [[:print:]] in 0xf6.
|
||||||
@@ -108,40 +107,27 @@ Regexp problems:
|
|||||||
|
|
||||||
'] mark invalid after undoing insert "hello".
|
'] mark invalid after undoing insert "hello".
|
||||||
|
|
||||||
Make html indent file use javascript indent, now that it's not just cindent.
|
|
||||||
#1220
|
|
||||||
|
|
||||||
Concatenation with null string causes an error: 'a'[1:0] .. 'b'
|
|
||||||
Might as well handle it like an empty string.
|
|
||||||
|
|
||||||
When using symbolic links, a package path will not be inserted at the right
|
When using symbolic links, a package path will not be inserted at the right
|
||||||
position in 'runtimepath'. (Dugan Chen, 2016 Nov 18)
|
position in 'runtimepath'. (Dugan Chen, 2016 Nov 18)
|
||||||
|
|
||||||
json_encode(): should convert to utf-8. (Nikolai Pavlov, 2016 Jan 23)
|
json_encode(): should convert to utf-8. (Nikolai Pavlov, 2016 Jan 23)
|
||||||
What if there is an invalid character?
|
What if there is an invalid character?
|
||||||
|
|
||||||
Include rust files. (Klabnik, #1356)
|
|
||||||
|
|
||||||
Allow using json with empty key? Dict already has it.
|
Allow using json with empty key? Dict already has it.
|
||||||
|
|
||||||
Json string with trailing \u should be an error. (Lcd)
|
Json string with trailing \u should be an error. (Lcd)
|
||||||
|
|
||||||
Patch to deal with changed configure events in GTK 3. (Jan Alexander Steffens,
|
|
||||||
2016 Oct 23 #1193)
|
|
||||||
Remarks from nuko8, 2016 Nov 2.
|
|
||||||
|
|
||||||
Multi-byte bug: dv} splits char. (Urtica Dioica, 2017 Jan 9)
|
Multi-byte bug: dv} splits char. (Urtica Dioica, 2017 Jan 9)
|
||||||
|
|
||||||
Patch to change order of compiler flags. (Yousong Zhou, 2016 Sep 19, #1100)
|
Patch: Make mode() return "ix" or "Rx" when in completion mode.
|
||||||
|
(Yegappan Lakshmanan, 2017 Jan 19, #1397, update Jan 22)
|
||||||
|
|
||||||
Patch to add command line completion for :cexpr commands. (Yegappan
|
With Visual selection of a multi-byte character the '] mark is on the last
|
||||||
Lakshmanan, 2016 Dec 13)
|
byte, should be first byte?
|
||||||
|
|
||||||
Patch for :pyx, run python commands depending on the supported version.
|
When session file has name in argument list but the buffer was deleted, the
|
||||||
(Marc Weber, update from Ken Takata, 2016 Sep 19, 2017 Jan 6)
|
buffer is not deleted when using the session file. (#1393)
|
||||||
|
Should add the buffer in hidden state.
|
||||||
Patch to avoid warnings for overflow. (Mike Williams, 2016 Dec 16)
|
|
||||||
Update Dec 19.
|
|
||||||
|
|
||||||
When an item in the quickfix list has a file name that does not exist, behave
|
When an item in the quickfix list has a file name that does not exist, behave
|
||||||
like the item was not a match for :cnext.
|
like the item was not a match for :cnext.
|
||||||
@@ -150,18 +136,13 @@ Wrong diff highlighting with three files. (2016 Oct 20, #1186)
|
|||||||
Also get E749 on exit.
|
Also get E749 on exit.
|
||||||
Another example in #1309
|
Another example in #1309
|
||||||
|
|
||||||
Patch to fix vim_iswordp() works differently on chars <256 that are two bytes.
|
Completion for user-defined commands does not work if a few chararacters were
|
||||||
Ozaki Kiichi, 2016 Dec 11.
|
already typed. (Dominique, 2017 Jan 26)
|
||||||
|
|
||||||
When deleting a mark or register, leave a tombstone, so that it's also deleted
|
When deleting a mark or register, leave a tombstone, so that it's also deleted
|
||||||
when writing viminfo (and the delete was the most recent action). #1339
|
when writing viminfo (and the delete was the most recent action). #1339
|
||||||
|
|
||||||
Relevant neovim patch:
|
Relevant neovim patch:
|
||||||
https://github.com/neovim/neovim/pull/5717
|
|
||||||
test case:
|
|
||||||
https://github.com/neovim/neovim/pull/5717#issuecomment-264845481
|
|
||||||
Others:
|
|
||||||
https://github.com/neovim/neovim/issues/5713#issuecomment-265136186
|
|
||||||
https://github.com/neovim/neovim/pull/5737#issuecomment-266055165
|
https://github.com/neovim/neovim/pull/5737#issuecomment-266055165
|
||||||
|
|
||||||
Patch for better explanation of 'compatible' side effects.
|
Patch for better explanation of 'compatible' side effects.
|
||||||
@@ -199,6 +180,10 @@ Patch for restoring wide characters in the console buffer.
|
|||||||
Patch to fix escaping of job arguments. (Yasuhiro Matsumoto, 2016 Oct 5)
|
Patch to fix escaping of job arguments. (Yasuhiro Matsumoto, 2016 Oct 5)
|
||||||
Update Oct 14: https://gist.github.com/mattn/d47e7d3bfe5ade4be86062b565a4bfca
|
Update Oct 14: https://gist.github.com/mattn/d47e7d3bfe5ade4be86062b565a4bfca
|
||||||
|
|
||||||
|
The TermResponse event is not triggered when a plugin has set 'eventignore' to
|
||||||
|
"all". Netrw does this. (Gary Johnson, 2017 Jan 24)
|
||||||
|
Postpone the event until 'eventignore' is reset.
|
||||||
|
|
||||||
Once .exe with updated installer is available: Add remark to download page
|
Once .exe with updated installer is available: Add remark to download page
|
||||||
about /S and /D options (Ken Takata, 2016 Apr 13)
|
about /S and /D options (Ken Takata, 2016 Apr 13)
|
||||||
Or point to nightly builds: https://github.com/vim/vim-win32-installer/releases
|
Or point to nightly builds: https://github.com/vim/vim-win32-installer/releases
|
||||||
@@ -220,6 +205,7 @@ lines: :g/^/normal yyp On Unix it works OK. (Bryce Orgill, 2016 Nov 5)
|
|||||||
|
|
||||||
Patch for wrong cursor position on wrapped line, involving breakindent.
|
Patch for wrong cursor position on wrapped line, involving breakindent.
|
||||||
(Ozaki Kiichi, 2016 Nov 25)
|
(Ozaki Kiichi, 2016 Nov 25)
|
||||||
|
Does this also fix #1408 ?
|
||||||
|
|
||||||
Patch for 'cursorlinenr' option. (Ozaki Kiichi, 2016 Nov 30)
|
Patch for 'cursorlinenr' option. (Ozaki Kiichi, 2016 Nov 30)
|
||||||
|
|
||||||
@@ -569,6 +555,9 @@ Patch to add :mapgroup, put mappings in a group like augroup.
|
|||||||
Value returned by virtcol() changes depending on how lines wrap. This is
|
Value returned by virtcol() changes depending on how lines wrap. This is
|
||||||
inconsistent with the documentation.
|
inconsistent with the documentation.
|
||||||
|
|
||||||
|
Value of virtcol() for '[ and '] depend on multi-byte character.
|
||||||
|
(Luchr, #277)
|
||||||
|
|
||||||
Can we cache the syntax attributes, so that updates for 'relativenumber' and
|
Can we cache the syntax attributes, so that updates for 'relativenumber' and
|
||||||
'cursorline'/'cursorcolumn' are a lot faster?
|
'cursorline'/'cursorcolumn' are a lot faster?
|
||||||
|
|
||||||
@@ -1061,9 +1050,6 @@ Aug 16)
|
|||||||
When there are no command line arguments ":next" and ":argu" give E163, which
|
When there are no command line arguments ":next" and ":argu" give E163, which
|
||||||
is confusing. Should say "the argument list is empty".
|
is confusing. Should say "the argument list is empty".
|
||||||
|
|
||||||
xterm supports escape sequences to mark a paste operation. Need to be
|
|
||||||
enabled. (Bruno Sutic, 2014 Jul 11) How to know the terminal supports this?
|
|
||||||
|
|
||||||
URXVT:
|
URXVT:
|
||||||
- will get stuck if byte sequence does not contain the expected semicolon.
|
- will get stuck if byte sequence does not contain the expected semicolon.
|
||||||
- Use urxvt mouse support also in xterm. Explanations:
|
- Use urxvt mouse support also in xterm. Explanations:
|
||||||
|
|||||||
@@ -1000,6 +1000,7 @@ Various: *various-functions*
|
|||||||
perleval() evaluate Perl expression (|+perl|)
|
perleval() evaluate Perl expression (|+perl|)
|
||||||
py3eval() evaluate Python expression (|+python3|)
|
py3eval() evaluate Python expression (|+python3|)
|
||||||
pyeval() evaluate Python expression (|+python|)
|
pyeval() evaluate Python expression (|+python|)
|
||||||
|
pyxeval() evaluate |python_x| expression
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
*41.7* Defining a function
|
*41.7* Defining a function
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim filetype plugin file
|
" Vim filetype plugin file
|
||||||
" Language: man
|
" Language: man
|
||||||
" Maintainer: SungHyun Nam <goweol@gmail.com>
|
" Maintainer: SungHyun Nam <goweol@gmail.com>
|
||||||
" Last Change: 2017 Jan 04
|
" Last Change: 2017 Jan 18
|
||||||
|
|
||||||
" To make the ":Man" command available before editing a manual page, source
|
" To make the ":Man" command available before editing a manual page, source
|
||||||
" this script from your startup vimrc file.
|
" this script from your startup vimrc file.
|
||||||
@@ -97,7 +97,7 @@ func <SID>GetCmdArg(sect, page)
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func <SID>FindPage(sect, page)
|
func <SID>FindPage(sect, page)
|
||||||
let where = system("/usr/bin/man ".s:man_find_arg.' '.s:GetCmdArg(a:sect, a:page))
|
let where = system("man ".s:man_find_arg.' '.s:GetCmdArg(a:sect, a:page))
|
||||||
if where !~ "^/"
|
if where !~ "^/"
|
||||||
if matchstr(where, " [^ ]*$") !~ "^ /"
|
if matchstr(where, " [^ ]*$") !~ "^ /"
|
||||||
return 0
|
return 0
|
||||||
@@ -176,7 +176,7 @@ func <SID>GetPage(...)
|
|||||||
let $MANWIDTH = winwidth(0)
|
let $MANWIDTH = winwidth(0)
|
||||||
let unsetwidth = 1
|
let unsetwidth = 1
|
||||||
endif
|
endif
|
||||||
silent exec "r!/usr/bin/man ".s:GetCmdArg(sect, page)." | col -b"
|
silent exec "r !man ".s:GetCmdArg(sect, page)." | col -b"
|
||||||
if unsetwidth
|
if unsetwidth
|
||||||
let $MANWIDTH = ''
|
let $MANWIDTH = ''
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
" Header: "{{{
|
" Header: "{{{
|
||||||
" Maintainer: Bram Moolenaar
|
" Maintainer: Bram Moolenaar
|
||||||
" Original Author: Andy Wokula <anwoku@yahoo.de>
|
" Original Author: Andy Wokula <anwoku@yahoo.de>
|
||||||
" Last Change: 2016 Mar 30
|
" Last Change: 2017 Jan 17
|
||||||
" Version: 1.0
|
" Version: 1.0
|
||||||
" Description: HTML indent script with cached state for faster indenting on a
|
" Description: HTML indent script with cached state for faster indenting on a
|
||||||
" range of lines.
|
" range of lines.
|
||||||
@@ -25,27 +25,22 @@
|
|||||||
if exists("b:did_indent") "{{{
|
if exists("b:did_indent") "{{{
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Load the Javascript indent script first, it defines GetJavascriptIndent().
|
||||||
|
" Undo the rest.
|
||||||
|
" Load base python indent.
|
||||||
|
if !exists('*GetJavascriptIndent')
|
||||||
|
runtime! indent/javascript.vim
|
||||||
|
endif
|
||||||
let b:did_indent = 1
|
let b:did_indent = 1
|
||||||
|
|
||||||
setlocal indentexpr=HtmlIndent()
|
setlocal indentexpr=HtmlIndent()
|
||||||
setlocal indentkeys=o,O,<Return>,<>>,{,},!^F
|
setlocal indentkeys=o,O,<Return>,<>>,{,},!^F
|
||||||
|
|
||||||
" "j1" is included to make cindent() work better with Javascript.
|
|
||||||
setlocal cino=j1
|
|
||||||
" "J1" should be included, but it doen't work properly before 7.4.355.
|
|
||||||
if has("patch-7.4.355")
|
|
||||||
setlocal cino+=J1
|
|
||||||
endif
|
|
||||||
" Before patch 7.4.355 indenting after "(function() {" does not work well, add
|
|
||||||
" )2 to limit paren search.
|
|
||||||
if !has("patch-7.4.355")
|
|
||||||
setlocal cino+=)2
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Needed for % to work when finding start/end of a tag.
|
" Needed for % to work when finding start/end of a tag.
|
||||||
setlocal matchpairs+=<:>
|
setlocal matchpairs+=<:>
|
||||||
|
|
||||||
let b:undo_indent = "setlocal inde< indk< cino<"
|
let b:undo_indent = "setlocal inde< indk<"
|
||||||
|
|
||||||
" b:hi_indent keeps state to speed up indenting consecutive lines.
|
" b:hi_indent keeps state to speed up indenting consecutive lines.
|
||||||
let b:hi_indent = {"lnum": -1}
|
let b:hi_indent = {"lnum": -1}
|
||||||
@@ -596,7 +591,7 @@ func! s:Alien3()
|
|||||||
return eval(b:hi_js1indent)
|
return eval(b:hi_js1indent)
|
||||||
endif
|
endif
|
||||||
if b:hi_indent.scripttype == "javascript"
|
if b:hi_indent.scripttype == "javascript"
|
||||||
return cindent(v:lnum)
|
return GetJavascriptIndent()
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -923,7 +923,7 @@ if has("folding")
|
|||||||
call append("$", "foldmarker\tmarkers used when 'foldmethod' is \"marker\"")
|
call append("$", "foldmarker\tmarkers used when 'foldmethod' is \"marker\"")
|
||||||
call append("$", "\t(local to window)")
|
call append("$", "\t(local to window)")
|
||||||
call <SID>OptionL("fmr")
|
call <SID>OptionL("fmr")
|
||||||
call append("$", "foldnestmax\tmaximum fold depth for when 'foldmethod is \"indent\" or \"syntax\"")
|
call append("$", "foldnestmax\tmaximum fold depth for when 'foldmethod' is \"indent\" or \"syntax\"")
|
||||||
call append("$", "\t(local to window)")
|
call append("$", "\t(local to window)")
|
||||||
call <SID>OptionL("fdn")
|
call <SID>OptionL("fdn")
|
||||||
endif
|
endif
|
||||||
@@ -1324,6 +1324,10 @@ if exists("&perldll")
|
|||||||
call append("$", "perldll\tname of the Perl dynamic library")
|
call append("$", "perldll\tname of the Perl dynamic library")
|
||||||
call <SID>OptionG("perldll", &perldll)
|
call <SID>OptionG("perldll", &perldll)
|
||||||
endif
|
endif
|
||||||
|
if has('pythonx')
|
||||||
|
call append("$", "pyxversion\twhether to use Python 2 or 3")
|
||||||
|
call append("$", " \tset pyx=" . &wd)
|
||||||
|
endif
|
||||||
if exists("&pythondll")
|
if exists("&pythondll")
|
||||||
call append("$", "pythondll\tname of the Python 2 dynamic library")
|
call append("$", "pythondll\tname of the Python 2 dynamic library")
|
||||||
call <SID>OptionG("pythondll", &pythondll)
|
call <SID>OptionG("pythondll", &pythondll)
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: AutoHotkey script file
|
" Language: AutoHotkey script file
|
||||||
" Maintainer: SungHyun Nam <goweol@gmail.com>
|
" Maintainer: Michael Wong
|
||||||
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
" https://github.com/mmikeww/autohotkey.vim
|
||||||
" Latest Revision: 2015-10-29
|
" Latest Revision: 2017-01-23
|
||||||
|
" Previous Maintainers: SungHyun Nam <goweol@gmail.com>
|
||||||
|
" Nikolai Weibull <now@bitwi.se>
|
||||||
|
|
||||||
if exists("b:current_syntax")
|
if exists("b:current_syntax")
|
||||||
finish
|
finish
|
||||||
@@ -17,68 +19,11 @@ syn keyword autohotkeyTodo
|
|||||||
\ contained
|
\ contained
|
||||||
\ TODO FIXME XXX NOTE
|
\ TODO FIXME XXX NOTE
|
||||||
|
|
||||||
syn cluster autohotkeyCommentGroup
|
" only these chars are valid as escape sequences: ,%`;nrbtvaf
|
||||||
\ contains=
|
" https://autohotkey.com/docs/commands/_EscapeChar.htm
|
||||||
\ autohotkeyTodo,
|
|
||||||
\ @Spell
|
|
||||||
|
|
||||||
syn match autohotkeyComment
|
|
||||||
\ display
|
|
||||||
\ contains=@autohotkeyCommentGroup
|
|
||||||
\ '`\@<!;.*$'
|
|
||||||
|
|
||||||
syn region autohotkeyComment
|
|
||||||
\ contains=@autohotkeyCommentGroup
|
|
||||||
\ matchgroup=autohotkeyCommentStart
|
|
||||||
\ start='/\*'
|
|
||||||
\ end='\*/'
|
|
||||||
|
|
||||||
syn match autohotkeyEscape
|
syn match autohotkeyEscape
|
||||||
\ display
|
\ display
|
||||||
\ '`.'
|
\ '`[,%`;nrbtvaf]'
|
||||||
|
|
||||||
syn match autohotkeyHotkey
|
|
||||||
\ contains=autohotkeyKey,
|
|
||||||
\ autohotkeyHotkeyDelimiter
|
|
||||||
\ display
|
|
||||||
\ '^.\{-}::'
|
|
||||||
|
|
||||||
syn match autohotkeyKey
|
|
||||||
\ contained
|
|
||||||
\ display
|
|
||||||
\ '^.\{-}'
|
|
||||||
|
|
||||||
syn match autohotkeyDelimiter
|
|
||||||
\ contained
|
|
||||||
\ display
|
|
||||||
\ '::'
|
|
||||||
|
|
||||||
syn match autohotkeyHotstringDefinition
|
|
||||||
\ contains=autohotkeyHotstring,
|
|
||||||
\ autohotkeyHotstringDelimiter
|
|
||||||
\ display
|
|
||||||
\ '^:\%(B0\|C1\|K\d\+\|P\d\+\|S[IPE]\|Z\d\=\|[*?COR]\)*:.\{-}::'
|
|
||||||
|
|
||||||
syn match autohotkeyHotstring
|
|
||||||
\ contained
|
|
||||||
\ display
|
|
||||||
\ '.\{-}'
|
|
||||||
|
|
||||||
syn match autohotkeyHotstringDelimiter
|
|
||||||
\ contained
|
|
||||||
\ display
|
|
||||||
\ '::'
|
|
||||||
|
|
||||||
syn match autohotkeyHotstringDelimiter
|
|
||||||
\ contains=autohotkeyHotstringOptions
|
|
||||||
\ contained
|
|
||||||
\ display
|
|
||||||
\ ':\%(B0\|C1\|K\d\+\|P\d\+\|S[IPE]\|Z\d\=\|[*?COR]\):'
|
|
||||||
|
|
||||||
syn match autohotkeyHotstringOptions
|
|
||||||
\ contained
|
|
||||||
\ display
|
|
||||||
\ '\%(B0\|C1\|K\d\+\|P\d\+\|S[IPE]\|Z\d\=\|[*?COR]\)'
|
|
||||||
|
|
||||||
syn region autohotkeyString
|
syn region autohotkeyString
|
||||||
\ display
|
\ display
|
||||||
@@ -88,39 +33,46 @@ syn region autohotkeyString
|
|||||||
\ end=+"+
|
\ end=+"+
|
||||||
\ contains=autohotkeyEscape
|
\ contains=autohotkeyEscape
|
||||||
|
|
||||||
syn region autohotkeyVariable
|
syn match autohotkeyVariable
|
||||||
\ display
|
\ display
|
||||||
\ oneline
|
\ oneline
|
||||||
\ contains=autohotkeyBuiltinVariable
|
\ contains=autohotkeyBuiltinVariable
|
||||||
\ matchgroup=autohotkeyVariableDelimiter
|
|
||||||
\ start="%"
|
|
||||||
\ end="%"
|
|
||||||
\ keepend
|
\ keepend
|
||||||
|
\ '%\S\{-}%'
|
||||||
|
|
||||||
syn keyword autohotkeyBuiltinVariable
|
syn keyword autohotkeyBuiltinVariable
|
||||||
\ A_Space A_Tab
|
\ A_Space A_Tab
|
||||||
\ A_WorkingDir A_ScriptDir A_ScriptName A_ScriptFullPath A_LineNumber
|
\ A_WorkingDir A_ScriptDir A_ScriptName A_ScriptFullPath A_ScriptHwnd A_LineNumber
|
||||||
\ A_LineFile A_AhkVersion A_AhkPAth A_IsCompiled A_ExitReason
|
\ A_LineFile A_ThisFunc A_ThisLabel A_AhkVersion A_AhkPath A_IsUnicode A_IsCompiled A_ExitReason
|
||||||
\ A_YYYY A_MM A_DD A_MMMM A_MMM A_DDDD A_DDD A_WDay A_YWeek A_Hour A_Min
|
\ A_YYYY A_MM A_DD A_MMMM A_MMM A_DDDD A_DDD A_WDay A_YDay A_YWeek A_Hour A_Min
|
||||||
|
\ A_Mon A_Year A_MDay A_NumBatchLines
|
||||||
\ A_Sec A_MSec A_Now A_NowUTC A_TickCount
|
\ A_Sec A_MSec A_Now A_NowUTC A_TickCount
|
||||||
\ A_IsSuspended A_BatchLines A_TitleMatchMode A_TitleMatchModeSpeed
|
\ A_IsSuspended A_IsPaused A_IsCritical A_BatchLines A_TitleMatchMode A_TitleMatchModeSpeed
|
||||||
\ A_DetectHiddenWindows A_DetectHiddenText A_AutoTrim A_STringCaseSense
|
\ A_DetectHiddenWindows A_DetectHiddenText A_AutoTrim A_StringCaseSense
|
||||||
\ A_FormatInteger A_FormatFloat A_KeyDelay A_WinDelay A_ControlDelay
|
\ A_FileEncoding A_FormatInteger A_FormatFloat A_KeyDelay A_WinDelay A_ControlDelay
|
||||||
\ A_MouseDelay A_DefaultMouseSpeed A_IconHidden A_IconTip A_IconFile
|
\ A_SendMode A_SendLevel A_StoreCapsLockMode A_KeyDelay A_KeyDelayDuration
|
||||||
|
\ A_KeyDelayPlay A_KeyDelayPlayDuration A_MouseDelayPlay
|
||||||
|
\ A_MouseDelay A_DefaultMouseSpeed A_RegView A_IconHidden A_IconTip A_IconFile
|
||||||
|
\ A_CoordModeToolTip A_CoordModePixel A_CoordModeMouse A_CoordModeCaret A_CoordModeMenu
|
||||||
\ A_IconNumber
|
\ A_IconNumber
|
||||||
\ A_TimeIdle A_TimeIdlePhysical
|
\ A_TimeIdle A_TimeIdlePhysical A_DefaultGui A_DefaultListView A_DefaultTreeView
|
||||||
\ A_Gui A_GuiControl A_GuiWidth A_GuiHeight A_GuiX A_GuiY A_GuiEvent
|
\ A_Gui A_GuiControl A_GuiWidth A_GuiHeight A_GuiX A_GuiY A_GuiEvent
|
||||||
\ A_GuiControlEvent A_EventInfo
|
\ A_GuiControlEvent A_EventInfo
|
||||||
\ A_ThisMenuItem A_ThisMenu A_ThisMenuItemPos A_ThisHotkey A_PriorHotkey
|
\ A_ThisMenuItem A_ThisMenu A_ThisMenuItemPos A_ThisHotkey A_PriorHotkey
|
||||||
\ A_TimeSinceThisHotkey A_TimeSincePriorHotkey A_EndChar
|
\ A_PriorKey A_TimeSinceThisHotkey A_TimeSincePriorHotkey A_EndChar
|
||||||
\ ComSpec A_Temp A_OSType A_OSVersion A_Language A_ComputerName A_UserName
|
\ ComSpec A_Temp A_OSType A_OSVersion A_Language A_ComputerName A_UserName
|
||||||
|
\ A_Is64BitOS A_PtrSize
|
||||||
\ A_WinDir A_ProgramFiles ProgramFiles A_AppData A_AppDataCommon A_Desktop
|
\ A_WinDir A_ProgramFiles ProgramFiles A_AppData A_AppDataCommon A_Desktop
|
||||||
\ A_DesktopCommon A_StartMenu A_StartMenuCommon A_Programs
|
\ A_DesktopCommon A_StartMenu A_StartMenuCommon A_Programs
|
||||||
\ A_ProgramsCommon A_Startup A_StartupCommon A_MyDocuments A_IsAdmin
|
\ A_ProgramsCommon A_Startup A_StartupCommon A_MyDocuments A_IsAdmin
|
||||||
\ A_ScreenWidth A_ScreenHeight A_IPAddress1 A_IPAddress2 A_IPAddress3
|
\ A_ScreenWidth A_ScreenHeight A_ScreenDPI A_IPAddress1 A_IPAddress2 A_IPAddress3
|
||||||
\ A_IPAddress4
|
\ A_IPAddress4
|
||||||
\ A_Cursor A_CaretX A_CaretY Clipboard ClipboardAll ErrorLevel A_LastError
|
\ A_Cursor A_CaretX A_CaretY Clipboard ClipboardAll ErrorLevel A_LastError
|
||||||
\ A_Index A_LoopFileName A_LoopRegName A_LoopReadLine A_LoopField
|
\ A_Index A_LoopFileName A_LoopRegName A_LoopReadLine A_LoopField
|
||||||
|
\ A_LoopFileExt A_LoopFileFullPath A_LoopFileLongPath A_LoopFileShortPath
|
||||||
|
\ A_LoopFileShortName A_LoopFileDir A_LoopFileTimeModified A_LoopFileTimeCreated
|
||||||
|
\ A_LoopFileTimeAccessed A_LoopFileAttrib A_LoopFileSize A_LoopFileSizeKB A_LoopFileSizeMB
|
||||||
|
\ A_LoopRegType A_LoopRegKey A_LoopRegSubKey A_LoopRegTimeModified
|
||||||
|
|
||||||
syn match autohotkeyBuiltinVariable
|
syn match autohotkeyBuiltinVariable
|
||||||
\ contained
|
\ contained
|
||||||
@@ -130,7 +82,7 @@ syn match autohotkeyBuiltinVariable
|
|||||||
syn keyword autohotkeyCommand
|
syn keyword autohotkeyCommand
|
||||||
\ ClipWait EnvGet EnvSet EnvUpdate
|
\ ClipWait EnvGet EnvSet EnvUpdate
|
||||||
\ Drive DriveGet DriveSpaceFree FileAppend FileCopy FileCopyDir
|
\ Drive DriveGet DriveSpaceFree FileAppend FileCopy FileCopyDir
|
||||||
\ FileCreateDir FileCreateShortcut FileDelete FileGetAttrib
|
\ FileCreateDir FileCreateShortcut FileDelete FileGetAttrib FileEncoding
|
||||||
\ FileGetShortcut FileGetSize FileGetTime FileGetVersion FileInstall
|
\ FileGetShortcut FileGetSize FileGetTime FileGetVersion FileInstall
|
||||||
\ FileMove FileMoveDir FileReadLine FileRead FileRecycle FileRecycleEmpty
|
\ FileMove FileMoveDir FileReadLine FileRead FileRecycle FileRecycleEmpty
|
||||||
\ FileRemoveDir FileSelectFolder FileSelectFile FileSetAttrib FileSetTime
|
\ FileRemoveDir FileSelectFolder FileSelectFile FileSetAttrib FileSetTime
|
||||||
@@ -153,7 +105,7 @@ syn keyword autohotkeyCommand
|
|||||||
\ SoundSetWaveVolume
|
\ SoundSetWaveVolume
|
||||||
\ FormatTime IfInString IfNotInString Sort StringCaseSense StringGetPos
|
\ FormatTime IfInString IfNotInString Sort StringCaseSense StringGetPos
|
||||||
\ StringLeft StringRight StringLower StringUpper StringMid StringReplace
|
\ StringLeft StringRight StringLower StringUpper StringMid StringReplace
|
||||||
\ StringSplit StringTrimLeft StringTrimRight
|
\ StringSplit StringTrimLeft StringTrimRight StringLen
|
||||||
\ Control ControlClick ControlFocus ControlGet ControlGetFocus
|
\ Control ControlClick ControlFocus ControlGet ControlGetFocus
|
||||||
\ ControlGetPos ControlGetText ControlMove ControlSend ControlSendRaw
|
\ ControlGetPos ControlGetText ControlMove ControlSend ControlSendRaw
|
||||||
\ ControlSetText Menu PostMessage SendMessage SetControlDelay
|
\ ControlSetText Menu PostMessage SendMessage SetControlDelay
|
||||||
@@ -164,12 +116,16 @@ syn keyword autohotkeyCommand
|
|||||||
\ WinGetText WinGetTitle WinHide WinKill WinMaximize WinMinimize
|
\ WinGetText WinGetTitle WinHide WinKill WinMaximize WinMinimize
|
||||||
\ WinMinimizeAll WinMinimizeAllUndo WinMove WinRestore WinSet
|
\ WinMinimizeAll WinMinimizeAllUndo WinMove WinRestore WinSet
|
||||||
\ WinSetTitle WinShow WinWait WinWaitActive WinWaitNotActive WinWaitClose
|
\ WinSetTitle WinShow WinWait WinWaitActive WinWaitNotActive WinWaitClose
|
||||||
|
\ SetCapsLockState SetNumLockState SetScrollLockState
|
||||||
|
|
||||||
syn keyword autohotkeyFunction
|
syn keyword autohotkeyFunction
|
||||||
\ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr
|
\ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr
|
||||||
\ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage
|
\ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage
|
||||||
\ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan
|
\ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan
|
||||||
\ FileExist GetKeyState
|
\ FileExist GetKeyState NumGet NumPut StrGet StrPut RegisterCallback
|
||||||
|
\ IsFunc Trim LTrim RTrim IsObject Object Array FileOpen
|
||||||
|
\ ComObjActive ComObjArray ComObjConnect ComObjCreate ComObjGet
|
||||||
|
\ ComObjError ComObjFlags ComObjQuery ComObjType ComObjValue ComObject
|
||||||
|
|
||||||
syn keyword autohotkeyStatement
|
syn keyword autohotkeyStatement
|
||||||
\ Break Continue Exit ExitApp Gosub Goto OnExit Pause Return
|
\ Break Continue Exit ExitApp Gosub Goto OnExit Pause Return
|
||||||
@@ -180,7 +136,9 @@ syn keyword autohotkeyRepeat
|
|||||||
|
|
||||||
syn keyword autohotkeyConditional
|
syn keyword autohotkeyConditional
|
||||||
\ IfExist IfNotExist If IfEqual IfLess IfGreater Else
|
\ IfExist IfNotExist If IfEqual IfLess IfGreater Else
|
||||||
\ IfWinExist IfWinNotExist
|
\ IfWinExist IfWinNotExist IfWinActive IfWinNotActive
|
||||||
|
\ IfNotEqual IfLessOrEqual IfGreaterOrEqual
|
||||||
|
\ while until for in
|
||||||
|
|
||||||
syn match autohotkeyPreProcStart
|
syn match autohotkeyPreProcStart
|
||||||
\ nextgroup=
|
\ nextgroup=
|
||||||
@@ -200,6 +158,7 @@ syn keyword autohotkeyPreProc
|
|||||||
\ HotkeyInterval HotKeyModifierTimeout
|
\ HotkeyInterval HotKeyModifierTimeout
|
||||||
\ Hotstring
|
\ Hotstring
|
||||||
\ IfWinActive IfWinNotActive IfWinExist IfWinNotExist
|
\ IfWinActive IfWinNotActive IfWinExist IfWinNotExist
|
||||||
|
\ If IfTimeout
|
||||||
\ MaxHotkeysPerInterval MaxThreads MaxThreadsBuffer MaxThreadsPerHotkey
|
\ MaxHotkeysPerInterval MaxThreads MaxThreadsBuffer MaxThreadsPerHotkey
|
||||||
\ UseHook InstallKeybdHook InstallMouseHook
|
\ UseHook InstallKeybdHook InstallMouseHook
|
||||||
\ KeyHistory
|
\ KeyHistory
|
||||||
@@ -213,6 +172,10 @@ syn keyword autohotkeyPreProc
|
|||||||
\ MaxMem
|
\ MaxMem
|
||||||
\ NoEnv
|
\ NoEnv
|
||||||
\ Persistent
|
\ Persistent
|
||||||
|
\ LTrim
|
||||||
|
\ InputLevel
|
||||||
|
\ MenuMaskKey
|
||||||
|
\ Warn
|
||||||
|
|
||||||
syn keyword autohotkeyMatchClass
|
syn keyword autohotkeyMatchClass
|
||||||
\ ahk_group ahk_class ahk_id ahk_pid
|
\ ahk_group ahk_class ahk_id ahk_pid
|
||||||
@@ -243,11 +206,74 @@ syn match autohotkeyFloat
|
|||||||
syn keyword autohotkeyType
|
syn keyword autohotkeyType
|
||||||
\ local
|
\ local
|
||||||
\ global
|
\ global
|
||||||
|
\ static
|
||||||
|
\ byref
|
||||||
|
|
||||||
syn keyword autohotkeyBoolean
|
syn keyword autohotkeyBoolean
|
||||||
\ true
|
\ true
|
||||||
\ false
|
\ false
|
||||||
|
|
||||||
|
syn match autohotkeyHotkey
|
||||||
|
\ contains=autohotkeyKey,
|
||||||
|
\ autohotkeyHotkeyDelimiter
|
||||||
|
\ display
|
||||||
|
\ '^.\{-}::'
|
||||||
|
|
||||||
|
syn match autohotkeyKey
|
||||||
|
\ contained
|
||||||
|
\ display
|
||||||
|
\ '^.\{-}'
|
||||||
|
|
||||||
|
syn match autohotkeyDelimiter
|
||||||
|
\ contained
|
||||||
|
\ display
|
||||||
|
\ '::'
|
||||||
|
|
||||||
|
" allowable hotstring options:
|
||||||
|
" https://autohotkey.com/docs/Hotstrings.htm
|
||||||
|
syn match autohotkeyHotstringDefinition
|
||||||
|
\ contains=autohotkeyHotstring,
|
||||||
|
\ autohotkeyHotstringDelimiter
|
||||||
|
\ display
|
||||||
|
\ '^\s*:\%([*?]\|[BORZ]0\?\|C[01]\?\|K\d\+\|P\d\+\|S[IPE]\)*:.\{-}::'
|
||||||
|
|
||||||
|
syn match autohotkeyHotstring
|
||||||
|
\ contained
|
||||||
|
\ display
|
||||||
|
\ '.\{-}'
|
||||||
|
|
||||||
|
syn match autohotkeyHotstringDelimiter
|
||||||
|
\ contained
|
||||||
|
\ display
|
||||||
|
\ '::'
|
||||||
|
|
||||||
|
syn match autohotkeyHotstringDelimiter
|
||||||
|
\ contains=autohotkeyHotstringOptions
|
||||||
|
\ contained
|
||||||
|
\ display
|
||||||
|
\ ':\%([*?]\|[BORZ]0\?\|C[01]\?\|K\d\+\|P\d\+\|S[IPE]\)*:'
|
||||||
|
|
||||||
|
syn match autohotkeyHotstringOptions
|
||||||
|
\ contained
|
||||||
|
\ display
|
||||||
|
\ '\%([*?]\|[BORZ]0\?\|C[01]\?\|K\d\+\|P\d\+\|S[IPE]\)*'
|
||||||
|
|
||||||
|
syn cluster autohotkeyCommentGroup
|
||||||
|
\ contains=
|
||||||
|
\ autohotkeyTodo,
|
||||||
|
\ @Spell
|
||||||
|
|
||||||
|
syn match autohotkeyComment
|
||||||
|
\ display
|
||||||
|
\ contains=@autohotkeyCommentGroup
|
||||||
|
\ '\%(^;\|\s\+;\).*$'
|
||||||
|
|
||||||
|
syn region autohotkeyComment
|
||||||
|
\ contains=@autohotkeyCommentGroup
|
||||||
|
\ matchgroup=autohotkeyCommentStart
|
||||||
|
\ start='^\s*/\*'
|
||||||
|
\ end='^\s*\*/'
|
||||||
|
|
||||||
" TODO: Shouldn't we look for g:, b:, variables before defaulting to
|
" TODO: Shouldn't we look for g:, b:, variables before defaulting to
|
||||||
" something?
|
" something?
|
||||||
if exists("g:autohotkey_syntax_sync_minlines")
|
if exists("g:autohotkey_syntax_sync_minlines")
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
" Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
|
" Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
|
||||||
" Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
|
" Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
|
||||||
" Repository: https://notabug.org/jorgesumle/vim-html-syntax
|
" Repository: https://notabug.org/jorgesumle/vim-html-syntax
|
||||||
" Last Change: 2017 Jan 04
|
" Last Change: 2017 Jan 21
|
||||||
" included patch from Jorge Maldonado Ventura
|
" included patch from Jorge Maldonado Ventura
|
||||||
|
|
||||||
" Please check :help html.vim for some comments and a description of the options
|
" Please check :help html.vim for some comments and a description of the options
|
||||||
@@ -55,9 +55,9 @@ syn keyword htmlTagName contained colgroup del fieldset iframe ins legend
|
|||||||
syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
|
syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
|
||||||
|
|
||||||
" new html 5 tags
|
" new html 5 tags
|
||||||
syn keyword htmlTagName contained article aside audio bdi canvas datalist
|
syn keyword htmlTagName contained article aside audio bdi canvas data
|
||||||
syn keyword htmlTagName contained details embed figcaption figure
|
syn keyword htmlTagName contained datalist details embed figcaption figure
|
||||||
syn keyword htmlTagName contained footer header hgroup main mark
|
syn keyword htmlTagName contained footer header hgroup keygen main mark
|
||||||
syn keyword htmlTagName contained menuitem meter nav output picture
|
syn keyword htmlTagName contained menuitem meter nav output picture
|
||||||
syn keyword htmlTagName contained progress rb rp rt rtc ruby section
|
syn keyword htmlTagName contained progress rb rp rt rtc ruby section
|
||||||
syn keyword htmlTagName contained slot source template time track video wbr
|
syn keyword htmlTagName contained slot source template time track video wbr
|
||||||
@@ -97,8 +97,17 @@ syn keyword htmlArg contained rules scheme scope span standby style
|
|||||||
syn keyword htmlArg contained summary tabindex valuetype version
|
syn keyword htmlArg contained summary tabindex valuetype version
|
||||||
|
|
||||||
" html 5 arg names
|
" html 5 arg names
|
||||||
syn keyword htmlArg contained contenteditable contextmenu draggable dropzone
|
syn keyword htmlArg contained allowfullscreen async autocomplete autofocus
|
||||||
syn keyword htmlArg contained hidden spellcheck title translate
|
syn keyword htmlArg contained autoplay challenge contenteditable contextmenu
|
||||||
|
syn keyword htmlArg contained controls crossorigin default dirname download
|
||||||
|
syn keyword htmlArg contained draggable dropzone form formaction formenctype
|
||||||
|
syn keyword htmlArg contained formmethod formnovalidate formtarget hidden
|
||||||
|
syn keyword htmlArg contained high icon inputmode keytype kind list loop low
|
||||||
|
syn keyword htmlArg contained max min minlength muted nonce novalidate open
|
||||||
|
syn keyword htmlArg contained optimum pattern placeholder poster preload
|
||||||
|
syn keyword htmlArg contained radiogroup required reversed sandbox spellcheck
|
||||||
|
syn keyword htmlArg contained sizes srcset srcdoc srclang step title translate
|
||||||
|
syn keyword htmlArg contained typemustmatch
|
||||||
|
|
||||||
" special characters
|
" special characters
|
||||||
syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
|
syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: Matlab
|
" Language: Matlab
|
||||||
" Maintainer: Maurizio Tranchero - maurizio(.)tranchero(@)gmail(.)com
|
" Maintainer: Alex Burka <vim@alexburka.com>
|
||||||
" Credits: Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
|
" Credits: Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
|
||||||
|
" Maurizio Tranchero - maurizio(.)tranchero(@)gmail(.)com
|
||||||
" Original author: Mario Eusebio
|
" Original author: Mario Eusebio
|
||||||
" Last Change: Wed Jan 13 11:12:34 CET 2010
|
" Last Change: Mon Jan 23 2017
|
||||||
" sinh added to matlab implicit commands
|
" added support for cell mode
|
||||||
" Change History:
|
" Change History:
|
||||||
|
" - now highlights cell-mode separator comments
|
||||||
" - 'global' and 'persistent' keyword are now recognized
|
" - 'global' and 'persistent' keyword are now recognized
|
||||||
|
|
||||||
" quit when a syntax file was already loaded
|
" quit when a syntax file was already loaded
|
||||||
@@ -60,6 +62,7 @@ syn match matlabComment "%.*$" contains=matlabTodo,matlabTab
|
|||||||
" MT_ADDON - correctly highlights words after '...' as comments
|
" MT_ADDON - correctly highlights words after '...' as comments
|
||||||
syn match matlabComment "\.\.\..*$" contains=matlabTodo,matlabTab
|
syn match matlabComment "\.\.\..*$" contains=matlabTodo,matlabTab
|
||||||
syn region matlabMultilineComment start=+%{+ end=+%}+ contains=matlabTodo,matlabTab
|
syn region matlabMultilineComment start=+%{+ end=+%}+ contains=matlabTodo,matlabTab
|
||||||
|
syn match matlabCellComment "^%%.*$"
|
||||||
|
|
||||||
syn keyword matlabOperator break zeros default margin round ones rand
|
syn keyword matlabOperator break zeros default margin round ones rand
|
||||||
syn keyword matlabOperator ceil floor size clear zeros eye mean std cov
|
syn keyword matlabOperator ceil floor size clear zeros eye mean std cov
|
||||||
@@ -96,6 +99,7 @@ hi def link matlabOO Statement
|
|||||||
hi def link matlabSemicolon SpecialChar
|
hi def link matlabSemicolon SpecialChar
|
||||||
hi def link matlabComment Comment
|
hi def link matlabComment Comment
|
||||||
hi def link matlabMultilineComment Comment
|
hi def link matlabMultilineComment Comment
|
||||||
|
hi def link matlabCellComment Todo
|
||||||
hi def link matlabScope Type
|
hi def link matlabScope Type
|
||||||
|
|
||||||
hi def link matlabArithmeticOperator matlabOperator
|
hi def link matlabArithmeticOperator matlabOperator
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: NASM - The Netwide Assembler (v0.98)
|
" Language: NASM - The Netwide Assembler (v0.98)
|
||||||
" Maintainer: Andriy Sokolov <andriy145@gmail.com>
|
" Maintainer: Andrii Sokolov <andriy145@gmail.com>
|
||||||
" Original Author: Manuel M.H. Stol <Manuel.Stol@allieddata.nl>
|
" Original Author: Manuel M.H. Stol <Manuel.Stol@allieddata.nl>
|
||||||
" Former Maintainer: Manuel M.H. Stol <Manuel.Stol@allieddata.nl>
|
" Former Maintainer: Manuel M.H. Stol <Manuel.Stol@allieddata.nl>
|
||||||
" Last Change: 2012 Feb 7
|
" Contributors: Leonard König <leonard.r.koenig@gmail.com> (C string highlighting)
|
||||||
|
" Last Change: 2017 Jan 23
|
||||||
" NASM Home: http://www.nasm.us/
|
" NASM Home: http://www.nasm.us/
|
||||||
|
|
||||||
|
|
||||||
@@ -67,8 +68,23 @@ syn match nasmLabelError "\<\~\s*\(\k*\s*:\|\$\=\.\k*\)"
|
|||||||
|
|
||||||
|
|
||||||
" Constants:
|
" Constants:
|
||||||
syn match nasmStringError +["']+
|
syn match nasmStringError +["'`]+
|
||||||
|
" NASM is case sensitive here: eg. u-prefix allows for 4-digit, U-prefix for
|
||||||
|
" 8-digit Unicode characters
|
||||||
|
syn case match
|
||||||
|
" one-char escape-sequences
|
||||||
|
syn match nasmCStringEscape display contained "\\[’"‘\\\?abtnvfre]"
|
||||||
|
" hex and octal numbers
|
||||||
|
syn match nasmCStringEscape display contained "\\\(x\x\{2}\|\o\{1,3}\)"
|
||||||
|
" Unicode characters
|
||||||
|
syn match nasmCStringEscape display contained "\\\(u\x\{4}\|U\x\{8}\)"
|
||||||
|
" ISO C99 format strings (copied from cFormat in runtime/syntax/c.vim)
|
||||||
|
syn match nasmCStringFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
|
||||||
|
syn match nasmCStringFormat display "%%" contained
|
||||||
syn match nasmString +\("[^"]\{-}"\|'[^']\{-}'\)+
|
syn match nasmString +\("[^"]\{-}"\|'[^']\{-}'\)+
|
||||||
|
" Highlight C escape- and format-sequences within ``-strings
|
||||||
|
syn match nasmCString +\(`[^`]\{-}`\)+ contains=nasmCStringEscape,nasmCStringFormat extend
|
||||||
|
syn case ignore
|
||||||
syn match nasmBinNumber "\<[0-1]\+b\>"
|
syn match nasmBinNumber "\<[0-1]\+b\>"
|
||||||
syn match nasmBinNumber "\<\~[0-1]\+b\>"lc=1
|
syn match nasmBinNumber "\<\~[0-1]\+b\>"lc=1
|
||||||
syn match nasmOctNumber "\<\o\+q\>"
|
syn match nasmOctNumber "\<\o\+q\>"
|
||||||
@@ -443,7 +459,10 @@ hi def link nasmInCommentTodo Todo
|
|||||||
|
|
||||||
" Constant Group:
|
" Constant Group:
|
||||||
hi def link nasmString String
|
hi def link nasmString String
|
||||||
|
hi def link nasmCString String
|
||||||
hi def link nasmStringError Error
|
hi def link nasmStringError Error
|
||||||
|
hi def link nasmCStringEscape SpecialChar
|
||||||
|
hi def link nasmCStringFormat SpecialChar
|
||||||
hi def link nasmBinNumber Number
|
hi def link nasmBinNumber Number
|
||||||
hi def link nasmOctNumber Number
|
hi def link nasmOctNumber Number
|
||||||
hi def link nasmDecNumber Number
|
hi def link nasmDecNumber Number
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
" Language: shell (sh) Korn shell (ksh) bash (sh)
|
" Language: shell (sh) Korn shell (ksh) bash (sh)
|
||||||
" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
|
" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
|
||||||
" Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int>
|
" Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int>
|
||||||
" Last Change: Sep 22, 2016
|
" Last Change: Jan 03, 2017
|
||||||
" Version: 165
|
" Version: 167
|
||||||
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
|
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
|
||||||
" For options and settings, please use: :help ft-sh-syntax
|
" For options and settings, please use: :help ft-sh-syntax
|
||||||
" This file includes many ideas from Eric Brunet (eric.brunet@ens.fr)
|
" This file includes many ideas from Eric Brunet (eric.brunet@ens.fr)
|
||||||
@@ -305,7 +305,7 @@ if exists("b:is_bash")
|
|||||||
syn cluster shCommandSubList add=bashSpecialVariables,bashStatement
|
syn cluster shCommandSubList add=bashSpecialVariables,bashStatement
|
||||||
syn cluster shCaseList add=bashAdminStatement,bashStatement
|
syn cluster shCaseList add=bashAdminStatement,bashStatement
|
||||||
syn keyword bashSpecialVariables contained auto_resume BASH BASH_ALIASES BASH_ALIASES BASH_ARGC BASH_ARGC BASH_ARGV BASH_ARGV BASH_CMDS BASH_CMDS BASH_COMMAND BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_EXECUTION_STRING BASH_LINENO BASH_LINENO BASHOPTS BASHOPTS BASHPID BASHPID BASH_REMATCH BASH_REMATCH BASH_SOURCE BASH_SOURCE BASH_SUBSHELL BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD BASH_XTRACEFD CDPATH COLUMNS COLUMNS COMP_CWORD COMP_CWORD COMP_KEY COMP_KEY COMP_LINE COMP_LINE COMP_POINT COMP_POINT COMPREPLY COMPREPLY COMP_TYPE COMP_TYPE COMP_WORDBREAKS COMP_WORDBREAKS COMP_WORDS COMP_WORDS COPROC COPROC DIRSTACK EMACS EMACS ENV ENV EUID FCEDIT FIGNORE FUNCNAME FUNCNAME FUNCNEST FUNCNEST GLOBIGNORE GROUPS histchars HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_NUMERIC LINENO LINES LINES MACHTYPE MAIL MAILCHECK MAILPATH MAPFILE MAPFILE OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS POSIXLY_CORRECT POSIXLY_CORRECT PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM READLINE_LINE READLINE_LINE READLINE_POINT READLINE_POINT REPLY SECONDS SHELL SHELL SHELLOPTS SHLVL TIMEFORMAT TIMEOUT TMPDIR TMPDIR UID
|
syn keyword bashSpecialVariables contained auto_resume BASH BASH_ALIASES BASH_ALIASES BASH_ARGC BASH_ARGC BASH_ARGV BASH_ARGV BASH_CMDS BASH_CMDS BASH_COMMAND BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_EXECUTION_STRING BASH_LINENO BASH_LINENO BASHOPTS BASHOPTS BASHPID BASHPID BASH_REMATCH BASH_REMATCH BASH_SOURCE BASH_SOURCE BASH_SUBSHELL BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD BASH_XTRACEFD CDPATH COLUMNS COLUMNS COMP_CWORD COMP_CWORD COMP_KEY COMP_KEY COMP_LINE COMP_LINE COMP_POINT COMP_POINT COMPREPLY COMPREPLY COMP_TYPE COMP_TYPE COMP_WORDBREAKS COMP_WORDBREAKS COMP_WORDS COMP_WORDS COPROC COPROC DIRSTACK EMACS EMACS ENV ENV EUID FCEDIT FIGNORE FUNCNAME FUNCNAME FUNCNEST FUNCNEST GLOBIGNORE GROUPS histchars HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_NUMERIC LINENO LINES LINES MACHTYPE MAIL MAILCHECK MAILPATH MAPFILE MAPFILE OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS POSIXLY_CORRECT POSIXLY_CORRECT PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM READLINE_LINE READLINE_LINE READLINE_POINT READLINE_POINT REPLY SECONDS SHELL SHELL SHELLOPTS SHLVL TIMEFORMAT TIMEOUT TMPDIR TMPDIR UID
|
||||||
syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail
|
syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail
|
||||||
syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop
|
syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop
|
||||||
syn keyword bashStatement command compgen
|
syn keyword bashStatement command compgen
|
||||||
endif
|
endif
|
||||||
@@ -376,8 +376,8 @@ ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc06 start="<<-\s*\"\z([^ \
|
|||||||
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc07 end="^\z1\s*$" contains=@shDblQuoteList
|
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc07 end="^\z1\s*$" contains=@shDblQuoteList
|
||||||
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<\s*\\\_$\_s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc08 end="^\z1\s*$"
|
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<\s*\\\_$\_s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc08 end="^\z1\s*$"
|
||||||
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc09 end="^\z1\s*$"
|
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc09 end="^\z1\s*$"
|
||||||
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc10 end="^\s*\z1\s*$"
|
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc10 end="^\s*\z1\s*$"
|
||||||
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<-\s*\\\_$\_s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc11 end="^\s*\z1\s*$"
|
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<-\s*\\\_$\_s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc11 end="^\s*\z1\s*$"
|
||||||
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc12 end="^\s*\z1\s*$"
|
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc12 end="^\s*\z1\s*$"
|
||||||
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<-\s*\\\_$\_s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc13 end="^\s*\z1\s*$"
|
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<-\s*\\\_$\_s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc13 end="^\s*\z1\s*$"
|
||||||
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<\\\z([^ \t|>]\+\)" matchgroup=shHereDoc14 end="^\z1\s*$"
|
ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<\\\z([^ \t|>]\+\)" matchgroup=shHereDoc14 end="^\z1\s*$"
|
||||||
@@ -386,7 +386,7 @@ ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<-\s*\\\z([^ \
|
|||||||
" Here Strings: {{{1
|
" Here Strings: {{{1
|
||||||
" =============
|
" =============
|
||||||
" available for: bash; ksh (really should be ksh93 only) but not if its a posix
|
" available for: bash; ksh (really should be ksh93 only) but not if its a posix
|
||||||
if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("g:is_posix"))
|
if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_posix"))
|
||||||
syn match shHereString "<<<" skipwhite nextgroup=shCmdParenRegion
|
syn match shHereString "<<<" skipwhite nextgroup=shCmdParenRegion
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -407,7 +407,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" Functions: {{{1
|
" Functions: {{{1
|
||||||
if !exists("g:is_posix")
|
if !exists("b:is_posix")
|
||||||
syn keyword shFunctionKey function skipwhite skipnl nextgroup=shFunctionTwo
|
syn keyword shFunctionKey function skipwhite skipnl nextgroup=shFunctionTwo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -533,7 +533,7 @@ endif
|
|||||||
" ====================
|
" ====================
|
||||||
if exists("b:is_kornshell") || exists("b:is_bash")
|
if exists("b:is_kornshell") || exists("b:is_bash")
|
||||||
syn keyword shStatement autoload bg false fc fg functions getopts hash history integer jobs let nohup printf r stop suspend times true type unalias whence
|
syn keyword shStatement autoload bg false fc fg functions getopts hash history integer jobs let nohup printf r stop suspend times true type unalias whence
|
||||||
if exists("g:is_posix")
|
if exists("b:is_posix")
|
||||||
syn keyword shStatement command
|
syn keyword shStatement command
|
||||||
else
|
else
|
||||||
syn keyword shStatement time
|
syn keyword shStatement time
|
||||||
@@ -542,7 +542,7 @@ if exists("b:is_kornshell") || exists("b:is_bash")
|
|||||||
" Useful bash Keywords: {{{1
|
" Useful bash Keywords: {{{1
|
||||||
" =====================
|
" =====================
|
||||||
if exists("b:is_bash")
|
if exists("b:is_bash")
|
||||||
syn keyword shStatement bind builtin dirs disown enable help local logout popd pushd shopt source
|
syn keyword shStatement bind builtin dirs disown enable help logout popd pushd shopt source
|
||||||
else
|
else
|
||||||
syn keyword shStatement login newgrp
|
syn keyword shStatement login newgrp
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: TeX
|
" Language: TeX
|
||||||
" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
|
" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
|
||||||
" Last Change: Sep 20, 2016
|
" Last Change: Dec 07, 2016
|
||||||
" Version: 101
|
" Version: 102
|
||||||
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
|
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
|
||||||
"
|
"
|
||||||
" Notes: {{{1
|
" Notes: {{{1
|
||||||
@@ -494,13 +494,11 @@ if !exists("g:tex_no_math")
|
|||||||
\ ['\\backslash' , '\'] ,
|
\ ['\\backslash' , '\'] ,
|
||||||
\ ['\\downarrow' , '↓'] ,
|
\ ['\\downarrow' , '↓'] ,
|
||||||
\ ['\\Downarrow' , '⇓'] ,
|
\ ['\\Downarrow' , '⇓'] ,
|
||||||
\ ['\\langle' , '<'] ,
|
|
||||||
\ ['\\lbrace' , '['] ,
|
\ ['\\lbrace' , '['] ,
|
||||||
\ ['\\lceil' , '⌈'] ,
|
\ ['\\lceil' , '⌈'] ,
|
||||||
\ ['\\lfloor' , '⌊'] ,
|
\ ['\\lfloor' , '⌊'] ,
|
||||||
\ ['\\lgroup' , '⌊'] ,
|
\ ['\\lgroup' , '⌊'] ,
|
||||||
\ ['\\lmoustache' , '⎛'] ,
|
\ ['\\lmoustache' , '⎛'] ,
|
||||||
\ ['\\rangle' , '>'] ,
|
|
||||||
\ ['\\rbrace' , ']'] ,
|
\ ['\\rbrace' , ']'] ,
|
||||||
\ ['\\rceil' , '⌉'] ,
|
\ ['\\rceil' , '⌉'] ,
|
||||||
\ ['\\rfloor' , '⌋'] ,
|
\ ['\\rfloor' , '⌋'] ,
|
||||||
@@ -510,6 +508,15 @@ if !exists("g:tex_no_math")
|
|||||||
\ ['\\Uparrow' , '↑'] ,
|
\ ['\\Uparrow' , '↑'] ,
|
||||||
\ ['\\updownarrow', '↕'] ,
|
\ ['\\updownarrow', '↕'] ,
|
||||||
\ ['\\Updownarrow', '⇕']]
|
\ ['\\Updownarrow', '⇕']]
|
||||||
|
if &ambw == "double" || exists("g:tex_usedblwidth")
|
||||||
|
let s:texMathDelimList= s:texMathDelimList + [
|
||||||
|
\ ['\\langle' , '〈'] ,
|
||||||
|
\ ['\\rangle' , '〉'] ,
|
||||||
|
else
|
||||||
|
let s:texMathDelimList= s:texMathDelimList + [
|
||||||
|
\ ['\\langle' , '<'] ,
|
||||||
|
\ ['\\rangle' , '>']]
|
||||||
|
endif
|
||||||
syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
|
syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
|
||||||
for texmath in s:texMathDelimList
|
for texmath in s:texMathDelimList
|
||||||
exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
|
exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
|
||||||
@@ -680,6 +687,7 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
\ ['backslash' , '∖'],
|
\ ['backslash' , '∖'],
|
||||||
\ ['barwedge' , '⊼'],
|
\ ['barwedge' , '⊼'],
|
||||||
\ ['because' , '∵'],
|
\ ['because' , '∵'],
|
||||||
|
\ ['beth' , 'ܒ'],
|
||||||
\ ['between' , '≬'],
|
\ ['between' , '≬'],
|
||||||
\ ['bigcap' , '∩'],
|
\ ['bigcap' , '∩'],
|
||||||
\ ['bigcirc' , '○'],
|
\ ['bigcirc' , '○'],
|
||||||
@@ -699,6 +707,7 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
\ ['boxminus' , '⊟'],
|
\ ['boxminus' , '⊟'],
|
||||||
\ ['boxplus' , '⊞'],
|
\ ['boxplus' , '⊞'],
|
||||||
\ ['boxtimes' , '⊠'],
|
\ ['boxtimes' , '⊠'],
|
||||||
|
\ ['Box' , '☐'],
|
||||||
\ ['bullet' , '•'],
|
\ ['bullet' , '•'],
|
||||||
\ ['bumpeq' , '≏'],
|
\ ['bumpeq' , '≏'],
|
||||||
\ ['Bumpeq' , '≎'],
|
\ ['Bumpeq' , '≎'],
|
||||||
@@ -748,6 +757,7 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
\ ['eqslantgtr' , '⪖'],
|
\ ['eqslantgtr' , '⪖'],
|
||||||
\ ['eqslantless' , '⪕'],
|
\ ['eqslantless' , '⪕'],
|
||||||
\ ['equiv' , '≡'],
|
\ ['equiv' , '≡'],
|
||||||
|
\ ['eth' , 'ð'],
|
||||||
\ ['exists' , '∃'],
|
\ ['exists' , '∃'],
|
||||||
\ ['fallingdotseq' , '≒'],
|
\ ['fallingdotseq' , '≒'],
|
||||||
\ ['flat' , '♭'],
|
\ ['flat' , '♭'],
|
||||||
@@ -757,6 +767,7 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
\ ['geq' , '≥'],
|
\ ['geq' , '≥'],
|
||||||
\ ['geqq' , '≧'],
|
\ ['geqq' , '≧'],
|
||||||
\ ['gets' , '←'],
|
\ ['gets' , '←'],
|
||||||
|
\ ['gimel' , 'ℷ'],
|
||||||
\ ['gg' , '⟫'],
|
\ ['gg' , '⟫'],
|
||||||
\ ['gneqq' , '≩'],
|
\ ['gneqq' , '≩'],
|
||||||
\ ['gtrdot' , '⋗'],
|
\ ['gtrdot' , '⋗'],
|
||||||
@@ -767,13 +778,17 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
\ ['heartsuit' , '♡'],
|
\ ['heartsuit' , '♡'],
|
||||||
\ ['hookleftarrow' , '↩'],
|
\ ['hookleftarrow' , '↩'],
|
||||||
\ ['hookrightarrow' , '↪'],
|
\ ['hookrightarrow' , '↪'],
|
||||||
|
\ ['iff' , '⇔'],
|
||||||
\ ['iiint' , '∭'],
|
\ ['iiint' , '∭'],
|
||||||
\ ['iint' , '∬'],
|
\ ['iint' , '∬'],
|
||||||
\ ['Im' , 'ℑ'],
|
\ ['Im' , 'ℑ'],
|
||||||
\ ['imath' , 'ɩ'],
|
\ ['imath' , 'ɩ'],
|
||||||
|
\ ['implies' , '⇒'],
|
||||||
\ ['in' , '∈'],
|
\ ['in' , '∈'],
|
||||||
\ ['infty' , '∞'],
|
\ ['infty' , '∞'],
|
||||||
\ ['int' , '∫'],
|
\ ['int' , '∫'],
|
||||||
|
\ ['jmath' , '𝚥'],
|
||||||
|
\ ['land' , '∧'],
|
||||||
\ ['lceil' , '⌈'],
|
\ ['lceil' , '⌈'],
|
||||||
\ ['ldots' , '…'],
|
\ ['ldots' , '…'],
|
||||||
\ ['le' , '≤'],
|
\ ['le' , '≤'],
|
||||||
@@ -800,6 +815,7 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
\ ['ll' , '≪'],
|
\ ['ll' , '≪'],
|
||||||
\ ['lmoustache' , '╭'],
|
\ ['lmoustache' , '╭'],
|
||||||
\ ['lneqq' , '≨'],
|
\ ['lneqq' , '≨'],
|
||||||
|
\ ['lor' , '∨'],
|
||||||
\ ['ltimes' , '⋉'],
|
\ ['ltimes' , '⋉'],
|
||||||
\ ['mapsto' , '↦'],
|
\ ['mapsto' , '↦'],
|
||||||
\ ['measuredangle' , '∡'],
|
\ ['measuredangle' , '∡'],
|
||||||
@@ -826,6 +842,7 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
\ ['nless' , '≮'],
|
\ ['nless' , '≮'],
|
||||||
\ ['nmid' , '∤'],
|
\ ['nmid' , '∤'],
|
||||||
\ ['notin' , '∉'],
|
\ ['notin' , '∉'],
|
||||||
|
\ ['nparallel' , '∦'],
|
||||||
\ ['nprec' , '⊀'],
|
\ ['nprec' , '⊀'],
|
||||||
\ ['nrightarrow' , '↛'],
|
\ ['nrightarrow' , '↛'],
|
||||||
\ ['nRightarrow' , '⇏'],
|
\ ['nRightarrow' , '⇏'],
|
||||||
@@ -927,10 +944,12 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
\ ['trianglerighteq', '⊵'],
|
\ ['trianglerighteq', '⊵'],
|
||||||
\ ['twoheadleftarrow', '↞'],
|
\ ['twoheadleftarrow', '↞'],
|
||||||
\ ['twoheadrightarrow', '↠'],
|
\ ['twoheadrightarrow', '↠'],
|
||||||
|
\ ['ulcorner' , '⌜'],
|
||||||
\ ['uparrow' , '↑'],
|
\ ['uparrow' , '↑'],
|
||||||
\ ['Uparrow' , '⇑'],
|
\ ['Uparrow' , '⇑'],
|
||||||
\ ['updownarrow' , '↕'],
|
\ ['updownarrow' , '↕'],
|
||||||
\ ['Updownarrow' , '⇕'],
|
\ ['Updownarrow' , '⇕'],
|
||||||
|
\ ['urcorner' , '⌝'],
|
||||||
\ ['varnothing' , '∅'],
|
\ ['varnothing' , '∅'],
|
||||||
\ ['vartriangle' , '∆'],
|
\ ['vartriangle' , '∆'],
|
||||||
\ ['vdash' , '⊢'],
|
\ ['vdash' , '⊢'],
|
||||||
@@ -946,6 +965,15 @@ if has("conceal") && &enc == 'utf-8'
|
|||||||
" \ ['jmath' , 'X']
|
" \ ['jmath' , 'X']
|
||||||
" \ ['uminus' , 'X']
|
" \ ['uminus' , 'X']
|
||||||
" \ ['uplus' , 'X']
|
" \ ['uplus' , 'X']
|
||||||
|
if &ambw == "double" || exists("g:tex_usedblwidth")
|
||||||
|
let s:texMathList= s:texMathList + [
|
||||||
|
\ ['right\\rangle' , '〉'],
|
||||||
|
\ ['left\\langle' , '〈']]
|
||||||
|
else
|
||||||
|
let s:texMathList= s:texMathList + [
|
||||||
|
\ ['right\\rangle' , '>'],
|
||||||
|
\ ['left\\langle' , '<']]
|
||||||
|
endif
|
||||||
for texmath in s:texMathList
|
for texmath in s:texMathList
|
||||||
if texmath[0] =~# '\w$'
|
if texmath[0] =~# '\w$'
|
||||||
exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
|
exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: Vim 8.0 script
|
" Language: Vim 8.0 script
|
||||||
" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
|
" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
|
||||||
" Last Change: September 29, 2016
|
" Last Change: Jan 19, 2017
|
||||||
" Version: 8.0-01
|
" Version: 8.0-02
|
||||||
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
|
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
|
||||||
" Automatically generated keyword lists: {{{1
|
" Automatically generated keyword lists: {{{1
|
||||||
|
|
||||||
@@ -164,6 +164,7 @@ endif
|
|||||||
syn match vimNumber "\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
|
syn match vimNumber "\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
|
||||||
syn match vimNumber "-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
|
syn match vimNumber "-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
|
||||||
syn match vimNumber "\<0[xX]\x\+"
|
syn match vimNumber "\<0[xX]\x\+"
|
||||||
|
syn match vimNumber "\<0[bB][01]\+"
|
||||||
syn match vimNumber "\%(^\|[^a-zA-Z]\)\zs#\x\{6}"
|
syn match vimNumber "\%(^\|[^a-zA-Z]\)\zs#\x\{6}"
|
||||||
|
|
||||||
" All vimCommands are contained by vimIsCommands. {{{2
|
" All vimCommands are contained by vimIsCommands. {{{2
|
||||||
@@ -225,7 +226,7 @@ endif
|
|||||||
" Functions : Tag is provided for those who wish to highlight tagged functions {{{2
|
" Functions : Tag is provided for those who wish to highlight tagged functions {{{2
|
||||||
" =========
|
" =========
|
||||||
syn cluster vimFuncList contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
|
syn cluster vimFuncList contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
|
||||||
syn cluster vimFuncBodyList contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimGlobal,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUnmap,vimUserCommand
|
syn cluster vimFuncBodyList contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimGlobal,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUnmap,vimUserCommand
|
||||||
syn match vimFunction "\<fu\%[nction]!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
|
syn match vimFunction "\<fu\%[nction]!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
|
||||||
|
|
||||||
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
|
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
|
||||||
|
|||||||
48
src/Makefile
48
src/Makefile
@@ -1584,14 +1584,16 @@ EXTRA_SRC = hangulin.c if_lua.c if_mzsch.c auto/if_perl.c if_perlsfio.c \
|
|||||||
# Unittest files
|
# Unittest files
|
||||||
JSON_TEST_SRC = json_test.c
|
JSON_TEST_SRC = json_test.c
|
||||||
JSON_TEST_TARGET = json_test$(EXEEXT)
|
JSON_TEST_TARGET = json_test$(EXEEXT)
|
||||||
|
KWORD_TEST_SRC = kword_test.c
|
||||||
|
KWORD_TEST_TARGET = kword_test$(EXEEXT)
|
||||||
MEMFILE_TEST_SRC = memfile_test.c
|
MEMFILE_TEST_SRC = memfile_test.c
|
||||||
MEMFILE_TEST_TARGET = memfile_test$(EXEEXT)
|
MEMFILE_TEST_TARGET = memfile_test$(EXEEXT)
|
||||||
MESSAGE_TEST_SRC = message_test.c
|
MESSAGE_TEST_SRC = message_test.c
|
||||||
MESSAGE_TEST_TARGET = message_test$(EXEEXT)
|
MESSAGE_TEST_TARGET = message_test$(EXEEXT)
|
||||||
|
|
||||||
UNITTEST_SRC = $(JSON_TEST_SRC) $(MEMFILE_TEST_SRC) $(MESSAGE_TEST_SRC)
|
UNITTEST_SRC = $(JSON_TEST_SRC) $(KWORD_TEST_SRC) $(MEMFILE_TEST_SRC) $(MESSAGE_TEST_SRC)
|
||||||
UNITTEST_TARGETS = $(JSON_TEST_TARGET) $(MEMFILE_TEST_TARGET) $(MESSAGE_TEST_TARGET)
|
UNITTEST_TARGETS = $(JSON_TEST_TARGET) $(KWORD_TEST_TARGET) $(MEMFILE_TEST_TARGET) $(MESSAGE_TEST_TARGET)
|
||||||
RUN_UNITTESTS = run_json_test run_memfile_test run_message_test
|
RUN_UNITTESTS = run_json_test run_kword_test run_memfile_test run_message_test
|
||||||
|
|
||||||
# All sources, also the ones that are not configured
|
# All sources, also the ones that are not configured
|
||||||
ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
|
ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
|
||||||
@@ -1611,7 +1613,6 @@ OBJ_COMMON = \
|
|||||||
objects/arabic.o \
|
objects/arabic.o \
|
||||||
objects/buffer.o \
|
objects/buffer.o \
|
||||||
objects/blowfish.o \
|
objects/blowfish.o \
|
||||||
objects/charset.o \
|
|
||||||
objects/crypt.o \
|
objects/crypt.o \
|
||||||
objects/crypt_zip.o \
|
objects/crypt_zip.o \
|
||||||
objects/dict.o \
|
objects/dict.o \
|
||||||
@@ -1679,6 +1680,7 @@ OBJ_COMMON = \
|
|||||||
|
|
||||||
# The files included by tests are not in OBJ_COMMON.
|
# The files included by tests are not in OBJ_COMMON.
|
||||||
OBJ_MAIN = \
|
OBJ_MAIN = \
|
||||||
|
objects/charset.o \
|
||||||
objects/json.o \
|
objects/json.o \
|
||||||
objects/main.o \
|
objects/main.o \
|
||||||
objects/memfile.o \
|
objects/memfile.o \
|
||||||
@@ -1687,13 +1689,23 @@ OBJ_MAIN = \
|
|||||||
OBJ = $(OBJ_COMMON) $(OBJ_MAIN)
|
OBJ = $(OBJ_COMMON) $(OBJ_MAIN)
|
||||||
|
|
||||||
OBJ_JSON_TEST = \
|
OBJ_JSON_TEST = \
|
||||||
|
objects/charset.o \
|
||||||
objects/memfile.o \
|
objects/memfile.o \
|
||||||
objects/message.o \
|
objects/message.o \
|
||||||
objects/json_test.o
|
objects/json_test.o
|
||||||
|
|
||||||
JSON_TEST_OBJ = $(OBJ_COMMON) $(OBJ_JSON_TEST)
|
JSON_TEST_OBJ = $(OBJ_COMMON) $(OBJ_JSON_TEST)
|
||||||
|
|
||||||
|
OBJ_KWORD_TEST = \
|
||||||
|
objects/json.o \
|
||||||
|
objects/memfile.o \
|
||||||
|
objects/message.o \
|
||||||
|
objects/kword_test.o
|
||||||
|
|
||||||
|
KWORD_TEST_OBJ = $(OBJ_COMMON) $(OBJ_KWORD_TEST)
|
||||||
|
|
||||||
OBJ_MEMFILE_TEST = \
|
OBJ_MEMFILE_TEST = \
|
||||||
|
objects/charset.o \
|
||||||
objects/json.o \
|
objects/json.o \
|
||||||
objects/message.o \
|
objects/message.o \
|
||||||
objects/memfile_test.o
|
objects/memfile_test.o
|
||||||
@@ -1701,6 +1713,7 @@ OBJ_MEMFILE_TEST = \
|
|||||||
MEMFILE_TEST_OBJ = $(OBJ_COMMON) $(OBJ_MEMFILE_TEST)
|
MEMFILE_TEST_OBJ = $(OBJ_COMMON) $(OBJ_MEMFILE_TEST)
|
||||||
|
|
||||||
OBJ_MESSAGE_TEST = \
|
OBJ_MESSAGE_TEST = \
|
||||||
|
objects/charset.o \
|
||||||
objects/json.o \
|
objects/json.o \
|
||||||
objects/memfile.o \
|
objects/memfile.o \
|
||||||
objects/message_test.o
|
objects/message_test.o
|
||||||
@@ -1710,6 +1723,7 @@ MESSAGE_TEST_OBJ = $(OBJ_COMMON) $(OBJ_MESSAGE_TEST)
|
|||||||
ALL_OBJ = $(OBJ_COMMON) \
|
ALL_OBJ = $(OBJ_COMMON) \
|
||||||
$(OBJ_MAIN) \
|
$(OBJ_MAIN) \
|
||||||
$(OBJ_JSON_TEST) \
|
$(OBJ_JSON_TEST) \
|
||||||
|
$(OBJ_KWORD_TEST) \
|
||||||
$(OBJ_MEMFILE_TEST) \
|
$(OBJ_MEMFILE_TEST) \
|
||||||
$(OBJ_MESSAGE_TEST)
|
$(OBJ_MESSAGE_TEST)
|
||||||
|
|
||||||
@@ -2036,6 +2050,9 @@ unittest unittests: $(RUN_UNITTESTS)
|
|||||||
run_json_test: $(JSON_TEST_TARGET)
|
run_json_test: $(JSON_TEST_TARGET)
|
||||||
$(VALGRIND) ./$(JSON_TEST_TARGET) || exit 1; echo $* passed;
|
$(VALGRIND) ./$(JSON_TEST_TARGET) || exit 1; echo $* passed;
|
||||||
|
|
||||||
|
run_kword_test: $(KWORD_TEST_TARGET)
|
||||||
|
$(VALGRIND) ./$(KWORD_TEST_TARGET) || exit 1; echo $* passed;
|
||||||
|
|
||||||
run_memfile_test: $(MEMFILE_TEST_TARGET)
|
run_memfile_test: $(MEMFILE_TEST_TARGET)
|
||||||
$(VALGRIND) ./$(MEMFILE_TEST_TARGET) || exit 1; echo $* passed;
|
$(VALGRIND) ./$(MEMFILE_TEST_TARGET) || exit 1; echo $* passed;
|
||||||
|
|
||||||
@@ -2058,7 +2075,6 @@ test1 \
|
|||||||
test_listlbr \
|
test_listlbr \
|
||||||
test_listlbr_utf8 \
|
test_listlbr_utf8 \
|
||||||
test_search_mbyte \
|
test_search_mbyte \
|
||||||
test_utf8 \
|
|
||||||
test_wordcount \
|
test_wordcount \
|
||||||
test3 test4 test5 test6 test7 test8 test9 \
|
test3 test4 test5 test6 test7 test8 test9 \
|
||||||
test11 test12 test14 test15 test17 test18 test19 \
|
test11 test12 test14 test15 test17 test18 test19 \
|
||||||
@@ -2131,6 +2147,7 @@ test_arglist \
|
|||||||
test_langmap \
|
test_langmap \
|
||||||
test_largefile \
|
test_largefile \
|
||||||
test_lispwords \
|
test_lispwords \
|
||||||
|
test_lua \
|
||||||
test_man \
|
test_man \
|
||||||
test_mapping \
|
test_mapping \
|
||||||
test_marks \
|
test_marks \
|
||||||
@@ -2152,6 +2169,10 @@ test_arglist \
|
|||||||
test_popup \
|
test_popup \
|
||||||
test_profile \
|
test_profile \
|
||||||
test_put \
|
test_put \
|
||||||
|
test_python2 \
|
||||||
|
test_python3 \
|
||||||
|
test_pyx2 \
|
||||||
|
test_pyx3 \
|
||||||
test_quickfix \
|
test_quickfix \
|
||||||
test_regexp_latin \
|
test_regexp_latin \
|
||||||
test_regexp_utf8 \
|
test_regexp_utf8 \
|
||||||
@@ -2177,12 +2198,14 @@ test_arglist \
|
|||||||
test_tabpage \
|
test_tabpage \
|
||||||
test_tagcase \
|
test_tagcase \
|
||||||
test_tagjump \
|
test_tagjump \
|
||||||
|
test_tcl \
|
||||||
test_textobjects \
|
test_textobjects \
|
||||||
test_timers \
|
test_timers \
|
||||||
test_true_false \
|
test_true_false \
|
||||||
test_undo \
|
test_undo \
|
||||||
test_unlet \
|
test_unlet \
|
||||||
test_usercommands \
|
test_usercommands \
|
||||||
|
test_utf8 \
|
||||||
test_viminfo \
|
test_viminfo \
|
||||||
test_viml \
|
test_viml \
|
||||||
test_visual \
|
test_visual \
|
||||||
@@ -2220,6 +2243,13 @@ $(JSON_TEST_TARGET): auto/config.mk objects $(JSON_TEST_OBJ)
|
|||||||
MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
|
MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
|
||||||
sh $(srcdir)/link.sh
|
sh $(srcdir)/link.sh
|
||||||
|
|
||||||
|
$(KWORD_TEST_TARGET): auto/config.mk objects $(KWORD_TEST_OBJ)
|
||||||
|
$(CCC) version.c -o objects/version.o
|
||||||
|
@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
|
||||||
|
-o $(KWORD_TEST_TARGET) $(KWORD_TEST_OBJ) $(ALL_LIBS)" \
|
||||||
|
MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
|
||||||
|
sh $(srcdir)/link.sh
|
||||||
|
|
||||||
$(MEMFILE_TEST_TARGET): auto/config.mk objects $(MEMFILE_TEST_OBJ)
|
$(MEMFILE_TEST_TARGET): auto/config.mk objects $(MEMFILE_TEST_OBJ)
|
||||||
$(CCC) version.c -o objects/version.o
|
$(CCC) version.c -o objects/version.o
|
||||||
@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
|
@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
|
||||||
@@ -2754,6 +2784,7 @@ shadow: runtime pixmaps
|
|||||||
../../testdir/*.vim \
|
../../testdir/*.vim \
|
||||||
../../testdir/*.py \
|
../../testdir/*.py \
|
||||||
../../testdir/python* \
|
../../testdir/python* \
|
||||||
|
../../testdir/pyxfile \
|
||||||
../../testdir/sautest \
|
../../testdir/sautest \
|
||||||
../../testdir/samples \
|
../../testdir/samples \
|
||||||
../../testdir/test83-tags? \
|
../../testdir/test83-tags? \
|
||||||
@@ -3055,6 +3086,9 @@ objects/json.o: json.c
|
|||||||
objects/json_test.o: json_test.c
|
objects/json_test.o: json_test.c
|
||||||
$(CCC) -o $@ json_test.c
|
$(CCC) -o $@ json_test.c
|
||||||
|
|
||||||
|
objects/kword_test.o: kword_test.c
|
||||||
|
$(CCC) -o $@ kword_test.c
|
||||||
|
|
||||||
objects/list.o: list.c
|
objects/list.o: list.c
|
||||||
$(CCC) -o $@ list.c
|
$(CCC) -o $@ list.c
|
||||||
|
|
||||||
@@ -3594,6 +3628,10 @@ objects/json_test.o: json_test.c main.c vim.h auto/config.h feature.h os_unix.h
|
|||||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
|
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
|
||||||
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \
|
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \
|
||||||
proto.h globals.h farsi.h arabic.h json.c
|
proto.h globals.h farsi.h arabic.h json.c
|
||||||
|
objects/kword_test.o: kword_test.c main.c vim.h auto/config.h feature.h os_unix.h \
|
||||||
|
auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
|
||||||
|
regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h spell.h \
|
||||||
|
proto.h globals.h farsi.h arabic.h charset.c mbyte.c
|
||||||
objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
|
objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
|
||||||
os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \
|
os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \
|
||||||
structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h \
|
structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h \
|
||||||
|
|||||||
@@ -899,16 +899,17 @@ vim_iswordc(int c)
|
|||||||
int
|
int
|
||||||
vim_iswordc_buf(int c, buf_T *buf)
|
vim_iswordc_buf(int c, buf_T *buf)
|
||||||
{
|
{
|
||||||
#ifdef FEAT_MBYTE
|
|
||||||
if (c >= 0x100)
|
if (c >= 0x100)
|
||||||
{
|
{
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
if (enc_dbcs != 0)
|
if (enc_dbcs != 0)
|
||||||
return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2;
|
return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2;
|
||||||
if (enc_utf8)
|
if (enc_utf8)
|
||||||
return utf_class(c) >= 2;
|
return utf_class_buf(c, buf) >= 2;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
return (c > 0 && c < 0x100 && GET_CHARTAB(buf, c) != 0);
|
return FALSE;
|
||||||
|
}
|
||||||
|
return (c > 0 && GET_CHARTAB(buf, c) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -917,21 +918,19 @@ vim_iswordc_buf(int c, buf_T *buf)
|
|||||||
int
|
int
|
||||||
vim_iswordp(char_u *p)
|
vim_iswordp(char_u *p)
|
||||||
{
|
{
|
||||||
#ifdef FEAT_MBYTE
|
return vim_iswordp_buf(p, curbuf);
|
||||||
if (has_mbyte && MB_BYTE2LEN(*p) > 1)
|
|
||||||
return mb_get_class(p) >= 2;
|
|
||||||
#endif
|
|
||||||
return GET_CHARTAB(curbuf, *p) != 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
vim_iswordp_buf(char_u *p, buf_T *buf)
|
vim_iswordp_buf(char_u *p, buf_T *buf)
|
||||||
{
|
{
|
||||||
|
int c = *p;
|
||||||
|
|
||||||
#ifdef FEAT_MBYTE
|
#ifdef FEAT_MBYTE
|
||||||
if (has_mbyte && MB_BYTE2LEN(*p) > 1)
|
if (has_mbyte && MB_BYTE2LEN(c) > 1)
|
||||||
return mb_get_class(p) >= 2;
|
c = (*mb_ptr2char)(p);
|
||||||
#endif
|
#endif
|
||||||
return (GET_CHARTAB(buf, *p) != 0);
|
return vim_iswordc_buf(c, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1296,7 +1295,14 @@ getvcol(
|
|||||||
if (pos->col == MAXCOL)
|
if (pos->col == MAXCOL)
|
||||||
posptr = NULL; /* continue until the NUL */
|
posptr = NULL; /* continue until the NUL */
|
||||||
else
|
else
|
||||||
|
{
|
||||||
posptr = ptr + pos->col;
|
posptr = ptr + pos->col;
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
if (has_mbyte)
|
||||||
|
/* always start on the first byte */
|
||||||
|
posptr -= (*mb_head_off)(line, posptr);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function is used very often, do some speed optimizations.
|
* This function is used very often, do some speed optimizations.
|
||||||
|
|||||||
@@ -2821,6 +2821,7 @@ set_completion(colnr_T startcol, list_T *list)
|
|||||||
if (ctrl_x_mode != 0)
|
if (ctrl_x_mode != 0)
|
||||||
ins_compl_prep(' ');
|
ins_compl_prep(' ');
|
||||||
ins_compl_clear();
|
ins_compl_clear();
|
||||||
|
ins_compl_free();
|
||||||
|
|
||||||
compl_direction = FORWARD;
|
compl_direction = FORWARD;
|
||||||
if (startcol > curwin->w_cursor.col)
|
if (startcol > curwin->w_cursor.col)
|
||||||
@@ -6165,6 +6166,9 @@ insertchar(
|
|||||||
&& (!has_mbyte || MB_BYTE2LEN_CHECK(c) == 1)
|
&& (!has_mbyte || MB_BYTE2LEN_CHECK(c) == 1)
|
||||||
#endif
|
#endif
|
||||||
&& i < INPUT_BUFLEN
|
&& i < INPUT_BUFLEN
|
||||||
|
# ifdef FEAT_FKMAP
|
||||||
|
&& !(p_fkmap && KeyTyped) /* Farsi mode mapping moves cursor */
|
||||||
|
# endif
|
||||||
&& (textwidth == 0
|
&& (textwidth == 0
|
||||||
|| (virtcol += byte2cells(buf[i - 1])) < (colnr_T)textwidth)
|
|| (virtcol += byte2cells(buf[i - 1])) < (colnr_T)textwidth)
|
||||||
&& !(!no_abbr && !vim_iswordc(c) && vim_iswordc(buf[i - 1])))
|
&& !(!no_abbr && !vim_iswordc(c) && vim_iswordc(buf[i - 1])))
|
||||||
@@ -6173,10 +6177,6 @@ insertchar(
|
|||||||
c = vgetc();
|
c = vgetc();
|
||||||
if (p_hkmap && KeyTyped)
|
if (p_hkmap && KeyTyped)
|
||||||
c = hkmap(c); /* Hebrew mode mapping */
|
c = hkmap(c); /* Hebrew mode mapping */
|
||||||
# ifdef FEAT_FKMAP
|
|
||||||
if (p_fkmap && KeyTyped)
|
|
||||||
c = fkmap(c); /* Farsi mode mapping */
|
|
||||||
# endif
|
|
||||||
buf[i++] = c;
|
buf[i++] = c;
|
||||||
#else
|
#else
|
||||||
buf[i++] = vgetc();
|
buf[i++] = vgetc();
|
||||||
|
|||||||
47
src/eval.c
47
src/eval.c
@@ -9240,35 +9240,34 @@ fill_assert_error(
|
|||||||
|
|
||||||
if (opt_msg_tv->v_type != VAR_UNKNOWN)
|
if (opt_msg_tv->v_type != VAR_UNKNOWN)
|
||||||
{
|
{
|
||||||
ga_concat(gap, tv2string(opt_msg_tv, &tofree, numbuf, 0));
|
ga_concat(gap, echo_string(opt_msg_tv, &tofree, numbuf, 0));
|
||||||
|
vim_free(tofree);
|
||||||
|
ga_concat(gap, (char_u *)": ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (atype == ASSERT_MATCH || atype == ASSERT_NOTMATCH)
|
||||||
|
ga_concat(gap, (char_u *)"Pattern ");
|
||||||
|
else if (atype == ASSERT_NOTEQUAL)
|
||||||
|
ga_concat(gap, (char_u *)"Expected not equal to ");
|
||||||
|
else
|
||||||
|
ga_concat(gap, (char_u *)"Expected ");
|
||||||
|
if (exp_str == NULL)
|
||||||
|
{
|
||||||
|
ga_concat_esc(gap, tv2string(exp_tv, &tofree, numbuf, 0));
|
||||||
vim_free(tofree);
|
vim_free(tofree);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
ga_concat_esc(gap, exp_str);
|
||||||
|
if (atype != ASSERT_NOTEQUAL)
|
||||||
{
|
{
|
||||||
if (atype == ASSERT_MATCH || atype == ASSERT_NOTMATCH)
|
if (atype == ASSERT_MATCH)
|
||||||
ga_concat(gap, (char_u *)"Pattern ");
|
ga_concat(gap, (char_u *)" does not match ");
|
||||||
else if (atype == ASSERT_NOTEQUAL)
|
else if (atype == ASSERT_NOTMATCH)
|
||||||
ga_concat(gap, (char_u *)"Expected not equal to ");
|
ga_concat(gap, (char_u *)" does match ");
|
||||||
else
|
else
|
||||||
ga_concat(gap, (char_u *)"Expected ");
|
ga_concat(gap, (char_u *)" but got ");
|
||||||
if (exp_str == NULL)
|
ga_concat_esc(gap, tv2string(got_tv, &tofree, numbuf, 0));
|
||||||
{
|
vim_free(tofree);
|
||||||
ga_concat_esc(gap, tv2string(exp_tv, &tofree, numbuf, 0));
|
|
||||||
vim_free(tofree);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ga_concat_esc(gap, exp_str);
|
|
||||||
if (atype != ASSERT_NOTEQUAL)
|
|
||||||
{
|
|
||||||
if (atype == ASSERT_MATCH)
|
|
||||||
ga_concat(gap, (char_u *)" does not match ");
|
|
||||||
else if (atype == ASSERT_NOTMATCH)
|
|
||||||
ga_concat(gap, (char_u *)" does match ");
|
|
||||||
else
|
|
||||||
ga_concat(gap, (char_u *)" but got ");
|
|
||||||
ga_concat_esc(gap, tv2string(got_tv, &tofree, numbuf, 0));
|
|
||||||
vim_free(tofree);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
126
src/evalfunc.c
126
src/evalfunc.c
@@ -289,6 +289,9 @@ static void f_py3eval(typval_T *argvars, typval_T *rettv);
|
|||||||
#ifdef FEAT_PYTHON
|
#ifdef FEAT_PYTHON
|
||||||
static void f_pyeval(typval_T *argvars, typval_T *rettv);
|
static void f_pyeval(typval_T *argvars, typval_T *rettv);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
||||||
|
static void f_pyxeval(typval_T *argvars, typval_T *rettv);
|
||||||
|
#endif
|
||||||
static void f_range(typval_T *argvars, typval_T *rettv);
|
static void f_range(typval_T *argvars, typval_T *rettv);
|
||||||
static void f_readfile(typval_T *argvars, typval_T *rettv);
|
static void f_readfile(typval_T *argvars, typval_T *rettv);
|
||||||
static void f_reltime(typval_T *argvars, typval_T *rettv);
|
static void f_reltime(typval_T *argvars, typval_T *rettv);
|
||||||
@@ -715,6 +718,9 @@ static struct fst
|
|||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_PYTHON
|
#ifdef FEAT_PYTHON
|
||||||
{"pyeval", 1, 1, f_pyeval},
|
{"pyeval", 1, 1, f_pyeval},
|
||||||
|
#endif
|
||||||
|
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
||||||
|
{"pyxeval", 1, 1, f_pyxeval},
|
||||||
#endif
|
#endif
|
||||||
{"range", 1, 3, f_range},
|
{"range", 1, 3, f_range},
|
||||||
{"readfile", 1, 3, f_readfile},
|
{"readfile", 1, 3, f_readfile},
|
||||||
@@ -2813,7 +2819,17 @@ f_execute(typval_T *argvars, typval_T *rettv)
|
|||||||
--list->lv_refcount;
|
--list->lv_refcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
rettv->vval.v_string = redir_execute_ga.ga_data;
|
/* Need to append a NUL to the result. */
|
||||||
|
if (ga_grow(&redir_execute_ga, 1) == OK)
|
||||||
|
{
|
||||||
|
((char *)redir_execute_ga.ga_data)[redir_execute_ga.ga_len] = NUL;
|
||||||
|
rettv->vval.v_string = redir_execute_ga.ga_data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ga_clear(&redir_execute_ga);
|
||||||
|
rettv->vval.v_string = NULL;
|
||||||
|
}
|
||||||
msg_silent = save_msg_silent;
|
msg_silent = save_msg_silent;
|
||||||
emsg_silent = save_emsg_silent;
|
emsg_silent = save_emsg_silent;
|
||||||
emsg_noredir = save_emsg_noredir;
|
emsg_noredir = save_emsg_noredir;
|
||||||
@@ -5734,15 +5750,13 @@ f_has(typval_T *argvars, typval_T *rettv)
|
|||||||
#ifdef FEAT_PERSISTENT_UNDO
|
#ifdef FEAT_PERSISTENT_UNDO
|
||||||
"persistent_undo",
|
"persistent_undo",
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_PYTHON
|
#if defined(FEAT_PYTHON) && !defined(DYNAMIC_PYTHON)
|
||||||
#ifndef DYNAMIC_PYTHON
|
|
||||||
"python",
|
"python",
|
||||||
|
"pythonx",
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#if defined(FEAT_PYTHON3) && !defined(DYNAMIC_PYTHON3)
|
||||||
#ifdef FEAT_PYTHON3
|
|
||||||
#ifndef DYNAMIC_PYTHON3
|
|
||||||
"python3",
|
"python3",
|
||||||
#endif
|
"pythonx",
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_POSTSCRIPT
|
#ifdef FEAT_POSTSCRIPT
|
||||||
"postscript",
|
"postscript",
|
||||||
@@ -5972,17 +5986,30 @@ f_has(typval_T *argvars, typval_T *rettv)
|
|||||||
else if (STRICMP(name, "ruby") == 0)
|
else if (STRICMP(name, "ruby") == 0)
|
||||||
n = ruby_enabled(FALSE);
|
n = ruby_enabled(FALSE);
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_PYTHON
|
|
||||||
#ifdef DYNAMIC_PYTHON
|
#ifdef DYNAMIC_PYTHON
|
||||||
else if (STRICMP(name, "python") == 0)
|
else if (STRICMP(name, "python") == 0)
|
||||||
n = python_enabled(FALSE);
|
n = python_enabled(FALSE);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
#ifdef FEAT_PYTHON3
|
|
||||||
#ifdef DYNAMIC_PYTHON3
|
#ifdef DYNAMIC_PYTHON3
|
||||||
else if (STRICMP(name, "python3") == 0)
|
else if (STRICMP(name, "python3") == 0)
|
||||||
n = python3_enabled(FALSE);
|
n = python3_enabled(FALSE);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(DYNAMIC_PYTHON) || defined(DYNAMIC_PYTHON3)
|
||||||
|
else if (STRICMP(name, "pythonx") == 0)
|
||||||
|
{
|
||||||
|
# if defined(DYNAMIC_PYTHON) && defined(DYNAMIC_PYTHON3)
|
||||||
|
if (p_pyx == 0)
|
||||||
|
n = python3_enabled(FALSE) || python_enabled(FALSE);
|
||||||
|
else if (p_pyx == 3)
|
||||||
|
n = python3_enabled(FALSE);
|
||||||
|
else if (p_pyx == 2)
|
||||||
|
n = python_enabled(FALSE);
|
||||||
|
# elif defined(DYNAMIC_PYTHON)
|
||||||
|
n = python_enabled(FALSE);
|
||||||
|
# elif defined(DYNAMIC_PYTHON3)
|
||||||
|
n = python3_enabled(FALSE);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef DYNAMIC_PERL
|
#ifdef DYNAMIC_PERL
|
||||||
else if (STRICMP(name, "perl") == 0)
|
else if (STRICMP(name, "perl") == 0)
|
||||||
@@ -8007,6 +8034,9 @@ f_py3eval(typval_T *argvars, typval_T *rettv)
|
|||||||
char_u *str;
|
char_u *str;
|
||||||
char_u buf[NUMBUFLEN];
|
char_u buf[NUMBUFLEN];
|
||||||
|
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 3;
|
||||||
|
|
||||||
str = get_tv_string_buf(&argvars[0], buf);
|
str = get_tv_string_buf(&argvars[0], buf);
|
||||||
do_py3eval(str, rettv);
|
do_py3eval(str, rettv);
|
||||||
}
|
}
|
||||||
@@ -8022,11 +8052,35 @@ f_pyeval(typval_T *argvars, typval_T *rettv)
|
|||||||
char_u *str;
|
char_u *str;
|
||||||
char_u buf[NUMBUFLEN];
|
char_u buf[NUMBUFLEN];
|
||||||
|
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 2;
|
||||||
|
|
||||||
str = get_tv_string_buf(&argvars[0], buf);
|
str = get_tv_string_buf(&argvars[0], buf);
|
||||||
do_pyeval(str, rettv);
|
do_pyeval(str, rettv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
||||||
|
/*
|
||||||
|
* "pyxeval()" function
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
f_pyxeval(typval_T *argvars, typval_T *rettv)
|
||||||
|
{
|
||||||
|
# if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
|
||||||
|
init_pyxversion();
|
||||||
|
if (p_pyx == 2)
|
||||||
|
f_pyeval(argvars, rettv);
|
||||||
|
else
|
||||||
|
f_py3eval(argvars, rettv);
|
||||||
|
# elif defined(FEAT_PYTHON)
|
||||||
|
f_pyeval(argvars, rettv);
|
||||||
|
# elif defined(FEAT_PYTHON3)
|
||||||
|
f_py3eval(argvars, rettv);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "range()" function
|
* "range()" function
|
||||||
*/
|
*/
|
||||||
@@ -10092,20 +10146,15 @@ f_setpos(typval_T *argvars, typval_T *rettv)
|
|||||||
pos.col = 0;
|
pos.col = 0;
|
||||||
if (name[0] == '.' && name[1] == NUL)
|
if (name[0] == '.' && name[1] == NUL)
|
||||||
{
|
{
|
||||||
/* set cursor */
|
/* set cursor; "fnum" is ignored */
|
||||||
if (fnum == curbuf->b_fnum)
|
curwin->w_cursor = pos;
|
||||||
|
if (curswant >= 0)
|
||||||
{
|
{
|
||||||
curwin->w_cursor = pos;
|
curwin->w_curswant = curswant - 1;
|
||||||
if (curswant >= 0)
|
curwin->w_set_curswant = FALSE;
|
||||||
{
|
|
||||||
curwin->w_curswant = curswant - 1;
|
|
||||||
curwin->w_set_curswant = FALSE;
|
|
||||||
}
|
|
||||||
check_cursor();
|
|
||||||
rettv->vval.v_number = 0;
|
|
||||||
}
|
}
|
||||||
else
|
check_cursor();
|
||||||
EMSG(_(e_invarg));
|
rettv->vval.v_number = 0;
|
||||||
}
|
}
|
||||||
else if (name[0] == '\'' && name[1] != NUL && name[2] == NUL)
|
else if (name[0] == '\'' && name[1] != NUL && name[2] == NUL)
|
||||||
{
|
{
|
||||||
@@ -12503,39 +12552,8 @@ f_timer_stopall(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
|||||||
static void
|
static void
|
||||||
f_tolower(typval_T *argvars, typval_T *rettv)
|
f_tolower(typval_T *argvars, typval_T *rettv)
|
||||||
{
|
{
|
||||||
char_u *p;
|
|
||||||
|
|
||||||
p = vim_strsave(get_tv_string(&argvars[0]));
|
|
||||||
rettv->v_type = VAR_STRING;
|
rettv->v_type = VAR_STRING;
|
||||||
rettv->vval.v_string = p;
|
rettv->vval.v_string = strlow_save(get_tv_string(&argvars[0]));
|
||||||
|
|
||||||
if (p != NULL)
|
|
||||||
while (*p != NUL)
|
|
||||||
{
|
|
||||||
#ifdef FEAT_MBYTE
|
|
||||||
int l;
|
|
||||||
|
|
||||||
if (enc_utf8)
|
|
||||||
{
|
|
||||||
int c, lc;
|
|
||||||
|
|
||||||
c = utf_ptr2char(p);
|
|
||||||
lc = utf_tolower(c);
|
|
||||||
l = utf_ptr2len(p);
|
|
||||||
/* TODO: reallocate string when byte count changes. */
|
|
||||||
if (utf_char2len(lc) == l)
|
|
||||||
utf_char2bytes(lc, p);
|
|
||||||
p += l;
|
|
||||||
}
|
|
||||||
else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
|
|
||||||
p += l; /* skip multi-byte character */
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
*p = TOLOWER_LOC(*p); /* note that tolower() can be a macro */
|
|
||||||
++p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -65,7 +65,8 @@
|
|||||||
#define ADDR_LOADED_BUFFERS 3
|
#define ADDR_LOADED_BUFFERS 3
|
||||||
#define ADDR_BUFFERS 4
|
#define ADDR_BUFFERS 4
|
||||||
#define ADDR_TABS 5
|
#define ADDR_TABS 5
|
||||||
#define ADDR_QUICKFIX 6
|
#define ADDR_TABS_RELATIVE 6 /* Tab page that only relative */
|
||||||
|
#define ADDR_QUICKFIX 7
|
||||||
#define ADDR_OTHER 99
|
#define ADDR_OTHER 99
|
||||||
|
|
||||||
#ifndef DO_DECLARE_EXCMD
|
#ifndef DO_DECLARE_EXCMD
|
||||||
@@ -1132,6 +1133,18 @@ EX(CMD_python3, "python3", ex_py3,
|
|||||||
EX(CMD_py3file, "py3file", ex_py3file,
|
EX(CMD_py3file, "py3file", ex_py3file,
|
||||||
RANGE|FILE1|NEEDARG|CMDWIN,
|
RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
ADDR_LINES),
|
ADDR_LINES),
|
||||||
|
EX(CMD_pyx, "pyx", ex_pyx,
|
||||||
|
RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pyxdo, "pyxdo", ex_pyxdo,
|
||||||
|
RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pythonx, "pythonx", ex_pyx,
|
||||||
|
RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pyxfile, "pyxfile", ex_pyxfile,
|
||||||
|
RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
|
ADDR_LINES),
|
||||||
EX(CMD_quit, "quit", ex_quit,
|
EX(CMD_quit, "quit", ex_quit,
|
||||||
BANG|RANGE|COUNT|NOTADR|TRLBAR|CMDWIN,
|
BANG|RANGE|COUNT|NOTADR|TRLBAR|CMDWIN,
|
||||||
ADDR_WINDOWS),
|
ADDR_WINDOWS),
|
||||||
@@ -1413,9 +1426,9 @@ EX(CMD_tags, "tags", do_tags,
|
|||||||
ADDR_LINES),
|
ADDR_LINES),
|
||||||
EX(CMD_tab, "tab", ex_wrongmodifier,
|
EX(CMD_tab, "tab", ex_wrongmodifier,
|
||||||
NEEDARG|EXTRA|NOTRLCOM,
|
NEEDARG|EXTRA|NOTRLCOM,
|
||||||
ADDR_LINES),
|
ADDR_TABS),
|
||||||
EX(CMD_tabclose, "tabclose", ex_tabclose,
|
EX(CMD_tabclose, "tabclose", ex_tabclose,
|
||||||
RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN,
|
BANG|RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR|CMDWIN,
|
||||||
ADDR_TABS),
|
ADDR_TABS),
|
||||||
EX(CMD_tabdo, "tabdo", ex_listdo,
|
EX(CMD_tabdo, "tabdo", ex_listdo,
|
||||||
NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
|
NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
|
||||||
@@ -1428,34 +1441,34 @@ EX(CMD_tabfind, "tabfind", ex_splitview,
|
|||||||
ADDR_TABS),
|
ADDR_TABS),
|
||||||
EX(CMD_tabfirst, "tabfirst", ex_tabnext,
|
EX(CMD_tabfirst, "tabfirst", ex_tabnext,
|
||||||
TRLBAR,
|
TRLBAR,
|
||||||
ADDR_LINES),
|
ADDR_TABS),
|
||||||
EX(CMD_tabmove, "tabmove", ex_tabmove,
|
EX(CMD_tabmove, "tabmove", ex_tabmove,
|
||||||
RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
|
RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
|
||||||
ADDR_TABS),
|
ADDR_TABS),
|
||||||
EX(CMD_tablast, "tablast", ex_tabnext,
|
EX(CMD_tablast, "tablast", ex_tabnext,
|
||||||
TRLBAR,
|
TRLBAR,
|
||||||
ADDR_LINES),
|
ADDR_TABS),
|
||||||
EX(CMD_tabnext, "tabnext", ex_tabnext,
|
EX(CMD_tabnext, "tabnext", ex_tabnext,
|
||||||
RANGE|NOTADR|COUNT|TRLBAR,
|
RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
|
||||||
ADDR_LINES),
|
ADDR_TABS),
|
||||||
EX(CMD_tabnew, "tabnew", ex_splitview,
|
EX(CMD_tabnew, "tabnew", ex_splitview,
|
||||||
BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
|
BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
|
||||||
ADDR_TABS),
|
ADDR_TABS),
|
||||||
EX(CMD_tabonly, "tabonly", ex_tabonly,
|
EX(CMD_tabonly, "tabonly", ex_tabonly,
|
||||||
BANG|RANGE|NOTADR|TRLBAR|CMDWIN,
|
BANG|RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR|CMDWIN,
|
||||||
ADDR_TABS),
|
ADDR_TABS),
|
||||||
EX(CMD_tabprevious, "tabprevious", ex_tabnext,
|
EX(CMD_tabprevious, "tabprevious", ex_tabnext,
|
||||||
RANGE|NOTADR|COUNT|TRLBAR,
|
RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
|
||||||
ADDR_LINES),
|
ADDR_TABS_RELATIVE),
|
||||||
EX(CMD_tabNext, "tabNext", ex_tabnext,
|
EX(CMD_tabNext, "tabNext", ex_tabnext,
|
||||||
RANGE|NOTADR|COUNT|TRLBAR,
|
RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
|
||||||
ADDR_LINES),
|
ADDR_TABS_RELATIVE),
|
||||||
EX(CMD_tabrewind, "tabrewind", ex_tabnext,
|
EX(CMD_tabrewind, "tabrewind", ex_tabnext,
|
||||||
TRLBAR,
|
TRLBAR,
|
||||||
ADDR_LINES),
|
ADDR_TABS),
|
||||||
EX(CMD_tabs, "tabs", ex_tabs,
|
EX(CMD_tabs, "tabs", ex_tabs,
|
||||||
TRLBAR|CMDWIN,
|
TRLBAR|CMDWIN,
|
||||||
ADDR_LINES),
|
ADDR_TABS),
|
||||||
EX(CMD_tcl, "tcl", ex_tcl,
|
EX(CMD_tcl, "tcl", ex_tcl,
|
||||||
RANGE|EXTRA|NEEDARG|CMDWIN,
|
RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
ADDR_LINES),
|
ADDR_LINES),
|
||||||
|
|||||||
188
src/ex_cmds2.c
188
src/ex_cmds2.c
@@ -3675,6 +3675,194 @@ ex_options(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(FEAT_PYTHON3) || defined(FEAT_PYTHON) || defined(PROTO)
|
||||||
|
|
||||||
|
# if (defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)) || defined(PROTO)
|
||||||
|
/*
|
||||||
|
* Detect Python 3 or 2, and initialize 'pyxversion'.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
init_pyxversion(void)
|
||||||
|
{
|
||||||
|
if (p_pyx == 0)
|
||||||
|
{
|
||||||
|
if (python3_enabled(FALSE))
|
||||||
|
p_pyx = 3;
|
||||||
|
else if (python_enabled(FALSE))
|
||||||
|
p_pyx = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Does a file contain one of the following strings at the beginning of any
|
||||||
|
* line?
|
||||||
|
* "#!(any string)python2" => returns 2
|
||||||
|
* "#!(any string)python3" => returns 3
|
||||||
|
* "# requires python 2.x" => returns 2
|
||||||
|
* "# requires python 3.x" => returns 3
|
||||||
|
* otherwise return 0.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
requires_py_version(char_u *filename)
|
||||||
|
{
|
||||||
|
FILE *file;
|
||||||
|
int requires_py_version = 0;
|
||||||
|
int i, lines;
|
||||||
|
|
||||||
|
lines = (int)p_mls;
|
||||||
|
if (lines < 0)
|
||||||
|
lines = 5;
|
||||||
|
|
||||||
|
file = mch_fopen((char *)filename, "r");
|
||||||
|
if (file != NULL)
|
||||||
|
{
|
||||||
|
for (i = 0; i < lines; i++)
|
||||||
|
{
|
||||||
|
if (vim_fgets(IObuff, IOSIZE, file))
|
||||||
|
break;
|
||||||
|
if (i == 0 && IObuff[0] == '#' && IObuff[1] == '!')
|
||||||
|
{
|
||||||
|
/* Check shebang. */
|
||||||
|
if (strstr((char *)IObuff + 2, "python2") != NULL)
|
||||||
|
{
|
||||||
|
requires_py_version = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (strstr((char *)IObuff + 2, "python3") != NULL)
|
||||||
|
{
|
||||||
|
requires_py_version = 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IObuff[21] = '\0';
|
||||||
|
if (STRCMP("# requires python 2.x", IObuff) == 0)
|
||||||
|
{
|
||||||
|
requires_py_version = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (STRCMP("# requires python 3.x", IObuff) == 0)
|
||||||
|
{
|
||||||
|
requires_py_version = 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
return requires_py_version;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Source a python file using the requested python version.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
source_pyx_file(exarg_T *eap, char_u *fname)
|
||||||
|
{
|
||||||
|
exarg_T ex;
|
||||||
|
int v = requires_py_version(fname);
|
||||||
|
|
||||||
|
# if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
|
||||||
|
init_pyxversion();
|
||||||
|
# endif
|
||||||
|
if (v == 0)
|
||||||
|
{
|
||||||
|
# if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
|
||||||
|
/* user didn't choose a preference, 'pyx' is used */
|
||||||
|
v = p_pyx;
|
||||||
|
# elif defined(FEAT_PYTHON)
|
||||||
|
v = 2;
|
||||||
|
# elif defined(FEAT_PYTHON3)
|
||||||
|
v = 3;
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* now source, if required python version is not supported show
|
||||||
|
* unobtrusive message.
|
||||||
|
*/
|
||||||
|
if (eap == NULL)
|
||||||
|
vim_memset(&ex, 0, sizeof(ex));
|
||||||
|
else
|
||||||
|
ex = *eap;
|
||||||
|
ex.arg = fname;
|
||||||
|
ex.cmd = (char_u *)(v == 2 ? "pyfile" : "pyfile3");
|
||||||
|
|
||||||
|
if (v == 2)
|
||||||
|
{
|
||||||
|
# ifdef FEAT_PYTHON
|
||||||
|
ex_pyfile(&ex);
|
||||||
|
# else
|
||||||
|
vim_snprintf((char *)IObuff, IOSIZE,
|
||||||
|
_("W20: Required python version 2.x not supported, ignoring file: %s"),
|
||||||
|
fname);
|
||||||
|
MSG(IObuff);
|
||||||
|
# endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# ifdef FEAT_PYTHON3
|
||||||
|
ex_py3file(&ex);
|
||||||
|
# else
|
||||||
|
vim_snprintf((char *)IObuff, IOSIZE,
|
||||||
|
_("W21: Required python version 3.x not supported, ignoring file: %s"),
|
||||||
|
fname);
|
||||||
|
MSG(IObuff);
|
||||||
|
# endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ":pyxfile {fname}"
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ex_pyxfile(exarg_T *eap)
|
||||||
|
{
|
||||||
|
source_pyx_file(eap, eap->arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ":pyx"
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ex_pyx(exarg_T *eap)
|
||||||
|
{
|
||||||
|
# if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
|
||||||
|
init_pyxversion();
|
||||||
|
if (p_pyx == 2)
|
||||||
|
ex_python(eap);
|
||||||
|
else
|
||||||
|
ex_py3(eap);
|
||||||
|
# elif defined(FEAT_PYTHON)
|
||||||
|
ex_python(eap);
|
||||||
|
# elif defined(FEAT_PYTHON3)
|
||||||
|
ex_py3(eap);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ":pyxdo"
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ex_pyxdo(exarg_T *eap)
|
||||||
|
{
|
||||||
|
# if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
|
||||||
|
init_pyxversion();
|
||||||
|
if (p_pyx == 2)
|
||||||
|
ex_pydo(eap);
|
||||||
|
else
|
||||||
|
ex_py3do(eap);
|
||||||
|
# elif defined(FEAT_PYTHON)
|
||||||
|
ex_pydo(eap);
|
||||||
|
# elif defined(FEAT_PYTHON3)
|
||||||
|
ex_py3do(eap);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ":source {fname}"
|
* ":source {fname}"
|
||||||
*/
|
*/
|
||||||
|
|||||||
302
src/ex_docmd.c
302
src/ex_docmd.c
@@ -288,6 +288,11 @@ static void ex_popup(exarg_T *eap);
|
|||||||
# define ex_py3do ex_ni
|
# define ex_py3do ex_ni
|
||||||
# define ex_py3file ex_ni
|
# define ex_py3file ex_ni
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(FEAT_PYTHON) && !defined(FEAT_PYTHON3)
|
||||||
|
# define ex_pyx ex_script_ni
|
||||||
|
# define ex_pyxdo ex_ni
|
||||||
|
# define ex_pyxfile ex_ni
|
||||||
|
#endif
|
||||||
#ifndef FEAT_TCL
|
#ifndef FEAT_TCL
|
||||||
# define ex_tcl ex_script_ni
|
# define ex_tcl ex_script_ni
|
||||||
# define ex_tcldo ex_ni
|
# define ex_tcldo ex_ni
|
||||||
@@ -2157,8 +2162,7 @@ do_one_cmd(
|
|||||||
ea.line2 = curwin->w_cursor.lnum;
|
ea.line2 = curwin->w_cursor.lnum;
|
||||||
break;
|
break;
|
||||||
case ADDR_WINDOWS:
|
case ADDR_WINDOWS:
|
||||||
lnum = CURRENT_WIN_NR;
|
ea.line2 = CURRENT_WIN_NR;
|
||||||
ea.line2 = lnum;
|
|
||||||
break;
|
break;
|
||||||
case ADDR_ARGUMENTS:
|
case ADDR_ARGUMENTS:
|
||||||
ea.line2 = curwin->w_arg_idx + 1;
|
ea.line2 = curwin->w_arg_idx + 1;
|
||||||
@@ -2170,8 +2174,10 @@ do_one_cmd(
|
|||||||
ea.line2 = curbuf->b_fnum;
|
ea.line2 = curbuf->b_fnum;
|
||||||
break;
|
break;
|
||||||
case ADDR_TABS:
|
case ADDR_TABS:
|
||||||
lnum = CURRENT_TAB_NR;
|
ea.line2 = CURRENT_TAB_NR;
|
||||||
ea.line2 = lnum;
|
break;
|
||||||
|
case ADDR_TABS_RELATIVE:
|
||||||
|
ea.line2 = 1;
|
||||||
break;
|
break;
|
||||||
#ifdef FEAT_QUICKFIX
|
#ifdef FEAT_QUICKFIX
|
||||||
case ADDR_QUICKFIX:
|
case ADDR_QUICKFIX:
|
||||||
@@ -2230,6 +2236,10 @@ do_one_cmd(
|
|||||||
goto doend;
|
goto doend;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ADDR_TABS_RELATIVE:
|
||||||
|
errormsg = (char_u *)_(e_invrange);
|
||||||
|
goto doend;
|
||||||
|
break;
|
||||||
case ADDR_ARGUMENTS:
|
case ADDR_ARGUMENTS:
|
||||||
if (ARGCOUNT == 0)
|
if (ARGCOUNT == 0)
|
||||||
ea.line1 = ea.line2 = 0;
|
ea.line1 = ea.line2 = 0;
|
||||||
@@ -2705,6 +2715,9 @@ do_one_cmd(
|
|||||||
case ADDR_TABS:
|
case ADDR_TABS:
|
||||||
ea.line2 = LAST_TAB_NR;
|
ea.line2 = LAST_TAB_NR;
|
||||||
break;
|
break;
|
||||||
|
case ADDR_TABS_RELATIVE:
|
||||||
|
ea.line2 = 1;
|
||||||
|
break;
|
||||||
case ADDR_ARGUMENTS:
|
case ADDR_ARGUMENTS:
|
||||||
if (ARGCOUNT == 0)
|
if (ARGCOUNT == 0)
|
||||||
ea.line1 = ea.line2 = 0;
|
ea.line1 = ea.line2 = 0;
|
||||||
@@ -2781,7 +2794,8 @@ do_one_cmd(
|
|||||||
/*
|
/*
|
||||||
* Be vi compatible: no error message for out of range.
|
* Be vi compatible: no error message for out of range.
|
||||||
*/
|
*/
|
||||||
if (ea.line2 > curbuf->b_ml.ml_line_count)
|
if (ea.addr_type == ADDR_LINES
|
||||||
|
&& ea.line2 > curbuf->b_ml.ml_line_count)
|
||||||
ea.line2 = curbuf->b_ml.ml_line_count;
|
ea.line2 = curbuf->b_ml.ml_line_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4422,6 +4436,11 @@ get_address(
|
|||||||
case ADDR_TABS:
|
case ADDR_TABS:
|
||||||
lnum = CURRENT_TAB_NR;
|
lnum = CURRENT_TAB_NR;
|
||||||
break;
|
break;
|
||||||
|
case ADDR_TABS_RELATIVE:
|
||||||
|
EMSG(_(e_invrange));
|
||||||
|
cmd = NULL;
|
||||||
|
goto error;
|
||||||
|
break;
|
||||||
#ifdef FEAT_QUICKFIX
|
#ifdef FEAT_QUICKFIX
|
||||||
case ADDR_QUICKFIX:
|
case ADDR_QUICKFIX:
|
||||||
lnum = qf_get_cur_valid_idx(eap);
|
lnum = qf_get_cur_valid_idx(eap);
|
||||||
@@ -4459,6 +4478,11 @@ get_address(
|
|||||||
case ADDR_TABS:
|
case ADDR_TABS:
|
||||||
lnum = LAST_TAB_NR;
|
lnum = LAST_TAB_NR;
|
||||||
break;
|
break;
|
||||||
|
case ADDR_TABS_RELATIVE:
|
||||||
|
EMSG(_(e_invrange));
|
||||||
|
cmd = NULL;
|
||||||
|
goto error;
|
||||||
|
break;
|
||||||
#ifdef FEAT_QUICKFIX
|
#ifdef FEAT_QUICKFIX
|
||||||
case ADDR_QUICKFIX:
|
case ADDR_QUICKFIX:
|
||||||
lnum = qf_get_size(eap);
|
lnum = qf_get_size(eap);
|
||||||
@@ -4641,6 +4665,9 @@ get_address(
|
|||||||
case ADDR_TABS:
|
case ADDR_TABS:
|
||||||
lnum = CURRENT_TAB_NR;
|
lnum = CURRENT_TAB_NR;
|
||||||
break;
|
break;
|
||||||
|
case ADDR_TABS_RELATIVE:
|
||||||
|
lnum = 1;
|
||||||
|
break;
|
||||||
#ifdef FEAT_QUICKFIX
|
#ifdef FEAT_QUICKFIX
|
||||||
case ADDR_QUICKFIX:
|
case ADDR_QUICKFIX:
|
||||||
lnum = qf_get_cur_valid_idx(eap);
|
lnum = qf_get_cur_valid_idx(eap);
|
||||||
@@ -4657,7 +4684,14 @@ get_address(
|
|||||||
n = 1;
|
n = 1;
|
||||||
else
|
else
|
||||||
n = getdigits(&cmd);
|
n = getdigits(&cmd);
|
||||||
if (addr_type == ADDR_LOADED_BUFFERS
|
|
||||||
|
if (addr_type == ADDR_TABS_RELATIVE)
|
||||||
|
{
|
||||||
|
EMSG(_(e_invrange));
|
||||||
|
cmd = NULL;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
else if (addr_type == ADDR_LOADED_BUFFERS
|
||||||
|| addr_type == ADDR_BUFFERS)
|
|| addr_type == ADDR_BUFFERS)
|
||||||
lnum = compute_buffer_local_count(
|
lnum = compute_buffer_local_count(
|
||||||
addr_type, lnum, (i == '-') ? -1 * n : n);
|
addr_type, lnum, (i == '-') ? -1 * n : n);
|
||||||
@@ -4790,6 +4824,9 @@ invalid_range(exarg_T *eap)
|
|||||||
if (eap->line2 > LAST_TAB_NR)
|
if (eap->line2 > LAST_TAB_NR)
|
||||||
return (char_u *)_(e_invrange);
|
return (char_u *)_(e_invrange);
|
||||||
break;
|
break;
|
||||||
|
case ADDR_TABS_RELATIVE:
|
||||||
|
/* Do nothing */
|
||||||
|
break;
|
||||||
#ifdef FEAT_QUICKFIX
|
#ifdef FEAT_QUICKFIX
|
||||||
case ADDR_QUICKFIX:
|
case ADDR_QUICKFIX:
|
||||||
if (eap->line2 != 1 && eap->line2 > qf_get_size(eap))
|
if (eap->line2 != 1 && eap->line2 > qf_get_size(eap))
|
||||||
@@ -7431,6 +7468,107 @@ ex_win_close(
|
|||||||
win_close_othertab(win, !need_hide && !P_HID(buf), tp);
|
win_close_othertab(win, !need_hide && !P_HID(buf), tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle the argument for a tabpage related ex command.
|
||||||
|
* Returns a tabpage number.
|
||||||
|
* When an error is encountered then eap->errmsg is set.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
get_tabpage_arg(exarg_T *eap)
|
||||||
|
{
|
||||||
|
int tab_number;
|
||||||
|
int unaccept_arg0 = (eap->cmdidx == CMD_tabmove) ? 0 : 1;
|
||||||
|
|
||||||
|
if (eap->arg && *eap->arg != NUL)
|
||||||
|
{
|
||||||
|
char_u *p = eap->arg;
|
||||||
|
char_u *p_save;
|
||||||
|
int relative = 0; /* argument +N/-N means: go to N places to the
|
||||||
|
* right/left relative to the current position. */
|
||||||
|
|
||||||
|
if (*p == '-')
|
||||||
|
{
|
||||||
|
relative = -1;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
else if (*p == '+')
|
||||||
|
{
|
||||||
|
relative = 1;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
p_save = p;
|
||||||
|
tab_number = getdigits(&p);
|
||||||
|
|
||||||
|
if (relative == 0)
|
||||||
|
{
|
||||||
|
if (STRCMP(p, "$") == 0)
|
||||||
|
tab_number = LAST_TAB_NR;
|
||||||
|
else if (p == p_save || *p_save == '-' || *p != NUL
|
||||||
|
|| tab_number > LAST_TAB_NR)
|
||||||
|
{
|
||||||
|
/* No numbers as argument. */
|
||||||
|
eap->errmsg = e_invarg;
|
||||||
|
goto theend;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*p_save == NUL)
|
||||||
|
tab_number = 1;
|
||||||
|
else if (p == p_save || *p_save == '-' || *p != NUL
|
||||||
|
|| tab_number == 0)
|
||||||
|
{
|
||||||
|
/* No numbers as argument. */
|
||||||
|
eap->errmsg = e_invarg;
|
||||||
|
goto theend;
|
||||||
|
}
|
||||||
|
tab_number = tab_number * relative + tabpage_index(curtab);
|
||||||
|
if (!unaccept_arg0 && relative == -1)
|
||||||
|
--tab_number;
|
||||||
|
}
|
||||||
|
if (tab_number < unaccept_arg0 || tab_number > LAST_TAB_NR)
|
||||||
|
eap->errmsg = e_invarg;
|
||||||
|
}
|
||||||
|
else if (eap->addr_count > 0)
|
||||||
|
{
|
||||||
|
if (unaccept_arg0 && eap->line2 == 0)
|
||||||
|
{
|
||||||
|
eap->errmsg = e_invrange;
|
||||||
|
tab_number = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tab_number = eap->line2;
|
||||||
|
if (!unaccept_arg0 && **eap->cmdlinep == '-')
|
||||||
|
{
|
||||||
|
--tab_number;
|
||||||
|
if (tab_number < unaccept_arg0)
|
||||||
|
eap->errmsg = e_invarg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (eap->cmdidx)
|
||||||
|
{
|
||||||
|
case CMD_tabnext:
|
||||||
|
tab_number = tabpage_index(curtab) + 1;
|
||||||
|
if (tab_number > LAST_TAB_NR)
|
||||||
|
tab_number = 1;
|
||||||
|
break;
|
||||||
|
case CMD_tabmove:
|
||||||
|
tab_number = LAST_TAB_NR;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tab_number = tabpage_index(curtab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
theend:
|
||||||
|
return tab_number;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ":tabclose": close current tab page, unless it is the last one.
|
* ":tabclose": close current tab page, unless it is the last one.
|
||||||
* ":tabclose N": close tab page N.
|
* ":tabclose N": close tab page N.
|
||||||
@@ -7439,6 +7577,7 @@ ex_win_close(
|
|||||||
ex_tabclose(exarg_T *eap)
|
ex_tabclose(exarg_T *eap)
|
||||||
{
|
{
|
||||||
tabpage_T *tp;
|
tabpage_T *tp;
|
||||||
|
int tab_number;
|
||||||
|
|
||||||
# ifdef FEAT_CMDWIN
|
# ifdef FEAT_CMDWIN
|
||||||
if (cmdwin_type != 0)
|
if (cmdwin_type != 0)
|
||||||
@@ -7449,9 +7588,10 @@ ex_tabclose(exarg_T *eap)
|
|||||||
EMSG(_("E784: Cannot close last tab page"));
|
EMSG(_("E784: Cannot close last tab page"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (eap->addr_count > 0)
|
tab_number = get_tabpage_arg(eap);
|
||||||
|
if (eap->errmsg == NULL)
|
||||||
{
|
{
|
||||||
tp = find_tabpage((int)eap->line2);
|
tp = find_tabpage(tab_number);
|
||||||
if (tp == NULL)
|
if (tp == NULL)
|
||||||
{
|
{
|
||||||
beep_flush();
|
beep_flush();
|
||||||
@@ -7462,13 +7602,13 @@ ex_tabclose(exarg_T *eap)
|
|||||||
tabpage_close_other(tp, eap->forceit);
|
tabpage_close_other(tp, eap->forceit);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
else if (!text_locked()
|
||||||
if (!text_locked()
|
|
||||||
#ifdef FEAT_AUTOCMD
|
#ifdef FEAT_AUTOCMD
|
||||||
&& !curbuf_locked()
|
&& !curbuf_locked()
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
tabpage_close(eap->forceit);
|
tabpage_close(eap->forceit);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7480,6 +7620,7 @@ ex_tabonly(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
tabpage_T *tp;
|
tabpage_T *tp;
|
||||||
int done;
|
int done;
|
||||||
|
int tab_number;
|
||||||
|
|
||||||
# ifdef FEAT_CMDWIN
|
# ifdef FEAT_CMDWIN
|
||||||
if (cmdwin_type != 0)
|
if (cmdwin_type != 0)
|
||||||
@@ -7490,24 +7631,27 @@ ex_tabonly(exarg_T *eap)
|
|||||||
MSG(_("Already only one tab page"));
|
MSG(_("Already only one tab page"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (eap->addr_count > 0)
|
tab_number = get_tabpage_arg(eap);
|
||||||
goto_tabpage(eap->line2);
|
if (eap->errmsg == NULL)
|
||||||
/* Repeat this up to a 1000 times, because autocommands may mess
|
|
||||||
* up the lists. */
|
|
||||||
for (done = 0; done < 1000; ++done)
|
|
||||||
{
|
{
|
||||||
FOR_ALL_TABPAGES(tp)
|
goto_tabpage(tab_number);
|
||||||
if (tp->tp_topframe != topframe)
|
/* Repeat this up to a 1000 times, because autocommands may
|
||||||
{
|
* mess up the lists. */
|
||||||
tabpage_close_other(tp, eap->forceit);
|
for (done = 0; done < 1000; ++done)
|
||||||
/* if we failed to close it quit */
|
{
|
||||||
if (valid_tabpage(tp))
|
FOR_ALL_TABPAGES(tp)
|
||||||
done = 1000;
|
if (tp->tp_topframe != topframe)
|
||||||
/* start over, "tp" is now invalid */
|
{
|
||||||
|
tabpage_close_other(tp, eap->forceit);
|
||||||
|
/* if we failed to close it quit */
|
||||||
|
if (valid_tabpage(tp))
|
||||||
|
done = 1000;
|
||||||
|
/* start over, "tp" is now invalid */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (first_tabpage->tp_next == NULL)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (first_tabpage->tp_next == NULL)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8249,6 +8393,8 @@ tabpage_new(void)
|
|||||||
static void
|
static void
|
||||||
ex_tabnext(exarg_T *eap)
|
ex_tabnext(exarg_T *eap)
|
||||||
{
|
{
|
||||||
|
int tab_number;
|
||||||
|
|
||||||
switch (eap->cmdidx)
|
switch (eap->cmdidx)
|
||||||
{
|
{
|
||||||
case CMD_tabfirst:
|
case CMD_tabfirst:
|
||||||
@@ -8260,10 +8406,40 @@ ex_tabnext(exarg_T *eap)
|
|||||||
break;
|
break;
|
||||||
case CMD_tabprevious:
|
case CMD_tabprevious:
|
||||||
case CMD_tabNext:
|
case CMD_tabNext:
|
||||||
goto_tabpage(eap->addr_count == 0 ? -1 : -(int)eap->line2);
|
if (eap->arg && *eap->arg != NUL)
|
||||||
|
{
|
||||||
|
char_u *p = eap->arg;
|
||||||
|
char_u *p_save = p;
|
||||||
|
|
||||||
|
tab_number = getdigits(&p);
|
||||||
|
if (p == p_save || *p_save == '-' || *p != NUL
|
||||||
|
|| tab_number == 0)
|
||||||
|
{
|
||||||
|
/* No numbers as argument. */
|
||||||
|
eap->errmsg = e_invarg;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (eap->addr_count == 0)
|
||||||
|
tab_number = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tab_number = eap->line2;
|
||||||
|
if (tab_number < 1)
|
||||||
|
{
|
||||||
|
eap->errmsg = e_invrange;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
goto_tabpage(-tab_number);
|
||||||
break;
|
break;
|
||||||
default: /* CMD_tabnext */
|
default: /* CMD_tabnext */
|
||||||
goto_tabpage(eap->addr_count == 0 ? 0 : (int)eap->line2);
|
tab_number = get_tabpage_arg(eap);
|
||||||
|
if (eap->errmsg == NULL)
|
||||||
|
goto_tabpage(tab_number);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8276,59 +8452,9 @@ ex_tabmove(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
int tab_number;
|
int tab_number;
|
||||||
|
|
||||||
if (eap->arg && *eap->arg != NUL)
|
tab_number = get_tabpage_arg(eap);
|
||||||
{
|
if (eap->errmsg == NULL)
|
||||||
char_u *p = eap->arg;
|
tabpage_move(tab_number);
|
||||||
int relative = 0; /* argument +N/-N means: move N places to the
|
|
||||||
* right/left relative to the current position. */
|
|
||||||
|
|
||||||
if (*eap->arg == '-')
|
|
||||||
{
|
|
||||||
relative = -1;
|
|
||||||
p = eap->arg + 1;
|
|
||||||
}
|
|
||||||
else if (*eap->arg == '+')
|
|
||||||
{
|
|
||||||
relative = 1;
|
|
||||||
p = eap->arg + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
p = eap->arg;
|
|
||||||
|
|
||||||
if (relative == 0)
|
|
||||||
{
|
|
||||||
if (STRCMP(p, "$") == 0)
|
|
||||||
tab_number = LAST_TAB_NR;
|
|
||||||
else if (p == skipdigits(p))
|
|
||||||
{
|
|
||||||
/* No numbers as argument. */
|
|
||||||
eap->errmsg = e_invarg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
tab_number = getdigits(&p);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (*p != NUL)
|
|
||||||
tab_number = getdigits(&p);
|
|
||||||
else
|
|
||||||
tab_number = 1;
|
|
||||||
tab_number = tab_number * relative + tabpage_index(curtab);
|
|
||||||
if (relative == -1)
|
|
||||||
--tab_number;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (eap->addr_count != 0)
|
|
||||||
{
|
|
||||||
tab_number = eap->line2;
|
|
||||||
if (**eap->cmdlinep == '-')
|
|
||||||
--tab_number;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
tab_number = LAST_TAB_NR;
|
|
||||||
|
|
||||||
tabpage_move(tab_number);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -11192,8 +11318,10 @@ makeopens(
|
|||||||
* resized when moving between windows.
|
* resized when moving between windows.
|
||||||
* Do this before restoring the view, so that the topline and the
|
* Do this before restoring the view, so that the topline and the
|
||||||
* cursor can be set. This is done again below.
|
* cursor can be set. This is done again below.
|
||||||
|
* winminheight and winminwidth need to be set to avoid an error if the
|
||||||
|
* user has set winheight or winwidth.
|
||||||
*/
|
*/
|
||||||
if (put_line(fd, "set winheight=1 winwidth=1") == FAIL)
|
if (put_line(fd, "set winminheight=1 winheight=1 winminwidth=1 winwidth=1") == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
|
if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@@ -11263,6 +11391,10 @@ makeopens(
|
|||||||
if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s",
|
if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s",
|
||||||
p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL)
|
p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
/* Re-apply 'winminheight' and 'winminwidth'. */
|
||||||
|
if (fprintf(fd, "set winminheight=%ld winminwidth=%ld",
|
||||||
|
p_wmh, p_wmw) < 0 || put_eol(fd) == FAIL)
|
||||||
|
return FAIL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lastly, execute the x.vim file if it exists.
|
* Lastly, execute the x.vim file if it exists.
|
||||||
|
|||||||
694
src/farsi.c
694
src/farsi.c
@@ -15,30 +15,11 @@
|
|||||||
|
|
||||||
#if defined(FEAT_FKMAP) || defined(PROTO)
|
#if defined(FEAT_FKMAP) || defined(PROTO)
|
||||||
|
|
||||||
static int toF_Xor_X_(int c);
|
|
||||||
static int F_is_TyE(int c);
|
|
||||||
static int F_is_TyC_TyD(int c);
|
|
||||||
static int F_is_TyB_TyC_TyD(int src, int offset);
|
static int F_is_TyB_TyC_TyD(int src, int offset);
|
||||||
static int toF_TyB(int c);
|
|
||||||
static void put_curr_and_l_to_X(int c);
|
|
||||||
static void put_and_redo(int c);
|
|
||||||
static void chg_c_toX_orX(void);
|
|
||||||
static void chg_c_to_X_orX_(void);
|
|
||||||
static void chg_c_to_X_or_X(void);
|
|
||||||
static void chg_l_to_X_orX_(void);
|
|
||||||
static void chg_l_toXor_X(void);
|
|
||||||
static void chg_r_to_Xor_X_(void);
|
|
||||||
static int toF_leading(int c);
|
|
||||||
static int toF_Rjoin(int c);
|
|
||||||
static int canF_Ljoin(int c);
|
|
||||||
static int canF_Rjoin(int c);
|
|
||||||
static int F_isterm(int c);
|
|
||||||
static int toF_ending(int c);
|
|
||||||
static void lrswapbuf(char_u *buf, int len);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert the given Farsi character into a _X or _X_ type
|
* Convert the given Farsi character into a _X or _X_ type
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
toF_Xor_X_(int c)
|
toF_Xor_X_(int c)
|
||||||
{
|
{
|
||||||
@@ -105,7 +86,7 @@ toF_Xor_X_(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert the given Farsi character into Farsi capital character.
|
* Convert the given Farsi character into Farsi capital character.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
toF_TyA(int c)
|
toF_TyA(int c)
|
||||||
{
|
{
|
||||||
@@ -156,7 +137,7 @@ toF_TyA(int c)
|
|||||||
* Is the character under the cursor+offset in the given buffer a join type.
|
* Is the character under the cursor+offset in the given buffer a join type.
|
||||||
* That is a character that is combined with the others.
|
* That is a character that is combined with the others.
|
||||||
* Note: the offset is used only for command line buffer.
|
* Note: the offset is used only for command line buffer.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
F_is_TyB_TyC_TyD(int src, int offset)
|
F_is_TyB_TyC_TyD(int src, int offset)
|
||||||
{
|
{
|
||||||
@@ -207,7 +188,7 @@ F_is_TyB_TyC_TyD(int src, int offset)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Is the Farsi character one of the terminating only type.
|
* Is the Farsi character one of the terminating only type.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
F_is_TyE(int c)
|
F_is_TyE(int c)
|
||||||
{
|
{
|
||||||
@@ -230,7 +211,7 @@ F_is_TyE(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Is the Farsi character one of the none leading type.
|
* Is the Farsi character one of the none leading type.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
F_is_TyC_TyD(int c)
|
F_is_TyC_TyD(int c)
|
||||||
{
|
{
|
||||||
@@ -254,7 +235,7 @@ F_is_TyC_TyD(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert a none leading Farsi char into a leading type.
|
* Convert a none leading Farsi char into a leading type.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
toF_TyB(int c)
|
toF_TyB(int c)
|
||||||
{
|
{
|
||||||
@@ -275,9 +256,18 @@ toF_TyB(int c)
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
put_and_redo(int c)
|
||||||
|
{
|
||||||
|
pchar_cursor(c);
|
||||||
|
AppendCharToRedobuff(K_BS);
|
||||||
|
AppendCharToRedobuff(c);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Overwrite the current redo and cursor characters + left adjust.
|
* Overwrite the current redo and cursor characters + left adjust.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
put_curr_and_l_to_X(int c)
|
put_curr_and_l_to_X(int c)
|
||||||
{
|
{
|
||||||
@@ -312,17 +302,9 @@ put_curr_and_l_to_X(int c)
|
|||||||
put_and_redo(c);
|
put_and_redo(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
put_and_redo(int c)
|
|
||||||
{
|
|
||||||
pchar_cursor(c);
|
|
||||||
AppendCharToRedobuff(K_BS);
|
|
||||||
AppendCharToRedobuff(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Change the char. under the cursor to a X_ or X type
|
* Change the char. under the cursor to a X_ or X type
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
chg_c_toX_orX(void)
|
chg_c_toX_orX(void)
|
||||||
{
|
{
|
||||||
@@ -446,8 +428,7 @@ chg_c_toX_orX(void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Change the char. under the cursor to a _X_ or X_ type
|
* Change the char. under the cursor to a _X_ or X_ type
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
chg_c_to_X_orX_(void)
|
chg_c_to_X_orX_(void)
|
||||||
{
|
{
|
||||||
@@ -498,9 +479,9 @@ chg_c_to_X_orX_(void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Change the char. under the cursor to a _X_ or _X type
|
* Change the char. under the cursor to a _X_ or _X type
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
chg_c_to_X_or_X (void)
|
chg_c_to_X_or_X(void)
|
||||||
{
|
{
|
||||||
int tempc;
|
int tempc;
|
||||||
|
|
||||||
@@ -529,7 +510,7 @@ chg_c_to_X_or_X (void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Change the character left to the cursor to a _X_ or X_ type
|
* Change the character left to the cursor to a _X_ or X_ type
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
chg_l_to_X_orX_(void)
|
chg_l_to_X_orX_(void)
|
||||||
{
|
{
|
||||||
@@ -597,10 +578,9 @@ chg_l_to_X_orX_(void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Change the character left to the cursor to a X or _X type
|
* Change the character left to the cursor to a X or _X type
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
chg_l_toXor_X (void)
|
chg_l_toXor_X(void)
|
||||||
{
|
{
|
||||||
int tempc;
|
int tempc;
|
||||||
|
|
||||||
@@ -666,8 +646,7 @@ chg_l_toXor_X (void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Change the character right to the cursor to a _X or _X_ type
|
* Change the character right to the cursor to a _X or _X_ type
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
chg_r_to_Xor_X_(void)
|
chg_r_to_Xor_X_(void)
|
||||||
{
|
{
|
||||||
@@ -691,48 +670,50 @@ chg_r_to_Xor_X_(void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Map Farsi keyboard when in fkmap mode.
|
* Map Farsi keyboard when in fkmap mode.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
fkmap(int c)
|
fkmap(int c)
|
||||||
{
|
{
|
||||||
int tempc;
|
int tempc;
|
||||||
static int revins;
|
int insert_mode = (State & INSERT);
|
||||||
|
static int revins = 0;
|
||||||
|
|
||||||
if (IS_SPECIAL(c))
|
if (IS_SPECIAL(c))
|
||||||
return c;
|
return c;
|
||||||
|
|
||||||
if (VIM_ISDIGIT(c) || ((c == '.' || c == '+' || c == '-' ||
|
if (insert_mode)
|
||||||
c == '^' || c == '%' || c == '#' || c == '=') && revins))
|
|
||||||
{
|
{
|
||||||
if (!revins)
|
if (VIM_ISDIGIT(c) || ((c == '.' || c == '+' || c == '-' ||
|
||||||
|
c == '^' || c == '%' || c == '#' || c == '=') && revins))
|
||||||
{
|
{
|
||||||
if (curwin->w_cursor.col)
|
/* Numbers are entered left-to-right. */
|
||||||
|
if (!revins)
|
||||||
{
|
{
|
||||||
if (!p_ri)
|
if (curwin->w_cursor.col)
|
||||||
dec_cursor();
|
{
|
||||||
|
if (!p_ri)
|
||||||
|
dec_cursor();
|
||||||
|
|
||||||
chg_c_toX_orX ();
|
chg_c_toX_orX ();
|
||||||
chg_l_toXor_X ();
|
chg_l_toXor_X ();
|
||||||
|
|
||||||
if (!p_ri)
|
if (!p_ri)
|
||||||
inc_cursor();
|
inc_cursor();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
arrow_used = TRUE;
|
||||||
|
(void)stop_arrow();
|
||||||
|
|
||||||
|
if (!curwin->w_p_rl && revins)
|
||||||
|
inc_cursor();
|
||||||
|
|
||||||
|
++revins;
|
||||||
|
p_ri = 1;
|
||||||
}
|
}
|
||||||
|
else if (revins)
|
||||||
arrow_used = TRUE;
|
|
||||||
(void)stop_arrow();
|
|
||||||
|
|
||||||
if (!curwin->w_p_rl && revins)
|
|
||||||
inc_cursor();
|
|
||||||
|
|
||||||
++revins;
|
|
||||||
p_ri=1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (revins)
|
|
||||||
{
|
{
|
||||||
|
/* Stop entering number. */
|
||||||
arrow_used = TRUE;
|
arrow_used = TRUE;
|
||||||
(void)stop_arrow();
|
(void)stop_arrow();
|
||||||
|
|
||||||
@@ -773,14 +754,14 @@ fkmap(int c)
|
|||||||
if (!revins)
|
if (!revins)
|
||||||
{
|
{
|
||||||
if (curwin->w_p_rl)
|
if (curwin->w_p_rl)
|
||||||
p_ri=0;
|
p_ri = 0;
|
||||||
if (!curwin->w_p_rl)
|
if (!curwin->w_p_rl)
|
||||||
p_ri=1;
|
p_ri = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((c < 0x100) && (isalpha(c) || c == '&' || c == '^' || c == ';' ||
|
if ((c < 0x100) && (isalpha(c) || c == '&' || c == '^' || c == ';' ||
|
||||||
c == '\''|| c == ',' || c == '[' ||
|
c == '\''|| c == ',' || c == '[' ||
|
||||||
c == ']' || c == '{' || c == '}' ))
|
c == ']' || c == '{' || c == '}'))
|
||||||
chg_r_to_Xor_X_();
|
chg_r_to_Xor_X_();
|
||||||
|
|
||||||
tempc = 0;
|
tempc = 0;
|
||||||
@@ -844,13 +825,12 @@ fkmap(int c)
|
|||||||
case NL:
|
case NL:
|
||||||
case TAB:
|
case TAB:
|
||||||
|
|
||||||
if (p_ri && c == NL && curwin->w_cursor.col)
|
if (p_ri && c == NL && curwin->w_cursor.col && insert_mode)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* If the char before the cursor is _X_ or X_ do not change
|
* If the char before the cursor is _X_ or X_ do not change
|
||||||
* the one under the cursor with X type.
|
* the one under the cursor with X type.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
dec_cursor();
|
dec_cursor();
|
||||||
|
|
||||||
if (F_isalpha(gchar_cursor()))
|
if (F_isalpha(gchar_cursor()))
|
||||||
@@ -920,215 +900,219 @@ fkmap(int c)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!p_ri)
|
|
||||||
dec_cursor();
|
|
||||||
|
|
||||||
switch ((tempc = gchar_cursor()))
|
if (insert_mode)
|
||||||
{
|
{
|
||||||
case _BE:
|
if (!p_ri)
|
||||||
case _PE:
|
dec_cursor();
|
||||||
case _TE:
|
|
||||||
case _SE:
|
|
||||||
case _JIM:
|
|
||||||
case _CHE:
|
|
||||||
case _HE_J:
|
|
||||||
case _XE:
|
|
||||||
case _SIN:
|
|
||||||
case _SHIN:
|
|
||||||
case _SAD:
|
|
||||||
case _ZAD:
|
|
||||||
case _FE:
|
|
||||||
case _GHAF:
|
|
||||||
case _KAF:
|
|
||||||
case _KAF_H:
|
|
||||||
case _GAF:
|
|
||||||
case _LAM:
|
|
||||||
case _MIM:
|
|
||||||
case _NOON:
|
|
||||||
case _HE:
|
|
||||||
case _HE_:
|
|
||||||
case _TA:
|
|
||||||
case _ZA:
|
|
||||||
put_curr_and_l_to_X(toF_TyA(tempc));
|
|
||||||
break;
|
|
||||||
case _AYN:
|
|
||||||
case _AYN_:
|
|
||||||
|
|
||||||
if (!p_ri)
|
switch ((tempc = gchar_cursor()))
|
||||||
if (!curwin->w_cursor.col)
|
{
|
||||||
{
|
case _BE:
|
||||||
put_curr_and_l_to_X(AYN);
|
case _PE:
|
||||||
break;
|
case _TE:
|
||||||
}
|
case _SE:
|
||||||
|
case _JIM:
|
||||||
|
case _CHE:
|
||||||
|
case _HE_J:
|
||||||
|
case _XE:
|
||||||
|
case _SIN:
|
||||||
|
case _SHIN:
|
||||||
|
case _SAD:
|
||||||
|
case _ZAD:
|
||||||
|
case _FE:
|
||||||
|
case _GHAF:
|
||||||
|
case _KAF:
|
||||||
|
case _KAF_H:
|
||||||
|
case _GAF:
|
||||||
|
case _LAM:
|
||||||
|
case _MIM:
|
||||||
|
case _NOON:
|
||||||
|
case _HE:
|
||||||
|
case _HE_:
|
||||||
|
case _TA:
|
||||||
|
case _ZA:
|
||||||
|
put_curr_and_l_to_X(toF_TyA(tempc));
|
||||||
|
break;
|
||||||
|
case _AYN:
|
||||||
|
case _AYN_:
|
||||||
|
|
||||||
if (p_ri)
|
if (!p_ri)
|
||||||
inc_cursor();
|
if (!curwin->w_cursor.col)
|
||||||
else
|
{
|
||||||
dec_cursor();
|
put_curr_and_l_to_X(AYN);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
|
if (p_ri)
|
||||||
tempc = AYN_;
|
inc_cursor();
|
||||||
else
|
else
|
||||||
tempc = AYN;
|
dec_cursor();
|
||||||
|
|
||||||
if (p_ri)
|
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
|
||||||
dec_cursor();
|
tempc = AYN_;
|
||||||
else
|
else
|
||||||
inc_cursor();
|
tempc = AYN;
|
||||||
|
|
||||||
put_curr_and_l_to_X(tempc);
|
if (p_ri)
|
||||||
|
dec_cursor();
|
||||||
|
else
|
||||||
|
inc_cursor();
|
||||||
|
|
||||||
break;
|
put_curr_and_l_to_X(tempc);
|
||||||
case _GHAYN:
|
|
||||||
case _GHAYN_:
|
|
||||||
|
|
||||||
if (!p_ri)
|
break;
|
||||||
if (!curwin->w_cursor.col)
|
case _GHAYN:
|
||||||
{
|
case _GHAYN_:
|
||||||
put_curr_and_l_to_X(GHAYN);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p_ri)
|
if (!p_ri)
|
||||||
inc_cursor();
|
if (!curwin->w_cursor.col)
|
||||||
else
|
{
|
||||||
dec_cursor();
|
put_curr_and_l_to_X(GHAYN);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
|
if (p_ri)
|
||||||
tempc = GHAYN_;
|
inc_cursor();
|
||||||
else
|
else
|
||||||
tempc = GHAYN;
|
dec_cursor();
|
||||||
|
|
||||||
if (p_ri)
|
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
|
||||||
dec_cursor();
|
tempc = GHAYN_;
|
||||||
else
|
else
|
||||||
inc_cursor();
|
tempc = GHAYN;
|
||||||
|
|
||||||
put_curr_and_l_to_X(tempc);
|
if (p_ri)
|
||||||
break;
|
dec_cursor();
|
||||||
case _YE:
|
else
|
||||||
case _IE:
|
inc_cursor();
|
||||||
case _YEE:
|
|
||||||
if (!p_ri)
|
|
||||||
if (!curwin->w_cursor.col)
|
|
||||||
{
|
|
||||||
put_curr_and_l_to_X((tempc == _YE ? YE :
|
|
||||||
(tempc == _IE ? IE : YEE)));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p_ri)
|
put_curr_and_l_to_X(tempc);
|
||||||
inc_cursor();
|
break;
|
||||||
else
|
case _YE:
|
||||||
dec_cursor();
|
case _IE:
|
||||||
|
case _YEE:
|
||||||
|
if (!p_ri)
|
||||||
|
if (!curwin->w_cursor.col)
|
||||||
|
{
|
||||||
|
put_curr_and_l_to_X((tempc == _YE ? YE :
|
||||||
|
(tempc == _IE ? IE : YEE)));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
|
if (p_ri)
|
||||||
tempc = (tempc == _YE ? YE_ :
|
inc_cursor();
|
||||||
(tempc == _IE ? IE_ : YEE_));
|
else
|
||||||
else
|
dec_cursor();
|
||||||
tempc = (tempc == _YE ? YE :
|
|
||||||
(tempc == _IE ? IE : YEE));
|
|
||||||
|
|
||||||
if (p_ri)
|
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
|
||||||
dec_cursor();
|
tempc = (tempc == _YE ? YE_ :
|
||||||
else
|
(tempc == _IE ? IE_ : YEE_));
|
||||||
inc_cursor();
|
else
|
||||||
|
tempc = (tempc == _YE ? YE :
|
||||||
|
(tempc == _IE ? IE : YEE));
|
||||||
|
|
||||||
put_curr_and_l_to_X(tempc);
|
if (p_ri)
|
||||||
break;
|
dec_cursor();
|
||||||
|
else
|
||||||
|
inc_cursor();
|
||||||
|
|
||||||
|
put_curr_and_l_to_X(tempc);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p_ri)
|
if (!p_ri)
|
||||||
inc_cursor();
|
inc_cursor();
|
||||||
|
}
|
||||||
|
|
||||||
tempc = 0;
|
tempc = 0;
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case '0': return FARSI_0;
|
case '0': return FARSI_0;
|
||||||
case '1': return FARSI_1;
|
case '1': return FARSI_1;
|
||||||
case '2': return FARSI_2;
|
case '2': return FARSI_2;
|
||||||
case '3': return FARSI_3;
|
case '3': return FARSI_3;
|
||||||
case '4': return FARSI_4;
|
case '4': return FARSI_4;
|
||||||
case '5': return FARSI_5;
|
case '5': return FARSI_5;
|
||||||
case '6': return FARSI_6;
|
case '6': return FARSI_6;
|
||||||
case '7': return FARSI_7;
|
case '7': return FARSI_7;
|
||||||
case '8': return FARSI_8;
|
case '8': return FARSI_8;
|
||||||
case '9': return FARSI_9;
|
case '9': return FARSI_9;
|
||||||
case 'B': return F_PSP;
|
case 'B': return F_PSP;
|
||||||
case 'E': return JAZR_N;
|
case 'E': return JAZR_N;
|
||||||
case 'F': return ALEF_D_H;
|
case 'F': return ALEF_D_H;
|
||||||
case 'H': return ALEF_A;
|
case 'H': return ALEF_A;
|
||||||
case 'I': return TASH;
|
case 'I': return TASH;
|
||||||
case 'K': return F_LQUOT;
|
case 'K': return F_LQUOT;
|
||||||
case 'L': return F_RQUOT;
|
case 'L': return F_RQUOT;
|
||||||
case 'M': return HAMZE;
|
case 'M': return HAMZE;
|
||||||
case 'O': return '[';
|
case 'O': return '[';
|
||||||
case 'P': return ']';
|
case 'P': return ']';
|
||||||
case 'Q': return OO;
|
case 'Q': return OO;
|
||||||
case 'R': return MAD_N;
|
case 'R': return MAD_N;
|
||||||
case 'T': return OW;
|
case 'T': return OW;
|
||||||
case 'U': return MAD;
|
case 'U': return MAD;
|
||||||
case 'W': return OW_OW;
|
case 'W': return OW_OW;
|
||||||
case 'Y': return JAZR;
|
case 'Y': return JAZR;
|
||||||
case '`': return F_PCN;
|
case '`': return F_PCN;
|
||||||
case '!': return F_EXCL;
|
case '!': return F_EXCL;
|
||||||
case '@': return F_COMMA;
|
case '@': return F_COMMA;
|
||||||
case '#': return F_DIVIDE;
|
case '#': return F_DIVIDE;
|
||||||
case '$': return F_CURRENCY;
|
case '$': return F_CURRENCY;
|
||||||
case '%': return F_PERCENT;
|
case '%': return F_PERCENT;
|
||||||
case '^': return F_MUL;
|
case '^': return F_MUL;
|
||||||
case '&': return F_BCOMMA;
|
case '&': return F_BCOMMA;
|
||||||
case '*': return F_STAR;
|
case '*': return F_STAR;
|
||||||
case '(': return F_LPARENT;
|
case '(': return F_LPARENT;
|
||||||
case ')': return F_RPARENT;
|
case ')': return F_RPARENT;
|
||||||
case '-': return F_MINUS;
|
case '-': return F_MINUS;
|
||||||
case '_': return F_UNDERLINE;
|
case '_': return F_UNDERLINE;
|
||||||
case '=': return F_EQUALS;
|
case '=': return F_EQUALS;
|
||||||
case '+': return F_PLUS;
|
case '+': return F_PLUS;
|
||||||
case '\\': return F_BSLASH;
|
case '\\': return F_BSLASH;
|
||||||
case '|': return F_PIPE;
|
case '|': return F_PIPE;
|
||||||
case ':': return F_DCOLON;
|
case ':': return F_DCOLON;
|
||||||
case '"': return F_SEMICOLON;
|
case '"': return F_SEMICOLON;
|
||||||
case '.': return F_PERIOD;
|
case '.': return F_PERIOD;
|
||||||
case '/': return F_SLASH;
|
case '/': return F_SLASH;
|
||||||
case '<': return F_LESS;
|
case '<': return F_LESS;
|
||||||
case '>': return F_GREATER;
|
case '>': return F_GREATER;
|
||||||
case '?': return F_QUESTION;
|
case '?': return F_QUESTION;
|
||||||
case ' ': return F_BLANK;
|
case ' ': return F_BLANK;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'a':
|
case 'a':
|
||||||
tempc = _SHIN;
|
tempc = _SHIN;
|
||||||
break;
|
break;
|
||||||
case 'A':
|
case 'A':
|
||||||
tempc = WAW_H;
|
tempc = WAW_H;
|
||||||
break;
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
tempc = ZAL;
|
tempc = ZAL;
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
tempc = ZE;
|
tempc = ZE;
|
||||||
break;
|
break;
|
||||||
case 'C':
|
case 'C':
|
||||||
tempc = JE;
|
tempc = JE;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
tempc = _YE;
|
tempc = _YE;
|
||||||
break;
|
break;
|
||||||
case 'D':
|
case 'D':
|
||||||
tempc = _YEE;
|
tempc = _YEE;
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
tempc = _SE;
|
tempc = _SE;
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
tempc = _BE;
|
tempc = _BE;
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
tempc = _LAM;
|
tempc = _LAM;
|
||||||
break;
|
break;
|
||||||
case 'G':
|
case 'G':
|
||||||
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
||||||
{
|
{
|
||||||
@@ -1230,7 +1214,7 @@ fkmap(int c)
|
|||||||
inc_cursor();
|
inc_cursor();
|
||||||
break;
|
break;
|
||||||
case 'j':
|
case 'j':
|
||||||
tempc = _TE;
|
tempc = _TE;
|
||||||
break;
|
break;
|
||||||
case 'J':
|
case 'J':
|
||||||
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
||||||
@@ -1260,73 +1244,73 @@ fkmap(int c)
|
|||||||
|
|
||||||
return tempc;
|
return tempc;
|
||||||
case 'k':
|
case 'k':
|
||||||
tempc = _NOON;
|
tempc = _NOON;
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
tempc = _MIM;
|
tempc = _MIM;
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
tempc = _PE;
|
tempc = _PE;
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
case 'N':
|
case 'N':
|
||||||
tempc = DAL;
|
tempc = DAL;
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
tempc = _XE;
|
tempc = _XE;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
tempc = _HE_J;
|
tempc = _HE_J;
|
||||||
break;
|
break;
|
||||||
case 'q':
|
case 'q':
|
||||||
tempc = _ZAD;
|
tempc = _ZAD;
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
tempc = _GHAF;
|
tempc = _GHAF;
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
tempc = _SIN;
|
tempc = _SIN;
|
||||||
break;
|
break;
|
||||||
case 'S':
|
case 'S':
|
||||||
tempc = _IE;
|
tempc = _IE;
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
tempc = _FE;
|
tempc = _FE;
|
||||||
break;
|
break;
|
||||||
case 'u':
|
case 'u':
|
||||||
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
||||||
{
|
{
|
||||||
if (!p_ri && !F_is_TyE(tempc))
|
if (!p_ri && !F_is_TyE(tempc))
|
||||||
chg_c_to_X_orX_ ();
|
chg_c_to_X_orX_ ();
|
||||||
if (p_ri)
|
if (p_ri)
|
||||||
chg_c_to_X_or_X ();
|
chg_c_to_X_or_X ();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p_ri && !curwin->w_cursor.col)
|
if (!p_ri && !curwin->w_cursor.col)
|
||||||
return _AYN;
|
return _AYN;
|
||||||
|
|
||||||
if (!p_ri)
|
if (!p_ri)
|
||||||
dec_cursor();
|
dec_cursor();
|
||||||
|
|
||||||
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
|
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
|
||||||
tempc = _AYN_;
|
tempc = _AYN_;
|
||||||
else
|
else
|
||||||
tempc = _AYN;
|
tempc = _AYN;
|
||||||
|
|
||||||
if (!p_ri)
|
if (!p_ri)
|
||||||
inc_cursor();
|
inc_cursor();
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
case 'V':
|
case 'V':
|
||||||
tempc = RE;
|
tempc = RE;
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
tempc = _SAD;
|
tempc = _SAD;
|
||||||
break;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'X':
|
case 'X':
|
||||||
tempc = _TA;
|
tempc = _TA;
|
||||||
break;
|
break;
|
||||||
case 'y':
|
case 'y':
|
||||||
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
||||||
@@ -1354,36 +1338,36 @@ fkmap(int c)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
tempc = _ZA;
|
tempc = _ZA;
|
||||||
break;
|
break;
|
||||||
case 'Z':
|
case 'Z':
|
||||||
tempc = _KAF_H;
|
tempc = _KAF_H;
|
||||||
break;
|
break;
|
||||||
case ';':
|
case ';':
|
||||||
tempc = _KAF;
|
tempc = _KAF;
|
||||||
break;
|
break;
|
||||||
case '\'':
|
case '\'':
|
||||||
tempc = _GAF;
|
tempc = _GAF;
|
||||||
break;
|
break;
|
||||||
case ',':
|
case ',':
|
||||||
tempc = WAW;
|
tempc = WAW;
|
||||||
break;
|
break;
|
||||||
case '[':
|
case '[':
|
||||||
tempc = _JIM;
|
tempc = _JIM;
|
||||||
break;
|
break;
|
||||||
case ']':
|
case ']':
|
||||||
tempc = _CHE;
|
tempc = _CHE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((F_isalpha(tempc) || F_isdigit(tempc)))
|
if (F_isalpha(tempc) || F_isdigit(tempc))
|
||||||
{
|
{
|
||||||
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
|
||||||
{
|
{
|
||||||
if (!p_ri && !F_is_TyE(tempc))
|
if (!p_ri && !F_is_TyE(tempc))
|
||||||
chg_c_to_X_orX_ ();
|
chg_c_to_X_orX_();
|
||||||
if (p_ri)
|
if (p_ri)
|
||||||
chg_c_to_X_or_X ();
|
chg_c_to_X_or_X();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (curwin->w_cursor.col)
|
if (curwin->w_cursor.col)
|
||||||
@@ -1392,9 +1376,9 @@ fkmap(int c)
|
|||||||
dec_cursor();
|
dec_cursor();
|
||||||
|
|
||||||
if (F_is_TyE(tempc))
|
if (F_is_TyE(tempc))
|
||||||
chg_l_toXor_X ();
|
chg_l_toXor_X();
|
||||||
else
|
else
|
||||||
chg_l_to_X_orX_ ();
|
chg_l_to_X_orX_();
|
||||||
|
|
||||||
if (!p_ri)
|
if (!p_ri)
|
||||||
inc_cursor();
|
inc_cursor();
|
||||||
@@ -1407,7 +1391,7 @@ fkmap(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert a none leading Farsi char into a leading type.
|
* Convert a none leading Farsi char into a leading type.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
toF_leading(int c)
|
toF_leading(int c)
|
||||||
{
|
{
|
||||||
@@ -1461,7 +1445,7 @@ toF_leading(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert a given Farsi char into right joining type.
|
* Convert a given Farsi char into right joining type.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
toF_Rjoin(int c)
|
toF_Rjoin(int c)
|
||||||
{
|
{
|
||||||
@@ -1517,7 +1501,7 @@ toF_Rjoin(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Can a given Farsi character join via its left edj.
|
* Can a given Farsi character join via its left edj.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
canF_Ljoin(int c)
|
canF_Ljoin(int c)
|
||||||
{
|
{
|
||||||
@@ -1591,7 +1575,7 @@ canF_Ljoin(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Can a given Farsi character join via its right edj.
|
* Can a given Farsi character join via its right edj.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
canF_Rjoin(int c)
|
canF_Rjoin(int c)
|
||||||
{
|
{
|
||||||
@@ -1619,7 +1603,7 @@ canF_Rjoin(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* is a given Farsi character a terminating type.
|
* is a given Farsi character a terminating type.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
F_isterm(int c)
|
F_isterm(int c)
|
||||||
{
|
{
|
||||||
@@ -1646,7 +1630,7 @@ F_isterm(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert the given Farsi character into a ending type .
|
* Convert the given Farsi character into a ending type .
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
toF_ending(int c)
|
toF_ending(int c)
|
||||||
{
|
{
|
||||||
@@ -1691,7 +1675,7 @@ toF_ending(int c)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert the Farsi 3342 standard into Farsi VIM.
|
* Convert the Farsi 3342 standard into Farsi VIM.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
conv_to_pvim(void)
|
conv_to_pvim(void)
|
||||||
{
|
{
|
||||||
@@ -1936,56 +1920,56 @@ cmdl_fkmap(int c)
|
|||||||
case NL:
|
case NL:
|
||||||
case TAB:
|
case TAB:
|
||||||
|
|
||||||
switch ((tempc = cmd_gchar(AT_CURSOR)))
|
switch ((tempc = cmd_gchar(AT_CURSOR)))
|
||||||
{
|
{
|
||||||
case _BE:
|
case _BE:
|
||||||
case _PE:
|
case _PE:
|
||||||
case _TE:
|
case _TE:
|
||||||
case _SE:
|
case _SE:
|
||||||
case _JIM:
|
case _JIM:
|
||||||
case _CHE:
|
case _CHE:
|
||||||
case _HE_J:
|
case _HE_J:
|
||||||
case _XE:
|
case _XE:
|
||||||
case _SIN:
|
case _SIN:
|
||||||
case _SHIN:
|
case _SHIN:
|
||||||
case _SAD:
|
case _SAD:
|
||||||
case _ZAD:
|
case _ZAD:
|
||||||
case _AYN:
|
case _AYN:
|
||||||
case _GHAYN:
|
case _GHAYN:
|
||||||
case _FE:
|
case _FE:
|
||||||
case _GHAF:
|
case _GHAF:
|
||||||
case _KAF:
|
case _KAF:
|
||||||
case _GAF:
|
case _GAF:
|
||||||
case _LAM:
|
case _LAM:
|
||||||
case _MIM:
|
case _MIM:
|
||||||
case _NOON:
|
case _NOON:
|
||||||
case _HE:
|
case _HE:
|
||||||
case _HE_:
|
case _HE_:
|
||||||
cmd_pchar(toF_TyA(tempc), AT_CURSOR);
|
cmd_pchar(toF_TyA(tempc), AT_CURSOR);
|
||||||
break;
|
break;
|
||||||
case _AYN_:
|
case _AYN_:
|
||||||
cmd_pchar(AYN_, AT_CURSOR);
|
cmd_pchar(AYN_, AT_CURSOR);
|
||||||
break;
|
break;
|
||||||
case _GHAYN_:
|
case _GHAYN_:
|
||||||
cmd_pchar(GHAYN_, AT_CURSOR);
|
cmd_pchar(GHAYN_, AT_CURSOR);
|
||||||
break;
|
break;
|
||||||
case _IE:
|
case _IE:
|
||||||
if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1))
|
if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1))
|
||||||
cmd_pchar(IE_, AT_CURSOR);
|
cmd_pchar(IE_, AT_CURSOR);
|
||||||
else
|
else
|
||||||
cmd_pchar(IE, AT_CURSOR);
|
cmd_pchar(IE, AT_CURSOR);
|
||||||
break;
|
break;
|
||||||
case _YEE:
|
case _YEE:
|
||||||
if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1))
|
if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1))
|
||||||
cmd_pchar(YEE_, AT_CURSOR);
|
cmd_pchar(YEE_, AT_CURSOR);
|
||||||
else
|
else
|
||||||
cmd_pchar(YEE, AT_CURSOR);
|
cmd_pchar(YEE, AT_CURSOR);
|
||||||
break;
|
break;
|
||||||
case _YE:
|
case _YE:
|
||||||
if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1))
|
if (F_is_TyB_TyC_TyD(SRC_CMD, AT_CURSOR+1))
|
||||||
cmd_pchar(YE_, AT_CURSOR);
|
cmd_pchar(YE_, AT_CURSOR);
|
||||||
else
|
else
|
||||||
cmd_pchar(YE, AT_CURSOR);
|
cmd_pchar(YE, AT_CURSOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
|
|||||||
@@ -3171,9 +3171,9 @@ delete_event_cb(GtkWidget *widget UNUSED,
|
|||||||
static int
|
static int
|
||||||
get_item_dimensions(GtkWidget *widget, GtkOrientation orientation)
|
get_item_dimensions(GtkWidget *widget, GtkOrientation orientation)
|
||||||
{
|
{
|
||||||
|
# ifdef FEAT_GUI_GNOME
|
||||||
GtkOrientation item_orientation = GTK_ORIENTATION_HORIZONTAL;
|
GtkOrientation item_orientation = GTK_ORIENTATION_HORIZONTAL;
|
||||||
|
|
||||||
# ifdef FEAT_GUI_GNOME
|
|
||||||
if (using_gnome && widget != NULL)
|
if (using_gnome && widget != NULL)
|
||||||
{
|
{
|
||||||
GtkWidget *parent;
|
GtkWidget *parent;
|
||||||
@@ -3192,7 +3192,10 @@ get_item_dimensions(GtkWidget *widget, GtkOrientation orientation)
|
|||||||
item_orientation = bonobo_dock_item_get_orientation(dockitem);
|
item_orientation = bonobo_dock_item_get_orientation(dockitem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# else
|
||||||
|
# define item_orientation GTK_ORIENTATION_HORIZONTAL
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if GTK_CHECK_VERSION(3,0,0)
|
# if GTK_CHECK_VERSION(3,0,0)
|
||||||
if (widget != NULL
|
if (widget != NULL
|
||||||
&& item_orientation == orientation
|
&& item_orientation == orientation
|
||||||
@@ -3210,15 +3213,23 @@ get_item_dimensions(GtkWidget *widget, GtkOrientation orientation)
|
|||||||
|
|
||||||
gtk_widget_get_allocation(widget, &allocation);
|
gtk_widget_get_allocation(widget, &allocation);
|
||||||
|
|
||||||
|
# ifdef FEAT_GUI_GNOME
|
||||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
||||||
return allocation.height;
|
return allocation.height;
|
||||||
else
|
else
|
||||||
return allocation.width;
|
return allocation.width;
|
||||||
|
# else
|
||||||
|
return allocation.height;
|
||||||
|
#endif
|
||||||
# else
|
# else
|
||||||
|
# ifdef FEAT_GUI_GNOME
|
||||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
||||||
return widget->allocation.height;
|
return widget->allocation.height;
|
||||||
else
|
else
|
||||||
return widget->allocation.width;
|
return widget->allocation.width;
|
||||||
|
# else
|
||||||
|
return widget->allocation.height;
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -1716,6 +1716,8 @@ ex_luado(exarg_T *eap)
|
|||||||
const char *s = (const char *) eap->arg;
|
const char *s = (const char *) eap->arg;
|
||||||
luaL_Buffer b;
|
luaL_Buffer b;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
buf_T *was_curbuf = curbuf;
|
||||||
|
|
||||||
if (lua_init() == FAIL) return;
|
if (lua_init() == FAIL) return;
|
||||||
if (u_save(eap->line1 - 1, eap->line2 + 1) == FAIL)
|
if (u_save(eap->line1 - 1, eap->line2 + 1) == FAIL)
|
||||||
{
|
{
|
||||||
@@ -1739,6 +1741,10 @@ ex_luado(exarg_T *eap)
|
|||||||
lua_replace(L, -2); /* function -> body */
|
lua_replace(L, -2); /* function -> body */
|
||||||
for (l = eap->line1; l <= eap->line2; l++)
|
for (l = eap->line1; l <= eap->line2; l++)
|
||||||
{
|
{
|
||||||
|
/* Check the line number, the command my have deleted lines. */
|
||||||
|
if (l > curbuf->b_ml.ml_line_count)
|
||||||
|
break;
|
||||||
|
|
||||||
lua_pushvalue(L, -1); /* function */
|
lua_pushvalue(L, -1); /* function */
|
||||||
luaV_pushline(L, curbuf, l); /* current line as arg */
|
luaV_pushline(L, curbuf, l); /* current line as arg */
|
||||||
lua_pushinteger(L, l); /* current line number as arg */
|
lua_pushinteger(L, l); /* current line number as arg */
|
||||||
@@ -1747,6 +1753,9 @@ ex_luado(exarg_T *eap)
|
|||||||
luaV_emsg(L);
|
luaV_emsg(L);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* Catch the command switching to another buffer. */
|
||||||
|
if (curbuf != was_curbuf)
|
||||||
|
break;
|
||||||
if (lua_isstring(L, -1)) /* update line? */
|
if (lua_isstring(L, -1)) /* update line? */
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SANDBOX
|
#ifdef HAVE_SANDBOX
|
||||||
|
|||||||
@@ -1286,6 +1286,7 @@ ex_perldo(exarg_T *eap)
|
|||||||
SV *sv;
|
SV *sv;
|
||||||
char *str;
|
char *str;
|
||||||
linenr_T i;
|
linenr_T i;
|
||||||
|
buf_T *was_curbuf = curbuf;
|
||||||
|
|
||||||
if (bufempty())
|
if (bufempty())
|
||||||
return;
|
return;
|
||||||
@@ -1321,11 +1322,14 @@ ex_perldo(exarg_T *eap)
|
|||||||
SAVETMPS;
|
SAVETMPS;
|
||||||
for (i = eap->line1; i <= eap->line2; i++)
|
for (i = eap->line1; i <= eap->line2; i++)
|
||||||
{
|
{
|
||||||
|
/* Check the line number, the command my have deleted lines. */
|
||||||
|
if (i > curbuf->b_ml.ml_line_count)
|
||||||
|
break;
|
||||||
sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
|
sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
|
||||||
PUSHMARK(sp);
|
PUSHMARK(sp);
|
||||||
perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
|
perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
|
||||||
str = SvPV(GvSV(PL_errgv), length);
|
str = SvPV(GvSV(PL_errgv), length);
|
||||||
if (length)
|
if (length || curbuf != was_curbuf)
|
||||||
break;
|
break;
|
||||||
SPAGAIN;
|
SPAGAIN;
|
||||||
if (SvTRUEx(POPs))
|
if (SvTRUEx(POPs))
|
||||||
|
|||||||
@@ -5619,6 +5619,7 @@ run_do(const char *cmd, void *arg UNUSED
|
|||||||
int status;
|
int status;
|
||||||
PyObject *pyfunc, *pymain;
|
PyObject *pyfunc, *pymain;
|
||||||
PyObject *run_ret;
|
PyObject *run_ret;
|
||||||
|
buf_T *was_curbuf = curbuf;
|
||||||
|
|
||||||
if (u_save((linenr_T)RangeStart - 1, (linenr_T)RangeEnd + 1) != OK)
|
if (u_save((linenr_T)RangeStart - 1, (linenr_T)RangeEnd + 1) != OK)
|
||||||
{
|
{
|
||||||
@@ -5671,7 +5672,9 @@ run_do(const char *cmd, void *arg UNUSED
|
|||||||
#ifdef PY_CAN_RECURSE
|
#ifdef PY_CAN_RECURSE
|
||||||
*pygilstate = PyGILState_Ensure();
|
*pygilstate = PyGILState_Ensure();
|
||||||
#endif
|
#endif
|
||||||
if (!(line = GetBufferLine(curbuf, lnum)))
|
/* Check the line number, the command my have deleted lines. */
|
||||||
|
if (lnum > curbuf->b_ml.ml_line_count
|
||||||
|
|| !(line = GetBufferLine(curbuf, lnum)))
|
||||||
goto err;
|
goto err;
|
||||||
if (!(linenr = PyInt_FromLong((long) lnum)))
|
if (!(linenr = PyInt_FromLong((long) lnum)))
|
||||||
{
|
{
|
||||||
@@ -5684,9 +5687,19 @@ run_do(const char *cmd, void *arg UNUSED
|
|||||||
if (!ret)
|
if (!ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
/* Check that the command didn't switch to another buffer. */
|
||||||
|
if (curbuf != was_curbuf)
|
||||||
|
{
|
||||||
|
Py_XDECREF(ret);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
if (ret != Py_None)
|
if (ret != Py_None)
|
||||||
if (SetBufferLine(curbuf, lnum, ret, NULL) == FAIL)
|
if (SetBufferLine(curbuf, lnum, ret, NULL) == FAIL)
|
||||||
|
{
|
||||||
|
Py_XDECREF(ret);
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
Py_XDECREF(ret);
|
Py_XDECREF(ret);
|
||||||
PythonIO_Flush();
|
PythonIO_Flush();
|
||||||
|
|||||||
@@ -1114,6 +1114,9 @@ ex_python(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
char_u *script;
|
char_u *script;
|
||||||
|
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 2;
|
||||||
|
|
||||||
script = script_get(eap, eap->arg);
|
script = script_get(eap, eap->arg);
|
||||||
if (!eap->skip)
|
if (!eap->skip)
|
||||||
{
|
{
|
||||||
@@ -1137,6 +1140,9 @@ ex_pyfile(exarg_T *eap)
|
|||||||
const char *file = (char *)eap->arg;
|
const char *file = (char *)eap->arg;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 2;
|
||||||
|
|
||||||
/* Have to do it like this. PyRun_SimpleFile requires you to pass a
|
/* Have to do it like this. PyRun_SimpleFile requires you to pass a
|
||||||
* stdio file pointer, but Vim and the Python DLL are compiled with
|
* stdio file pointer, but Vim and the Python DLL are compiled with
|
||||||
* different options under Windows, meaning that stdio pointers aren't
|
* different options under Windows, meaning that stdio pointers aren't
|
||||||
@@ -1175,6 +1181,9 @@ ex_pyfile(exarg_T *eap)
|
|||||||
void
|
void
|
||||||
ex_pydo(exarg_T *eap)
|
ex_pydo(exarg_T *eap)
|
||||||
{
|
{
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 2;
|
||||||
|
|
||||||
DoPyCommand((char *)eap->arg,
|
DoPyCommand((char *)eap->arg,
|
||||||
(rangeinitializer) init_range_cmd,
|
(rangeinitializer) init_range_cmd,
|
||||||
(runner)run_do,
|
(runner)run_do,
|
||||||
|
|||||||
@@ -1004,6 +1004,9 @@ ex_py3(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
char_u *script;
|
char_u *script;
|
||||||
|
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 3;
|
||||||
|
|
||||||
script = script_get(eap, eap->arg);
|
script = script_get(eap, eap->arg);
|
||||||
if (!eap->skip)
|
if (!eap->skip)
|
||||||
{
|
{
|
||||||
@@ -1028,6 +1031,9 @@ ex_py3file(exarg_T *eap)
|
|||||||
char *p;
|
char *p;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 3;
|
||||||
|
|
||||||
/* Have to do it like this. PyRun_SimpleFile requires you to pass a
|
/* Have to do it like this. PyRun_SimpleFile requires you to pass a
|
||||||
* stdio file pointer, but Vim and the Python DLL are compiled with
|
* stdio file pointer, but Vim and the Python DLL are compiled with
|
||||||
* different options under Windows, meaning that stdio pointers aren't
|
* different options under Windows, meaning that stdio pointers aren't
|
||||||
@@ -1080,6 +1086,9 @@ ex_py3file(exarg_T *eap)
|
|||||||
void
|
void
|
||||||
ex_py3do(exarg_T *eap)
|
ex_py3do(exarg_T *eap)
|
||||||
{
|
{
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 3;
|
||||||
|
|
||||||
DoPyCommand((char *)eap->arg,
|
DoPyCommand((char *)eap->arg,
|
||||||
(rangeinitializer)init_range_cmd,
|
(rangeinitializer)init_range_cmd,
|
||||||
(runner)run_do,
|
(runner)run_do,
|
||||||
|
|||||||
@@ -783,6 +783,7 @@ void ex_rubydo(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
int state;
|
int state;
|
||||||
linenr_T i;
|
linenr_T i;
|
||||||
|
buf_T *was_curbuf = curbuf;
|
||||||
|
|
||||||
if (ensure_ruby_initialized())
|
if (ensure_ruby_initialized())
|
||||||
{
|
{
|
||||||
@@ -792,6 +793,8 @@ void ex_rubydo(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
VALUE line;
|
VALUE line;
|
||||||
|
|
||||||
|
if (i > curbuf->b_ml.ml_line_count)
|
||||||
|
break;
|
||||||
line = vim_str2rb_enc_str((char *)ml_get(i));
|
line = vim_str2rb_enc_str((char *)ml_get(i));
|
||||||
rb_lastline_set(line);
|
rb_lastline_set(line);
|
||||||
eval_enc_string_protect((char *) eap->arg, &state);
|
eval_enc_string_protect((char *) eap->arg, &state);
|
||||||
@@ -800,6 +803,8 @@ void ex_rubydo(exarg_T *eap)
|
|||||||
error_print(state);
|
error_print(state);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (was_curbuf != curbuf)
|
||||||
|
break;
|
||||||
line = rb_lastline_get();
|
line = rb_lastline_get();
|
||||||
if (!NIL_P(line))
|
if (!NIL_P(line))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1958,6 +1958,7 @@ ex_tcldo(exarg_T *eap)
|
|||||||
char var_line[VARNAME_SIZE];
|
char var_line[VARNAME_SIZE];
|
||||||
linenr_T first_line = 0;
|
linenr_T first_line = 0;
|
||||||
linenr_T last_line = 0;
|
linenr_T last_line = 0;
|
||||||
|
buf_T *was_curbuf = curbuf;
|
||||||
|
|
||||||
rs = eap->line1;
|
rs = eap->line1;
|
||||||
re = eap->line2;
|
re = eap->line2;
|
||||||
@@ -1979,6 +1980,8 @@ ex_tcldo(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
while (err == TCL_OK && rs <= re)
|
while (err == TCL_OK && rs <= re)
|
||||||
{
|
{
|
||||||
|
if ((linenr_T)rs > curbuf->b_ml.ml_line_count)
|
||||||
|
break;
|
||||||
line = (char *)ml_get_buf(curbuf, (linenr_T)rs, FALSE);
|
line = (char *)ml_get_buf(curbuf, (linenr_T)rs, FALSE);
|
||||||
if (!line)
|
if (!line)
|
||||||
{
|
{
|
||||||
@@ -1994,7 +1997,7 @@ ex_tcldo(exarg_T *eap)
|
|||||||
#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
|
#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
|
||||||
|| Tcl_LimitExceeded(tclinfo.interp)
|
|| Tcl_LimitExceeded(tclinfo.interp)
|
||||||
#endif
|
#endif
|
||||||
)
|
|| curbuf != was_curbuf)
|
||||||
break;
|
break;
|
||||||
line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
|
line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
|
||||||
if (line)
|
if (line)
|
||||||
|
|||||||
85
src/kword_test.c
Normal file
85
src/kword_test.c
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/* vi:set ts=8 sts=4 sw=4 noet:
|
||||||
|
*
|
||||||
|
* VIM - Vi IMproved by Bram Moolenaar
|
||||||
|
*
|
||||||
|
* Do ":help uganda" in Vim to read copying and usage conditions.
|
||||||
|
* Do ":help credits" in Vim to see a list of people who contributed.
|
||||||
|
* See README.txt for an overview of the Vim source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* kword_test.c: Unittests for vim_iswordc() and vim_iswordp().
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef NDEBUG
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
/* Must include main.c because it contains much more than just main() */
|
||||||
|
#define NO_VIM_MAIN
|
||||||
|
#include "main.c"
|
||||||
|
|
||||||
|
/* This file has to be included because the tested functions are static */
|
||||||
|
#include "charset.c"
|
||||||
|
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
/*
|
||||||
|
* Test the results of vim_iswordc() and vim_iswordp() are matched.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
test_isword_funcs_utf8(void)
|
||||||
|
{
|
||||||
|
buf_T buf;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
vim_memset(&buf, 0, sizeof(buf));
|
||||||
|
p_enc = (char_u *)"utf-8";
|
||||||
|
p_isi = (char_u *)"";
|
||||||
|
p_isp = (char_u *)"";
|
||||||
|
p_isf = (char_u *)"";
|
||||||
|
buf.b_p_isk = (char_u *)"@,48-57,_,128-167,224-235";
|
||||||
|
|
||||||
|
curbuf = &buf;
|
||||||
|
mb_init(); /* calls init_chartab() */
|
||||||
|
|
||||||
|
for (c = 0; c < 0x10000; ++c)
|
||||||
|
{
|
||||||
|
char_u p[4] = {0};
|
||||||
|
int c1;
|
||||||
|
int retc;
|
||||||
|
int retp;
|
||||||
|
|
||||||
|
utf_char2bytes(c, p);
|
||||||
|
c1 = utf_ptr2char(p);
|
||||||
|
if (c != c1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed: ");
|
||||||
|
fprintf(stderr,
|
||||||
|
"[c = %#04x, p = {%#02x, %#02x, %#02x}] ",
|
||||||
|
c, p[0], p[1], p[2]);
|
||||||
|
fprintf(stderr, "c != utf_ptr2char(p) (=%#04x)\n", c1);
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
retc = vim_iswordc_buf(c, &buf);
|
||||||
|
retp = vim_iswordp_buf(p, &buf);
|
||||||
|
if (retc != retp)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed: ");
|
||||||
|
fprintf(stderr,
|
||||||
|
"[c = %#04x, p = {%#02x, %#02x, %#02x}] ",
|
||||||
|
c, p[0], p[1], p[2]);
|
||||||
|
fprintf(stderr, "vim_iswordc(c) (=%d) != vim_iswordp(p) (=%d)\n",
|
||||||
|
retc, retp);
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
test_isword_funcs_utf8();
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
24
src/mark.c
24
src/mark.c
@@ -57,6 +57,7 @@ setmark(int c)
|
|||||||
setmark_pos(int c, pos_T *pos, int fnum)
|
setmark_pos(int c, pos_T *pos, int fnum)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
buf_T *buf;
|
||||||
|
|
||||||
/* Check for a special key (may cause islower() to crash). */
|
/* Check for a special key (may cause islower() to crash). */
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
@@ -75,9 +76,13 @@ setmark_pos(int c, pos_T *pos, int fnum)
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buf = buflist_findnr(fnum);
|
||||||
|
if (buf == NULL)
|
||||||
|
return FAIL;
|
||||||
|
|
||||||
if (c == '"')
|
if (c == '"')
|
||||||
{
|
{
|
||||||
curbuf->b_last_cursor = *pos;
|
buf->b_last_cursor = *pos;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,31 +90,31 @@ setmark_pos(int c, pos_T *pos, int fnum)
|
|||||||
* file. */
|
* file. */
|
||||||
if (c == '[')
|
if (c == '[')
|
||||||
{
|
{
|
||||||
curbuf->b_op_start = *pos;
|
buf->b_op_start = *pos;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
if (c == ']')
|
if (c == ']')
|
||||||
{
|
{
|
||||||
curbuf->b_op_end = *pos;
|
buf->b_op_end = *pos;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == '<' || c == '>')
|
if (c == '<' || c == '>')
|
||||||
{
|
{
|
||||||
if (c == '<')
|
if (c == '<')
|
||||||
curbuf->b_visual.vi_start = *pos;
|
buf->b_visual.vi_start = *pos;
|
||||||
else
|
else
|
||||||
curbuf->b_visual.vi_end = *pos;
|
buf->b_visual.vi_end = *pos;
|
||||||
if (curbuf->b_visual.vi_mode == NUL)
|
if (buf->b_visual.vi_mode == NUL)
|
||||||
/* Visual_mode has not yet been set, use a sane default. */
|
/* Visual_mode has not yet been set, use a sane default. */
|
||||||
curbuf->b_visual.vi_mode = 'v';
|
buf->b_visual.vi_mode = 'v';
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ASCII_ISLOWER(c))
|
if (ASCII_ISLOWER(c))
|
||||||
{
|
{
|
||||||
i = c - 'a';
|
i = c - 'a';
|
||||||
curbuf->b_namedm[i] = *pos;
|
buf->b_namedm[i] = *pos;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
if (ASCII_ISUPPER(c) || VIM_ISDIGIT(c))
|
if (ASCII_ISUPPER(c) || VIM_ISDIGIT(c))
|
||||||
@@ -396,7 +401,8 @@ getmark_buf_fnum(
|
|||||||
{
|
{
|
||||||
startp = &buf->b_visual.vi_start;
|
startp = &buf->b_visual.vi_start;
|
||||||
endp = &buf->b_visual.vi_end;
|
endp = &buf->b_visual.vi_end;
|
||||||
if ((c == '<') == lt(*startp, *endp))
|
if (((c == '<') == lt(*startp, *endp) || endp->lnum == 0)
|
||||||
|
&& startp->lnum != 0)
|
||||||
posp = startp;
|
posp = startp;
|
||||||
else
|
else
|
||||||
posp = endp;
|
posp = endp;
|
||||||
|
|||||||
10
src/mbyte.c
10
src/mbyte.c
@@ -895,7 +895,7 @@ mb_get_class_buf(char_u *p, buf_T *buf)
|
|||||||
if (enc_dbcs != 0 && p[0] != NUL && p[1] != NUL)
|
if (enc_dbcs != 0 && p[0] != NUL && p[1] != NUL)
|
||||||
return dbcs_class(p[0], p[1]);
|
return dbcs_class(p[0], p[1]);
|
||||||
if (enc_utf8)
|
if (enc_utf8)
|
||||||
return utf_class(utf_ptr2char(p));
|
return utf_class_buf(utf_ptr2char(p), buf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2693,6 +2693,12 @@ static struct interval emoji_all[] =
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
utf_class(int c)
|
utf_class(int c)
|
||||||
|
{
|
||||||
|
return utf_class_buf(c, curbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
utf_class_buf(int c, buf_T *buf)
|
||||||
{
|
{
|
||||||
/* sorted list of non-overlapping intervals */
|
/* sorted list of non-overlapping intervals */
|
||||||
static struct clinterval
|
static struct clinterval
|
||||||
@@ -2780,7 +2786,7 @@ utf_class(int c)
|
|||||||
{
|
{
|
||||||
if (c == ' ' || c == '\t' || c == NUL || c == 0xa0)
|
if (c == ' ' || c == '\t' || c == NUL || c == 0xa0)
|
||||||
return 0; /* blank */
|
return 0; /* blank */
|
||||||
if (vim_iswordc(c))
|
if (vim_iswordc_buf(c, buf))
|
||||||
return 2; /* word character */
|
return 2; /* word character */
|
||||||
return 1; /* punctuation */
|
return 1; /* punctuation */
|
||||||
}
|
}
|
||||||
|
|||||||
100
src/misc2.c
100
src/misc2.c
@@ -1602,7 +1602,10 @@ strup_save(char_u *orig)
|
|||||||
{
|
{
|
||||||
s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
|
s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
break;
|
{
|
||||||
|
vim_free(res);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
mch_memmove(s, res, p - res);
|
mch_memmove(s, res, p - res);
|
||||||
STRCPY(s + (p - res) + newl, p + l);
|
STRCPY(s + (p - res) + newl, p + l);
|
||||||
p = s + (p - res);
|
p = s + (p - res);
|
||||||
@@ -1625,6 +1628,69 @@ strup_save(char_u *orig)
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make string "s" all lower-case and return it in allocated memory.
|
||||||
|
* Handles multi-byte characters as well as possible.
|
||||||
|
* Returns NULL when out of memory.
|
||||||
|
*/
|
||||||
|
char_u *
|
||||||
|
strlow_save(char_u *orig)
|
||||||
|
{
|
||||||
|
char_u *p;
|
||||||
|
char_u *res;
|
||||||
|
|
||||||
|
res = p = vim_strsave(orig);
|
||||||
|
|
||||||
|
if (res != NULL)
|
||||||
|
while (*p != NUL)
|
||||||
|
{
|
||||||
|
# ifdef FEAT_MBYTE
|
||||||
|
int l;
|
||||||
|
|
||||||
|
if (enc_utf8)
|
||||||
|
{
|
||||||
|
int c, lc;
|
||||||
|
int newl;
|
||||||
|
char_u *s;
|
||||||
|
|
||||||
|
c = utf_ptr2char(p);
|
||||||
|
lc = utf_tolower(c);
|
||||||
|
|
||||||
|
/* Reallocate string when byte count changes. This is rare,
|
||||||
|
* thus it's OK to do another malloc()/free(). */
|
||||||
|
l = utf_ptr2len(p);
|
||||||
|
newl = utf_char2len(lc);
|
||||||
|
if (newl != l)
|
||||||
|
{
|
||||||
|
s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
|
||||||
|
if (s == NULL)
|
||||||
|
{
|
||||||
|
vim_free(res);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
mch_memmove(s, res, p - res);
|
||||||
|
STRCPY(s + (p - res) + newl, p + l);
|
||||||
|
p = s + (p - res);
|
||||||
|
vim_free(res);
|
||||||
|
res = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
utf_char2bytes(lc, p);
|
||||||
|
p += newl;
|
||||||
|
}
|
||||||
|
else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
|
||||||
|
p += l; /* skip multi-byte character */
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
{
|
||||||
|
*p = TOLOWER_LOC(*p); /* note that tolower() can be a macro */
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1653,7 +1719,7 @@ vim_strncpy(char_u *to, char_u *from, size_t len)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Like strcat(), but make sure the result fits in "tosize" bytes and is
|
* Like strcat(), but make sure the result fits in "tosize" bytes and is
|
||||||
* always NUL terminated.
|
* always NUL terminated. "from" and "to" may overlap.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
vim_strcat(char_u *to, char_u *from, size_t tosize)
|
vim_strcat(char_u *to, char_u *from, size_t tosize)
|
||||||
@@ -1667,7 +1733,7 @@ vim_strcat(char_u *to, char_u *from, size_t tosize)
|
|||||||
to[tosize - 1] = NUL;
|
to[tosize - 1] = NUL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
STRCPY(to + tolen, from);
|
mch_memmove(to + tolen, from, fromlen + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1740,34 +1806,6 @@ vim_memset(void *ptr, int c, size_t size)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* skipped when generating prototypes, the prototype is in vim.h */
|
|
||||||
#ifdef VIM_MEMMOVE
|
|
||||||
/*
|
|
||||||
* Version of memmove() that handles overlapping source and destination.
|
|
||||||
* For systems that don't have a function that is guaranteed to do that (SYSV).
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
mch_memmove(void *src_arg, void *dst_arg, size_t len)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* A void doesn't have a size, we use char pointers.
|
|
||||||
*/
|
|
||||||
char *dst = dst_arg, *src = src_arg;
|
|
||||||
|
|
||||||
/* overlap, copy backwards */
|
|
||||||
if (dst > src && dst < src + len)
|
|
||||||
{
|
|
||||||
src += len;
|
|
||||||
dst += len;
|
|
||||||
while (len-- > 0)
|
|
||||||
*--dst = *--src;
|
|
||||||
}
|
|
||||||
else /* copy forwards */
|
|
||||||
while (len-- > 0)
|
|
||||||
*dst++ = *src++;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (!defined(HAVE_STRCASECMP) && !defined(HAVE_STRICMP)) || defined(PROTO)
|
#if (!defined(HAVE_STRCASECMP) && !defined(HAVE_STRICMP)) || defined(PROTO)
|
||||||
/*
|
/*
|
||||||
* Compare two strings, ignoring case, using current locale.
|
* Compare two strings, ignoring case, using current locale.
|
||||||
|
|||||||
37
src/option.c
37
src/option.c
@@ -479,6 +479,17 @@ struct vimoption
|
|||||||
# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
|
# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Default python version for pyx* commands */
|
||||||
|
#if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
|
||||||
|
# define DEFAULT_PYTHON_VER 0
|
||||||
|
#elif defined(FEAT_PYTHON3)
|
||||||
|
# define DEFAULT_PYTHON_VER 3
|
||||||
|
#elif defined(FEAT_PYTHON)
|
||||||
|
# define DEFAULT_PYTHON_VER 2
|
||||||
|
#else
|
||||||
|
# define DEFAULT_PYTHON_VER 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* options[] is initialized here.
|
* options[] is initialized here.
|
||||||
* The order of the options MUST be alphabetic for ":set all" and findoption().
|
* The order of the options MUST be alphabetic for ":set all" and findoption().
|
||||||
@@ -2143,6 +2154,14 @@ static struct vimoption options[] =
|
|||||||
{(char_u *)DYNAMIC_PYTHON_DLL, (char_u *)0L}
|
{(char_u *)DYNAMIC_PYTHON_DLL, (char_u *)0L}
|
||||||
SCRIPTID_INIT},
|
SCRIPTID_INIT},
|
||||||
#endif
|
#endif
|
||||||
|
{"pyxversion", "pyx", P_NUM|P_VI_DEF|P_SECURE,
|
||||||
|
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
||||||
|
(char_u *)&p_pyx, PV_NONE,
|
||||||
|
#else
|
||||||
|
(char_u *)NULL, PV_NONE,
|
||||||
|
#endif
|
||||||
|
{(char_u *)DEFAULT_PYTHON_VER, (char_u *)0L}
|
||||||
|
SCRIPTID_INIT},
|
||||||
{"quoteescape", "qe", P_STRING|P_ALLOCED|P_VI_DEF,
|
{"quoteescape", "qe", P_STRING|P_ALLOCED|P_VI_DEF,
|
||||||
#ifdef FEAT_TEXTOBJ
|
#ifdef FEAT_TEXTOBJ
|
||||||
(char_u *)&p_qe, PV_QE,
|
(char_u *)&p_qe, PV_QE,
|
||||||
@@ -6619,6 +6638,15 @@ did_set_string_option(
|
|||||||
mch_set_normal_colors();
|
mch_set_normal_colors();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
if (varp == &T_BE && termcap_active)
|
||||||
|
{
|
||||||
|
if (*T_BE == NUL)
|
||||||
|
/* When clearing t_BE we assume the user no longer wants
|
||||||
|
* bracketed paste, thus disable it by writing t_BD. */
|
||||||
|
out_str(T_BD);
|
||||||
|
else
|
||||||
|
out_str(T_BE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FEAT_LINEBREAK
|
#ifdef FEAT_LINEBREAK
|
||||||
@@ -8817,6 +8845,15 @@ set_num_option(
|
|||||||
mzvim_reset_timer();
|
mzvim_reset_timer();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
||||||
|
/* 'pyxversion' */
|
||||||
|
else if (pp == &p_pyx)
|
||||||
|
{
|
||||||
|
if (p_pyx != 0 && p_pyx != 2 && p_pyx != 3)
|
||||||
|
errmsg = e_invarg;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* sync undo before 'undolevels' changes */
|
/* sync undo before 'undolevels' changes */
|
||||||
else if (pp == &p_ul)
|
else if (pp == &p_ul)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -694,6 +694,9 @@ EXTERN char_u *p_py3dll; /* 'pythonthreedll' */
|
|||||||
#if defined(DYNAMIC_PYTHON)
|
#if defined(DYNAMIC_PYTHON)
|
||||||
EXTERN char_u *p_pydll; /* 'pythondll' */
|
EXTERN char_u *p_pydll; /* 'pythondll' */
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
||||||
|
EXTERN long p_pyx; /* 'pyxversion' */
|
||||||
|
#endif
|
||||||
#ifdef FEAT_RELTIME
|
#ifdef FEAT_RELTIME
|
||||||
EXTERN long p_rdt; /* 'redrawtime' */
|
EXTERN long p_rdt; /* 'redrawtime' */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -423,21 +423,17 @@ typedef struct dsc$descriptor DESC;
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* memmove is not present on all systems, use memmove, bcopy, memcpy or our
|
/* memmove() is not present on all systems, use memmove, bcopy or memcpy.
|
||||||
* own version */
|
* Some systems have (void *) arguments, some (char *). If we use (char *) it
|
||||||
/* Some systems have (void *) arguments, some (char *). If we use (char *) it
|
|
||||||
* works for all */
|
* works for all */
|
||||||
#ifdef USEMEMMOVE
|
#if defined(USEMEMMOVE) || (!defined(USEBCOPY) && !defined(USEMEMCPY))
|
||||||
# define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
|
# define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
|
||||||
#else
|
#else
|
||||||
# ifdef USEBCOPY
|
# ifdef USEBCOPY
|
||||||
# define mch_memmove(to, from, len) bcopy((char *)(from), (char *)(to), len)
|
# define mch_memmove(to, from, len) bcopy((char *)(from), (char *)(to), len)
|
||||||
# else
|
# else
|
||||||
# ifdef USEMEMCPY
|
/* ifdef USEMEMCPY */
|
||||||
# define mch_memmove(to, from, len) memcpy((char *)(to), (char *)(from), len)
|
# define mch_memmove(to, from, len) memcpy((char *)(to), (char *)(from), len)
|
||||||
# else
|
|
||||||
# define VIM_MEMMOVE /* found in misc2.c */
|
|
||||||
# endif
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -232,12 +232,13 @@ sk.cp1250.po: sk.po
|
|||||||
iconv -f iso-8859-2 -t cp1250 sk.po | \
|
iconv -f iso-8859-2 -t cp1250 sk.po | \
|
||||||
sed -e 's/charset=ISO-8859-2/charset=cp1250/' -e 's/# Original translations/# Generated from sk.po, DO NOT EDIT/' > sk.cp1250.po
|
sed -e 's/charset=ISO-8859-2/charset=cp1250/' -e 's/# Original translations/# Generated from sk.po, DO NOT EDIT/' > sk.cp1250.po
|
||||||
|
|
||||||
# Convert zh_CN.po to create zh_CN.cp936.po.
|
# Convert zh_CN.UTF-8.po to create zh_CN.cp936.po.
|
||||||
# set 'charset' to gbk to avoid that msfmt generates a warning
|
# Set 'charset' to gbk to avoid that msfmt generates a warning.
|
||||||
zh_CN.cp936.po: zh_CN.po
|
# This used to convert from zh_CN.po, but that results in a conversion error.
|
||||||
|
zh_CN.cp936.po: zh_CN.UTF-8.po
|
||||||
rm -f zh_CN.cp936.po
|
rm -f zh_CN.cp936.po
|
||||||
iconv -f gb2312 -t cp936 zh_CN.po | \
|
iconv -f UTF-8 -t cp936 zh_CN.UTF-8.po | \
|
||||||
sed -e 's/charset=gb2312/charset=gbk/' -e 's/# Original translations/# Generated from zh_CN.po, DO NOT EDIT/' > zh_CN.cp936.po
|
sed -e 's/charset=utf-8/charset=gbk/' -e 's/# Original translations/# Generated from zh_CN.po, DO NOT EDIT/' > zh_CN.cp936.po
|
||||||
|
|
||||||
# Convert ko.UTF-8.po to create ko.po.
|
# Convert ko.UTF-8.po to create ko.po.
|
||||||
ko.po: ko.UTF-8.po
|
ko.po: ko.UTF-8.po
|
||||||
|
|||||||
@@ -2894,7 +2894,8 @@ msgstr "-X\t\t\t不连接到 X Server"
|
|||||||
msgid "--remote <files>\tEdit <files> in a Vim server if possible"
|
msgid "--remote <files>\tEdit <files> in a Vim server if possible"
|
||||||
msgstr "--remote <files>\t如有可能,在 Vim 服务器上编辑文件 <files>"
|
msgstr "--remote <files>\t如有可能,在 Vim 服务器上编辑文件 <files>"
|
||||||
|
|
||||||
msgid "--remote-silent <files> Same, don't complain if there is no server"
|
msgid ""
|
||||||
|
"--remote-silent <files> Same, don't complain if there is no server"
|
||||||
msgstr "--remote-silent <files> 同上,找不到服务器时不抱怨"
|
msgstr "--remote-silent <files> 同上,找不到服务器时不抱怨"
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
|
|||||||
@@ -241,9 +241,8 @@ msgstr "
|
|||||||
msgid " Tag completion (^]^N^P)"
|
msgid " Tag completion (^]^N^P)"
|
||||||
msgstr " Tag <20><>ȫ (^]^N^P)"
|
msgstr " Tag <20><>ȫ (^]^N^P)"
|
||||||
|
|
||||||
#, fuzzy
|
msgid " Path pattern completion (^N^P)"
|
||||||
#~ msgid " Path pattern completion (^N^P)"
|
msgstr " ͷ<>ļ<EFBFBD>ģʽ<C4A3><CABD>ȫ (^N^P)"
|
||||||
#~ msgstr " ·<><C2B7>ģʽ<C4A3><CABD>ȫ (^N^P)"
|
|
||||||
|
|
||||||
msgid " Definition completion (^D^N^P)"
|
msgid " Definition completion (^D^N^P)"
|
||||||
msgstr " <20><><EFBFBD>岹ȫ (^D^N^P)"
|
msgstr " <20><><EFBFBD>岹ȫ (^D^N^P)"
|
||||||
@@ -2896,7 +2895,7 @@ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
|
|||||||
msgstr "--remote <files>\t<><74><EFBFBD>п<EFBFBD><D0BF>ܣ<EFBFBD><DCA3><EFBFBD> Vim <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ༭<CFB1>ļ<EFBFBD> <files>"
|
msgstr "--remote <files>\t<><74><EFBFBD>п<EFBFBD><D0BF>ܣ<EFBFBD><DCA3><EFBFBD> Vim <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ༭<CFB1>ļ<EFBFBD> <files>"
|
||||||
|
|
||||||
msgid "--remote-silent <files> Same, don't complain if there is no server"
|
msgid "--remote-silent <files> Same, don't complain if there is no server"
|
||||||
msgstr "--remote-silent <files> ͬ<>ϣ<EFBFBD><CFA3>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Թ"
|
msgstr "--remote-silent <files> ͬ<>ϣ<EFBFBD><CFA3>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Թ"
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"--remote-wait <files> As --remote but wait for files to have been edited"
|
"--remote-wait <files> As --remote but wait for files to have been edited"
|
||||||
@@ -5284,7 +5283,7 @@ msgstr "Vim:
|
|||||||
|
|
||||||
#. must display the prompt
|
#. must display the prompt
|
||||||
msgid "No undo possible; continue anyway"
|
msgid "No undo possible; continue anyway"
|
||||||
msgstr "<22><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
msgstr "<22><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
msgid "Already at oldest change"
|
msgid "Already at oldest change"
|
||||||
msgstr "<22><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ɵĸı<C4B8>"
|
msgstr "<22><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ɵĸı<C4B8>"
|
||||||
@@ -5601,13 +5600,13 @@ msgid "type :help cp-default<Enter> for info on this"
|
|||||||
msgstr "<22><><EFBFBD><EFBFBD> :help cp-default<Enter> <20>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> "
|
msgstr "<22><><EFBFBD><EFBFBD> :help cp-default<Enter> <20>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> "
|
||||||
|
|
||||||
msgid "menu Help->Orphans for information "
|
msgid "menu Help->Orphans for information "
|
||||||
msgstr "<22>˵<EFBFBD> Help->Orphans <20>鿴˵<E9BFB4><CBB5> "
|
msgstr "<22>˵<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E>¶<EFBFBD> <20>鿴˵<E9BFB4><CBB5> "
|
||||||
|
|
||||||
msgid "Running modeless, typed text is inserted"
|
msgid "Running modeless, typed text is inserted"
|
||||||
msgstr "<22><>ģʽ<C4A3><CABD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD>"
|
msgstr "<22><>ģʽ<C4A3><CABD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
msgid "menu Edit->Global Settings->Toggle Insert Mode "
|
msgid "menu Edit->Global Settings->Toggle Insert Mode "
|
||||||
msgstr "<22>˵<EFBFBD> Edit->Global Settings->Toggle Insert Mode "
|
msgstr "<22>˵<EFBFBD> <EFBFBD>༭->ȫ<><C8AB><EFBFBD>趨-><3E><>/<2F>ز<EFBFBD><D8B2><EFBFBD>ģʽ "
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid " for two modes "
|
#~ msgid " for two modes "
|
||||||
|
|||||||
@@ -75,6 +75,10 @@ int do_in_runtimepath(char_u *name, int flags, void (*callback)(char_u *fname, v
|
|||||||
void ex_packloadall(exarg_T *eap);
|
void ex_packloadall(exarg_T *eap);
|
||||||
void ex_packadd(exarg_T *eap);
|
void ex_packadd(exarg_T *eap);
|
||||||
void ex_options(exarg_T *eap);
|
void ex_options(exarg_T *eap);
|
||||||
|
void init_pyxversion(void);
|
||||||
|
void ex_pyxfile(exarg_T *eap);
|
||||||
|
void ex_pyx(exarg_T *eap);
|
||||||
|
void ex_pyxdo(exarg_T *eap);
|
||||||
void ex_source(exarg_T *eap);
|
void ex_source(exarg_T *eap);
|
||||||
linenr_T *source_breakpoint(void *cookie);
|
linenr_T *source_breakpoint(void *cookie);
|
||||||
int *source_dbg_tick(void *cookie);
|
int *source_dbg_tick(void *cookie);
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ int utf_char2bytes(int c, char_u *buf);
|
|||||||
int utf_iscomposing(int c);
|
int utf_iscomposing(int c);
|
||||||
int utf_printable(int c);
|
int utf_printable(int c);
|
||||||
int utf_class(int c);
|
int utf_class(int c);
|
||||||
|
int utf_class_buf(int c, buf_T *buf);
|
||||||
int utf_ambiguous_width(int c);
|
int utf_ambiguous_width(int c);
|
||||||
int utf_fold(int a);
|
int utf_fold(int a);
|
||||||
int utf_toupper(int a);
|
int utf_toupper(int a);
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ char_u *vim_strsave_up(char_u *string);
|
|||||||
char_u *vim_strnsave_up(char_u *string, int len);
|
char_u *vim_strnsave_up(char_u *string, int len);
|
||||||
void vim_strup(char_u *p);
|
void vim_strup(char_u *p);
|
||||||
char_u *strup_save(char_u *orig);
|
char_u *strup_save(char_u *orig);
|
||||||
|
char_u *strlow_save(char_u *orig);
|
||||||
void del_trailing_spaces(char_u *ptr);
|
void del_trailing_spaces(char_u *ptr);
|
||||||
void vim_strncpy(char_u *to, char_u *from, size_t len);
|
void vim_strncpy(char_u *to, char_u *from, size_t len);
|
||||||
void vim_strcat(char_u *to, char_u *from, size_t tosize);
|
void vim_strcat(char_u *to, char_u *from, size_t tosize);
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ SCRIPTS_ALL = \
|
|||||||
test_listchars.out \
|
test_listchars.out \
|
||||||
test_listlbr.out \
|
test_listlbr.out \
|
||||||
test_search_mbyte.out \
|
test_search_mbyte.out \
|
||||||
test_utf8.out \
|
|
||||||
test_wordcount.out
|
test_wordcount.out
|
||||||
|
|
||||||
|
|
||||||
@@ -165,6 +164,7 @@ NEW_TESTS = test_arglist.res \
|
|||||||
test_job_fails.res \
|
test_job_fails.res \
|
||||||
test_json.res \
|
test_json.res \
|
||||||
test_langmap.res \
|
test_langmap.res \
|
||||||
|
test_lua.res \
|
||||||
test_man.res \
|
test_man.res \
|
||||||
test_marks.res \
|
test_marks.res \
|
||||||
test_matchadd_conceal.res \
|
test_matchadd_conceal.res \
|
||||||
@@ -173,10 +173,14 @@ NEW_TESTS = test_arglist.res \
|
|||||||
test_nested_function.res \
|
test_nested_function.res \
|
||||||
test_netbeans.res \
|
test_netbeans.res \
|
||||||
test_normal.res \
|
test_normal.res \
|
||||||
test_paste.res \
|
|
||||||
test_packadd.res \
|
test_packadd.res \
|
||||||
|
test_paste.res \
|
||||||
test_perl.res \
|
test_perl.res \
|
||||||
test_profile.res \
|
test_profile.res \
|
||||||
|
test_python2.res \
|
||||||
|
test_python3.res \
|
||||||
|
test_pyx2.res \
|
||||||
|
test_pyx3.res \
|
||||||
test_quickfix.res \
|
test_quickfix.res \
|
||||||
test_retab.res \
|
test_retab.res \
|
||||||
test_ruby.res \
|
test_ruby.res \
|
||||||
@@ -189,6 +193,7 @@ NEW_TESTS = test_arglist.res \
|
|||||||
test_substitute.res \
|
test_substitute.res \
|
||||||
test_syntax.res \
|
test_syntax.res \
|
||||||
test_system.res \
|
test_system.res \
|
||||||
|
test_tcl.res \
|
||||||
test_textobjects.res \
|
test_textobjects.res \
|
||||||
test_undo.res \
|
test_undo.res \
|
||||||
test_usercommands.res \
|
test_usercommands.res \
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ test1.out: test1.in
|
|||||||
# 200 msec is sufficient, but only modern sleep supports a fraction of
|
# 200 msec is sufficient, but only modern sleep supports a fraction of
|
||||||
# a second, fall back to a second if it fails.
|
# a second, fall back to a second if it fails.
|
||||||
@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
|
@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
|
||||||
-$(RUN_VIM) $*.in
|
$(RUN_VIM) $*.in
|
||||||
|
|
||||||
# For flaky tests retry one time. No tests at the moment.
|
# For flaky tests retry one time. No tests at the moment.
|
||||||
#@/bin/sh -c "if test -f test.out -a $* = test61; then \
|
#@/bin/sh -c "if test -f test.out -a $* = test61; then \
|
||||||
@@ -108,7 +108,7 @@ bench_re_freeze.out: bench_re_freeze.vim
|
|||||||
# 200 msec is sufficient, but only modern sleep supports a fraction of
|
# 200 msec is sufficient, but only modern sleep supports a fraction of
|
||||||
# a second, fall back to a second if it fails.
|
# a second, fall back to a second if it fails.
|
||||||
@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
|
@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
|
||||||
-$(RUN_VIM) $*.in
|
$(RUN_VIM) $*.in
|
||||||
@/bin/sh -c "if test -f benchmark.out; then cat benchmark.out; fi"
|
@/bin/sh -c "if test -f benchmark.out; then cat benchmark.out; fi"
|
||||||
|
|
||||||
nolog:
|
nolog:
|
||||||
|
|||||||
4
src/testdir/pyxfile/py2_magic.py
Normal file
4
src/testdir/pyxfile/py2_magic.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# requires python 2.x
|
||||||
|
|
||||||
|
import sys
|
||||||
|
print(sys.version)
|
||||||
4
src/testdir/pyxfile/py2_shebang.py
Normal file
4
src/testdir/pyxfile/py2_shebang.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/python2
|
||||||
|
|
||||||
|
import sys
|
||||||
|
print(sys.version)
|
||||||
4
src/testdir/pyxfile/py3_magic.py
Normal file
4
src/testdir/pyxfile/py3_magic.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# requires python 3.x
|
||||||
|
|
||||||
|
import sys
|
||||||
|
print(sys.version)
|
||||||
4
src/testdir/pyxfile/py3_shebang.py
Normal file
4
src/testdir/pyxfile/py3_shebang.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
print(sys.version)
|
||||||
2
src/testdir/pyxfile/pyx.py
Normal file
2
src/testdir/pyxfile/pyx.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import sys
|
||||||
|
print(sys.version)
|
||||||
@@ -156,6 +156,7 @@ let s:flaky = [
|
|||||||
\ 'Test_reltime()',
|
\ 'Test_reltime()',
|
||||||
\ 'Test_nb_basic()',
|
\ 'Test_nb_basic()',
|
||||||
\ 'Test_communicate()',
|
\ 'Test_communicate()',
|
||||||
|
\ 'Test_close_and_exit_cb()',
|
||||||
\ 'Test_pipe_through_sort_all()',
|
\ 'Test_pipe_through_sort_all()',
|
||||||
\ 'Test_pipe_through_sort_some()'
|
\ 'Test_pipe_through_sort_some()'
|
||||||
\ ]
|
\ ]
|
||||||
|
|||||||
@@ -9,3 +9,4 @@ source test_expr_utf8.vim
|
|||||||
source test_matchadd_conceal_utf8.vim
|
source test_matchadd_conceal_utf8.vim
|
||||||
source test_regexp_utf8.vim
|
source test_regexp_utf8.vim
|
||||||
source test_source_utf8.vim
|
source test_source_utf8.vim
|
||||||
|
source test_utf8.vim
|
||||||
|
|||||||
@@ -121,6 +121,12 @@ func Test_assert_inrange()
|
|||||||
call assert_fails('call assert_inrange(1, 1)', 'E119:')
|
call assert_fails('call assert_inrange(1, 1)', 'E119:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_assert_with_msg()
|
||||||
|
call assert_equal('foo', 'bar', 'testing')
|
||||||
|
call assert_match("testing: Expected 'foo' but got 'bar'", v:errors[0])
|
||||||
|
call remove(v:errors, 0)
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_user_is_happy()
|
func Test_user_is_happy()
|
||||||
smile
|
smile
|
||||||
sleep 300m
|
sleep 300m
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
" Simplistic testing of Farsi mode.
|
" Simplistic testing of Farsi mode.
|
||||||
|
" Note: must be edited with latin1 encoding.
|
||||||
|
|
||||||
if !has('farsi')
|
if !has('farsi')
|
||||||
finish
|
finish
|
||||||
@@ -82,3 +83,51 @@ func Test_farsi_map()
|
|||||||
set noaltkeymap
|
set noaltkeymap
|
||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_input_farsi()
|
||||||
|
new
|
||||||
|
setlocal rightleft fkmap
|
||||||
|
" numbers switch input direction
|
||||||
|
call feedkeys("aabc0123456789.+-^%#=xyz\<Esc>", 'tx')
|
||||||
|
call assert_equal("\x8c<38>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\x93<39>", getline('.'))
|
||||||
|
|
||||||
|
" all non-number special chars with spaces
|
||||||
|
call feedkeys("oB E F H I K L M O P Q R T U W Y ` ! @ # $ % ^ & * () - _ = + \\ | : \" . / < > ? \<Esc>", 'tx')
|
||||||
|
call assert_equal("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<5B>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1A0A2A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蠨<EFBFBD><E8A0A8><EFBFBD><EFBFBD>頽<EFBFBD><E9A0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAA0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", getline('.'))
|
||||||
|
|
||||||
|
" all non-number special chars without spaces
|
||||||
|
call feedkeys("oBEFHIKLMOPQRTUWY`!@#$%^&*()-_=+\\|:\"./<>?\<Esc>",'tx')
|
||||||
|
call assert_equal("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1A2A3A7><EFBFBD><EFBFBD><EFBFBD>訩<EFBFBD>齫<EFBFBD>꺻<EFBFBD><EABABB><EFBFBD><EFBFBD><EFBFBD>", getline('.'))
|
||||||
|
|
||||||
|
" all letter chars with spaces
|
||||||
|
call feedkeys("oa A b c C d D e f g G h i j J k l m n N o p q r s S t u v V w x X y z Z ; \ , [ ] \<Esc>", 'tx')
|
||||||
|
call assert_equal("Ѡ<><D1A0>̠ΠϠ<CEA0><CFA0><EFBFBD><EFBFBD>Ơàܠ<C3A0><DCA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Š<EFBFBD><C5A0>ޠݠĠˠˠʠɠӠ٠Р<D9A0><D0A0>ؠ֠͠͠ҠԠԠנՠ<D7A0><D5A0>ڠ<EFBFBD>ߠǠȠ", getline('.'))
|
||||||
|
|
||||||
|
" all letter chars without spaces
|
||||||
|
call feedkeys("oaAbcCdDefgGhijJklmnNopqrsStuvVwxXyzZ;\,[]\<Esc>", 'tx')
|
||||||
|
call assert_equal("\x8c<38><63><EFBFBD><EFBFBD>\x9f<39>\x86\x83<38><33><EFBFBD>\x9d\x85\x80\x9c\x9b\x84<38><34>\x8a\x89\x8e\x96\x8b<38>\x95\x90<39><30>\x8d<38><64>\x93<39><33>\x97<39>\x87\x88", getline('.'))
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_command_line_farsi()
|
||||||
|
set allowrevins altkeymap
|
||||||
|
|
||||||
|
" letter characters with spaces
|
||||||
|
call feedkeys(":\"\<C-_>a A b c C d D e f g G h i j J k l m n N o p q r s S t u v V w x X y z Z ; \\ , [ ]\<CR>", 'tx')
|
||||||
|
call assert_equal("\"\x88<38>Ǡߠ<C7A0><DFA0>ڠՠՠנԠԠҠ֠͠͠ؠ<D6A0><D8A0>Р٠ӠɠʠˠˠĠݠޠ<DDA0><DEA0>Š<EFBFBD><C5A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܠàƠ<C3A0><C6A0><EFBFBD><EFBFBD>ϠΠ̠<CEA0><CCA0><EFBFBD>", getreg(':'))
|
||||||
|
|
||||||
|
" letter characters without spaces
|
||||||
|
call feedkeys(":\"\<C-_>aAbcCdDefgGhijJklmnNopqrsStuvVwxXyzZ;\\,[]\<CR>", 'tx')
|
||||||
|
call assert_equal("\"\x88\x87<38><37><EFBFBD><EFBFBD><EFBFBD>\x93<39><33>\x8d<38><64>\x90\x95<39>\x8b\x96\x8e\x89\x8a<38><61>\x84\x9b\x9c\x80\x85\x9d<39><64><EFBFBD>\x83\x86<38>\x9f<39><66><EFBFBD><EFBFBD>\x8c", getreg(':'))
|
||||||
|
|
||||||
|
" other characters with spaces
|
||||||
|
call feedkeys(":\"\<C-_>0 1 2 3 4 5 6 7 8 9 ` . ! \" $ % ^ & / () = \\ ? + - _ * : # ~ @ < > { } | B E F H I K L M O P Q R T U W Y\<CR>", 'tx')
|
||||||
|
call assert_equal("\"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]<5D>[<5B> <EFBFBD><C2A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頭<EFBFBD><E9A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>렽<EFBFBD><EBA0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", getreg(':'))
|
||||||
|
|
||||||
|
" other characters without spaces
|
||||||
|
call feedkeys(":\"\<C-_>0123456789`.!\"$%^&/()=\\?+-_*:#~@<>{}|BEFHIKLMOPQRTUWY\<CR>", 'tx')
|
||||||
|
call assert_equal("\"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>][<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}{<7B><><EFBFBD>~<7E><><EFBFBD>魫<EFBFBD>뽩<EFBFBD><EBBDA9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", getreg(':'))
|
||||||
|
|
||||||
|
set noallowrevins noaltkeymap
|
||||||
|
endfunc
|
||||||
|
|||||||
@@ -1,5 +1,78 @@
|
|||||||
" Tests for various functions.
|
" Tests for various functions.
|
||||||
|
|
||||||
|
func Test_empty()
|
||||||
|
call assert_equal(1, empty(''))
|
||||||
|
call assert_equal(0, empty('a'))
|
||||||
|
|
||||||
|
call assert_equal(1, empty(0))
|
||||||
|
call assert_equal(1, empty(-0))
|
||||||
|
call assert_equal(0, empty(1))
|
||||||
|
call assert_equal(0, empty(-1))
|
||||||
|
|
||||||
|
call assert_equal(1, empty(0.0))
|
||||||
|
call assert_equal(1, empty(-0.0))
|
||||||
|
call assert_equal(0, empty(1.0))
|
||||||
|
call assert_equal(0, empty(-1.0))
|
||||||
|
call assert_equal(0, empty(1.0/0.0))
|
||||||
|
call assert_equal(0, empty(0.0/0.0))
|
||||||
|
|
||||||
|
call assert_equal(1, empty([]))
|
||||||
|
call assert_equal(0, empty(['a']))
|
||||||
|
|
||||||
|
call assert_equal(1, empty({}))
|
||||||
|
call assert_equal(0, empty({'a':1}))
|
||||||
|
|
||||||
|
call assert_equal(1, empty(v:null))
|
||||||
|
call assert_equal(1, empty(v:none))
|
||||||
|
call assert_equal(1, empty(v:false))
|
||||||
|
call assert_equal(0, empty(v:true))
|
||||||
|
|
||||||
|
call assert_equal(0, empty(function('Test_empty')))
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_len()
|
||||||
|
call assert_equal(1, len(0))
|
||||||
|
call assert_equal(2, len(12))
|
||||||
|
|
||||||
|
call assert_equal(0, len(''))
|
||||||
|
call assert_equal(2, len('ab'))
|
||||||
|
|
||||||
|
call assert_equal(0, len([]))
|
||||||
|
call assert_equal(2, len([2, 1]))
|
||||||
|
|
||||||
|
call assert_equal(0, len({}))
|
||||||
|
call assert_equal(2, len({'a': 1, 'b': 2}))
|
||||||
|
|
||||||
|
call assert_fails('call len(v:none)', 'E701:')
|
||||||
|
call assert_fails('call len({-> 0})', 'E701:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_max()
|
||||||
|
call assert_equal(0, max([]))
|
||||||
|
call assert_equal(2, max([2]))
|
||||||
|
call assert_equal(2, max([1, 2]))
|
||||||
|
call assert_equal(2, max([1, 2, v:null]))
|
||||||
|
|
||||||
|
call assert_equal(0, max({}))
|
||||||
|
call assert_equal(2, max({'a':1, 'b':2}))
|
||||||
|
|
||||||
|
call assert_fails('call max(1)', 'E712:')
|
||||||
|
call assert_fails('call max(v:none)', 'E712:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_min()
|
||||||
|
call assert_equal(0, min([]))
|
||||||
|
call assert_equal(2, min([2]))
|
||||||
|
call assert_equal(1, min([1, 2]))
|
||||||
|
call assert_equal(0, min([1, 2, v:null]))
|
||||||
|
|
||||||
|
call assert_equal(0, min({}))
|
||||||
|
call assert_equal(1, min({'a':1, 'b':2}))
|
||||||
|
|
||||||
|
call assert_fails('call min(1)', 'E712:')
|
||||||
|
call assert_fails('call min(v:none)', 'E712:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_str2nr()
|
func Test_str2nr()
|
||||||
call assert_equal(0, str2nr(''))
|
call assert_equal(0, str2nr(''))
|
||||||
call assert_equal(1, str2nr('1'))
|
call assert_equal(1, str2nr('1'))
|
||||||
@@ -15,4 +88,220 @@ func Test_str2nr()
|
|||||||
|
|
||||||
call assert_equal(123456789, str2nr('123456789'))
|
call assert_equal(123456789, str2nr('123456789'))
|
||||||
call assert_equal(-123456789, str2nr('-123456789'))
|
call assert_equal(-123456789, str2nr('-123456789'))
|
||||||
|
|
||||||
|
call assert_equal(5, str2nr('101', 2))
|
||||||
|
call assert_equal(5, str2nr('0b101', 2))
|
||||||
|
call assert_equal(5, str2nr('0B101', 2))
|
||||||
|
call assert_equal(-5, str2nr('-101', 2))
|
||||||
|
call assert_equal(-5, str2nr('-0b101', 2))
|
||||||
|
call assert_equal(-5, str2nr('-0B101', 2))
|
||||||
|
|
||||||
|
call assert_equal(65, str2nr('101', 8))
|
||||||
|
call assert_equal(65, str2nr('0101', 8))
|
||||||
|
call assert_equal(-65, str2nr('-101', 8))
|
||||||
|
call assert_equal(-65, str2nr('-0101', 8))
|
||||||
|
|
||||||
|
call assert_equal(11259375, str2nr('abcdef', 16))
|
||||||
|
call assert_equal(11259375, str2nr('ABCDEF', 16))
|
||||||
|
call assert_equal(-11259375, str2nr('-ABCDEF', 16))
|
||||||
|
call assert_equal(11259375, str2nr('0xabcdef', 16))
|
||||||
|
call assert_equal(11259375, str2nr('0Xabcdef', 16))
|
||||||
|
call assert_equal(11259375, str2nr('0XABCDEF', 16))
|
||||||
|
call assert_equal(-11259375, str2nr('-0xABCDEF', 16))
|
||||||
|
|
||||||
|
call assert_equal(0, str2nr('0x10'))
|
||||||
|
call assert_equal(0, str2nr('0b10'))
|
||||||
|
call assert_equal(1, str2nr('12', 2))
|
||||||
|
call assert_equal(1, str2nr('18', 8))
|
||||||
|
call assert_equal(1, str2nr('1g', 16))
|
||||||
|
|
||||||
|
call assert_equal(0, str2nr(v:null))
|
||||||
|
call assert_equal(0, str2nr(v:none))
|
||||||
|
|
||||||
|
call assert_fails('call str2nr([])', 'E730:')
|
||||||
|
call assert_fails('call str2nr({->2})', 'E729:')
|
||||||
|
call assert_fails('call str2nr(1.2)', 'E806:')
|
||||||
|
call assert_fails('call str2nr(10, [])', 'E474:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_strftime()
|
||||||
|
if !exists('*strftime')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
" Format of strftime() depends on system. We assume
|
||||||
|
" that basic formats tested here are available and
|
||||||
|
" identical on all systems which support strftime().
|
||||||
|
"
|
||||||
|
" The 2nd parameter of strftime() is a local time, so the output day
|
||||||
|
" of strftime() can be 17 or 18, depending on timezone.
|
||||||
|
call assert_match('^2017-01-1[78]$', strftime('%Y-%m-%d', 1484695512))
|
||||||
|
"
|
||||||
|
call assert_match('^\d\d\d\d-\(0\d\|1[012]\)-\([012]\d\|3[01]\) \([01]\d\|2[0-3]\):[0-5]\d:\([0-5]\d\|60\)$', strftime('%Y-%m-%d %H:%M:%S'))
|
||||||
|
|
||||||
|
call assert_fails('call strftime([])', 'E730:')
|
||||||
|
call assert_fails('call strftime("%Y", [])', 'E745:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_simplify()
|
||||||
|
call assert_equal('', simplify(''))
|
||||||
|
call assert_equal('/', simplify('/'))
|
||||||
|
call assert_equal('/', simplify('/.'))
|
||||||
|
call assert_equal('/', simplify('/..'))
|
||||||
|
call assert_equal('/...', simplify('/...'))
|
||||||
|
call assert_equal('./dir/file', simplify('./dir/file'))
|
||||||
|
call assert_equal('./dir/file', simplify('.///dir//file'))
|
||||||
|
call assert_equal('./dir/file', simplify('./dir/./file'))
|
||||||
|
call assert_equal('./file', simplify('./dir/../file'))
|
||||||
|
call assert_equal('../dir/file', simplify('dir/../../dir/file'))
|
||||||
|
call assert_equal('./file', simplify('dir/.././file'))
|
||||||
|
|
||||||
|
call assert_fails('call simplify({->0})', 'E729:')
|
||||||
|
call assert_fails('call simplify([])', 'E730:')
|
||||||
|
call assert_fails('call simplify({})', 'E731:')
|
||||||
|
call assert_fails('call simplify(1.2)', 'E806:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_tolower()
|
||||||
|
call assert_equal("", tolower(""))
|
||||||
|
|
||||||
|
" Test with all printable ASCII characters.
|
||||||
|
call assert_equal(' !"#$%&''()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~',
|
||||||
|
\ tolower(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'))
|
||||||
|
|
||||||
|
if !has('multi_byte')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Test with a few uppercase diacritics.
|
||||||
|
call assert_equal("aàáâãäåāăąǎǟǡả", tolower("AÀÁÂÃÄÅĀĂĄǍǞǠẢ"))
|
||||||
|
call assert_equal("bḃḇ", tolower("BḂḆ"))
|
||||||
|
call assert_equal("cçćĉċč", tolower("CÇĆĈĊČ"))
|
||||||
|
call assert_equal("dďđḋḏḑ", tolower("DĎĐḊḎḐ"))
|
||||||
|
call assert_equal("eèéêëēĕėęěẻẽ", tolower("EÈÉÊËĒĔĖĘĚẺẼ"))
|
||||||
|
call assert_equal("fḟ ", tolower("FḞ "))
|
||||||
|
call assert_equal("gĝğġģǥǧǵḡ", tolower("GĜĞĠĢǤǦǴḠ"))
|
||||||
|
call assert_equal("hĥħḣḧḩ", tolower("HĤĦḢḦḨ"))
|
||||||
|
call assert_equal("iìíîïĩīĭįiǐỉ", tolower("IÌÍÎÏĨĪĬĮİǏỈ"))
|
||||||
|
call assert_equal("jĵ", tolower("JĴ"))
|
||||||
|
call assert_equal("kķǩḱḵ", tolower("KĶǨḰḴ"))
|
||||||
|
call assert_equal("lĺļľŀłḻ", tolower("LĹĻĽĿŁḺ"))
|
||||||
|
call assert_equal("mḿṁ", tolower("MḾṀ"))
|
||||||
|
call assert_equal("nñńņňṅṉ", tolower("NÑŃŅŇṄṈ"))
|
||||||
|
call assert_equal("oòóôõöøōŏőơǒǫǭỏ", tolower("OÒÓÔÕÖØŌŎŐƠǑǪǬỎ"))
|
||||||
|
call assert_equal("pṕṗ", tolower("PṔṖ"))
|
||||||
|
call assert_equal("q", tolower("Q"))
|
||||||
|
call assert_equal("rŕŗřṙṟ", tolower("RŔŖŘṘṞ"))
|
||||||
|
call assert_equal("sśŝşšṡ", tolower("SŚŜŞŠṠ"))
|
||||||
|
call assert_equal("tţťŧṫṯ", tolower("TŢŤŦṪṮ"))
|
||||||
|
call assert_equal("uùúûüũūŭůűųưǔủ", tolower("UÙÚÛÜŨŪŬŮŰŲƯǓỦ"))
|
||||||
|
call assert_equal("vṽ", tolower("VṼ"))
|
||||||
|
call assert_equal("wŵẁẃẅẇ", tolower("WŴẀẂẄẆ"))
|
||||||
|
call assert_equal("xẋẍ", tolower("XẊẌ"))
|
||||||
|
call assert_equal("yýŷÿẏỳỷỹ", tolower("YÝŶŸẎỲỶỸ"))
|
||||||
|
call assert_equal("zźżžƶẑẕ", tolower("ZŹŻŽƵẐẔ"))
|
||||||
|
|
||||||
|
" Test with a few lowercase diacritics, which should remain unchanged.
|
||||||
|
call assert_equal("aàáâãäåāăąǎǟǡả", tolower("aàáâãäåāăąǎǟǡả"))
|
||||||
|
call assert_equal("bḃḇ", tolower("bḃḇ"))
|
||||||
|
call assert_equal("cçćĉċč", tolower("cçćĉċč"))
|
||||||
|
call assert_equal("dďđḋḏḑ", tolower("dďđḋḏḑ"))
|
||||||
|
call assert_equal("eèéêëēĕėęěẻẽ", tolower("eèéêëēĕėęěẻẽ"))
|
||||||
|
call assert_equal("fḟ", tolower("fḟ"))
|
||||||
|
call assert_equal("gĝğġģǥǧǵḡ", tolower("gĝğġģǥǧǵḡ"))
|
||||||
|
call assert_equal("hĥħḣḧḩẖ", tolower("hĥħḣḧḩẖ"))
|
||||||
|
call assert_equal("iìíîïĩīĭįǐỉ", tolower("iìíîïĩīĭįǐỉ"))
|
||||||
|
call assert_equal("jĵǰ", tolower("jĵǰ"))
|
||||||
|
call assert_equal("kķǩḱḵ", tolower("kķǩḱḵ"))
|
||||||
|
call assert_equal("lĺļľŀłḻ", tolower("lĺļľŀłḻ"))
|
||||||
|
call assert_equal("mḿṁ ", tolower("mḿṁ "))
|
||||||
|
call assert_equal("nñńņňʼnṅṉ", tolower("nñńņňʼnṅṉ"))
|
||||||
|
call assert_equal("oòóôõöøōŏőơǒǫǭỏ", tolower("oòóôõöøōŏőơǒǫǭỏ"))
|
||||||
|
call assert_equal("pṕṗ", tolower("pṕṗ"))
|
||||||
|
call assert_equal("q", tolower("q"))
|
||||||
|
call assert_equal("rŕŗřṙṟ", tolower("rŕŗřṙṟ"))
|
||||||
|
call assert_equal("sśŝşšṡ", tolower("sśŝşšṡ"))
|
||||||
|
call assert_equal("tţťŧṫṯẗ", tolower("tţťŧṫṯẗ"))
|
||||||
|
call assert_equal("uùúûüũūŭůűųưǔủ", tolower("uùúûüũūŭůűųưǔủ"))
|
||||||
|
call assert_equal("vṽ", tolower("vṽ"))
|
||||||
|
call assert_equal("wŵẁẃẅẇẘ", tolower("wŵẁẃẅẇẘ"))
|
||||||
|
call assert_equal("ẋẍ", tolower("ẋẍ"))
|
||||||
|
call assert_equal("yýÿŷẏẙỳỷỹ", tolower("yýÿŷẏẙỳỷỹ"))
|
||||||
|
call assert_equal("zźżžƶẑẕ", tolower("zźżžƶẑẕ"))
|
||||||
|
|
||||||
|
" According to https://twitter.com/jifa/status/625776454479970304
|
||||||
|
" Ⱥ (U+023A) and Ⱦ (U+023E) are the *only* code points to increase
|
||||||
|
" in length (2 to 3 bytes) when lowercased. So let's test them.
|
||||||
|
call assert_equal("ⱥ ⱦ", tolower("Ⱥ Ⱦ"))
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_toupper()
|
||||||
|
call assert_equal("", toupper(""))
|
||||||
|
|
||||||
|
" Test with all printable ASCII characters.
|
||||||
|
call assert_equal(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~',
|
||||||
|
\ toupper(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'))
|
||||||
|
|
||||||
|
if !has('multi_byte')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Test with a few lowercase diacritics.
|
||||||
|
call assert_equal("AÀÁÂÃÄÅĀĂĄǍǞǠẢ", toupper("aàáâãäåāăąǎǟǡả"))
|
||||||
|
call assert_equal("BḂḆ", toupper("bḃḇ"))
|
||||||
|
call assert_equal("CÇĆĈĊČ", toupper("cçćĉċč"))
|
||||||
|
call assert_equal("DĎĐḊḎḐ", toupper("dďđḋḏḑ"))
|
||||||
|
call assert_equal("EÈÉÊËĒĔĖĘĚẺẼ", toupper("eèéêëēĕėęěẻẽ"))
|
||||||
|
call assert_equal("FḞ", toupper("fḟ"))
|
||||||
|
call assert_equal("GĜĞĠĢǤǦǴḠ", toupper("gĝğġģǥǧǵḡ"))
|
||||||
|
call assert_equal("HĤĦḢḦḨẖ", toupper("hĥħḣḧḩẖ"))
|
||||||
|
call assert_equal("IÌÍÎÏĨĪĬĮǏỈ", toupper("iìíîïĩīĭįǐỉ"))
|
||||||
|
call assert_equal("JĴǰ", toupper("jĵǰ"))
|
||||||
|
call assert_equal("KĶǨḰḴ", toupper("kķǩḱḵ"))
|
||||||
|
call assert_equal("LĹĻĽĿŁḺ", toupper("lĺļľŀłḻ"))
|
||||||
|
call assert_equal("MḾṀ ", toupper("mḿṁ "))
|
||||||
|
call assert_equal("NÑŃŅŇʼnṄṈ", toupper("nñńņňʼnṅṉ"))
|
||||||
|
call assert_equal("OÒÓÔÕÖØŌŎŐƠǑǪǬỎ", toupper("oòóôõöøōŏőơǒǫǭỏ"))
|
||||||
|
call assert_equal("PṔṖ", toupper("pṕṗ"))
|
||||||
|
call assert_equal("Q", toupper("q"))
|
||||||
|
call assert_equal("RŔŖŘṘṞ", toupper("rŕŗřṙṟ"))
|
||||||
|
call assert_equal("SŚŜŞŠṠ", toupper("sśŝşšṡ"))
|
||||||
|
call assert_equal("TŢŤŦṪṮẗ", toupper("tţťŧṫṯẗ"))
|
||||||
|
call assert_equal("UÙÚÛÜŨŪŬŮŰŲƯǓỦ", toupper("uùúûüũūŭůűųưǔủ"))
|
||||||
|
call assert_equal("VṼ", toupper("vṽ"))
|
||||||
|
call assert_equal("WŴẀẂẄẆẘ", toupper("wŵẁẃẅẇẘ"))
|
||||||
|
call assert_equal("ẊẌ", toupper("ẋẍ"))
|
||||||
|
call assert_equal("YÝŸŶẎẙỲỶỸ", toupper("yýÿŷẏẙỳỷỹ"))
|
||||||
|
call assert_equal("ZŹŻŽƵẐẔ", toupper("zźżžƶẑẕ"))
|
||||||
|
|
||||||
|
" Test that uppercase diacritics, which should remain unchanged.
|
||||||
|
call assert_equal("AÀÁÂÃÄÅĀĂĄǍǞǠẢ", toupper("AÀÁÂÃÄÅĀĂĄǍǞǠẢ"))
|
||||||
|
call assert_equal("BḂḆ", toupper("BḂḆ"))
|
||||||
|
call assert_equal("CÇĆĈĊČ", toupper("CÇĆĈĊČ"))
|
||||||
|
call assert_equal("DĎĐḊḎḐ", toupper("DĎĐḊḎḐ"))
|
||||||
|
call assert_equal("EÈÉÊËĒĔĖĘĚẺẼ", toupper("EÈÉÊËĒĔĖĘĚẺẼ"))
|
||||||
|
call assert_equal("FḞ ", toupper("FḞ "))
|
||||||
|
call assert_equal("GĜĞĠĢǤǦǴḠ", toupper("GĜĞĠĢǤǦǴḠ"))
|
||||||
|
call assert_equal("HĤĦḢḦḨ", toupper("HĤĦḢḦḨ"))
|
||||||
|
call assert_equal("IÌÍÎÏĨĪĬĮİǏỈ", toupper("IÌÍÎÏĨĪĬĮİǏỈ"))
|
||||||
|
call assert_equal("JĴ", toupper("JĴ"))
|
||||||
|
call assert_equal("KĶǨḰḴ", toupper("KĶǨḰḴ"))
|
||||||
|
call assert_equal("LĹĻĽĿŁḺ", toupper("LĹĻĽĿŁḺ"))
|
||||||
|
call assert_equal("MḾṀ", toupper("MḾṀ"))
|
||||||
|
call assert_equal("NÑŃŅŇṄṈ", toupper("NÑŃŅŇṄṈ"))
|
||||||
|
call assert_equal("OÒÓÔÕÖØŌŎŐƠǑǪǬỎ", toupper("OÒÓÔÕÖØŌŎŐƠǑǪǬỎ"))
|
||||||
|
call assert_equal("PṔṖ", toupper("PṔṖ"))
|
||||||
|
call assert_equal("Q", toupper("Q"))
|
||||||
|
call assert_equal("RŔŖŘṘṞ", toupper("RŔŖŘṘṞ"))
|
||||||
|
call assert_equal("SŚŜŞŠṠ", toupper("SŚŜŞŠṠ"))
|
||||||
|
call assert_equal("TŢŤŦṪṮ", toupper("TŢŤŦṪṮ"))
|
||||||
|
call assert_equal("UÙÚÛÜŨŪŬŮŰŲƯǓỦ", toupper("UÙÚÛÜŨŪŬŮŰŲƯǓỦ"))
|
||||||
|
call assert_equal("VṼ", toupper("VṼ"))
|
||||||
|
call assert_equal("WŴẀẂẄẆ", toupper("WŴẀẂẄẆ"))
|
||||||
|
call assert_equal("XẊẌ", toupper("XẊẌ"))
|
||||||
|
call assert_equal("YÝŶŸẎỲỶỸ", toupper("YÝŶŸẎỲỶỸ"))
|
||||||
|
call assert_equal("ZŹŻŽƵẐẔ", toupper("ZŹŻŽƵẐẔ"))
|
||||||
|
|
||||||
|
call assert_equal("Ⱥ Ⱦ", toupper("ⱥ ⱦ"))
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
22
src/testdir/test_lua.vim
Normal file
22
src/testdir/test_lua.vim
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
" Tests for Lua.
|
||||||
|
" TODO: move tests from test85.in here.
|
||||||
|
|
||||||
|
if !has('lua')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
func Test_luado()
|
||||||
|
new
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
luado vim.command("%d_")
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
" Check switching to another buffer does not trigger ml_get error.
|
||||||
|
new
|
||||||
|
let wincount = winnr('$')
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
luado vim.command("new")
|
||||||
|
call assert_equal(wincount + 1, winnr('$'))
|
||||||
|
bwipe!
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
@@ -24,3 +24,47 @@ function! Test_Incr_Marks()
|
|||||||
call assert_equal("XXX 123 123", getline(3))
|
call assert_equal("XXX 123 123", getline(3))
|
||||||
enew!
|
enew!
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
func Test_setpos()
|
||||||
|
new one
|
||||||
|
let onebuf = bufnr('%')
|
||||||
|
let onewin = win_getid()
|
||||||
|
call setline(1, ['aaa', 'bbb', 'ccc'])
|
||||||
|
new two
|
||||||
|
let twobuf = bufnr('%')
|
||||||
|
let twowin = win_getid()
|
||||||
|
call setline(1, ['aaa', 'bbb', 'ccc'])
|
||||||
|
|
||||||
|
" for the cursor the buffer number is ignored
|
||||||
|
call setpos(".", [0, 2, 1, 0])
|
||||||
|
call assert_equal([0, 2, 1, 0], getpos("."))
|
||||||
|
call setpos(".", [onebuf, 3, 3, 0])
|
||||||
|
call assert_equal([0, 3, 3, 0], getpos("."))
|
||||||
|
|
||||||
|
call setpos("''", [0, 1, 3, 0])
|
||||||
|
call assert_equal([0, 1, 3, 0], getpos("''"))
|
||||||
|
call setpos("''", [onebuf, 2, 2, 0])
|
||||||
|
call assert_equal([0, 2, 2, 0], getpos("''"))
|
||||||
|
|
||||||
|
" buffer-local marks
|
||||||
|
for mark in ["'a", "'\"", "'[", "']", "'<", "'>"]
|
||||||
|
call win_gotoid(twowin)
|
||||||
|
call setpos(mark, [0, 2, 1, 0])
|
||||||
|
call assert_equal([0, 2, 1, 0], getpos(mark), "for mark " . mark)
|
||||||
|
call setpos(mark, [onebuf, 1, 3, 0])
|
||||||
|
call win_gotoid(onewin)
|
||||||
|
call assert_equal([0, 1, 3, 0], getpos(mark), "for mark " . mark)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" global marks
|
||||||
|
call win_gotoid(twowin)
|
||||||
|
call setpos("'N", [0, 2, 1, 0])
|
||||||
|
call assert_equal([twobuf, 2, 1, 0], getpos("'N"))
|
||||||
|
call setpos("'N", [onebuf, 1, 3, 0])
|
||||||
|
call assert_equal([onebuf, 1, 3, 0], getpos("'N"))
|
||||||
|
|
||||||
|
call win_gotoid(onewin)
|
||||||
|
bwipe!
|
||||||
|
call win_gotoid(twowin)
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func Test_mksession()
|
|||||||
\ 'a<> <20> two multiByte characters',
|
\ 'a<> <20> two multiByte characters',
|
||||||
\ 'A<><41><EFBFBD> three mulTibyte characters'
|
\ 'A<><41><EFBFBD> three mulTibyte characters'
|
||||||
\ ])
|
\ ])
|
||||||
let tmpfile = tempname()
|
let tmpfile = 'Xtemp'
|
||||||
exec 'w! ' . tmpfile
|
exec 'w! ' . tmpfile
|
||||||
/^start:
|
/^start:
|
||||||
set wrap
|
set wrap
|
||||||
@@ -63,8 +63,8 @@ func Test_mksession()
|
|||||||
norm! j016|3zl
|
norm! j016|3zl
|
||||||
split
|
split
|
||||||
call wincol()
|
call wincol()
|
||||||
mksession! test_mks.out
|
mksession! Xtest_mks.out
|
||||||
let li = filter(readfile('test_mks.out'), 'v:val =~# "\\(^ *normal! 0\\|^ *exe ''normal!\\)"')
|
let li = filter(readfile('Xtest_mks.out'), 'v:val =~# "\\(^ *normal! 0\\|^ *exe ''normal!\\)"')
|
||||||
let expected = [
|
let expected = [
|
||||||
\ 'normal! 016|',
|
\ 'normal! 016|',
|
||||||
\ 'normal! 016|',
|
\ 'normal! 016|',
|
||||||
@@ -96,9 +96,18 @@ func Test_mksession()
|
|||||||
call assert_equal(expected, li)
|
call assert_equal(expected, li)
|
||||||
tabclose!
|
tabclose!
|
||||||
|
|
||||||
call delete('test_mks.out')
|
call delete('Xtest_mks.out')
|
||||||
call delete(tmpfile)
|
call delete(tmpfile)
|
||||||
let &wrap = wrap_save
|
let &wrap = wrap_save
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_mksession_winheight()
|
||||||
|
new
|
||||||
|
set winheight=10 winminheight=2
|
||||||
|
mksession! Xtest_mks.out
|
||||||
|
source Xtest_mks.out
|
||||||
|
|
||||||
|
call delete('Xtest_mks.out')
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
|||||||
@@ -82,6 +82,21 @@ function Test_perldo()
|
|||||||
1
|
1
|
||||||
call assert_false(search('\Cperl'))
|
call assert_false(search('\Cperl'))
|
||||||
bw!
|
bw!
|
||||||
|
|
||||||
|
" Check deleting lines does not trigger ml_get error.
|
||||||
|
new
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
perldo VIM::DoCommand("%d_")
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
" Check switching to another buffer does not trigger ml_get error.
|
||||||
|
new
|
||||||
|
let wincount = winnr('$')
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
perldo VIM::DoCommand("new")
|
||||||
|
call assert_equal(wincount + 1, winnr('$'))
|
||||||
|
bwipe!
|
||||||
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
function Test_VIM_package()
|
function Test_VIM_package()
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ func! ListMonths()
|
|||||||
if g:setting != ''
|
if g:setting != ''
|
||||||
exe ":set" g:setting
|
exe ":set" g:setting
|
||||||
endif
|
endif
|
||||||
let mth=copy(g:months)
|
let mth = copy(g:months)
|
||||||
let entered = strcharpart(getline('.'),0,col('.'))
|
let entered = strcharpart(getline('.'),0,col('.'))
|
||||||
if !empty(entered)
|
if !empty(entered)
|
||||||
let mth=filter(mth, 'v:val=~"^".entered')
|
let mth = filter(mth, 'v:val=~"^".entered')
|
||||||
endif
|
endif
|
||||||
call complete(1, mth)
|
call complete(1, mth)
|
||||||
return ''
|
return ''
|
||||||
@@ -468,7 +468,7 @@ endfunc
|
|||||||
" auto-wrap text.
|
" auto-wrap text.
|
||||||
func Test_completion_ctrl_e_without_autowrap()
|
func Test_completion_ctrl_e_without_autowrap()
|
||||||
new
|
new
|
||||||
let tw_save=&tw
|
let tw_save = &tw
|
||||||
set tw=78
|
set tw=78
|
||||||
let li = [
|
let li = [
|
||||||
\ '" zzz',
|
\ '" zzz',
|
||||||
@@ -478,8 +478,37 @@ func Test_completion_ctrl_e_without_autowrap()
|
|||||||
call feedkeys("A\<C-X>\<C-N>\<C-E>\<Esc>", "tx")
|
call feedkeys("A\<C-X>\<C-N>\<C-E>\<Esc>", "tx")
|
||||||
call assert_equal(li, getline(1, '$'))
|
call assert_equal(li, getline(1, '$'))
|
||||||
|
|
||||||
let &tw=tw_save
|
let &tw = tw_save
|
||||||
q!
|
q!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
function! DummyCompleteSix()
|
||||||
|
call complete(1, ['Hello', 'World'])
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" complete() correctly clears the list of autocomplete candidates
|
||||||
|
" See #1411
|
||||||
|
func Test_completion_clear_candidate_list()
|
||||||
|
new
|
||||||
|
%d
|
||||||
|
" select first entry from the completion popup
|
||||||
|
call feedkeys("a xxx\<C-N>\<C-R>=DummyCompleteSix()\<CR>", "tx")
|
||||||
|
call assert_equal('Hello', getline(1))
|
||||||
|
%d
|
||||||
|
" select second entry from the completion popup
|
||||||
|
call feedkeys("a xxx\<C-N>\<C-R>=DummyCompleteSix()\<CR>\<C-N>", "tx")
|
||||||
|
call assert_equal('World', getline(1))
|
||||||
|
%d
|
||||||
|
" select original text
|
||||||
|
call feedkeys("a xxx\<C-N>\<C-R>=DummyCompleteSix()\<CR>\<C-N>\<C-N>", "tx")
|
||||||
|
call assert_equal(' xxx', getline(1))
|
||||||
|
%d
|
||||||
|
" back at first entry from completion list
|
||||||
|
call feedkeys("a xxx\<C-N>\<C-R>=DummyCompleteSix()\<CR>\<C-N>\<C-N>\<C-N>", "tx")
|
||||||
|
call assert_equal('Hello', getline(1))
|
||||||
|
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
|||||||
24
src/testdir/test_python2.vim
Normal file
24
src/testdir/test_python2.vim
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
" Test for python 2 commands.
|
||||||
|
" TODO: move tests from test87.in here.
|
||||||
|
|
||||||
|
if !has('python')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
func Test_pydo()
|
||||||
|
" Check deleting lines does not trigger ml_get error.
|
||||||
|
py import vim
|
||||||
|
new
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
pydo vim.command("%d_")
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
" Check switching to another buffer does not trigger ml_get error.
|
||||||
|
new
|
||||||
|
let wincount = winnr('$')
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
pydo vim.command("new")
|
||||||
|
call assert_equal(wincount + 1, winnr('$'))
|
||||||
|
bwipe!
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
24
src/testdir/test_python3.vim
Normal file
24
src/testdir/test_python3.vim
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
" Test for python 2 commands.
|
||||||
|
" TODO: move tests from test88.in here.
|
||||||
|
|
||||||
|
if !has('python3')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
func Test_py3do()
|
||||||
|
" Check deleting lines does not trigger an ml_get error.
|
||||||
|
py3 import vim
|
||||||
|
new
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
py3do vim.command("%d_")
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
" Check switching to another buffer does not trigger an ml_get error.
|
||||||
|
new
|
||||||
|
let wincount = winnr('$')
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
py3do vim.command("new")
|
||||||
|
call assert_equal(wincount + 1, winnr('$'))
|
||||||
|
bwipe!
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
74
src/testdir/test_pyx2.vim
Normal file
74
src/testdir/test_pyx2.vim
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
" Test for pyx* commands and functions with Python 2.
|
||||||
|
|
||||||
|
set pyx=2
|
||||||
|
if !has('python')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:py2pattern = '^2\.[0-7]\.\d\+'
|
||||||
|
let s:py3pattern = '^3\.\d\+\.\d\+'
|
||||||
|
|
||||||
|
|
||||||
|
func Test_has_pythonx()
|
||||||
|
call assert_true(has('pythonx'))
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
func Test_pyx()
|
||||||
|
redir => var
|
||||||
|
pyx << EOF
|
||||||
|
import sys
|
||||||
|
print(sys.version)
|
||||||
|
EOF
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py2pattern, split(var)[0])
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
func Test_pyxdo()
|
||||||
|
pyx import sys
|
||||||
|
enew
|
||||||
|
pyxdo return sys.version.split("\n")[0]
|
||||||
|
call assert_match(s:py2pattern, split(getline('.'))[0])
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
func Test_pyxeval()
|
||||||
|
pyx import sys
|
||||||
|
call assert_match(s:py2pattern, split(pyxeval('sys.version'))[0])
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
func Test_pyxfile()
|
||||||
|
" No special comments nor shebangs
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/pyx.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py2pattern, split(var)[0])
|
||||||
|
|
||||||
|
" Python 2 special comment
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/py2_magic.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py2pattern, split(var)[0])
|
||||||
|
|
||||||
|
" Python 2 shebang
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/py2_shebang.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py2pattern, split(var)[0])
|
||||||
|
|
||||||
|
if has('python3')
|
||||||
|
" Python 3 special comment
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/py3_magic.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py3pattern, split(var)[0])
|
||||||
|
|
||||||
|
" Python 3 shebang
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/py3_shebang.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py3pattern, split(var)[0])
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
74
src/testdir/test_pyx3.vim
Normal file
74
src/testdir/test_pyx3.vim
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
" Test for pyx* commands and functions with Python 3.
|
||||||
|
|
||||||
|
set pyx=3
|
||||||
|
if !has('python3')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:py2pattern = '^2\.[0-7]\.\d\+'
|
||||||
|
let s:py3pattern = '^3\.\d\+\.\d\+'
|
||||||
|
|
||||||
|
|
||||||
|
func Test_has_pythonx()
|
||||||
|
call assert_true(has('pythonx'))
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
func Test_pyx()
|
||||||
|
redir => var
|
||||||
|
pyx << EOF
|
||||||
|
import sys
|
||||||
|
print(sys.version)
|
||||||
|
EOF
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py3pattern, split(var)[0])
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
func Test_pyxdo()
|
||||||
|
pyx import sys
|
||||||
|
enew
|
||||||
|
pyxdo return sys.version.split("\n")[0]
|
||||||
|
call assert_match(s:py3pattern, split(getline('.'))[0])
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
func Test_pyxeval()
|
||||||
|
pyx import sys
|
||||||
|
call assert_match(s:py3pattern, split(pyxeval('sys.version'))[0])
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
func Test_pyxfile()
|
||||||
|
" No special comments nor shebangs
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/pyx.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py3pattern, split(var)[0])
|
||||||
|
|
||||||
|
" Python 3 special comment
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/py3_magic.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py3pattern, split(var)[0])
|
||||||
|
|
||||||
|
" Python 3 shebang
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/py3_shebang.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py3pattern, split(var)[0])
|
||||||
|
|
||||||
|
if has('python')
|
||||||
|
" Python 2 special comment
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/py2_magic.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py2pattern, split(var)[0])
|
||||||
|
|
||||||
|
" Python 2 shebang
|
||||||
|
redir => var
|
||||||
|
pyxfile pyxfile/py2_shebang.py
|
||||||
|
redir END
|
||||||
|
call assert_match(s:py2pattern, split(var)[0])
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
@@ -32,3 +32,20 @@ func Test_ruby_evaluate_dict()
|
|||||||
redir END
|
redir END
|
||||||
call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
|
call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_rubydo()
|
||||||
|
" Check deleting lines does not trigger ml_get error.
|
||||||
|
new
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
rubydo Vim.command("%d_")
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
" Check switching to another buffer does not trigger ml_get error.
|
||||||
|
new
|
||||||
|
let wincount = winnr('$')
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
rubydo Vim.command("new")
|
||||||
|
call assert_equal(wincount + 1, winnr('$'))
|
||||||
|
bwipe!
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|||||||
@@ -94,10 +94,6 @@ function Test_tabpage()
|
|||||||
call assert_equal(7, tabpagenr())
|
call assert_equal(7, tabpagenr())
|
||||||
tabmove
|
tabmove
|
||||||
call assert_equal(10, tabpagenr())
|
call assert_equal(10, tabpagenr())
|
||||||
tabmove -20
|
|
||||||
call assert_equal(1, tabpagenr())
|
|
||||||
tabmove +20
|
|
||||||
call assert_equal(10, tabpagenr())
|
|
||||||
0tabmove
|
0tabmove
|
||||||
call assert_equal(1, tabpagenr())
|
call assert_equal(1, tabpagenr())
|
||||||
$tabmove
|
$tabmove
|
||||||
@@ -110,7 +106,16 @@ function Test_tabpage()
|
|||||||
call assert_equal(4, tabpagenr())
|
call assert_equal(4, tabpagenr())
|
||||||
7tabmove 5
|
7tabmove 5
|
||||||
call assert_equal(5, tabpagenr())
|
call assert_equal(5, tabpagenr())
|
||||||
|
call assert_fails("99tabmove", 'E16:')
|
||||||
|
call assert_fails("+99tabmove", 'E16:')
|
||||||
|
call assert_fails("-99tabmove", 'E16:')
|
||||||
call assert_fails("tabmove foo", 'E474:')
|
call assert_fails("tabmove foo", 'E474:')
|
||||||
|
call assert_fails("tabmove 99", 'E474:')
|
||||||
|
call assert_fails("tabmove +99", 'E474:')
|
||||||
|
call assert_fails("tabmove -99", 'E474:')
|
||||||
|
call assert_fails("tabmove -3+", 'E474:')
|
||||||
|
call assert_fails("tabmove $3", 'E474:')
|
||||||
|
1tabonly!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test autocommands
|
" Test autocommands
|
||||||
@@ -118,7 +123,6 @@ function Test_tabpage_with_autocmd()
|
|||||||
if !has('autocmd')
|
if !has('autocmd')
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
tabonly!
|
|
||||||
command -nargs=1 -bar C :call add(s:li, '=== ' . <q-args> . ' ===')|<args>
|
command -nargs=1 -bar C :call add(s:li, '=== ' . <q-args> . ' ===')|<args>
|
||||||
augroup TestTabpageGroup
|
augroup TestTabpageGroup
|
||||||
au!
|
au!
|
||||||
@@ -183,8 +187,10 @@ function Test_tabpage_with_autocmd()
|
|||||||
|
|
||||||
autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
|
autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
|
||||||
let s:li = []
|
let s:li = []
|
||||||
C tabnext 3
|
call assert_equal(3, tabpagenr('$'))
|
||||||
call assert_equal(['=== tabnext 3 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', '=== tabclose 3 ===', 'BufEnter', '=== tabclose 3 ==='], s:li)
|
C tabnext 2
|
||||||
|
call assert_equal(2, tabpagenr('$'))
|
||||||
|
call assert_equal(['=== tabnext 2 ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', '=== tabclose 3 ==='], s:li)
|
||||||
call assert_equal(['2/2'], [tabpagenr().'/'.tabpagenr('$')])
|
call assert_equal(['2/2'], [tabpagenr().'/'.tabpagenr('$')])
|
||||||
|
|
||||||
delcommand C
|
delcommand C
|
||||||
@@ -192,8 +198,7 @@ function Test_tabpage_with_autocmd()
|
|||||||
augroup! TabDestructive
|
augroup! TabDestructive
|
||||||
autocmd! TestTabpageGroup
|
autocmd! TestTabpageGroup
|
||||||
augroup! TestTabpageGroup
|
augroup! TestTabpageGroup
|
||||||
tabonly!
|
1tabonly!
|
||||||
bw!
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function Test_tabpage_with_tab_modifier()
|
function Test_tabpage_with_tab_modifier()
|
||||||
@@ -224,8 +229,223 @@ function Test_tabpage_with_tab_modifier()
|
|||||||
call assert_fails('-99tab help', 'E16:')
|
call assert_fails('-99tab help', 'E16:')
|
||||||
|
|
||||||
delfunction s:check_tab
|
delfunction s:check_tab
|
||||||
tabonly!
|
1tabonly!
|
||||||
bw!
|
endfunction
|
||||||
|
|
||||||
|
function Check_tab_count(pre_nr, cmd, post_nr)
|
||||||
|
exec 'tabnext' a:pre_nr
|
||||||
|
normal! G
|
||||||
|
exec a:cmd
|
||||||
|
call assert_equal(a:post_nr, tabpagenr(), a:cmd)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for [count] of tabnext
|
||||||
|
function Test_tabpage_with_tabnext()
|
||||||
|
for n in range(4)
|
||||||
|
tabedit
|
||||||
|
call setline(1, ['', '', '3'])
|
||||||
|
endfor
|
||||||
|
|
||||||
|
call Check_tab_count(1, 'tabnext', 2)
|
||||||
|
call Check_tab_count(1, '3tabnext', 3)
|
||||||
|
call Check_tab_count(1, '.tabnext', 1)
|
||||||
|
call Check_tab_count(1, '.+1tabnext', 2)
|
||||||
|
call Check_tab_count(2, '+tabnext', 3)
|
||||||
|
call Check_tab_count(2, '+2tabnext', 4)
|
||||||
|
call Check_tab_count(4, '-tabnext', 3)
|
||||||
|
call Check_tab_count(4, '-2tabnext', 2)
|
||||||
|
call Check_tab_count(3, '$tabnext', 5)
|
||||||
|
call assert_fails('0tabnext', 'E16:')
|
||||||
|
call assert_fails('99tabnext', 'E16:')
|
||||||
|
call assert_fails('+99tabnext', 'E16:')
|
||||||
|
call assert_fails('-99tabnext', 'E16:')
|
||||||
|
call Check_tab_count(1, 'tabnext 3', 3)
|
||||||
|
call Check_tab_count(2, 'tabnext +', 3)
|
||||||
|
call Check_tab_count(2, 'tabnext +2', 4)
|
||||||
|
call Check_tab_count(4, 'tabnext -', 3)
|
||||||
|
call Check_tab_count(4, 'tabnext -2', 2)
|
||||||
|
call Check_tab_count(3, 'tabnext $', 5)
|
||||||
|
call assert_fails('tabnext 0', 'E474:')
|
||||||
|
call assert_fails('tabnext .', 'E474:')
|
||||||
|
call assert_fails('tabnext -+', 'E474:')
|
||||||
|
call assert_fails('tabnext +2-', 'E474:')
|
||||||
|
call assert_fails('tabnext $3', 'E474:')
|
||||||
|
call assert_fails('tabnext 99', 'E474:')
|
||||||
|
call assert_fails('tabnext +99', 'E474:')
|
||||||
|
call assert_fails('tabnext -99', 'E474:')
|
||||||
|
|
||||||
|
1tabonly!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Test for [count] of tabprevious
|
||||||
|
function Test_tabpage_with_tabprevious()
|
||||||
|
for n in range(5)
|
||||||
|
tabedit
|
||||||
|
call setline(1, ['', '', '3'])
|
||||||
|
endfor
|
||||||
|
|
||||||
|
for cmd in ['tabNext', 'tabprevious']
|
||||||
|
call Check_tab_count(6, cmd, 5)
|
||||||
|
call Check_tab_count(6, '3' . cmd, 3)
|
||||||
|
call Check_tab_count(6, '8' . cmd, 4)
|
||||||
|
call Check_tab_count(6, cmd . ' 3', 3)
|
||||||
|
call Check_tab_count(6, cmd . ' 8', 4)
|
||||||
|
for n in range(2)
|
||||||
|
for c in ['0', '.+3', '+', '+2' , '-', '-2' , '$', '+99', '-99']
|
||||||
|
if n == 0 " pre count
|
||||||
|
let entire_cmd = c . cmd
|
||||||
|
let err_code = 'E16:'
|
||||||
|
else
|
||||||
|
let entire_cmd = cmd . ' ' . c
|
||||||
|
let err_code = 'E474:'
|
||||||
|
endif
|
||||||
|
call assert_fails(entire_cmd, err_code)
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
|
||||||
|
1tabonly!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function s:reconstruct_tabpage_for_test(nr)
|
||||||
|
let n = (a:nr > 2) ? a:nr - 2 : 1
|
||||||
|
1tabonly!
|
||||||
|
0tabedit n0
|
||||||
|
for n in range(1, n)
|
||||||
|
exec '$tabedit n' . n
|
||||||
|
if n == 1
|
||||||
|
call setline(1, ['', '', '3'])
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for [count] of tabclose
|
||||||
|
function Test_tabpage_with_tabclose()
|
||||||
|
|
||||||
|
" pre count
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
call Check_tab_count(3, 'tabclose!', 3)
|
||||||
|
call Check_tab_count(1, '3tabclose', 1)
|
||||||
|
call Check_tab_count(4, '4tabclose', 3)
|
||||||
|
call Check_tab_count(3, '1tabclose', 2)
|
||||||
|
call Check_tab_count(2, 'tabclose', 1)
|
||||||
|
call assert_equal(1, tabpagenr('$'))
|
||||||
|
call assert_equal('', bufname(''))
|
||||||
|
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
call Check_tab_count(2, '$tabclose', 2)
|
||||||
|
call Check_tab_count(4, '.tabclose', 4)
|
||||||
|
call Check_tab_count(3, '.+tabclose', 3)
|
||||||
|
call Check_tab_count(3, '.-2tabclose', 2)
|
||||||
|
call Check_tab_count(1, '.+1tabclose!', 1)
|
||||||
|
call assert_equal(1, tabpagenr('$'))
|
||||||
|
call assert_equal('', bufname(''))
|
||||||
|
|
||||||
|
" post count
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
call Check_tab_count(3, 'tabclose!', 3)
|
||||||
|
call Check_tab_count(1, 'tabclose 3', 1)
|
||||||
|
call Check_tab_count(4, 'tabclose 4', 3)
|
||||||
|
call Check_tab_count(3, 'tabclose 1', 2)
|
||||||
|
call Check_tab_count(2, 'tabclose', 1)
|
||||||
|
call assert_equal(1, tabpagenr('$'))
|
||||||
|
call assert_equal('', bufname(''))
|
||||||
|
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
call Check_tab_count(2, 'tabclose $', 2)
|
||||||
|
call Check_tab_count(4, 'tabclose', 4)
|
||||||
|
call Check_tab_count(3, 'tabclose +', 3)
|
||||||
|
call Check_tab_count(3, 'tabclose -2', 2)
|
||||||
|
call Check_tab_count(1, 'tabclose! +1', 1)
|
||||||
|
call assert_equal(1, tabpagenr('$'))
|
||||||
|
call assert_equal('', bufname(''))
|
||||||
|
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
for n in range(2)
|
||||||
|
for c in ['0', '$3', '99', '+99', '-99']
|
||||||
|
if n == 0 " pre count
|
||||||
|
let entire_cmd = c . 'tabclose'
|
||||||
|
let err_code = 'E16:'
|
||||||
|
else
|
||||||
|
let entire_cmd = 'tabclose ' . c
|
||||||
|
let err_code = 'E474:'
|
||||||
|
endif
|
||||||
|
call assert_fails(entire_cmd, err_code)
|
||||||
|
call assert_equal(6, tabpagenr('$'))
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
|
||||||
|
call assert_fails('3tabclose', 'E37:')
|
||||||
|
call assert_fails('tabclose 3', 'E37:')
|
||||||
|
call assert_fails('tabclose -+', 'E474:')
|
||||||
|
call assert_fails('tabclose +2-', 'E474:')
|
||||||
|
call assert_equal(6, tabpagenr('$'))
|
||||||
|
|
||||||
|
1tabonly!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Test for [count] of tabonly
|
||||||
|
function Test_tabpage_with_tabonly()
|
||||||
|
|
||||||
|
" Test for the normal behavior (pre count only)
|
||||||
|
let tc = [ [4, '.', '!'], [2, '.+', ''], [3, '.-2', '!'], [1, '.+1', '!'] ]
|
||||||
|
for c in tc
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
let entire_cmd = c[1] . 'tabonly' . c[2]
|
||||||
|
call Check_tab_count(c[0], entire_cmd, 1)
|
||||||
|
call assert_equal(1, tabpagenr('$'))
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Test for the normal behavior
|
||||||
|
let tc2 = [ [3, '', ''], [1, '3', ''], [4, '4', '!'], [3, '1', '!'],
|
||||||
|
\ [2, '', '!'],
|
||||||
|
\ [2, '$', '!'], [3, '+', '!'], [3, '-2', '!'], [3, '+1', '!']
|
||||||
|
\ ]
|
||||||
|
for n in range(2)
|
||||||
|
for c in tc2
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
if n == 0 " pre count
|
||||||
|
let entire_cmd = c[1] . 'tabonly' . c[2]
|
||||||
|
else
|
||||||
|
let entire_cmd = 'tabonly' . c[2] . ' ' . c[1]
|
||||||
|
endif
|
||||||
|
call Check_tab_count(c[0], entire_cmd, 1)
|
||||||
|
call assert_equal(1, tabpagenr('$'))
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Test for the error behavior
|
||||||
|
for n in range(2)
|
||||||
|
for c in ['0', '$3', '99', '+99', '-99']
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
if n == 0 " pre count
|
||||||
|
let entire_cmd = c . 'tabonly'
|
||||||
|
let err_code = 'E16:'
|
||||||
|
else
|
||||||
|
let entire_cmd = 'tabonly ' . c
|
||||||
|
let err_code = 'E474:'
|
||||||
|
endif
|
||||||
|
call assert_fails(entire_cmd, err_code)
|
||||||
|
call assert_equal(6, tabpagenr('$'))
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Test for the error behavior (post count only)
|
||||||
|
for c in tc
|
||||||
|
call s:reconstruct_tabpage_for_test(6)
|
||||||
|
let entire_cmd = 'tabonly' . c[2] . ' ' . c[1]
|
||||||
|
let err_code = 'E474:'
|
||||||
|
call assert_fails(entire_cmd, err_code)
|
||||||
|
call assert_equal(6, tabpagenr('$'))
|
||||||
|
endfor
|
||||||
|
|
||||||
|
call assert_fails('tabonly -+', 'E474:')
|
||||||
|
call assert_fails('tabonly +2-', 'E474:')
|
||||||
|
call assert_equal(6, tabpagenr('$'))
|
||||||
|
|
||||||
|
1tabonly!
|
||||||
|
new
|
||||||
|
only!
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
func Test_tabnext_on_buf_unload1()
|
func Test_tabnext_on_buf_unload1()
|
||||||
|
|||||||
23
src/testdir/test_tcl.vim
Normal file
23
src/testdir/test_tcl.vim
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
" Tests for the Tcl interface.
|
||||||
|
|
||||||
|
if !has('tcl')
|
||||||
|
finish
|
||||||
|
end
|
||||||
|
|
||||||
|
function Test_tcldo()
|
||||||
|
" Check deleting lines does not trigger ml_get error.
|
||||||
|
new
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
tcldo ::vim::command %d_
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
" Check switching to another buffer does not trigger ml_get error.
|
||||||
|
new
|
||||||
|
let wincount = winnr('$')
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
tcldo ::vim::command new
|
||||||
|
call assert_equal(wincount + 1, winnr('$'))
|
||||||
|
bwipe!
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
@@ -102,3 +102,107 @@ func Test_CmdUndefined()
|
|||||||
call assert_fails('Dothat', 'E492:')
|
call assert_fails('Dothat', 'E492:')
|
||||||
call assert_equal('yes', g:didnot)
|
call assert_equal('yes', g:didnot)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_CmdErrors()
|
||||||
|
call assert_fails('com! docmd :', 'E183:')
|
||||||
|
call assert_fails('com! \<Tab> :', 'E182:')
|
||||||
|
call assert_fails('com! _ :', 'E182:')
|
||||||
|
call assert_fails('com! X :', 'E841:')
|
||||||
|
call assert_fails('com! - DoCmd :', 'E175:')
|
||||||
|
call assert_fails('com! -xxx DoCmd :', 'E181:')
|
||||||
|
call assert_fails('com! -addr DoCmd :', 'E179:')
|
||||||
|
call assert_fails('com! -complete DoCmd :', 'E179:')
|
||||||
|
call assert_fails('com! -complete=xxx DoCmd :', 'E180:')
|
||||||
|
call assert_fails('com! -complete=custom DoCmd :', 'E467:')
|
||||||
|
call assert_fails('com! -complete=customlist DoCmd :', 'E467:')
|
||||||
|
call assert_fails('com! -complete=behave,CustomComplete DoCmd :', 'E468:')
|
||||||
|
call assert_fails('com! -nargs=x DoCmd :', 'E176:')
|
||||||
|
call assert_fails('com! -count=1 -count=2 DoCmd :', 'E177:')
|
||||||
|
call assert_fails('com! -count=x DoCmd :', 'E178:')
|
||||||
|
call assert_fails('com! -range=x DoCmd :', 'E178:')
|
||||||
|
|
||||||
|
com! -nargs=0 DoCmd :
|
||||||
|
call assert_fails('DoCmd x', 'E488:')
|
||||||
|
|
||||||
|
com! -nargs=1 DoCmd :
|
||||||
|
call assert_fails('DoCmd', 'E471:')
|
||||||
|
|
||||||
|
com! -nargs=+ DoCmd :
|
||||||
|
call assert_fails('DoCmd', 'E471:')
|
||||||
|
|
||||||
|
call assert_fails('com DoCmd :', 'E174:')
|
||||||
|
comclear
|
||||||
|
call assert_fails('delcom DoCmd', 'E184:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func CustomComplete(A, L, P)
|
||||||
|
return "January\nFebruary\nMars\n"
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func CustomCompleteList(A, L, P)
|
||||||
|
return [ "Monday", "Tuesday", "Wednesday" ]
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_CmdCompletion()
|
||||||
|
call feedkeys(":com -\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"com -addr bang bar buffer complete count nargs range register', @:)
|
||||||
|
|
||||||
|
call feedkeys(":com -nargs=0 -\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"com -nargs=0 -addr bang bar buffer complete count nargs range register', @:)
|
||||||
|
|
||||||
|
call feedkeys(":com -nargs=\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"com -nargs=* + 0 1 ?', @:)
|
||||||
|
|
||||||
|
call feedkeys(":com -addr=\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"com -addr=arguments buffers lines loaded_buffers quickfix tabs windows', @:)
|
||||||
|
|
||||||
|
call feedkeys(":com -complete=co\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"com -complete=color command compiler', @:)
|
||||||
|
|
||||||
|
command! DoCmd1 :
|
||||||
|
command! DoCmd2 :
|
||||||
|
call feedkeys(":com \<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"com DoCmd1 DoCmd2', @:)
|
||||||
|
|
||||||
|
call feedkeys(":DoC\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"DoCmd1 DoCmd2', @:)
|
||||||
|
|
||||||
|
call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"delcom DoCmd1 DoCmd2', @:)
|
||||||
|
|
||||||
|
delcom DoCmd1
|
||||||
|
call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"delcom DoCmd2', @:)
|
||||||
|
|
||||||
|
call feedkeys(":com DoC\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"com DoCmd2', @:)
|
||||||
|
|
||||||
|
delcom DoCmd2
|
||||||
|
call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"delcom DoC', @:)
|
||||||
|
|
||||||
|
call feedkeys(":com DoC\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"com DoC', @:)
|
||||||
|
|
||||||
|
com! -complete=behave DoCmd :
|
||||||
|
call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"DoCmd mswin xterm', @:)
|
||||||
|
|
||||||
|
" This does not work. Why?
|
||||||
|
"call feedkeys(":DoCmd x\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
"call assert_equal('"DoCmd xterm', @:)
|
||||||
|
|
||||||
|
com! -complete=custom,CustomComplete DoCmd :
|
||||||
|
call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"DoCmd January February Mars', @:)
|
||||||
|
|
||||||
|
com! -complete=customlist,CustomCompleteList DoCmd :
|
||||||
|
call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_equal('"DoCmd Monday Tuesday Wednesday', @:)
|
||||||
|
|
||||||
|
com! -complete=custom,CustomCompleteList DoCmd :
|
||||||
|
call assert_fails("call feedkeys(':DoCmd \<C-D>', 'tx')", 'E730:')
|
||||||
|
|
||||||
|
com! -complete=customlist,CustomComp DoCmd :
|
||||||
|
call assert_fails("call feedkeys(':DoCmd \<C-D>', 'tx')", 'E117:')
|
||||||
|
endfunc
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
Tests for Unicode manipulations vim: set ft=vim :
|
|
||||||
|
|
||||||
STARTTEST
|
|
||||||
:so small.vim
|
|
||||||
:set encoding=utf-8
|
|
||||||
:"
|
|
||||||
:" Visual block Insert adjusts for multi-byte char
|
|
||||||
:new
|
|
||||||
:call setline(1, ["aaa", "あああ", "bbb"])
|
|
||||||
:exe ":norm! gg0l\<C-V>jjIx\<Esc>"
|
|
||||||
:let r = getline(1, '$')
|
|
||||||
:"
|
|
||||||
:bwipeout!
|
|
||||||
:$put=r
|
|
||||||
:"
|
|
||||||
:" Test for built-in function strchars()
|
|
||||||
:for str in ["a", "あいa", "A\u20dd", "A\u20dd\u20dd", "\u20dd"]
|
|
||||||
: $put=strchars(str)
|
|
||||||
: $put=strchars(str, 0)
|
|
||||||
: $put=strchars(str, 1)
|
|
||||||
:endfor
|
|
||||||
:"
|
|
||||||
:" Test for customlist completion
|
|
||||||
:function! CustomComplete1(lead, line, pos)
|
|
||||||
: return ['あ', 'い']
|
|
||||||
:endfunction
|
|
||||||
:command -nargs=1 -complete=customlist,CustomComplete1 Test1 echo
|
|
||||||
:call feedkeys(":Test1 \<C-L>'\<C-B>$put='\<CR>", 'it')
|
|
||||||
:"
|
|
||||||
:function! CustomComplete2(lead, line, pos)
|
|
||||||
: return ['あたし', 'あたま', 'あたりめ']
|
|
||||||
:endfunction
|
|
||||||
:command -nargs=1 -complete=customlist,CustomComplete2 Test2 echo
|
|
||||||
:call feedkeys(":Test2 \<C-L>'\<C-B>$put='\<CR>", 'it')
|
|
||||||
:"
|
|
||||||
:function! CustomComplete3(lead, line, pos)
|
|
||||||
: return ['Nこ', 'Nん', 'Nぶ']
|
|
||||||
:endfunction
|
|
||||||
:command -nargs=1 -complete=customlist,CustomComplete3 Test3 echo
|
|
||||||
:call feedkeys(":Test3 \<C-L>'\<C-B>$put='\<CR>", 'it')
|
|
||||||
:"
|
|
||||||
:call garbagecollect(1)
|
|
||||||
:/^start:/,$wq! test.out
|
|
||||||
ENDTEST
|
|
||||||
|
|
||||||
start:
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
start:
|
|
||||||
axaa
|
|
||||||
xあああ
|
|
||||||
bxbb
|
|
||||||
1
|
|
||||||
1
|
|
||||||
1
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
2
|
|
||||||
2
|
|
||||||
1
|
|
||||||
3
|
|
||||||
3
|
|
||||||
1
|
|
||||||
1
|
|
||||||
1
|
|
||||||
1
|
|
||||||
Test1
|
|
||||||
Test2 あた
|
|
||||||
Test3 N
|
|
||||||
65
src/testdir/test_utf8.vim
Normal file
65
src/testdir/test_utf8.vim
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
" Tests for Unicode manipulations
|
||||||
|
if !has('multi_byte')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
" Visual block Insert adjusts for multi-byte char
|
||||||
|
func Test_visual_block_insert()
|
||||||
|
new
|
||||||
|
call setline(1, ["aaa", "あああ", "bbb"])
|
||||||
|
exe ":norm! gg0l\<C-V>jjIx\<Esc>"
|
||||||
|
call assert_equal(['axaa', 'xあああ', 'bxbb'], getline(1, '$'))
|
||||||
|
bwipeout!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for built-in function strchars()
|
||||||
|
func Test_strchars()
|
||||||
|
let inp = ["a", "あいa", "A\u20dd", "A\u20dd\u20dd", "\u20dd"]
|
||||||
|
let exp = [[1, 1, 1], [3, 3, 3], [2, 2, 1], [3, 3, 1], [1, 1, 1]]
|
||||||
|
for i in range(len(inp))
|
||||||
|
call assert_equal(exp[i][0], strchars(inp[i]))
|
||||||
|
call assert_equal(exp[i][1], strchars(inp[i], 0))
|
||||||
|
call assert_equal(exp[i][2], strchars(inp[i], 1))
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for customlist completion
|
||||||
|
function! CustomComplete1(lead, line, pos)
|
||||||
|
return ['あ', 'い']
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! CustomComplete2(lead, line, pos)
|
||||||
|
return ['あたし', 'あたま', 'あたりめ']
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! CustomComplete3(lead, line, pos)
|
||||||
|
return ['Nこ', 'Nん', 'Nぶ']
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
func Test_customlist_completion()
|
||||||
|
command -nargs=1 -complete=customlist,CustomComplete1 Test1 echo
|
||||||
|
call feedkeys(":Test1 \<C-L>\<C-B>\"\<CR>", 'itx')
|
||||||
|
call assert_equal('"Test1 ', getreg(':'))
|
||||||
|
|
||||||
|
command -nargs=1 -complete=customlist,CustomComplete2 Test2 echo
|
||||||
|
call feedkeys(":Test2 \<C-L>\<C-B>\"\<CR>", 'itx')
|
||||||
|
call assert_equal('"Test2 あた', getreg(':'))
|
||||||
|
|
||||||
|
command -nargs=1 -complete=customlist,CustomComplete3 Test3 echo
|
||||||
|
call feedkeys(":Test3 \<C-L>\<C-B>\"\<CR>", 'itx')
|
||||||
|
call assert_equal('"Test3 N', getreg(':'))
|
||||||
|
|
||||||
|
call garbagecollect(1)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Yank one 3 byte character and check the mark columns.
|
||||||
|
func Test_getvcol()
|
||||||
|
new
|
||||||
|
call setline(1, "x\u2500x")
|
||||||
|
normal 0lvy
|
||||||
|
call assert_equal(2, col("'["))
|
||||||
|
call assert_equal(4, col("']"))
|
||||||
|
call assert_equal(2, virtcol("'["))
|
||||||
|
call assert_equal(2, virtcol("']"))
|
||||||
|
endfunc
|
||||||
@@ -2102,7 +2102,9 @@ ex_function(exarg_T *eap)
|
|||||||
arg = skipwhite(skiptowhite(p));
|
arg = skipwhite(skiptowhite(p));
|
||||||
if (arg[0] == '<' && arg[1] =='<'
|
if (arg[0] == '<' && arg[1] =='<'
|
||||||
&& ((p[0] == 'p' && p[1] == 'y'
|
&& ((p[0] == 'p' && p[1] == 'y'
|
||||||
&& (!ASCII_ISALPHA(p[2]) || p[2] == 't'))
|
&& (!ASCII_ISALNUM(p[2]) || p[2] == 't'
|
||||||
|
|| ((p[2] == '3' || p[2] == 'x')
|
||||||
|
&& !ASCII_ISALPHA(p[3]))))
|
||||||
|| (p[0] == 'p' && p[1] == 'e'
|
|| (p[0] == 'p' && p[1] == 'e'
|
||||||
&& (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
|
&& (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
|
||||||
|| (p[0] == 't' && p[1] == 'c'
|
|| (p[0] == 't' && p[1] == 'c'
|
||||||
|
|||||||
@@ -764,6 +764,74 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
273,
|
||||||
|
/**/
|
||||||
|
272,
|
||||||
|
/**/
|
||||||
|
271,
|
||||||
|
/**/
|
||||||
|
270,
|
||||||
|
/**/
|
||||||
|
269,
|
||||||
|
/**/
|
||||||
|
268,
|
||||||
|
/**/
|
||||||
|
267,
|
||||||
|
/**/
|
||||||
|
266,
|
||||||
|
/**/
|
||||||
|
265,
|
||||||
|
/**/
|
||||||
|
264,
|
||||||
|
/**/
|
||||||
|
263,
|
||||||
|
/**/
|
||||||
|
262,
|
||||||
|
/**/
|
||||||
|
261,
|
||||||
|
/**/
|
||||||
|
260,
|
||||||
|
/**/
|
||||||
|
259,
|
||||||
|
/**/
|
||||||
|
258,
|
||||||
|
/**/
|
||||||
|
257,
|
||||||
|
/**/
|
||||||
|
256,
|
||||||
|
/**/
|
||||||
|
255,
|
||||||
|
/**/
|
||||||
|
254,
|
||||||
|
/**/
|
||||||
|
253,
|
||||||
|
/**/
|
||||||
|
252,
|
||||||
|
/**/
|
||||||
|
251,
|
||||||
|
/**/
|
||||||
|
250,
|
||||||
|
/**/
|
||||||
|
249,
|
||||||
|
/**/
|
||||||
|
248,
|
||||||
|
/**/
|
||||||
|
247,
|
||||||
|
/**/
|
||||||
|
246,
|
||||||
|
/**/
|
||||||
|
245,
|
||||||
|
/**/
|
||||||
|
244,
|
||||||
|
/**/
|
||||||
|
243,
|
||||||
|
/**/
|
||||||
|
242,
|
||||||
|
/**/
|
||||||
|
241,
|
||||||
|
/**/
|
||||||
|
240,
|
||||||
/**/
|
/**/
|
||||||
239,
|
239,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
11
src/vim.h
11
src/vim.h
@@ -1714,15 +1714,8 @@ typedef unsigned short disptick_T; /* display tick type */
|
|||||||
|
|
||||||
typedef void *vim_acl_T; /* dummy to pass an ACL to a function */
|
typedef void *vim_acl_T; /* dummy to pass an ACL to a function */
|
||||||
|
|
||||||
/*
|
#ifndef mch_memmove
|
||||||
* Include a prototype for mch_memmove(), it may not be in alloc.pro.
|
# define mch_memmove(to, from, len) memmove((char*)(to), (char*)(from), (size_t)(len))
|
||||||
*/
|
|
||||||
#ifdef VIM_MEMMOVE
|
|
||||||
void mch_memmove(void *, void *, size_t);
|
|
||||||
#else
|
|
||||||
# ifndef mch_memmove
|
|
||||||
# define mch_memmove(to, from, len) memmove(to, from, len)
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user