Compare commits

..

1670 Commits

Author SHA1 Message Date
cd94dd6bb2 NVIM v0.3.1
FEATURES:
07499a842b #8709 man.vim: C highlighting for EXAMPLES section
07f82ad1be #8699 TUI: urxvt: also send xterm focus-reporting seqs
40911e435e #8616 API: emit nvim_buf_lines_event from :terminal
c46997aa87 #8546 fillchars: Add "eob" flag

FIXES:
74d19f685f #8576 startup: avoid blank stdin buffer if other files were opened
4874214139 #8737 Only waitpid() for processes that we care about
cd6e7e8cf3 #8743 Check all child processes for exit in SIGCHLD handler
c230ef24a2 #8746 channel.c: Prevent channel_destroy_early() from freeing uninitialized rpc stuff
0ed8b12a07 #8681 transstr_buf: fix length comparison
d241f278d3 #8708 TUI: Fix standout mode
9afed40ea6 #8698 man.vim: fix for mandoc
e889640048 #8682 provider/node: npm --loglevel silent
1cbc830189 #8613 API: nvim_win_set_cursor: set curswant
bf6048e81d #8628 checkhealth: Python: fix VIRTUAL_ENV check
3cc3506965 #8528 checkhealth: node.js: also search yarn

CHANGES:
b7514493a0 #8619 defaults: shortmess+=F
12481781a0 #8578 highlight: high-priority CursorLine if fg is set.
01570f1ff3 #8726 terminal: handle &confirm and :confirm on unloading
56065bbdc6 #8721 screen: truncate showmode messages
bf2460e2f9 #7551 buffer: fix copying :setlocal options
c1c14faad9 #8520 Ex mode: always "improved" (gQ)
050f3975f6 #7992 options: remove 'maxcombine` option (always 6)

INTERNAL:
463da84806 #7992 screen: use UTF-8 representation
2018-07-18 13:44:59 +02:00
44b4f8c6e9 Merge #8679 from justinmk/doc 2018-07-18 13:42:07 +02:00
0615450688 gen_api_vimdoc.py: add whitespace before "~" 2018-07-18 13:38:06 +02:00
1999919c31 doc 2018-07-18 13:38:06 +02:00
cd6e7e8cf3 Merge pull request #8743 from dimbleby/multiple-children
Check all child processes for exit in SIGCHLD handler
2018-07-16 10:26:24 -04:00
dfe79b67a5 Merge pull request #8651 from MichaHoffmann/feature_refactor_channel
channel.c: refactor spaghetti code
2018-07-15 19:55:53 +02:00
c230ef24a2 Merge pull request #8746 from oni-link/fix.rpcstart2
Fix crash in channel_job_start() in combination with rpc and unknown command
2018-07-15 19:48:40 +02:00
099718ae6d dispatch.c: changed api_set_error_call 2018-07-15 12:12:03 +02:00
c180741189 channel.c: Prevent channel_destroy_early() from freeing uninitialized rpc stuff
Without this patch the following commands would crash:
    :call rpcstart('unknown_command')

    :set sh=unknown_command
    :call jobstart('ls',{'rpc':1})
2018-07-15 09:30:47 +02:00
dee2bf7b52 Check all child processes for exit in SIGCHLD handler
If a second and third child exit while we are already in the handler, we
will only see a single additional SIGCHLD.  Therefore the handler must
not stop after processing a single child but should check all children.

Fixes #8740
2018-07-14 14:18:34 +01:00
ed02278e42 channel.c: refactor spaghetti code
channel.c: WIP remove redundant method check and added FUNC_ATTR_NONNULL_ALL macro

channel.c channel_defs.h helpers.c: added Error field to RequestEvent, added no_op handler func

channel.c: use const char* instead of string and cleanup

channel.c; channel_defs.h; helpers.c: removed error from event again; send errors directly to the channel without using handlers and events

channel.c: fixed memory leak and lint errors

api/private/dispatch.c; api/vim.c; msgpack_rpc/channel.c msgpack_rpc/helpers.c added Error* field to msgpack_get_handler_for; further refactored channel.c

channel.c:323 changed order of evaluation in if statement

channel.c: removed superflous whitespace

dispatch.c: review comment
2018-07-14 11:47:18 +02:00
4874214139 Merge pull request #8737 from dimbleby/overly-general-waitpid
Only waitpid() for processes that we care about
2018-07-13 19:59:09 -04:00
fe913d7838 Only waitpid() for processes that we care about
It seems as though in an AppImage there's an extra child process that
dies at some early point, before we have set up a SIGCHLD handler.  So
when we later get a SIGCHLD from a child that we do care about,
waitpid(-1, ...) tells us about the extra child - and we don't notice
that the interesting child has exited.

Or something like that!

See also:

* https://patchwork.kernel.org/patch/9949491/ in which perf hit
something similar
* discussion at the AppImage repository:
https://github.com/AppImage/AppImageKit/issues/812#issuecomment-404662110.

Fix is to be explicit about which process we are waitpid()'ing for, so
we never need be distracted by children that we don't know about.

Fixes #8104
2018-07-13 20:56:04 +01:00
392817c2da vim-patch:8.0.0630: it is not easy to work on lines without a match (#8734)
Problem:    The :global command does not work recursively, which makes it
            difficult to execute a command on a line where one pattern matches
            and another does not match. (Miles Cranmer)
Solution:   Allow for recursion if it is for only one line. (closes vim/vim#1760)
f84b122a99
2018-07-13 21:14:46 +02:00
fc45c97829 Merge #8736 'vim-patch:8.0.0697: stable keymap.h' 2018-07-13 20:54:52 +02:00
eaf54132f9 keymap: add commented events to match 8.0.0697
KE_MOUSEMOVE, KE_CANCEL are added in later patches.
2018-07-13 11:43:05 -04:00
175297a23a tests: <SNR> is represented as 'R' (ASCII) 2018-07-12 20:26:54 -04:00
01570f1ff3 terminal: handle &confirm and :confirm on unloading (#8726)
Show a proper confirmation dialog when trying to unload a terminal buffer while
the confirm option is set or when :confirm is used.

Fixes https://github.com/neovim/neovim/issues/4651
2018-07-12 14:57:20 +02:00
56065bbdc6 Merge pull request #8721 from bfredl/quickresize
Fix redrawing issues with narrow screen and remove extra wait in resize tests
2018-07-12 12:21:11 +02:00
e51bffefa5 screen: truncate showmode messages
Before this, bottom of screen got messed up when modemsg (+ one extra
space to not force terminal scroll) didn't fit on one line.
2018-07-12 10:27:23 +02:00
798f05876c vim-patch:8.0.0{474,475,492,633,1251} (#8725)
* vim-patch:8.0.0474: the client-server feature is not tested

Problem:    The client-server feature is not tested.
Solution:   Add a test.
15bf76d40b

* vim-patch:8.0.0475: not enough testing for the client-server feature

Problem:    Not enough testing for the client-server feature.
Solution:   Add more tests.  Add the remote_startserver() function.  Fix that
            a locally evaluated expression uses function-local variables.
7416f3e73a

* vim-patch:8.0.0492: a failing client-server request can make Vim hang

Problem:    A failing client-server request can make Vim hang.
Solution:   Add a timeout argument to functions that wait.
81b9d0bd5c

Include src/nvim/testdir/test_clientserver.vim changes from
patches 8.0.0477, 8.0.0479.

* vim-patch:8.0.0633: the client-server test is still a bit flaky

Problem:    The client-server test is still a bit flaky.
Solution:   Wait a bit for the GUI to start.  Check that the version number
            can be obtained.
60964f6874

Include src/nvim/testdir/test_clientserver.vim changes
from patches 8.0.0507, 8.0.0511.

* vim-patch:8.0.1251: invalid expressin passed to WaitFor()

Problem:    Invalid expressin passed to WaitFor().
Solution:   Check if the variable exists.
d97fbf171e
2018-07-12 06:22:55 +02:00
671b244e6c Merge #8701 from janlazo/vim-8.0.1140 2018-07-12 05:24:21 +02:00
07499a842b man.vim: C highlighting for EXAMPLES section #8709 2018-07-12 01:13:52 +02:00
9adb6ed74a Merge pull request #8719 from jamessan/libuv-errno
test: Rename includes/pre/uv-errno.h to includes/pre/uv.h
2018-07-11 08:27:46 -04:00
38f0ac07b5 tests/screen.lua: treat "resize" like any other event
Saves ~10 seconds in UI tests
2018-07-11 12:57:01 +02:00
9f8bd77d7b test/includes: Use ${gen_cdefs} when pre-processing headers
Now that uv.h is directly being included, pre-processing of
test/includes/pre/uv.h fails on Linux with

    In file included from «SRCDIR»/neovim/test/includes/pre/uv.h:1:
    In file included from /usr/include/uv.h:62:
    /usr/include/uv/unix.h:72:11: fatal error: 'uv/pthread-barrier.h' file not found
    # include "uv/pthread-barrier.h"
              ^~~~~~~~~~~~~~~~~~~~~~
    1 error generated.

This happens because we're missing -D_GNU_SOURCE (part of ${gen_cdefs}),
which makes the pthread_barrier_* functionality visible.
2018-07-11 00:26:28 -04:00
ba7704ab4e test: Rename includes/pre/uv-errno.h to includes/pre/uv.h
libuv users are only supposed to directly include uv.h.  In v1.21.0, all
the uv-*.h headers were renamed to uv/*.h, which caused the unit tests
to fail with

    [123/125] Generating post/uv-errno.h
    FAILED: test/includes/post/uv-errno.h
    cd «SRCDIR»/src/neovim/build/test/includes && /usr/bin/clang -std=c99 -E -P «SRCDIR»/src/neovim/test/includes/pre/uv-errno.h -I/usr/include -I/usr/include -o «SRCDIR»/neovim/build/test/includes/post/uv-errno.h
    «SRCDIR»/src/neovim/test/includes/pre/uv-errno.h:1:10: error: 'uv-errno.h' file not found with <angled> include; use "quotes" instead
    #include <uv-errno.h>
             ^~~~~~~~~~~~
             "uv-errno.h"

The intention of the file is to extend libuv's error constants with more
values used by the unit tests.  This can just as easily be achieved
without poking into pseudo-private header files.
2018-07-11 00:26:07 -04:00
0fb695df8a vim-patch:8.0.0697: recorded key sequences may become invalid
Problem:    Recorded key sequences may become invalid.
Solution:   Add back KE_SNIFF removed in 7.4.1433. Use fixed numbers for the
            key_extra enum.
8858498516
2018-07-10 21:52:11 -04:00
ec6e78e77c Merge pull request #8716 from mhinz/vim-patch/wrapped-lines
[RFC] vim-patch.sh: handle wrapped commit messages
2018-07-10 20:12:14 -04:00
35b269f51f vim-patch.sh: Unwrap commit messages when reviewing PRs
Longer summary lines for commits may be wrapped when downloading the
commit from GitHub.  Unwrapping the lines ensures they can be compared
with the raw Vim commits.

The difference before and after this patch using:

  ./scripts/vim-patch.sh -r 8684

Before:

  ✘ Wrong commit message.
    Expected:
  vim-patch:8.0.1464: completing directory after :find does not add slash

  Problem:    Completing directory after :find does not add slash.
  Solution:   Adjust the flags for globpath(). (Genki Sky)
  vim/vim@8a37b03
    Actual:
  vim-patch:8.0.1464: completing directory after :find does not
   add slash

  Problem:    Completing directory after :find does not add slash.
  Solution:   Adjust the flags for globpath(). (Genki Sky)

After:

  ✔ Found expected commit message.

[ci skip]
2018-07-10 19:54:44 -04:00
a315026dc2 vim-patch:8.0.0522: Win32: clipboard=unnamed in :global (#8717)
Problem:    MS-Windows: when 'clipboard' is "unnamed" yyp does not work in a
            :global command.
Solution:   When setting the clipboard was postponed, do not clear the
            register.
3fcfa35f82
2018-07-11 00:15:09 +02:00
0ed8b12a07 transstr_buf: fix length comparison #8681
closes #8466
closes #8664
Regression by 0d7daaad98.

- Fix length comparison.
- Fix loop(s) which iterated over all fields of array `pcc` even if it
  was not filled up (try unicode 0x9f as statusline character).

Note about the tests:
- To input unicode with more than two hex digits you can use <C-v>U...:
  a + U+fe20: a︠
  a + U+fe20 + U+fe21: a︠︡
2018-07-10 21:57:26 +02:00
627cc1b3d8 test: build_stl_str_hl (#8703)
Improve coverage of `build_stl_str_hl`.
Minor removal of dead code in the tested function.
2018-07-10 20:46:40 +02:00
2574f299e5 vim-patch:8.0.1464: add slash when completing directory #8684
Problem:    Completing directory after :find does not add slash.
Solution:   Adjust the flags for globpath(). (Genki Sky)
8a37b03289
2018-07-10 19:33:18 +02:00
d241f278d3 Merge pull request #8708 from blueyed/fix-standout
Fix standout mode
2018-07-10 11:32:27 -04:00
13bdc21faf Merge pull request #8712 from jamessan/unicode-11
Update unicode files
2018-07-10 06:53:48 -04:00
7b2f6a7e5f Update unicode files 2018-07-10 06:53:11 -04:00
44a284d71c vim-patch.sh: review_commit: Fix regex for vim version
067bb1e9f changed the commit format to include a brief description in
the summary line of the commit.
2018-07-09 13:55:21 -04:00
56af2f8c5f vim-patch.sh: Use single quotes to avoid doubling backslashes 2018-07-09 13:51:13 -04:00
9afed40ea6 man.vim: fix for mandoc (#8698)
When giving a section, the first candidate selection was not performed.

followup/fixup #8341
2018-07-08 17:31:10 +02:00
07f82ad1be TUI: urxvt: also send xterm focus-reporting seqs #8699
urxvt supports the xterm sequence for focus reporting in master / CVS
since 2016 [1].

This has not been released yet, but is expected to be in 9.23.

In 3d0ee17 a special case for rxvt was added, which requires a custom
urxvt extension, see #7578.

Since urxvt 9.23 is not released still, and extensions for handling this
manually appear to be in use, this sends both escape sequences for rxvt.

Fixes https://github.com/neovim/neovim/issues/8695.

1: 75264fa544 (diff-2c8f5590ce4fa7495edcf7572c89c77b)
2018-07-08 17:27:09 +02:00
813563365c [WIP/RFC] Fix standout mode
It was not working for me in different terminals.

This patch makes it work in the same way like reverse.

Test:

    :hi jediUsage cterm=standout | hi jediUsage
2018-07-08 17:26:17 +02:00
21879247e7 vim-patch:8.0.1387: wordcount test is old style
Problem:    Wordcount test is old style.
Solution:   Change into a new style test. (Yegappan Lakshmanan, closes vim/vim#2434)
a703aaee4d
2018-07-07 23:36:03 -04:00
9836283c49 vim-patch:8.0.1022: test 80 is old style
Problem:    Test 80 is old style.
Solution:   Turn it into a new style test. (Yegappan Lakshmanan)
1a333bc44a
2018-07-07 22:59:30 -04:00
57fafcea23 Merge #8702 from janlazo/nvim-8.0.0654 2018-07-08 00:08:21 +02:00
378d5f0fa3 clint: use stdout for normal/expected output (#8700) 2018-07-08 00:02:27 +02:00
a5ed460241 tests: endfunc allows uncommented bar 2018-07-07 13:31:55 -04:00
0ac67853b9 vim-patch: finish port of 8.0.0{654,663,667}
Fix ex_function so that :endfunction passes the test.
Remove variables, added in 60c0252672.
2018-07-07 10:17:13 -04:00
b5c0031d4e oldtests: fix func Test_echo_and_string() 2018-07-07 07:14:06 -04:00
37757b4f09 vim-patch:8.0.1253: still too many old style tests
Problem:    Still too many old style tests.
Solution:   Convert a few more tests to new style. (Yegappan Lakshmanan,
            closes vim/vim#2272)
430dc5d360

Skip Test_tag_file_encoding.
083_tag_search_with_file_encoding_spec.lua handles the same test case.
2018-07-06 23:51:46 -04:00
41ccdb1ef2 vim-patch:8.0.1140: still old style tests
Problem:    Still old style tests.
Solution:   Convert two tests to new style. (Yegappan Lakshmanan)
bb3e6416f1
2018-07-06 22:32:45 -04:00
336ce02a6e vim-patch:8.0.0663: unexpected error with 'verbose' (#8692)
Problem:    Giving an error message only when 'verbose' set is unexpected.
Solution:   Give a warning message instead.
f8be461d02
2018-07-06 20:50:08 +02:00
2bfabd5bf8 Merge #8680 from janlazo/vim-8.0.0640 2018-07-04 19:23:56 +02:00
e889640048 provider/node: npm --loglevel silent (#8682)
closes #8674
npm log level may cause unexpected output.
2018-07-04 12:13:36 +02:00
297dc3f997 vim-patch:8.0.0686: extra redraw when using CTRL-L in second window
Problem:    When typing CTRL-L in a window that's not the first one, another
            redraw will happen later. (Christian Brabandt)
Solution:   Reset must_redraw after calling screenclear().
9f5f7bf4d5
2018-07-03 21:14:00 -04:00
a8071354e1 vim-patch:8.0.0640: mismatch between help and actual message
Problem:    Mismatch between help and actual message for ":syn conceal".
Solution:   Change the message to match the help. (Ken Takata)
83064068ea
2018-07-03 20:59:12 -04:00
bd51a0cd04 Merge #8672 'test: nvim_buf_attach after delay' 2018-07-02 23:32:28 +02:00
4a83b64777 coverity/166184: Null pointer dereference (FP)
False positive: should never happen, because unibi_from_env() would return
NULL if $TERM is undefined.
2018-07-02 20:56:37 +02:00
f65a751d82 test: nvim_buf_attach: reduce delay
This test is mostly a demo/reference for:
https://github.com/neovim/neovim/issues/8634#issuecomment-400940467
so let's not pay a 1s penalty.
2018-07-02 20:47:28 +02:00
b4fcf02316 test: nvim_buf_attach response after initial delay
ref #8634
2018-07-01 17:31:58 +02:00
60ef7889a2 test: buffer_updates: 10s timeout 2018-07-01 17:31:00 +02:00
ef9ef75a7b Merge #8635 from janlazo/vim-8.0.0252 2018-07-01 15:29:20 +02:00
22d95e462e coverity/108274: tty-test.c: Insecure data handling (#8666) 2018-07-01 14:48:30 +02:00
3e4a058b01 test: port kword_test to Lua for utf_char2bytes()
Use LuaJIT FFI to create char pointer.
Validate output with utf_ptr2char(), vim_iswordc() and vim_iswordp().
Use const for LuaJIT string-to-char conversion.
2018-07-01 08:45:19 -04:00
6ff892165a vim-patch:8.0.0252: not properly recognizing word characters between 128 and 255
Problem:    Characters below 256 that are not one byte are not always
            recognized as word characters.
Solution:   Make vim_iswordc() and vim_iswordp() work the same way. Add a test
            for this. (Ozaki Kiichi)
4019cf90b8
2018-07-01 08:45:13 -04:00
40911e435e API: emit nvim_buf_lines_event from :terminal #8616
closes #8575
2018-07-01 14:42:56 +02:00
70626e6a1e vim-patch:8.0.0593: DRY: setting list/dict return value (#8639)
Problem:    Duplication of code for adding a list or dict return value.
Solution:   Add rettv_dict_set() and rettv_list_set(). (Yegappan Lakshmanan)
45cf6e910c
2018-06-30 14:16:10 +02:00
d088331ea3 Merge pull request #8661 from jamessan/gen_api_vimdoc
gen_api_vimdoc: Make executable and change #! to python3
2018-06-29 21:08:16 -04:00
85d5bf81b9 gen_api_vimdoc: Make executable and change #! to python3 2018-06-29 18:46:05 -04:00
a98a1d10e3 Merge pull request #8656 from bfredl/wd_ls
ui: don't crash when 'writedelay' is set and redrawing inside an event handler
2018-06-29 15:27:25 +02:00
5efab06198 ui: don't crash when 'writedelay' is set and redrawing inside an event handler 2018-06-28 23:38:06 +02:00
12481781a0 highlight: high-priority CursorLine if fg is set. #8578
closes #7383
closes #7715

This implements the compromise described in #7383:
* low-priority CursorLine if foreground is not set
* high-priority ("same as Vim" priority) CursorLine if foreground is set

ref d1874ab282
ref 56eda2aa17
2018-06-28 01:49:40 +02:00
166aaf178c doc (#8652) 2018-06-28 00:48:17 +02:00
b40f87cdf5 Merge pull request #8650 from jamessan/skip-pydo-tests
oldtest: Disable tests that :py(3)do stop executing when buffer changes
2018-06-27 12:51:36 -04:00
363a232cb4 Merge #8645 from janlazo/vim-8.0.0677 2018-06-27 18:28:32 +02:00
9946a5ebd9 oldtest: Disable tests that :py(3)do stop executing when buffer changes
The current nvim <-> client handling of do_range needs to be adapted to
handle these sorts of checks.

See https://github.com/neovim/neovim/issues/8554
2018-06-27 08:03:46 -04:00
33eb5833b2 vim-patch:8.0.0688: cannot resize the window in a FileType autocommand
Problem:    Cannot resize the window in a FileType autocommand. (Ingo Karkat)
Solution:   Add the CMDWIN flag to :resize. (test by Ingo Karkat,
            closes vim/vim#1804)
9c4fefffb6
2018-06-26 10:21:39 -04:00
bfe029a11d vim-patch:8.0.0677: setting 'filetype' may switch buffers
Problem:    Setting 'filetype' internally may cause the current buffer and
            window to change unexpectedly.
Solution:   Set curbuf_lock. (closes vim/vim#1734)
1814183b86
2018-06-26 10:21:39 -04:00
da6874a7b2 API: nvim_win_set_cursor: set w_set_curswant #8640
This one behaves correctly eg in the presence of unicode.

ref #8613
2018-06-26 08:54:14 +02:00
cafb92487b Merge #8642 from janlazo/vim-8.0.0704 2018-06-26 08:14:09 +02:00
b79523681d vim-patch:8.0.0707: freeing wrong memory with certain autocommands
Problem:    Freeing wrong memory when manipulating buffers in autocommands.
            (James McCoy)
Solution:   Also set the w_s pointer if w_buffer was NULL.
f1d13478e3
2018-06-25 11:41:45 -04:00
fee4e39ca3 vim-patch:8.0.0706: crash when cancelling the cmdline window in Ex mode
Problem:    Crash when cancelling the cmdline window in Ex mode. (James McCoy)
Solution:   Do not set cmdbuff to NULL, make it empty.
5a15b6aa0a
2018-06-25 11:39:40 -04:00
b00211a551 vim-patch:8.0.0704: problems with autocommands when opening help
Problem:    Problems with autocommands when opening help.
Solution:   Avoid using invalid "varp" value.  Allow using :wincmd if buffer
            is locked. (closes vim/vim#1806, closes vim/vim#1804)
163095f088
2018-06-25 11:34:10 -04:00
cc0d50a2c2 Improved version of #8613
This one behaves correctly eg in the presence of unicode
2018-06-25 13:44:02 +01:00
1cbc830189 API: nvim_win_set_cursor: set curswant #8613
Fixes #8591
2018-06-25 02:14:55 +02:00
e475476d10 Merge #8621 from janlazo/vim-8.0.0642 2018-06-25 02:08:21 +02:00
7892192751 vim-patch:8.1.0107: getting buffer option clears message (#8637)
defe6424ae

Author: Bram Moolenaar <Bram@vim.org>
Date:   Sun Jun 24 15:14:07 2018 +0200

    patch 8.1.0107: Python: getting buffer option clears message

    Problem:    Python: getting buffer option clears message. (Jacob Niehus)
    Solution:   Don't use aucmd_prepbuf(). (closes #3079)
2018-06-24 22:27:32 +02:00
14b3741ec5 test: update writefile test for invalid list items
It validates list items with tv_check_str_on_nr()
to catch invalid types (ex. E745, E805).
If there is an invalid item, it does not write to the file.
2018-06-24 16:22:16 -04:00
47b26e8716 l10n: Update Ukrainian translation (#8622) 2018-06-24 22:19:21 +02:00
39e284772d vim-patch:8.0.0642: writefile() continues after detecting an error
Problem:    writefile() continues after detecting an error.
Solution:   Bail out as soon as an error is detected. (suggestions by Nikolai
            Pavlov, closes vim/vim#1476)
8cf91286ca
2018-06-24 16:19:21 -04:00
38fb835854 vim-patch:8.0.0548: saving the redo buffer only works one time (#8629)
Problem:    Saving the redo buffer only works one time, resulting in the "."
            command not working well for a function call inside another
            function call. (Ingo Karkat)
Solution:   Save the redo buffer at every user function call. (closes vim/vim#1619)
d4863aa99e
2018-06-24 22:16:57 +02:00
83be7cec98 vim-patch:8.0.0535: leak when exiting user function (#8574)
Problem:    Memory leak when exiting from within a user function.
Solution:   Clear the function call stack on exit.
6914c64ee5
2018-06-24 20:35:25 +02:00
89cb304ea0 vim-patch:8.0.0{538,539} (#8615)
* vim-patch:8.0.0538: no test for falling back to default term value

Problem:    No test for falling back to default term value.
Solution:   Add a test.
85045a73db

* vim-patch:8.0.0539: startup test fails on Mac

Problem:    Startup test fails on Mac.
Solution:   Use another term name, "unknown" is known. Avoid a 2 second delay.
08f88b139d

* oldtest: nvim does not support ':set term'
2018-06-24 20:23:33 +02:00
15bd936b96 win/deps: Fix copy to subdir (#8636)
The `external_blobs` target was not copying dependency files into
the correct subdirectories. This caused a bug where nvim-qt wouldn't
start because `qwindows.dll` was not located in the `platforms`
subdirectory.

closes https://github.com/equalsraf/neovim-qt/issues/422
2018-06-24 20:21:52 +02:00
3d688cc25d vim-patch:8.0.0627: "gn" selects only one character with 'nowrapscan' (#8632)
Problem:    When 'wrapscan' is off "gn" does not select the whole pattern when
            it's the last one in the text. (KeyboardFire)
Solution:   Check if the search fails. (Christian Brabandt, closes vim/vim#1683)
add8dce38d
2018-06-24 10:37:59 +02:00
bf6048e81d checkhealth: Python: fix VIRTUAL_ENV check (#8628)
Compare `$VIRTUAL_ENV` to `python_bin`.
This is necessary when `g:python_host_prog` is set to an absolute path,
and looking up `pyname` in `$PATH` yields another result.
2018-06-24 10:28:21 +02:00
ddde747644 vim-patch:8.0.0544: cppcheck warnings (#8627)
Problem:    Cppcheck warnings.
Solution:   Use temp variable. Change NUL to NULL. Swap conditions. (Dominique
            Pelle)
866c688610
2018-06-23 12:45:10 +02:00
7f7802e643 main: fix FALLTHROUGH hints (#8623)
GCC (Clang also?) does not recognize FALLTHROUGH comments when the
case is wrapped in braces.
2018-06-22 10:49:54 +02:00
bf2460e2f9 Merge pull request #7551 from bfredl/setl_bufwin
fix copying setl options for buffer currently displayed in another window
2018-06-22 09:53:46 +02:00
e1c6109e62 Merge #8618 'Replace b_changedtick with always-inline functions' 2018-06-22 08:35:28 +02:00
b7514493a0 defaults: shortmess+=F (#8619)
Because we default to laststatus=2 (statusline is always visible), the
:edit message is not useful.

ref #6289
2018-06-22 08:18:02 +02:00
ZyX
eaf2a25f12 *: Replace b_changedtick with new always-inline functions
Ref #8474
2018-06-22 00:44:31 +03:00
cf659a1926 Merge #8612 from janlazo/vim-8.0.0621 2018-06-21 22:54:08 +02:00
8917e0c301 buffer: fix copying setl options for buffer currently displayed in another window
vim-patch:8.0.1836: buffer-local window options may not be recent
Problem:    Buffer-local window options may not be recent if the buffer is
            still open in another window.
Solution:   Copy the options from the window instead of the outdated window
            options. (Bjorn Linse, closes vim/vim#2336)
25782a7ff4
2018-06-21 22:41:15 +02:00
10083ec4cc vim-patch:8.0.0648: possible use of NULL pointer
Problem:    Possible use of NULL pointer if buflist_new() returns NULL.
            (Coverity)
Solution:   Check for NULL pointer in set_bufref().
fadacf01d0
2018-06-21 12:50:31 -04:00
bf61885cb4 vim-patch:8.0.0621: :stag does not respect 'switchbuf'
Problem:    The ":stag" command does not respect 'switchbuf'.
Solution:   Check 'switchbuf' for tag commands that may open a new window.
            (Ingo Karkat, closes vim/vim#1681)  Define macros for the return values
            of getfile().
8ad80dea08
2018-06-21 12:50:30 -04:00
7ae7da8fb9 vim-patch:8.0.0468: g< after aborting an Ex command (#7941)
Problem:    After aborting an Ex command g< does not work. (Marcin
            Szamotulski)
Solution:   Postpone clearing scrollback messages to until the command line
            has been entered.  Also fix that the screen isn't redrawn if after
            g< the command line is cancelled.
f2405ed232
2018-06-21 11:36:26 +02:00
b92d6f490d vim-patch:8.0.{0632,1536} (#8609)
vim-patch:8.0.0632: the quotestar test is still a bit flaky
Problem:    The quotestar test is still a bit flaky.
Solution:   Kill any existing server to make the retry work.  Wait for the
            register to be filled.
1c13c0fe3e

vim-patch:8.0.1536: quotestar test is flaky when using the GUI
Problem:    Quotestar test is flaky when using the GUI.
Solution:   Add check that the star register arrived at the server.  Increase
            timeouts.
791010e648
2018-06-21 11:27:24 +02:00
52ebe34eeb vim-patch:8.0.0616: not always setting 'background' correctly after :hi Normal (#8606)
Problem:    When setting the cterm background with ":hi Normal" the value of
            'background' may be set wrongly.
Solution:   Check that the color is less than 16.  Don't set 'background' when
            it was set explicitly. (Lemonboy, closes vim/vim#1710)
1615b36b91

Restore reset_option_was_set(), removed in 419da839e0

ref #8595
ref #8597
2018-06-21 11:15:11 +02:00
8794a551bd vim-patch:8.0.0{469,581,583} (#8601)
vim-patch:8.0.0469: compiler warnings on MS-Windows
Problem:    Compiler warnings on MS-Windows.
Solution:   Add type casts. (Christian Brabandt)
0c0d4eca4d

vim-patch:8.0.0581: moving folded text is sometimes not correct
Problem:    Moving folded text is sometimes not correct.
Solution:   Bail out when "move_end" is zero. (Matthew Malcomson)
94be619e30

vim-patch:8.0.0583: fold test hangs on MS-Windows
Problem:    Fold test hangs on MS-Windows.
Solution:   Avoid overflow in compare.
b11c826ddc
2018-06-20 10:29:09 +02:00
b454d24e04 vim-patch:8.0.0669: CTRL-N at start of the buffer does not work correctly (#8600)
Problem:    In Insert mode, CTRL-N at start of the buffer does not work
            correctly. (zuloloxi)
Solution:   Wrap around the start of the buffer. (Christian Brabandt)
24a9e348aa
2018-06-20 08:17:00 +02:00
6e55c5997e vim-patch:8.0.0636: when reading the undo file fails may use uninitialized data (#8599)
Problem:    When reading the undo file fails may use uninitialized data.
Solution:   Always clear the buffer on failure.
56f2db562d
2018-06-20 02:29:51 +02:00
6294a807d3 Merge #8579 win: cmake: Improvements for building with IDEs 2018-06-20 02:19:42 +02:00
18710e7720 Merge #8596 from janlazo/vim-8.0.0615 2018-06-20 00:58:33 +02:00
b36aba9840 vim-patch:8.0.0551: the typeahead buffer is reallocated too often (#8598)
Problem:    The typeahead buffer is reallocated too often.
Solution:   Re-use the existing buffer if possible.
d34f9b1155
2018-06-20 00:56:55 +02:00
f389fea8fa Merge #8503 from janlazo/vim-8.0.0549 2018-06-20 00:54:25 +02:00
141df73930 vim-patch:8.0.0568: 1gd may hang
Problem:    "1gd" may hang.
Solution:   Don't get stuck in one position. (Christian Brabandt, closes vim/vim#1643)
60402d68da
2018-06-19 16:57:29 -04:00
14e70878c5 lint 2018-06-19 16:12:55 -04:00
3cc7462a0c vim-patch:8.0.0546: swap file exists briefly when opening the command window (#8588)
Problem:    Swap file exists briefly when opening the command window.
Solution:   Set the noswapfile command modifier before splitting the window.
            (James McCoy, closes vim/vim#1620)
3bab93998d
2018-06-19 21:22:34 +02:00
c1d7a28093 vim-patch:8.0.0549: no test for the 8g8 command
Problem:    No test for the 8g8 command.
Solution:   Add a test. (Dominique Pelle, closes vim/vim#1615)
395b6bab33
2018-06-19 15:16:44 -04:00
b479f89979 vim-patch:8.0.0617: hardcopy test hangs on MS-Windows
Problem:    Hardcopy test hangs on MS-Windows.
Solution:   Check the postscript feature is supported.
763209c57b
2018-06-19 15:10:17 -04:00
6d4d271694 vim-patch:8.0.0615: using % with :hardcopy wrongly escapes spaces
Problem:    Using % with :hardcopy wrongly escapes spaces. (Alexey Muranov)
Solution:   Expand % differently. (Christian Brabandt, closes vim/vim#1682)
bf15b8d78b
2018-06-19 15:08:43 -04:00
74d19f685f Merge #8576 from justinmk/startup-empty-stdin 2018-06-19 21:04:08 +02:00
a10938ae31 vim-patch:8.0.0537: illegal memory access with :z and large count (#8592)
Problem:    Illegal memory access with :z and large count.
Solution:   Check for number overflow, using long instead of int. (Dominique
            Pelle, closes vim/vim#1612)
fa0ad0bb0b
2018-06-19 20:35:37 +02:00
943e607442 Merge pull request #8593 from jamessan/vim-patch-printf-fix
vim-patch: Replace shell variables in printf with formatted args
2018-06-19 11:05:28 -04:00
c8af12d0fa vim-patch: Replace shell variables in printf with formatted args
This ensures that special characters in the variables are not
interpreted as escapes/format characters in the printf string, as was
seen with upstream patch 8.0.0615.

    $ ./scripts/vim-patch.sh -p 8.0.0615
    Updating Vim sources: /$HOME/src/neovim/.vim-src
    ✔ Updated Vim sources.
    ✔ Found Vim revision 'bf15b8d78b22661db8b19d662b62bb9a061cdd37'.
    Creating patch...
    Pre-processing patch...
    ✔ Saved patch to '/$HOME/src/neovim/vim-8.0.0615.patch'.

    Fetching 'origin/master'.
    ✔ From https://github.com/neovim/neovim
     * branch                master     -> FETCH_HEAD

    Creating new branch 'vim-8.0.0615' based on 'origin/master'.
    ✔ Switched to a new branch 'vim-8.0.0615'
    Branch 'vim-8.0.0615' set up to track remote branch 'master' from 'origin'.

    Creating empty commit with correct commit message.
    ./scripts/vim-patch.sh: line 40: printf: `w': invalid format character
    ✔ [vim-8.0.0615 db7fbb016] vim-patch:8.0.0615: using ./scripts/vim-patch.sh: line 44: printf: `w': invalid format character
    ✘ [vim-8.0.0615 db7fbb016] vim-patch:8.0.0615: using

[ci-skip]
2018-06-19 10:20:48 -04:00
63b5f05d47 vim-patch:8.0.0455: the mode test may hang (#8577)
Problem:    The mode test may hang in Test_mode(). (Michael Soyka)
Solution:   Set 'complete' to only search the current buffer (as suggested by
            Michael)
ffea8c99d9
2018-06-19 10:51:51 +02:00
3c24a6c317 vim-patch:8.0.0542: getpos() can return a negative line number (#8580)
Problem:    getpos() can return a negative line number. (haya14busa)
Solution:   Handle a zero topline and botline. (closes vim/vim#1613)
a1d5fa65bc
2018-06-19 10:50:52 +02:00
b148213366 vim-patch:8.0.0598: building with gcc 7.1 yields new warnings (#8585)
Problem:    Building with gcc 7.1 yields new warnings.
Solution:   Initialize result. (John Marriott)
9e0f6ec076
2018-06-19 10:48:25 +02:00
9500448220 Merge #8584 from janlazo/vim-8.0.0467 2018-06-19 10:46:47 +02:00
9625e9da75 startup: delete empty stdin buffer if other files were opened
DWIM: avoid empty buffer 1 when stdin was empty. If other files were
specified at startup, we assume that stdin is only accidentally
not-a-TTY: user did not intend to send text from it.

ref #8560
ref #8561
2018-06-18 21:51:42 +02:00
37675c6a87 Merge #8558 from jamessan/gnucxx-compiler-for-gnu-source
cmake: Check for GNU compiler, not Linux, to set -D_GNU_SOURCE
2018-06-18 20:37:39 +02:00
09cd4d0a43 use wchar_t instead of WCHAR #6998
wchar_t has better cross-platform support and seems to fix an issue
on MinGW when building with `-std=c99`.
2018-06-18 19:24:34 +02:00
d44ed79ccc startup: go to buffer 2 if stdin is empty
If stdin is not a TTY we read it into buffer 1, as text. But if the
stdin pipe is empty, Nvim was most likely invoked for some other reason.
DWIM: select buffer 2 (if it exists). Example:

    echo file1 | xargs nvim

closes #8560
closes #8561
ref https://github.com/equalsraf/neovim-qt/issues/417
2018-06-18 17:51:38 +02:00
84970bafd4 vim-patch:8.0.0547: extra line break in verbosefile
Problem:    Extra line break in verbosefile when using ":echomsg". (Ingo
            Karkat)
Solution:   Don't call msg_start(). (closes vim/vim#1618)
52604f2454
2018-06-18 08:38:29 -04:00
5d8594f636 vim-patch:8.0.0467: using g< after :for does not show the right output
Problem:    Using g< after :for does not show the right output. (Marcin
            Szamotulski)
Solution:   Call msg_sb_eol() in :echomsg.
57002ad70c
2018-06-18 08:37:05 -04:00
a26fd8a888 cmake: Prefer add_definitions() for setting preprocessor defines 2018-06-18 08:01:16 -04:00
863a87d5f3 cmake: Comply with new CMP0054 policy 2018-06-18 08:01:16 -04:00
23c9e3ec1e Raise minimum CMake version to 2.8.12 and remove compat code
2.8.12 is supported by our main CI targets and [repology] confirms that
this is broadly supported.

[repology]: https://repology.org/metapackage/cmake/information
2018-06-18 08:00:30 -04:00
25435a4bad cmake: Consolidate enabling of "undefined symbol" errors 2018-06-18 07:58:18 -04:00
33952c48bc cmake: Explicitly declare C as the project language
There's a mix of CXX and C related variables being set/referenced in our
CMake files.  Since we only use C, use an explicit language list of "C"
instead of the implicit "C CXX" and replace all uses of CXX variables
with their C counterparts
2018-06-18 07:58:18 -04:00
4938ee08e8 cmake: Check for GNU compiler, not Linux, to set -D_GNU_SOURCE
The Debian hurd-i386 [build] failed (partly) due to -D_GNU_SOURCE not be
defined:

    [215/286] /usr/bin/cc -DINCLUDE_GENERATED_DECLARATIONS -Iconfig -I../src -Isrc/nvim/auto -Iinclude -I/usr/include/luajit-2.1 -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -DDISABLE_LOG -Wdate-time -D_FORTIFY_SOURCE=2 -Wconversion -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -O2 -g  -DMIN_LOG_LEVEL=3 -Og -g   -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -Wno-array-bounds -MD -MT src/nvim/CMakeFiles/nvim.dir/os/pty_process_unix.c.o -MF src/nvim/CMakeFiles/nvim.dir/os/pty_process_unix.c.o.d -o src/nvim/CMakeFiles/nvim.dir/os/pty_process_unix.c.o   -c ../src/nvim/os/pty_process_unix.c
    ../src/nvim/os/pty_process_unix.c: In function 'pty_process_tty_name':
    ../src/nvim/os/pty_process_unix.c:121:10: warning: implicit declaration of function 'ptsname'; did you mean 'ttyname'? [-Wimplicit-function-declaration]
       return ptsname(ptyproc->tty_fd);

Hurd is obviously not Linux, but it is using a GNU compiler and glibc so
it needs -D_GNU_SOURCE for the ptsname() definition to be visible.

[build]: https://buildd.debian.org/status/fetch.php?pkg=neovim&arch=hurd-i386&ver=0.3.0-2&stamp=1528981349&raw=0
2018-06-18 07:58:18 -04:00
66a39fce6c Merge #8502 from janlazo/vim-8.0.0481 2018-06-17 23:52:55 +02:00
c1c14faad9 Merge #8520 'Ex mode: always "improved" (gQ)' 2018-06-17 23:19:59 +02:00
7097aba6be cmake: Organize targets into folders
Enabling CMake's USE_FOLDERS option and adding the FOLDER property to
targets allows some IDEs to list the targets in an organized
hierarchy of folders.
2018-06-17 07:54:39 -05:00
487cf98c0b startup: fix -E/-Es without -u NONE
Before this change, -E/-Es without `-u NONE` reads stdin as Ex commands.
It should always read stdin as text (into buffer 1), like this:

    echo foo | nvim -Es +'%p'
    foo
    echo foo | nvim -Es -u NORC +'%p'
    foo
2018-06-17 14:50:53 +02:00
9c2099d585 Ex mode: use getexline() instead of getexmodeline()
This changes Ex mode (Q, -e) to work like Vim's "improved Ex mode"
(gQ, -E).  That brings some small behavior differences, but should not
impact most Ex scripts (unless, for example, they depend on mappings
being disabled--but that can be solved for -e by skipping user config).

Before this change:
* the screen test hangs.

After this change:
* Q acts like gQ.
* -e/-es differs from -E/-Es only in its treatment of stdin.

This moves towards potentially removing getexmodeline().
(HINT: That does NOT mean "removing Ex mode", it means removing the
Vi-compatible Ex mode, which differs from Vim's "improved Ex mode" only
in some minor details (e.g. mappings are disabled).)

ref #1089 :-)~
2018-06-17 14:50:53 +02:00
3cc3506965 checkhealth: node.js: also search yarn #8528
- "neovim" package may be installed with yarn. Check yarn if npm fails.
- Use filereadable() instead of glob(). closes #8552
2018-06-17 13:05:55 +02:00
8192267dea vim-patch:8.0.0609: some people still don't know how to quit (#8571)
Problem:    For some people the hint about quitting is not sufficient.
Solution:   Put <Enter> separately.  Also use ":qa!" to get out even when
            there are changes.
28a8193e31
2018-06-17 12:51:03 +02:00
367343ae6e vim-patch:8.0.0625: shellescape() always escapes a newline (#8573)
Problem:    shellescape() always escapes a newline, which does not work with
            some shells. (Harm te Hennepe)
Solution:   Only escape a newline when the "special" argument is non-zero.
            (Christian Brabandt, closes vim/vim#1590)
206155280d
2018-06-17 12:20:42 +02:00
b006771cba Merge #8570 'gen_events.lua: define NUM_EVENTS as enum' 2018-06-16 19:57:28 +02:00
a503349e20 Merge #8569 from janlazo/vim-8.0.0602 2018-06-16 18:24:54 +02:00
26dc628ab3 Merge #8567 from ckelsel/vim-8.0.0530 2018-06-16 18:21:14 +02:00
de022d2570 vim-patch:8.0.0604: gF test fails still on MS-Windows
Problem:    gF test fails still on MS-Windows.
Solution:   Use : before the line number and remove it from 'isfname'.
712598f210
2018-06-16 11:37:13 -04:00
0d3557ad72 vim-patch:8.0.0603: gF test fails on MS-Windows
Problem:    gF test fails on MS-Windows.
Solution:   Use @ instead of : before the line number
d7aca7a71c
2018-06-16 11:37:13 -04:00
440c33343d vim-patch:8.0.0602: when gF fails to edit the file the cursor still moves
Problem:    When gF fails to edit the file the cursor still moves to the found
            line number.
Solution:   Check the return value of do_ecmd(). (Michael Hwang)
2a79ed293c
2018-06-16 11:37:12 -04:00
dd2e1e9445 syntax: refactor syn_finish_line to return bool 2018-06-16 10:22:20 -04:00
2add88eedc vim-patch:8.0.0481: unnecessary if statement
Problem:    Unnecessary if statement.
Solution:   Remove the statement.  Fix "it's" vs "its" mistakes. (Dominique
            Pelle, closes vim/vim#1568)
aab93b12cb
2018-06-16 10:20:18 -04:00
33596d5d07 fix lint 2018-06-16 19:46:41 +08:00
bbf00120f7 vim-patch:8.0.0545: edit test may fail on some systems
Problem:    Edit test may fail on some systems.
Solution:   If creating a directory with a very long path fails, bail out.
15ecbd6f3d
2018-06-16 19:43:01 +08:00
3ff1907593 vim-patch:8.0.0543: test_edit causes older xfce4-terminal to close
Problem:    Test_edit causes older xfce4-terminal to close. (Dominique Pelle)
Solution:   Reduce number of columns to 2000.  Try to restore the window
            position.
ba6ec18297
2018-06-16 19:41:58 +08:00
264725c25f vim-patch:8.0.0532: test with long directory name fails on Mac
Problem:    Test with long directory name fails on Mac.
Solution:   Skip the test on Mac systems.
c77d675747
2018-06-16 19:41:18 +08:00
9a1234e57f vim-patch:8.0.0531: test with long directory name fails on non-unix systems
Problem:    Test with long directory name fails on non-unix systems.
Solution:   Skip the test on non-unix systems.
9b81079ddd
2018-06-16 19:40:46 +08:00
ebc7f69d92 vim-patch:8.0.0530: buffer overflow when 'columns' is very big
Problem:    Buffer overflow when 'columns' is very big. (Nikolai Pavlov)
Solution:   Correctly compute where to truncate.  Fix translation.
            (closes vim/vim#1600)
658a3a2caf
2018-06-16 19:39:40 +08:00
eeeaf04c5e Merge #8565 from janlazo/vim-8.0.0575 2018-06-16 12:42:05 +02:00
4bb039e225 Merge #8543 from janlazo/vim-8.0.0596 2018-06-16 12:01:09 +02:00
4c3c04d03c Merge #8526 from janlazo/vim-8.0.0451 2018-06-16 11:55:40 +02:00
f4dffe7181 vim-patch:8.0.0577: warning for uninitialized variable
Problem:    Warning for uninitialized variable. (John Marriott)
Solution:   Initialize "indent".
97db5541a6
2018-06-16 00:37:37 -04:00
9ab6fe4fed vim-patch:8.0.0575: using freed memory when resetting 'indentexpr'
Problem:    Using freed memory when resetting 'indentexpr' while evaluating
            it. (Dominique Pelle)
Solution:   Make a copy of 'indentexpr'.
a701b3b6f0
2018-06-16 00:37:37 -04:00
1cc3b32f4c build/test: skip empty TEST_TAG, TEST_FILTER
- Empty "--tags=", "--filter=" prevents TEST_FILE from running.
- Fix another bug: TEST_FILTER overwrote TEST_TAG.
2018-06-16 02:12:35 +02:00
2a274cbe30 gen_events.lua: define NUM_EVENTS as an enum value
Fix PVS warnings:

    fileio.c:7293   Medium  V547    Expression is always true.
    fileio.c:7351   Medium  V547    Expression 'event == 100' is always false.

event_name2nr returns event_T, so PVS infers that nothing outside of
that range could possibly be returned.
2018-06-16 01:57:30 +02:00
c990d65c37 get_maphash: fix off-by-one
Patch-by: oni-link <knil.ino@gmail.com>

ref: https://github.com/neovim/neovim/pull/6236#discussion_r195113807
2018-06-14 19:00:37 +02:00
c46997aa87 Merge pull request #8546 from bfredl/eob
Add fillchar for EndOfBuffer and check for invalid UTF-8
2018-06-14 18:00:59 +02:00
f39a0f5dd0 build/win: Add workaround for Windows command length limit
When building with the Ninja generator on Windows, it was possible for
the external_blobs target to fail when the generated command exceeds the
command length limit (8191 characters). To workaround the problem, a
CMake script is used to copy the files instead of a shell command.

Visual Studio bug report:
https://developercommunity.visualstudio.com/content/problem/212207/file-open-cmake-the-command-line-is-too-long.html
2018-06-14 09:34:18 -05:00
f27a665e05 Merge pull request #8549 from jamessan/output_spec-printf
functionaltest: Use octal escapes for printf
2018-06-14 08:06:38 -04:00
5442f0b622 fillchars: make checks more strict and improve tests 2018-06-14 14:00:09 +02:00
6c0f1903e6 functionaltest: Use octal escapes for printf
According to POSIX[0], only octal escapes are supported by the printf
command.  GNU coreutils' printf and some shells' builtin printf versions
which support hex escapes, but dash and non-GNU printf do not.

[0]: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html
2018-06-13 23:03:37 -04:00
a7bb63c55d Add ‘eob’ option to fillchars
This option allows configuring what character is shown on the empty
lines at the end of a buffer, previously hardcoded to ‘~’
2018-06-13 17:54:16 +02:00
3462acbbff lint 2018-06-13 07:10:17 -04:00
463da84806 Merge pull request #7992 from bfredl/mbscreen
Represent Screen state as UTF-8
2018-06-13 11:11:12 +02:00
f4ba20d1c0 Fix implicit conversion warning (#8536) 2018-06-13 10:48:29 +02:00
050f3975f6 options: remove 'maxcombine` option (always use 6) 2018-06-13 10:11:35 +02:00
d8e18c96a9 screen: use UTF-8 representation
Store text in ScreenLines as UTF-8, so it can be sent as-is to the UI
layer. `utfc_char2bytes(off,buf)` is removed, as `ScreenLines[off]` now
already contains this representation.

To recover the codepoints that the screen arrays previously contained, use
utfc_ptr2char (or utf_ptr2char to ignore composing chars).

NB: This commit does NOT change how screen.c processes incoming UTF-8 data
from buffers, cmdline, messages etc. Any algorithm that operates on UCS-4
(like arabic shaping, treatment of non-printable chars)
is left unchanged for now.
2018-06-13 10:11:11 +02:00
3e0188e92d vim-patch:8.0.0596: crash when complete() called after complete_add()
Problem:    Crash when complete() is called after complete_add() in
            'completefunc'. (Lifepillar)
Solution:   Bail out if compl_pattern is NULL. (closes vim/vim#1668)
            Also avoid using freed memory.
4475b62396
2018-06-13 00:18:50 -04:00
315b7f8632 test/ui: doublewidth rendering. multibyte and cmdwin chars in folded lines (#8534) 2018-06-12 17:57:47 +02:00
40a257e11f Revert "makedeps.bat" 2018-06-12 08:47:16 -05:00
f419f914fc charset: include option_defs.h for breakat_flags 2018-06-12 09:34:10 -04:00
f52ace459a doc 2018-06-12 09:18:25 +02:00
3c7ea8d619 vim-patch:8.0.0451: some macros are in lower case
Problem:    Some macros are in lower case.
Solution:   Make a few more macros upper case. Avoid lower case macros use an
            argument twice.
91acfffc1e
2018-06-12 02:00:50 -04:00
fa2ad305e3 version bump 2018-06-11 10:58:54 +02:00
44c6deb91a NVIM v0.3.0
FEATURES:
3cc7ebf810 #7234 built-in VimL expression parser
6a7c904648 #4419 implement <Cmd> key to invoke command in any mode
b8363283fa #7679 'startup: treat stdin as text instead of commands'
58b210e114 :digraphs : highlight with hl-SpecialKey #2690
7a13611ba2 #8276 'startup: Let `-s -` read from stdin'
1e71978cf0 events: VimSuspend, VimResume #8280
1e7d5e8cdf #6272 'stdpath()'
f96d99ad11 #8247 server: introduce --listen
e8c39f72fd #8226 insert-mode: interpret unmapped META as ESC
98e7112390 msg: do not scroll entire screen (#8088)
f72630b784 #8055 let negative 'writedelay' show all redraws
5d2dd2ebe2 win: has("wsl") on Windows Subsystem for Linux #7330
a4f6cec7a3 cmdline: CmdlineEnter and CmdlineLeave autocommands (#7422)
207b7ca4bc #6844 channels: support buffered output and bytes sockets/stdio

API:
f85cbea725 #7917 API: buffer updates
418abfc9d0 #6743 API: list information about all channels/jobs.
36b2e3f743 #8375 API: nvim_get_commands
273d2cd5d5 #8329 API: Make nvim_set_option() update `:verbose set …`
8d40b3617c #8371 API: more reliable/descriptive VimL errors
ebb1acb3c0 #8353 API: nvim_call_dict_function
9f994bb699 #8004 API: nvim_list_uis
34057045be #7520 API/UI: forward option updates to UIs
911b1e49ab #7821 API: improve nvim_command_output

WINDOWS OS:
9cefd83cc7 #8084, #8516 build/win: support MSVC
ee4e1fd8ec win: Fix reading content from stdin (#8267)

TUI:
ffb8904913 #8309 TUI: add support for mouse release events in urxvt
8d5a46e77b #8081 TUI: implement "standout" attribute
60716371e9 TUI: support TERM=konsole-256color
67848c0b91 #7653 TUI: report TUI info with -V3 ('verbose' >= 3)
3d0ee17c91 TUI/rxvt: enable focus-reporting
d109f5645b #7640 TUI: 'term' option: reflect effective terminal behavior

FIXES:
ed6a113804 #8273 'job-control: avoid kill-timer race'
4e02f1ab87 #8107 'jobs: separate process-group'
451c48a092 terminal: flush vterm output buffer on pty output #8486
5d6732ff09 :checkhealth fixes #8335
53f11dcfc7 #8218 'Fix errors reported by PVS'
d05712fbe7 inccommand: pause :terminal redraws (#8307)
51af911a27 inccommand: do not execute trailing commands #8256
84359a467f terminal: resize to the max dimensions (#8249)
d49c1dda8b #8228 Make vim_fgets() return the same values as in Vim
60e96a45b4 screen: winhl=Normal:Background should not override syntax (#8093)
0c59ac1a2c #5908 'shada: Also save numbered marks'
ba87a2cde7 cscope: ignore EINTR while reading the prompt (#8079)
b1412dc412 #7971 ':terminal Enter/Leave should not increment jumplist'
3a5721e91b TUI: libtermkey: force CSI driver for mouse input #7948
6ff13d78b7 #7720 TUI: faster startup
1c6e956079 #7862 TUI: fix resize-related segfaults
a58c9094db #7676 TUI: always hide cursor when flushing, never flush buffers during unibilium output
303e1df13f #7624 TUI: disable BCE almost always
249bdb07dd #7761 mark: Make sure that jumplist item will not have zero lnum
6f41ce0260 #7704 macOS: Set $LANG based on the system locale
a043899ba2 #7633 'Retry fgets on EINTR'

CHANGES:
ad60927d09 #8304 default to 'nofsync'
f3f1970597 #8035 defaults: 'fillchars'
a6052c7307 #7984 defaults: sidescroll=1
b69fa866db #7888 defaults: enable cscopeverbose
7c4bb23ff3 defaults: do :filetype stuff unless explicitly "off"
2aa308c685 #5658 'Apply :lmap in macros'
8ce6393048 terminal: Leave 'relativenumber' alone (#8360)
e46534b423 #4486 refactor: Remove maxmem, maxmemtot options
131aad953c win: defaults: 'shellcmdflag', 'shellxquote' #7343
c57d315963 #8031 jobwait(): return -2 on interrupt also with timeout
6452831cf9 clipboard: macOS: fallback to tmux if pbcopy is broken #7940
300d3651e2 #7919 Make 'langnoremap' apply directly after a map
ada1956206 #7880 'lua/executor: Remove lightuserdata'

INTERNAL:
de0a9548f7 #7806 internal statistics for list impl
dee78a4095 #7708 rewrite internal list impl
2018-06-11 00:46:49 +02:00
fe5675ba0a Merge #8523 from justinmk/doc 2018-06-11 00:36:57 +02:00
feaefdfba2 doc: API 2018-06-11 00:20:39 +02:00
51961da511 doc/man: mention $NVIM_LOG_FILE
closes #8043
2018-06-11 00:16:15 +02:00
f72f638f97 doc: job/channel, misc #7783
doc: termios defaults. ref #6992
doc: :help shell-powershell
doc: provider: Python minimum version is 2.7, 3.4
doc: remove :!start special-case. #5844
doc: mention #7917 change which accepts empty Array for Dictionary parameter
doc: <Cmd> pseudokey
doc: lmap change #5658
doc: -s, -es
2018-06-11 00:08:27 +02:00
c69ea3b4b8 checkhealth: fix nodejs provider advice (#8522)
closes #8515
2018-06-10 20:09:10 +02:00
61890382eb deps: Build bundled dependencies automatically for IDEs
Environment variables are used to detect when the project is being built
from within Clion or Visual Studio, so that the build process can be
simplified by automatically building the bundled dependencies for them.
2018-06-10 09:57:12 -05:00
dc5fdbc758 test: fix startup_spec
This behavior was changed (improved) by 5861dc5966 which actually
makes -E more faithful to Vim's behavior.
2018-06-10 16:27:13 +02:00
0191061e34 deps: bump lua client 2018-06-10 16:11:49 +02:00
b8363283fa Merge #7679 'startup: treat stdin as text instead of commands' 2018-06-10 15:10:59 +02:00
23d172a948 Merge #8499 from janlazo/vim-8.0.0533 2018-06-10 14:30:19 +02:00
3fddd04565 Merge #8516 'win/build: bundle libiconv, gettext tools' 2018-06-10 13:56:42 +02:00
7cc9d2b2b2 vim-patch:8.0.0520: using a function pointer while the function is known (#8513)
Problem:    Using a function pointer instead of the actual function, which we
            know.
Solution:   Change mb_ functions to utf_ functions when already checked for
            Unicode. (Dominique Pelle, closes vim/vim#1582)
ace95989ed
2018-06-10 12:31:51 +02:00
bbb88607c9 vim-patch:8.0.0466: still macros that should be all-caps (#8510)
Problem:    There are still a few macros that should be all-caps.
Solution:   Make a few more macros all-caps.
8820b48654
2018-06-10 12:24:00 +02:00
e17728a632 build/msvc: Add support for building gettext tools with MSVC
Only includes the tools needed for Neovim: xgettext, msgfmt, and
msgmerge.
2018-06-09 20:50:44 -05:00
d87e5d7016 build/msvc: Add libiconv to bundled dependencies 2018-06-09 20:50:02 -05:00
b94b59e4e8 refactor: buf_collect_lines (#8509)
Move redundant common logic into a function.
2018-06-09 09:32:49 +02:00
392b3396fd vim-patch:8.0.0541: compiler warning on MS-Windows
Problem:    Compiler warning on MS-Windows.
Solution:   Add a type cast. (Mike Williams)
04000560ca
2018-06-08 21:13:33 -04:00
3bcbf802ce vim-patch:8.0.0533: abbreviation doesn't work after backspacing newline
Problem:    Abbreviation doesn't work after backspacing newline. (Hkonrk)
Solution:   Set the insert start column. (closes vim/vim#1609)
878c263a48
2018-06-08 21:13:33 -04:00
aaece78492 expand_env_esc: fix invalid memory access (#8508)
ref be68f218ff

    [OLDTEST] Running test_options
    Failed: F /tests/oldtests|test_options :: Nvim exited with non-zero code
    -en travis_fold:start:-tests-oldtests-test-options

    =================================================================

    ==26191==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x621000067900 at pc 0x0000004768bd bp 0x7ffe6bd02de0 sp 0x7ffe6bd02580
    READ of size 4096 at 0x621000067900 thread T0
        0 0x4768bc in __interceptor_getpwnam /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors.inc:1726:3
        1 0x12847c5 in os_get_user_directory /home/travis/build/neovim/neovim/build/../src/nvim/os/users.c:82:8
        2 0x125a3e3 in expand_env_esc /home/travis/build/neovim/neovim/build/../src/nvim/os/env.c:380:25
        3 0x1257fdb in expand_env_save_opt /home/travis/build/neovim/neovim/build/../src/nvim/os/env.c:255:3
        4 0x1291b77 in gen_expand_wildcards /home/travis/build/neovim/neovim/build/../src/nvim/path.c:1195:13
        5 0x129e2e7 in expand_wildcards /home/travis/build/neovim/neovim/build/../src/nvim/path.c:2018:12
        6 0x129e193 in expand_wildcards_eval /home/travis/build/neovim/neovim/build/../src/nvim/path.c:1986:11
        7 0xc2ddc3 in ExpandFromContext /home/travis/build/neovim/neovim/build/../src/nvim/ex_getln.c:4685:11
        8 0xc29412 in ExpandOne /home/travis/build/neovim/neovim/build/../src/nvim/ex_getln.c:3775:9
        9 0x931364 in f_expand /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:8257:32
        10 0x811954 in call_func /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6373:11
        11 0x8256b8 in get_func_tv /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6119:11
        12 0x8ad6a1 in eval7 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:4217:15
        13 0x8a9c6b in eval6 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3914:7
        14 0x8a797f in eval5 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3765:7
        15 0x8a319f in eval4 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3502:7
        16 0x8a263c in eval3 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3420:7
        17 0x8a1adc in eval2 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3351:7
        18 0x809b21 in eval1 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3278:7
        19 0x824f24 in get_func_tv /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6092:9
        20 0x81e674 in ex_call /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:2726:9
        21 0xb4db73 in do_one_cmd /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:2238:5
        22 0xb30119 in do_cmdline /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:602:20
        23 0x845232 in call_user_func /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:21396:3
        24 0x81127b in call_func /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6358:11
        25 0x8256b8 in get_func_tv /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6119:11
        26 0x81e674 in ex_call /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:2726:9
        27 0xb4db73 in do_one_cmd /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:2238:5
        28 0xb30119 in do_cmdline /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:602:20
        29 0x8645f1 in ex_execute /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:19541:7
        30 0xb4db73 in do_one_cmd /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:2238:5
        31 0xb30119 in do_cmdline /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:602:20
        32 0x845232 in call_user_func /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:21396:3
        33 0x81127b in call_func /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6358:11
        34 0x8256b8 in get_func_tv /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6119:11
        35 0x81e674 in ex_call /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:2726:9
        36 0xb4db73 in do_one_cmd /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:2238:5
        37 0xb30119 in do_cmdline /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:602:20
        38 0xb19f2d in do_source /home/travis/build/neovim/neovim/build/../src/nvim/ex_cmds2.c:2973:3
        39 0xb16580 in cmd_source /home/travis/build/neovim/neovim/build/../src/nvim/ex_cmds2.c:2718:14
        40 0xb16677 in ex_source /home/travis/build/neovim/neovim/build/../src/nvim/ex_cmds2.c:2699:3
        41 0xb4db73 in do_one_cmd /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:2238:5
        42 0xb30119 in do_cmdline /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:602:20
        43 0xb362c5 in do_cmdline_cmd /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:278:10
        44 0xe8e3a3 in exe_commands /home/travis/build/neovim/neovim/build/../src/nvim/main.c:1705:5
        45 0xe7bbba in main /home/travis/build/neovim/neovim/build/../src/nvim/main.c:518:5
        46 0x2b0e17bd1f44 in __libc_start_main /build/eglibc-ripdx6/eglibc-2.19/csu/libc-start.c:287
        47 0x44dcfb in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x44dcfb)

    0x621000067900 is located 0 bytes to the right of 4096-byte region [0x621000066900,0x621000067900)
    allocated by thread T0 here:
        0 0x4eeed3 in malloc /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:67:3
        1 0xf87981 in try_malloc /home/travis/build/neovim/neovim/build/../src/nvim/memory.c:87:15
        2 0xf87ba9 in xmalloc /home/travis/build/neovim/neovim/build/../src/nvim/memory.c:121:15
        3 0x1257f6f in expand_env_save_opt /home/travis/build/neovim/neovim/build/../src/nvim/os/env.c:254:15
        4 0x1291b77 in gen_expand_wildcards /home/travis/build/neovim/neovim/build/../src/nvim/path.c:1195:13
        5 0x129e2e7 in expand_wildcards /home/travis/build/neovim/neovim/build/../src/nvim/path.c:2018:12
        6 0x129e193 in expand_wildcards_eval /home/travis/build/neovim/neovim/build/../src/nvim/path.c:1986:11
        7 0xc2ddc3 in ExpandFromContext /home/travis/build/neovim/neovim/build/../src/nvim/ex_getln.c:4685:11
        8 0xc29412 in ExpandOne /home/travis/build/neovim/neovim/build/../src/nvim/ex_getln.c:3775:9
        9 0x931364 in f_expand /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:8257:32
        10 0x811954 in call_func /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6373:11
        11 0x8256b8 in get_func_tv /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6119:11
        12 0x8ad6a1 in eval7 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:4217:15
        13 0x8a9c6b in eval6 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3914:7
        14 0x8a797f in eval5 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3765:7
        15 0x8a319f in eval4 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3502:7
        16 0x8a263c in eval3 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3420:7
        17 0x8a1adc in eval2 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3351:7
        18 0x809b21 in eval1 /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:3278:7
        19 0x824f24 in get_func_tv /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6092:9
        20 0x81e674 in ex_call /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:2726:9
        21 0xb4db73 in do_one_cmd /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:2238:5
        22 0xb30119 in do_cmdline /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:602:20
        23 0x845232 in call_user_func /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:21396:3
        24 0x81127b in call_func /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6358:11
        25 0x8256b8 in get_func_tv /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:6119:11
        26 0x81e674 in ex_call /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:2726:9
        27 0xb4db73 in do_one_cmd /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:2238:5
        28 0xb30119 in do_cmdline /home/travis/build/neovim/neovim/build/../src/nvim/ex_docmd.c:602:20
        29 0x8645f1 in ex_execute /home/travis/build/neovim/neovim/build/../src/nvim/eval.c:19541:7

    SUMMARY: AddressSanitizer: heap-buffer-overflow /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors.inc:1726:3 in __interceptor_getpwnam
    Shadow bytes around the buggy address:
      0x0c4280004ed0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c4280004ee0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c4280004ef0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c4280004f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c4280004f10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =>0x0c4280004f20:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c4280004f30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c4280004f40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c4280004f50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c4280004f60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c4280004f70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    Shadow byte legend (one shadow byte represents 8 application bytes):
      Addressable:           00
      Partially addressable: 01 02 03 04 05 06 07
      Heap left redzone:       fa
      Freed heap region:       fd
      Stack left redzone:      f1
      Stack mid redzone:       f2
      Stack right redzone:     f3
      Stack after return:      f5
      Stack use after scope:   f8
      Global redzone:          f9
      Global init order:       f6
      Poisoned by user:        f7
      Container overflow:      fc
      Array cookie:            ac
      Intra object redzone:    bb
      ASan internal:           fe
      Left alloca redzone:     ca
      Right alloca redzone:    cb
    ==26191==ABORTING
    Failed: E /tests/oldtests|logs :: Runtime errors detected.
    Job exited with code 1
    Screen (23 lines)
2018-06-09 00:46:11 +02:00
cca29112d5 vim-patch:8.0.0525: completion for user command argument not tested (#8506)
Solution:   Completion for user command argument not tested.
Problem:    Add a test.
a33ddbbd04
2018-06-09 00:20:09 +02:00
77192889f0 vim-patch:8.0.0452: some macros are in lower case (#8505)
Problem:    Some macros are in lower case.
Solution:   Make a few more macros upper case.
1c46544412
2018-06-08 19:24:58 +02:00
c7e6bb2467 doc: API: api-buffer-updates
- move to api.txt
- rewrite
2018-06-08 10:19:46 +02:00
f85cbea725 Merge #7917 'API: buffer updates' 2018-06-08 10:13:04 +02:00
c500f22f3c Merge #8498 from janlazo/vim-8.0.0523 2018-06-08 08:15:37 +02:00
be68f218ff vim-patch:8.0.0355: using uninitialized memory when 'isfname' is empty (#8493)
Problem:    Using uninitialized memory when 'isfname' is empty.
Solution:   Don't call getpwnam() without an argument. (Dominique Pelle,
            closes vim/vim#1464)
187a4f2814
2018-06-08 08:10:38 +02:00
4871f26c22 vim-patch:8.0.0586: no test for mapping timing out (#8501)
Problem:    No test for mapping timing out.
Solution:   Add a test.
b7637c44c2
2018-06-08 08:07:31 +02:00
bd736a98e3 vim-patch:8.0.0560: :windo allows for ! but it's not supported (#8500)
Problem:    :windo allows for ! but it's not supported.
Solution:   Disallow passing !. (Hirohito Higashi)
451a4a1cb7
2018-06-08 08:06:32 +02:00
231539cf3c lint 2018-06-07 21:44:27 -04:00
451c48a092 terminal: flush vterm output buffer on pty output #8486
Fixes #4151

libvterm uses an "output buffer" for terminal reporting
(e.g. \e[6n to report cursor position)
Flush it in on_channel_output() not just terminal_send_key()

See also this line from pangoterm:
https://bazaar.launchpad.net/~leonerd/pangoterm/trunk/view/607/pangoterm.c#L2159
2018-06-08 02:18:27 +02:00
34c0688790 vim-patch:8.0.0523: dv} deletes part of a multi-byte character.
Problem:    dv} deletes part of a multi-byte character. (Urtica Dioica)
Solution:   Include the whole character.
bf3d58073f
2018-06-07 19:41:30 -04:00
db68d1d638 Merge #8491 from janlazo/vim-8.0.0255 2018-06-07 18:31:50 +02:00
e0d39d8e53 vim-patch:8.0.0256: missing changes to one file breaks test
Problem:    Tests fail because some changes were not included.
Solution:   Add changes to evalfunc.c
3a29abcb61
2018-06-07 12:02:57 -04:00
3abf17ae88 API: validation: mention invalid method name (#8489) 2018-06-07 10:56:44 +02:00
5a82afa17a vim-patch:8.0.0265: ml_get error when :pydo deletes lines (#8492)
Problem:    May get ml_get error when :pydo deletes lines or switches to
            another buffer. (Nikolai Pavlov, issue vim/vim#1421)
Solution:   Check the buffer and line every time.
a58883b4ea

(We only include the tests, the Vim code changes are N/A for Nvim.)
2018-06-07 10:06:06 +02:00
7f6c1d256f vim-patch:8.0.0254: error message of assert functions (#8488)
Problem:    When using an assert function one can either specify a message or
            get a message about what failed, not both.
Solution:   Concatenate the error with the message.
c7b831ca15
2018-06-07 09:59:45 +02:00
2d456f84d1 vim-patch:8.0.0255: setpos() does not use the buffer argument for all marks
Problem:    When calling setpos() with a buffer argument it often is ignored.
            (Matthew Malcomson)
Solution:   Make the buffer argument work for all marks local to a buffer.
            (neovim vim/vim#5713)  Add more tests.
f13e00b2cf
2018-06-06 20:37:35 -04:00
36ac80d5dd Merge #8464 from justinmk/cmake-findpkg-required 2018-06-06 01:52:29 +02:00
f795c3ce7c ex_getln.c: Fix PVS/V519: variable assigned twice 2018-06-06 01:15:37 +02:00
ec29eeef43 win/build: avoid "C4142: benign redefinition of type"
ssize_t is already typedef's by libuv:uv-win.h
2018-06-06 00:58:58 +02:00
b7032cf1e3 win: enable DYNAMIC_ICONV 2018-06-06 00:58:58 +02:00
90e3dd9220 makedeps.bat 2018-06-06 00:58:57 +02:00
7303dd3e54 win/build: download iconv, gettext tools
- We need the gettext tools (msgmerge.exe) because these aren't built
  when we build from source (not trivial).
- We can use the pre-built libiconv-2.dll for DYNAMIC_ICONV_DLL.
2018-06-06 00:58:57 +02:00
420379330e cmake/FindLibIntl.cmake: handle passive case explicitly
If check_c_source_compiles() succeeded (HAVE_WORKING_LIBINTL is set)
then the result of find_xxx() doesn't matter. This happens on systems
(linux+glibc) where libintl is available passively.

This allows `find_package(LibIntl REQUIRED)` to work and will still
correctly fail (REQUIRED) on systems lacking libintl.
2018-06-06 00:58:57 +02:00
21c9db1861 build/CMake: find_package(… REQUIRED)
"Always use `find_package` with `REQUIRED`."

- We make an exception for LuaJit (not REQUIRED): the `nvim-test` target
  is included only if we can find LuaJit.

This is partially a cargo-cult (reference below), but it uncovered at
least one problem: `find_package(LibIntl REQUIRED)` fails on my vanilla
ubuntu 16.04 system.

ref: https://schneide.blog/2017/11/06/4-tips-for-better-cmake/

> optional dependencies is nice, but skipping on REQUIRED is not the way
> you want to do it. In the worst case, some of your features will just
> not work if those packages are not found, with no explanation
> whatsoever. Instead, use explicit feature-toggles (e.g. using option())
> that either skip the find_package call or use it with REQUIRED, so the
> user will know that another lib is needed for this feature.
2018-06-06 00:58:57 +02:00
5861dc5966 Merge #8461 from bfredl/scrollstatus 2018-06-06 00:34:08 +02:00
078202d6f8 vim-patch:8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch' (#8483)
Problem:    'colorcolumn' has a higher priority than 'hlsearch', it should be
            the other way around. (Nazri Ramliy)
Solution:   Change the priorities. (LemonBoy, closes vim/vim#1794)
774e5a9673
2018-06-05 17:10:07 +02:00
d9d91bbfef Merge #8482 'test: give more time for nodejs' 2018-06-05 14:08:32 +02:00
6ffcc2b800 fixup: exclude node_modules/ for crash detection
node.js client uses lodash which has core.js.
2018-06-05 07:33:26 -04:00
ae927a49f7 Merge #8479 from janlazo/vim-8.0.0529 2018-06-05 08:43:01 +02:00
b2633bba73 vim-patch:8.0.0851: 'smartindent' is used even when 'indentexpr' is set (#8481)
Problem:    'smartindent' is used even when 'indentexpr' is set.
Solution:   Ignore 'smartindent' when 'indentexpr' is set. (Hirohito Higashi)
69a76feda9

---

This also fixes "delfunction!" which was not merged fully in  a185ab70fd (vim-patch:8.0.0655)
2018-06-05 08:20:38 +02:00
f274b84e1e test: give more time for nodejs
Link neovim package to project root directory.
Increase delay to 3 seconds.
Reduce the total lines in temporary node scripts.
2018-06-04 19:42:28 -04:00
2ab7165214 lint 2018-06-04 17:51:15 -04:00
21aa4bc428 vim-patch:8.0.0623: error for invalid regexp is not very informative
Problem:    The message "Invalid range" is used for multiple errors.
Solution:   Add two more specific error messages. (Itchyny, Ken Hamada)
966e58e413
2018-06-04 08:44:19 -04:00
fe5c891fe0 vim-patch:8.0.0529: line in test commented out
Problem:    Line in test commented out.
Solution:   Uncomment the lines for character classes that were failing before
            8.0.0519. (Dominique Pelle, closes vim/vim#1599)
13489b9c41
2018-06-04 08:38:27 -04:00
d8c7ff1335 cleanup, test interactive -E 2018-06-04 02:09:28 +02:00
1f300e08b8 win/startup: remove --literal
Fixes 2 failing tests in startup_spec.lua.

The Windows-only `--literal` option complicates support of "stdin-as-text
+ file-args" (#7679).  Could work around it, but it's not worth
the trouble:
- users have a reasonable (and englightening) alternative: nvim +"n *"
- "always literal" is more consistent/predictable
- avoids platform-specific special-case

Unrelated changes:
- Replace fileno(stdxx) with STDXX_FILENO for consistency (not motivated
  by any observed technical reason).
2018-06-04 02:09:27 +02:00
4211255c75 startup: allow explicit "-" file arg with --headless 2018-06-04 02:09:27 +02:00
63058fb5b0 startup: fix -es/-Es so they are actually silent
silent-mode (-es/-Es) has been broken for years.  The workaround up to
now was to include --headless.  But --headless is not equivalent because
it prints all messages, not the limited subset defined by silent-mode.
2018-06-04 02:09:27 +02:00
787ae1b38b startup: silent-mode is not full_screen
silent-mode (AKA batch-mode, -es/-Es) by definition should not behave
like a UI.

There are still some places that check `full_screen` to decide behavior,
e.g. msg_start().  Future: maybe eliminate `full_screen`, check
`ui_active()` instead?
2018-06-04 02:09:27 +02:00
d00ef758c3 lint 2018-06-04 02:09:24 +02:00
4b70ebe013 startup: stdin-text with -E, -Es (improved Ex-mode)
Special-case for -E/-Es (as opposed to -e/-es).

-es/-Es is the only mode that really allows N/Vim to work as a batch
script engine.  Adding a new flag (say `-x`) would involve a lot of
churn: -es/-Es is implemented by checking `exmode_active` in numerous
places.

This commit does not change -es because some scripts use it. But scripts
are unlikely to use -Es because it is not functionally different from
-es.

Also, both -es and -Es were broken in Nvim for years and no one
mentioned it...
2018-06-04 02:07:40 +02:00
905d4d78fc startup: stdin-text with file args 2018-06-04 02:07:40 +02:00
51e817dc1b startup: stdin as text instead of commands
Treat stdin as text by default (so the "-" file is not needed):
    echo foo | nvim

It works with file args (implemented in next commit), too:
    echo foo | nvim file1.txt file2.txt

Why? Because:
- Execution of input is (1) almost always unintentional/confusing,
  and (2) potentially destructive.
- Avoids the need for time-delayed warning.  #7659
- The _common_ case is to open text in a buffer, not send commands.

Note:
- Not for Ex-mode (-es) because it is used by scripts.  But maybe `-Es`?
- Not for --headless, because stdio may be a protocol stream and may be
  used for any purpose by stdioopen().

To treat stdin as Normal-mode commands, use `-s -` instead:
    echo ifoo | nvim -s -
Other alternatives:
  - Replay a register. E.g. the following mostly works, except @q aborts
    on any "beep" (e.g. if the cursor can't move).
    nvim -c '%d q|norm @q' -
  - Future: Let `:%source` work with unsaved buffer contents?

closes #2087
closes #7659
2018-06-04 02:07:39 +02:00
fad748dffa main.c: remove check_tty(), delayed warning
This code was essentially dead because this condition:
    (!parmp->err_isatty && (!parmp->output_isatty || !parmp->input_isatty))
is almost never true.

ref #7659
2018-06-04 02:07:39 +02:00
488f6ecdda lint 2018-06-04 02:07:39 +02:00
a1f562b044 doc/man: brevity, clarity 2018-06-04 02:07:39 +02:00
cf92a76285 vim-patches: 8.0.0399 8.0.0401 (#8475)
vim-patch:8.0.0399: crash when using balloon_show() when not supported
Problem:    Crash when using balloon_show() when not supported. (Hirohito
            Higashi)
Solution:   Check for balloonEval not to be NULL. (Ken Takata)
caf6434ac9

vim-patch:8.0.0401: test fails with missing balloon feature
Problem:    Test fails with missing balloon feature.
Solution:   Add check for balloon feature.
a0107bdf87

vim-patch:8.0.0414: balloon eval is not tested
2018-06-04 01:58:36 +02:00
7795829767 vim-patch:8.0.1237: ":set scroll&" often gives an error (#8473)
Problem:    ":set scroll&" often gives an error.
Solution:   Don't use a fixed default value, use half the window height. Add a
            test. (Ozaki Kiichi, closes vim/vim#2104)
af2d20c628
2018-06-04 01:31:37 +02:00
807a16dbc1 version.c: update [ci skip] (#8413)
vim-patch:8.0.0349: redrawing errors with GTK 3
vim-patch:8.0.0363: Travis is too slow to keep up with patches
vim-patch:8.0.0366: build fails with tiny features
vim-patch:8.0.0373: build fails without +folding
vim-patch:8.0.0397: can't build with +viminfo but without +eval
vim-patch:8.0.0410: newer gettext/iconv library has extra dll file-
vim-patch:8.0.0418: ASAN logs are disabled
vim-patch:8.0.0445: getpgid is not supported on all systems-
vim-patch:8.0.0449
vim-patch:8.0.0462: failure of an MS-Windows test may go unnoticed
vim-patch:8.0.0494: build failure with older compiler on MS-Windows
vim-patch:8.0.0501: on MS-Windows ":!start" does not work as expected
vim-patch:8.0.0508: Coveralls no longer shows per-file coverage
vim-patch:8.0.0509: no link to codecov.io results
vim-patch:8.0.0510: typo in link to codecov.io results
vim-patch:8.0.0512: check for available characters takes too long
vim-patch:8.0.0521: GtkForm handling is outdated
vim-patch:8.0.0527: leftover file from RISC OS
vim-patch:8.0.0534: defaults.vim does not work well with tiny features
vim-patch:8.0.0557: GTK: using static gravities is not useful
vim-patch:8.0.0566: setting nocompatible for the tiny version moves the cursor
vim-patch:8.0.0570: can't run make with several jobs
vim-patch:8.0.0573: running parallel make after distclean fails
vim-patch:8.0.0576: can't build when configure choses "install-sh"
vim-patch:8.0.0578: :simalt on MS-Windows does not work properly
vim-patch:8.0.0589: :simalt still does not work
vim-patch:8.0.0594: build failure when windows feature is missing
vim-patch:8.0.0619: GUI gets stuck if timer uses feedkeys()
vim-patch:8.0.0624: warning for unused variable in tiny build
vim-patch:8.0.0638: cannot build with new MSVC version 
vim-patch:8.0.0651: build failure without the auto command feature
vim-patch:8.0.0695: missing dependencies breaks parallel make
vim-patch:8.0.0711: cannot build without the wildmenu feature
vim-patch:8.0.0756: cannot build libvterm with MSVC 
vim-patch:8.0.0757: libvterm MSVC Makefile not included in the distribution
vim-patch:8.0.0765: build fails with tiny features
vim-patch:8.0.0767: build failure with Athena and Motif
vim-patch:8.0.0780: build failure on Travis
vim-patch:8.0.0786: build failures on Travis 
vim-patch:8.0.0796: no coverage on Travis with clang 
vim-patch:8.0.0814: file in Filelist does not exist
vim-patch:8.0.0961: the script to build the installer does not include winpty
vim-patch:8.0.0989: ActiveTcl dll name has changed in 8.6.6
vim-patch:8.0.1032: "make tags" doesn't work well on MS-Windows-
vim-patch:8.0.1050: terminal window feature not included by default
vim-patch:8.0.1056: cannot build with +diff but without +multi_byte-
vim-patch:8.0.1084: GTK build has compiler warnings 
vim-patch:8.0.1086: can't build with GTK 3
vim-patch:8.0.1098: build failure if libvterm installed
vim-patch:8.0.1099: warnings for GDK calls
vim-patch:8.0.1122: vimtutor.bat doesn't work well with vim.bat
vim-patch:8.0.1124: use of MZSCHEME_VER is unclear
vim-patch:8.0.1147: fail to build with tiny features
vim-patch:8.0.1156: trouble from removing one -W argument from Perl CFLAGS
vim-patch:8.0.1178: using old compiler on MS-Windows
vim-patch:8.0.1183: MS-Windows build instructions are outdated
vim-patch:8.0.1185: Ruby library includes minor version number
vim-patch:8.0.1187: building with lua fails for OSX on Travis
vim-patch:8.0.1196: crash when t_RF is not set
vim-patch:8.0.1212: MS-Windows: tear-off menu does not work on 64 bit
vim-patch:8.0.1233: typo in dos installer
vim-patch:8.0.1235: cannot disable the terminal feature in a huge build
vim-patch:8.0.1252: incomplete translations makefile for MinGW/Cygwin
vim-patch:8.0.1268: PC install instructions are incomplete
vim-patch:8.0.1288: GUI: cannot drag the statusline of a terminal window
vim-patch:8.0.1294: GUI: get stuck when splitting a terminal window
vim-patch:8.0.1301: generated license file for NSIS has a modeline
vim-patch:8.0.1313: missing dependencies cause parallel make to fail
vim-patch:8.0.1314: build fails on Mac
vim-patch:8.0.1351: warning for unused variables building with MinGW
vim-patch:8.0.1373: no error when settting 'renderoptions' before starting GUI
vim-patch:8.0.1379: configure check for selinux does not check for header file
vim-patch:8.0.1385: Python 3.5 is getting old
vim-patch:8.0.1390: DirectX scrolling can be slow, vertical positioning is off
vim-patch:8.0.1392: build fails with --with-features=huge --disable-channel
vim-patch:8.0.1399: warnings and errors when building tiny version
vim-patch:8.0.1401: cannot build with GTK but without XIM
vim-patch:8.0.1407: GUI: CursorHold may trigger before 'updatetime'
vim-patch:8.0.1431: MS-Windows: vimtutor fails if %TMP% has special chars
vim-patch:8.0.1444: missing -D_FILE_OFFSET_BITS=64 may cause problems
vim-patch:8.0.1450: GUI: endless loop when stopping cursor blinking
vim-patch:8.0.1466: older GTK versions don't have gtk_entry_get_text_length()
vim-patch:8.0.1471: on MS-Windows CursorIM highlighting no longer works
vim-patch:8.0.1473: MS-Windows: D&D fails between 32 and 64 bit apps
vim-patch:8.0.1474: Visual C 2017 has multiple MSVCVER numbers
vim-patch:8.0.1530: dump test fails when using a shadow directory-
vim-patch:8.0.1548: screen dump test script not included in distribution-
vim-patch:8.0.1555: build error for some combination of features
vim-patch:8.0.1559: build failure without GUI
vim-patch:8.0.1560: build failure without GUI on MS-Windows 
vim-patch:8.0.1800: X11: getting color is slow-
vim-patch:8.0.1808: can't build without TGETENT-
vim-patch:8.0.1822: make uninstall does not remove colors/tools-
vim-patch:8.0.1826: configure uses old compiler flag-
vim-patch:8.0.1828: get no clue why :gui does not fork-
vim-patch:8.0.1833: X11: ":echo 3.14" gives E806- 
vim-patch:8.0.1834: GUI: find/replace dialog does not handle some chars-
vim-patch:8.0.1847: some build options don't have an example-
2018-06-04 01:13:00 +02:00
32935c8612 Merge #8414 'Windows fixes' 2018-06-03 23:44:06 +02:00
a80f73f043 deps: Fix libvterm and libtermkey escape sequences for MSVC
The escape sequence `\e` is non-standard and not supported by MSVC.
It caused the terminal emulator to incorrectly interpret certain keys.
2018-06-03 22:31:02 +02:00
90f9f8af6c deps: Ignore whitespace when applying libuv patch 2018-06-03 22:31:02 +02:00
f8eb5c83ed deps: Upgrade LuaRocks and remove patch 2018-06-03 22:31:01 +02:00
611e379685 build/MSVC: TUI: Fix uninitialized variable
closes #8459
2018-06-03 22:31:01 +02:00
a93690bceb TUI: skip SIGWINCH during teardown #8470
closes #8409

Although 8b05da1577 prevents UI events during TUI teardown, there's
still a chance a SIGWINCH event (which emits from a different source,
not the UI pump) could be queued.

Backtrace:

    Program terminated with signal SIGSEGV, Segmentation fault.
    0  0x0828b5e2 in update_size (ui=0xf7130000) at ../src/nvim/tui/tui.c:1231
    1231	  if (data->out_isatty

    Thread 2 (Thread 0xf749c740 (LWP 15704)):
    0  0xf76f4be9 in __kernel_vsyscall ()
    No symbol table info available.
    1  0xf7585847 in syscall () from /lib32/libc.so.6
    No symbol table info available.
    2  0x082d280b in uv__epoll_wait (epfd=9, events=events@entry=0xff8570a0, nevents=nevents@entry=1024, timeout=timeout@entry=10) at /home/travis/nvim-deps/build/src/libuv/src/unix/linux-syscalls.c:321
            result = -4
    3  0x082d095b in uv__io_poll (loop=loop@entry=0x843bb20 <main_loop>, timeout=10) at /home/travis/nvim-deps/build/src/libuv/src/unix/linux-core.c:289
            no_epoll_pwait = 0
            no_epoll_wait = 0
            events = {{events = 1, data = 12}, {events = 0, data = 17828744682641817600}, {events = 0, data = 595427328019700187}, {events = 1, data = 256}, {events = 8, data = 38646673644}, {events = 138656544, data = 0}, {events = 0, data = 4433601024}, {events = 0, data = 0} <repeats 11 times>, {events = 0, data = 5066646634167795712}, {events = 4286935584, data = 206168555883}, {events = 0, data = 471020612051744}, {events = 4286935503, data = 17828744133024637728}, {events = 1, data = 17317007001}, {events = 4286935503, data = 10619564869973704705}, {events = 1024, data = 595525515121881824}, {events = 4150558720, data = 17823414452125790712}, {events = 138530816, data = 4432135917}, {events = 4286935544, data = 10144519793148261088}, {events = 3966, data = 10619579670432006720}, {events = 138530816, data = 595525326143320812}, {events = 1, data = 595525321993555278}, {events = 138656852, data = 1}, {events = 3995, data = 4295967296}, {events = 1, data = 595526644706312193}, {events = 0, data = 17033840295937}, {events = 4286935776, data = 206168555900}, {events = 4286937292, data = 4398046511113}, {events = 4286937584, data = 1}, {events = 0, data = 154475121641}, {events = 534, data = 188970531020}, {events = 4286936336, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 1, data = 10}, {events = 0, data = 0} <repeats 11 times>, {events = 0, data = 48}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 138530816, data = 18412251243033639712}, {events = 4286936040, data = 189114457288}, {events = 0, data = 4294967296}, {events = 0, data = 17803669134559412224}, {events = 44, data = 18412251243033639712}, {events = 4286936088, data = 189114457380}, {events = 43, data = 587839499189486944}, {events = 0, data = 18412250572880084992}, {events = 4145239744, data = 17803668932546221712}, {events = 4286936136, data = 18412251054051721307}, {events = 1, data = 17828741581675430017}, {events = 1, data = 17828941684201750528}, {events = 4151062887, data = 188813018680}, {events = 4286936184, data = 594985324343494205}, {events = 138656544, data = 589074057631462644}, {events = 138657344, data = 17735744192413433899}, {events = 136867048, data = 0}, {events = 138530816, data = 595528757965521683}, {events = 136865087, data = 589073507718137052}, {events = 4129424952, data = 17735744192413433899}, {events = 136867048, data = 587831072767851296}, {events = 4129424604, data = 17735745120263524155}, {events = 43, data = 587839499189486944}, {events = 1, data = 4151078100}, {events = 137102077, data = 18412251277393378816}, {events = 1024, data = 0}, {events = 0, data = 595526301108928512}, {events = 138656544, data = 18412251247181919476}, {events = 1, data = 9281074407080460288}, {events = 0, data = 18446466442728570881}, {events = 4294901792, data = 4294967295}, {events = 35, data = 18446462783416434688}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 2305913371515420672}, {events = 3092376453, data = 138513204574}, {events = 2098047, data = 0}, {events = 0, data = 0}, {events = 8064, data = 196607}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 2147483648, data = 16382}, {events = 3951370240, data = 70402120267857}, {events = 0, data = 0}, {events = 0, data = 5280832615950057472}, {events = 1229539657, data = 5280832617179597129}, {events = 16711680, data = 0}, {events = 255, data = 0}, {events = 0, data = 8589934592}, {events = 0, data = 0}, {events = 4144925328, data = 8589934600}, {events = 0, data = 0}, {events = 4144060920, data = 8589934597}, {events = 0, data = 0} <repeats 11 times>, {events = 0, data = 10441860757015494656}, {events = 2357, data = 1000000}, {events = 0, data = 0}, {events = 138656544, data = 0}, {events = 0, data = 5066646694297337856}, {events = 948, data = 7}, {events = 832, data = 0}, {events = 0, data = 0}, {events = 0, data = 12884901888}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 4400483032669}, {events = 4286937344, data = 17826513962666277708}, {events = 4286937112, data = 594985328358030594}, {events = 137168621, data = 18412254696048689153}, {events = 4286937344, data = 1024}, {events = 1000000, data = 2896717541055035201}, {events = 4148807356, data = 595525510834946052}, {events = 137169476, data = 10125674444609}, {events = 1000000, data = 0}, {events = 0, data = 595525321856385024}, {events = 0, data = 0}, {events = 0, data = 18412255692481101824}, {events = 10125674, data = 48}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 1179670597}, {events = 0, data = 4400482871034}, {events = 4286937584, data = 17826513962666277708}, {events = 4286937352, data = 594985328358030594}, {events = 137168621, data = 18412255726840840193}, {events = 4286937584, data = 17160756302592}, {events = 1000000, data = 594985326644596377}, {events = 4286937584, data = 4433623840}, {events = 137169713, data = 595526352787192608}, {events = 1, data = 0}, {events = 0, data = 1}, {events = 1, data = 138656852}, {events = 0, data = 18412256723273256859}, {events = 10125669, data = 48}, {events = 0, data = 0} <repeats 11 times>, {events = 0, data = 4294967296}, {events = 12, data = 0}, {events = 0, data = 0}, {events = 2430806547, data = 18412258097662788608}, {events = 138656588, data = 18412257105380933632}, {events = 4149837058, data = 589134741370949632}...}
            pe = <optimized out>
            e = {events = 4127768836, data = 7}
            real_timeout = 10
            q = <optimized out>
            w = <optimized out>
            sigset = {__val = {832, 0, 0, 138656544, 0, 0, 4286935144, 135300669, 4144063488, 138656544, 138633728, 0, 0, 0, 0, 0, 0, 0, 4286935224, 135309369, 4144063520, 135309195, 138633728, 0, 0, 0, 0, 0, 138633728, 135309195, 138633728, 0}}
            sigmask = <optimized out>
            base = <optimized out>
            have_signals = <optimized out>
            nevents = <optimized out>
            count = 48
            nfds = <optimized out>
            fd = <optimized out>
            op = <optimized out>
            i = <optimized out>
            __PRETTY_FUNCTION__ = "uv__io_poll"
    4  0x082c0cab in uv_run (loop=0x843bb20 <main_loop>, mode=UV_RUN_ONCE) at /home/travis/nvim-deps/build/src/libuv/src/unix/core.c:359
            timeout = <optimized out>
            r = 1
    5  0x08107e61 in loop_poll_events (loop=0x843bb20 <main_loop>, ms=10) at ../src/nvim/event/loop.c:57
            mode = UV_RUN_ONCE
            timeout_expired = false
    6  0x0829225a in ui_bridge_stop (b=0xf70330e0) at ../src/nvim/ui_bridge.c:122
            bridge = 0xf70330e0
            stopped = false
    7  0x0828f0a5 in ui_builtin_stop () at ../src/nvim/ui.c:144
            ui = 0xf70330e0
            i = 0
    8  0x081e9b85 in mch_exit (r=1) at ../src/nvim/os_unix.c:141
    No locals.
    9  0x0818076e in getout (exitval=1) at ../src/nvim/main.c:666
            tp = 0x0
            next_tp = 0x0
    10 0x081a80df in preserve_exit () at ../src/nvim/misc1.c:2655
            really_exiting = true
    11 0x081e8e2e in deadly_signal (signum=1) at ../src/nvim/os/signal.c:137
    No locals.
    12 0x081e8eaa in on_signal (handle=0x8436200 <shup>, signum=1, data=0x0) at ../src/nvim/os/signal.c:162
            __PRETTY_FUNCTION__ = "on_signal"
            __func__ = "on_signal"
    13 0x0810a7bb in signal_event (argv=0xff85a328) at ../src/nvim/event/signal.c:47
            watcher = 0x8436200 <shup>
    14 0x0810869b in multiqueue_process_events (this=0xf7016420) at ../src/nvim/event/multiqueue.c:150
            event = {handler = 0x810a78b <signal_event>, argv = {0x8436200 <shup>, 0x0, 0x0, 0x0, 0x0, 0x0}}
            __PRETTY_FUNCTION__ = "multiqueue_process_events"
    15 0x08107eac in loop_poll_events (loop=0x843bb20 <main_loop>, ms=3984) at ../src/nvim/event/loop.c:65
            mode = UV_RUN_ONCE
            timeout_expired = false
    16 0x081e5d6f in input_poll (ms=4000) at ../src/nvim/os/input.c:349
            remaining = 3984
            before = 10125692630347
    17 0x081e5e50 in inbuf_poll (ms=4000) at ../src/nvim/os/input.c:372
    No locals.
    18 0x081e568f in os_inchar (buf=0x0, maxlen=0, ms=-1, tb_change_cnt=0) at ../src/nvim/os/input.c:110
            result = (unknown: 136905872)
    19 0x0826b0a1 in state_enter (s=0xff85a4c0) at ../src/nvim/state.c:55
            check_result = 1
            key = 58
            execute_result = 1
    20 0x0813802b in command_line_enter (firstc=58, count=1, indent=0) at ../src/nvim/ex_getln.c:392
            state = {state = {check = 0x8138588 <command_line_check>, execute = 0x81385b3 <command_line_execute>}, firstc = 58, count = 1, indent = 0, c = 58, i = 0, j = 1, gotesc = 0, do_abbr = 1, lookfor = 0x0, hiscnt = 10000, histype = 0, search_start = {lnum = 1, col = 0, coladd = 0}, save_cursor = {lnum = 1, col = 0, coladd = 0}, old_curswant = 0, init_curswant = 0, old_leftcol = 0, init_leftcol = 0, old_topline = 1, init_topline = 1, old_topfill = 0, init_topfill = 0, old_botline = 2, init_botline = 2, match_start = {lnum = 1, col = 0, coladd = 0}, match_end = {lnum = 0, col = 0, coladd = 0}, did_incsearch = 0, incsearch_postponed = 0, did_wild_list = 0, wim_index = 0, res = 0, save_msg_scroll = 0, save_State = 1, save_p_icm = 0xf7015e50 "", some_key_typed = 1, ignore_drag_release = 1, break_ctrl_c = 0, xpc = {xp_context = 0, xp_pattern = 0x0, xp_pattern_len = 0, xp_arg = 0x0, xp_scriptID = 0, xp_backslash = 0, xp_shell = 0, xp_numfiles = -1, xp_files = 0x0, xp_line = 0x0, xp_col = 0}, b_im_ptr = 0x0, save_ccline = {cmdbuff = 0x0, cmdbufflen = 0, cmdlen = 0, cmdpos = 0, cmdspos = 0, cmdfirstc = 0, cmdindent = 0, cmdprompt = 0x0, cmdattr = 0, overstrike = 0, xpc = 0x0, xp_context = 0, xp_arg = 0x0, input_fn = 0, prompt_id = 0, highlight_callback = {data = {funcref = 0x0, partial = 0x0}, type = kCallbackNone}, last_colors = {prompt_id = 0, cmdbuff = 0x0, colors = {size = 0, capacity = 0, items = 0x0}}, level = 0, prev_ccline = 0x0, special_char = 0 '\000', special_shift = false, redraw_state = kCmdRedrawNone}}
            s = 0xff85a4c0
            tstate = {current_exception = 0x832fc5a <arena_run_split_remove+74>, private_msg_list = 0xcb, msg_list = 0xc8, trylevel = 309, got_int = 0, need_rethrow = 0, did_emsg = -148897536}
            err = {type = kErrorTypeNone, msg = 0x0}
            tl_ret = true
            dict = 0xf701e180
            firstcbuf = ":"
    21 0x0813bf33 in getcmdline (firstc=58, count=1, indent=0) at ../src/nvim/ex_getln.c:1991
    No locals.
    22 0x0813c273 in getexline (c=58, cookie=0x0, indent=0) at ../src/nvim/ex_getln.c:2171
    No locals.
    23 0x0812178e in do_cmdline (cmdline=0x0, fgetline=0x813c23b <getexline>, cookie=0x0, flags=0) at ../src/nvim/ex_docmd.c:521
            next_cmdline = 0x0
            cmdline_copy = 0x0
            used_getline = 0
            recursive = 0
            msg_didout_before_start = 0
            count = 0
            did_inc = 0
            retval = 1
            cstack = {cs_flags = {-149727708, -149727552, 44, -149749760, 0, -8018024, 135896356, 44, 0, -8018008, 137102848, 138530816, -149749760, -165425056, -149727552, -153095488, 0, -8017976, 135301762, -165613500, -149727516, 136875711, -143908912, -153095488, 8, 18, -143904672, 8, -143889324, -8017928, 137102848, 138530816, -149749760, 0, 137154491, -153095488, 0, -149749760, 136875711, -149749760, 0, 136875711, 135298863, -153095488, 136911089, -150785824, 135298732, 0, 0, -149749760}, cs_pending = "@\004!\366 d\001\367\000\000\000\000h\250\205\377\023\217(\b\240\357\337\366\361\030)\b\340\060\003\367\254~\020\b\000\000\000\000\000\000\000\000\000\000\023\367@\004", cs_pend = {csp_rv = {0x0, 0x0, 0xff85a888, 0x81fb319 <rbuffer_consumed+138>, 0xf70b3e00, 0x2, 0xff85a8b8, 0x829198a <ui_bridge_flush+117>, 0x82918f1 <ui_bridge_flush_event>, 0xf70330e0, 0x8107eac <loop_poll_events+230>, 0x0, 0x0, 0x108, 0xff85a8c8, 0x81fb4bf <rbuffer_read+152>, 0xf70b3e00, 0xff85a8ac, 0x2b, 0x8107eac <loop_poll_events+230>, 0x0, 0x0, 0xf7130000, 0x0, 0x0, 0xf70b3e4b, 0x58, 0x2b, 0xf70330e0, 0x0, 0xff85a8f8, 0x8161750 <fix_input_buffer+11>, 0xf70b3e00, 0x843070b <typebuf_init+43>, 0xff85a9a8, 0xf7648000, 0xff85a908, 0xf7597d02 <clock_gettime+34>, 0x841d000, 0x82cdd00 <uv__run_timers+16>, 0x1, 0xff85a908, 0xff85a9d8, 0x816172b <inchar+496>, 0x84306e0 <typebuf_init>, 0xf4240, 0xff85a928, 0x8108748 <multiqueue_empty+62>, 0xf7016424, 0x843bb20 <main_loop>}, csp_ex = {0x0, 0x0, 0xff85a888, 0x81fb319 <rbuffer_consumed+138>, 0xf70b3e00, 0x2, 0xff85a8b8, 0x829198a <ui_bridge_flush+117>, 0x82918f1 <ui_bridge_flush_event>, 0xf70330e0, 0x8107eac <loop_poll_events+230>, 0x0, 0x0, 0x108, 0xff85a8c8, 0x81fb4bf <rbuffer_read+152>, 0xf70b3e00, 0xff85a8ac, 0x2b, 0x8107eac <loop_poll_events+230>, 0x0, 0x0, 0xf7130000, 0x0, 0x0, 0xf70b3e4b, 0x58, 0x2b, 0xf70330e0, 0x0, 0xff85a8f8, 0x8161750 <fix_input_buffer+11>, 0xf70b3e00, 0x843070b <typebuf_init+43>, 0xff85a9a8, 0xf7648000, 0xff85a908, 0xf7597d02 <clock_gettime+34>, 0x841d000, 0x82cdd00 <uv__run_timers+16>, 0x1, 0xff85a908, 0xff85a9d8, 0x816172b <inchar+496>, 0x84306e0 <typebuf_init>, 0xf4240, 0xff85a928, 0x8108748 <multiqueue_empty+62>, 0xf7016424, 0x843bb20 <main_loop>}}, cs_forinfo = {0x2, 0x82c0cb3 <uv_run+291>, 0x843bb20 <main_loop>, 0x0, 0xff85a968, 0x81086a6 <multiqueue_process_events+103>, 0xf7016420, 0x0, 0x843bb44 <main_loop+36>, 0xff85a948, 0xf70b3e00, 0x1, 0xff85a978, 0x81e5fd4 <process_interrupts+126>, 0xf70b3e00, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff85a9a8, 0x8107eac <loop_poll_events+230>, 0xf7016420, 0x2, 0x80, 0xf76c6892 <__lll_lock_wait+34>, 0xff85aa18, 0x1, 0xff85a9a8, 0x815f1ab <may_sync_undo+55>, 0x0, 0x0, 0x6d2000, 0x2, 0x0, 0x0, 0xff85a9d8, 0x815f15b <gotchars+134>, 0x3a, 0x0, 0x0, 0x82ccfbb <uv_mutex_unlock+27>, 0xf6220638, 0x0, 0x84306e1 <typebuf_init+1>, 0x3a, 0x0, 0x0, 0xff85aab8, 0x81608af <vgetorpeek+2629>}, cs_line = {1, 0, -1, 1, -149727600, 0, -8017384, 135300936, -150903772, 43, 2248736, 0, 138656544, 58, 58, 0, -150903776, 0, -8017256, -144408576, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10125, 674433438, 138530816, 0, 0, 137103323, 0, 257, -8017256, 136208557, -150258176, 1000000, 5330103, 136221690, 0, 0, 0, 136207882, 5330103, 0}, cs_idx = -1, cs_looplevel = 0, cs_trylevel = 0, cs_emsg_silent_list = 0x0, cs_lflags = 0}
            lines_ga = {ga_len = 0, ga_maxlen = 0, ga_itemsize = 8, ga_growsize = 10, ga_data = 0x0}
            current_line = 0
            fname = 0x0
            breakpoint = 0x0
            dbg_tick = 0x0
            debug_saved = {trylevel = 0, force_abort = 0, caught_stack = 0x0, vv_exception = 0x0, vv_throwpoint = 0x0, did_emsg = 0, got_int = 0, need_rethrow = 0, check_cstack = 0, current_exception = 0x0}
            initial_trylevel = 0
            saved_msg_list = 0x0
            private_msg_list = 0x0
            cmd_getline = 0x813c23b <getexline>
            cmd_cookie = 0x0
            cmd_loop_cookie = {lines_gap = 0xff85a748, current_line = 135896356, repeating = 44, getline = 0x30, cookie = 0xff85a758}
            real_cookie = 0x0
            getline_is_func = 0
            call_depth = 1
    24 0x081bc48e in nv_colon (cap=0xff85abdc) at ../src/nvim/normal.c:4561
            old_p_im = 0
            cmd_result = 255
            is_cmdkey = false
    25 0x081b5382 in normal_execute (state=0xff85ab70, key=58) at ../src/nvim/normal.c:1137
            s = 0xff85ab70
            __PRETTY_FUNCTION__ = "normal_execute"
    26 0x0826b0ec in state_enter (s=0xff85ab70) at ../src/nvim/state.c:67
            check_result = 1
            key = 58
            execute_result = 1
    27 0x081b3a1d in normal_enter (cmdwin=false, noexmode=false) at ../src/nvim/normal.c:467
            state = {state = {check = 0x81b5881 <normal_check>, execute = 0x81b4cee <normal_execute>}, conceal_old_cursor_line = 0, conceal_new_cursor_line = 0, command_finished = false, ctrl_w = false, need_flushbuf = false, conceal_update_lines = false, set_prevcount = false, previous_got_int = false, cmdwin = false, noexmode = false, toplevel = true, oa = {op_type = 0, regname = 0, motion_type = kMTCharWise, motion_force = 0, use_reg_one = false, inclusive = false, end_adjusted = false, start = {lnum = 0, col = 0, coladd = 0}, end = {lnum = 0, col = 0, coladd = 0}, cursor_start = {lnum = 0, col = 0, coladd = 0}, line_count = 0, empty = false, is_VIsual = false, start_vcol = 0, end_vcol = 0, prev_opcount = 0, prev_count0 = 0}, ca = {oap = 0xff85ab8c, prechar = 0, cmdchar = 58, nchar = 0, ncharC1 = 0, ncharC2 = 0, extra_char = 0, opcount = 0, count0 = 0, count1 = 1, arg = 0, retval = 0, searchbuf = 0x0}, mapped_len = 0, old_mapped_len = 0, idx = 60, c = 58, old_col = 0, old_pos = {lnum = 1, col = 0, coladd = 0}}
    28 0x08180336 in main (argc=7, argv=0xff85adc4) at ../src/nvim/main.c:566
            fname = 0x0
            params = {argc = 7, argv = 0xff85adc4, use_vimrc = 0xff85b50d "NONE", n_commands = 0, commands = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, cmds_tofree = "\000\000\000\000\000\000\000\000\000", n_pre_commands = 1, pre_commands = {0xff85b520 "set noswapfile noshowcmd noruler undodir=. directory=. viewdir=. backupdir=.", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, edit_type = 0, tagname = 0x0, use_ef = 0x0, want_full_screen = 1, input_isatty = true, output_isatty = true, err_isatty = true, no_swap_file = 0, use_debug_break_level = -1, window_count = 1, window_layout = 0, diff_mode = 0, listen_addr = 0x0}
            cwd = 0x0
            __PRETTY_FUNCTION__ = "main"
            reading_input = true

    Thread 1 (Thread 0xf6dffb40 (LWP 15705)):
    0  0x0828b5e2 in update_size (ui=0xf7130000) at ../src/nvim/tui/tui.c:1231
            data = 0x0
            width = 0
            height = 0
            val = 0x8199d72 <xfree+17> "\311\303U\211\345\203\354(\203}\b"
            advance = 0
    1  0x08288f42 in sigwinch_cb (watcher=0xf622091c, signum=0, data=0xf7130000) at ../src/nvim/tui/tui.c:408
            ui = 0xf7130000
    2  0x0810a7bb in signal_event (argv=0xf6dfeeb8) at ../src/nvim/event/signal.c:47
            watcher = 0xf622091c
    3  0x0810869b in multiqueue_process_events (this=0xf620f020) at ../src/nvim/event/multiqueue.c:150
            event = {handler = 0x810a78b <signal_event>, argv = {0xf622091c, 0x82d27cb <uv__epoll_ctl+59>, 0xff, 0x14, 0x0, 0x0}}
            __PRETTY_FUNCTION__ = "multiqueue_process_events"
    4  0x08107eac in loop_poll_events (loop=0xf6dfefa0, ms=20) at ../src/nvim/event/loop.c:65
            mode = UV_RUN_ONCE
            timeout_expired = true
    5  0x08288d08 in tui_main (bridge=0xf70330e0, ui=0xf7130000) at ../src/nvim/tui/tui.c:362
            ms = 3
            tui_loop = {uv = {data = 0xf6dfefa0, active_handles = 2, handle_queue = {0xf6dff104, 0xf62204fc}, active_reqs = {0xf6dfefb0, 0xf6dfefb0}, stop_flag = 0, flags = 0, backend_fd = 15, pending_queue = {0xf6dfefc4, 0xf6dfefc4}, watcher_queue = {0xf6dfefcc, 0xf6dfefcc}, watchers = 0xf620c000, nwatchers = 30, nfds = 2, wq = {0xf6dfefe0, 0xf6dfefe0}, wq_mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {d = {__espins = 0, __elision = 0}, __list = {__next = 0x0}}}, __size = '\000' <repeats 23 times>, __align = 0}, wq_async = {data = 0x0, loop = 0xf6dfefa0, type = UV_ASYNC, close_cb = 0x0, handle_queue = {0xf6dff290, 0xf6dff104}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 49152, async_cb = 0x82d3fe0 <uv__work_done>, queue = {0xf6dff2b4, 0xf6dff084}, pending = 0}, cloexec_lock = {__data = {__lock = 0, __nr_readers = 0, __readers_wakeup = 0, __writer_wakeup = 0, __nr_readers_queued = 0, __nr_writers_queued = 0, __flags = 0 '\000', __shared = 0 '\000', __pad1 = 0 '\000', __pad2 = 0 '\000', __writer = 0}, __size = '\000' <repeats 31 times>, __align = 0}, closing_handles = 0x0, process_handles = {0xf6dff064, 0xf6dff064}, prepare_handles = {0xf6dff06c, 0xf6dff06c}, check_handles = {0xf6dff074, 0xf6dff074}, idle_handles = {0xf6dff07c, 0xf6dff07c}, async_handles = {0xf6dff034, 0xf6dff2b4}, async_unused = 0x0, async_io_watcher = {cb = 0x82c01f0 <uv__async_io>, pending_queue = {0xf6dff094, 0xf6dff094}, watcher_queue = {0xf6dff09c, 0xf6dff09c}, pevents = 1, events = 1, fd = 18}, async_wfd = -1, timer_heap = {min = 0x0, nelts = 0}, timer_counter = 5, time = 10125712, signal_pipefd = {16, 17}, signal_io_watcher = {cb = 0x82c9900 <uv__signal_event>, pending_queue = {0xf6dff0d8, 0xf6dff0d8}, watcher_queue = {0xf6dff0e0, 0xf6dff0e0}, pevents = 1, events = 1, fd = 16}, child_watcher = {data = 0x0, loop = 0xf6dfefa0, type = UV_SIGNAL, close_cb = 0x0, handle_queue = {0xf6dff010, 0xf6dfefa8}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 32768, signal_cb = 0x0, signum = 0, tree_entry = {rbe_left = 0x0, rbe_right = 0x0, rbe_parent = 0x0, rbe_color = 0}, caught_signals = 0, dispatched_signals = 0}, emfile_fd = 19, inotify_read_watcher = {cb = 0x0, pending_queue = {0x0, 0x0}, watcher_queue = {0x0, 0x0}, pevents = 0, events = 0, fd = 0}, inotify_watchers = 0x0, inotify_fd = -1}, events = 0xf620f000, thread_events = 0xf620f040, fast_events = 0xf620f020, children = 0xf620d000, children_watcher = {data = 0xf6dff1b0, loop = 0xf6dfefa0, type = UV_SIGNAL, close_cb = 0xf74a1ed4, handle_queue = {0xf6dff1e0, 0xf6dff290}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 8192, signal_cb = 0x0, signum = 0, tree_entry = {rbe_left = 0x5, rbe_right = 0x421, rbe_parent = 0xf7669aa0, rbe_color = -144272712}, caught_signals = 0, dispatched_signals = 0}, children_kill_timer = {data = 0xf76b9f94, loop = 0xf6dfefa0, type = UV_TIMER, close_cb = 0x0, handle_queue = {0xf6dff238, 0xf6dff190}, u = {fd = -153095436, reserved = {0xf6dff2f4, 0xf76f0608, 0xf6dff2b0, 0xf76fe91a}}, next_closing = 0x0, flags = 8192, timer_cb = 0x0, heap_node = {0xf7716a94, 0x0, 0xf7669aa0}, timeout = 5, repeat = 0, start_id = 0}, poll_timer = {data = 0xf620e008, loop = 0xf6dfefa0, type = UV_TIMER, close_cb = 0x0, handle_queue = {0xf622092c, 0xf6dff1e0}, u = {fd = -153095436, reserved = {0xf6dff2f4, 0xf6dff268, 0xf6dff260, 0xf76bb648}}, next_closing = 0x0, flags = 8192, timer_cb = 0x8108315 <timer_cb>, heap_node = {0x0, 0x0, 0x0}, timeout = 10125732, repeat = 20, start_id = 4}, async = {data = 0x0, loop = 0xf6dfefa0, type = UV_ASYNC, close_cb = 0x0, handle_queue = {0xf6dff190, 0xf6dff010}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0xf7716000}}, next_closing = 0x0, flags = 24576, async_cb = 0x810826b <async_cb>, queue = {0xf6dff084, 0xf6dff034}, pending = 0}, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {d = {__espins = 0, __elision = 0}, __list = {__next = 0x0}}}, __size = '\000' <repeats 23 times>, __align = 0}, recursive = 0}
            data = 0xf6210440
    6  0x08292172 in ui_thread_run (data=0xf70330e0) at ../src/nvim/ui_bridge.c:104
            bridge = 0xf70330e0
    7  0xf76bff5b in start_thread (arg=0xf6dffb40) at pthread_create.c:312
            __res = <optimized out>
            pd = 0xf6dffb40
            now = <optimized out>
            unwind_buf = {cancel_jmp_buf = {{jmp_buf = {-143843328, -153093312, 4001536, -153095192, -1395719907, -992530146}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
            not_first_call = <optimized out>
            pagesize_m1 = <optimized out>
            sp = <optimized out>
            freesize = <optimized out>
            __PRETTY_FUNCTION__ = "start_thread"
    8  0xf758a52e in clone () from /lib32/libc.so.6
    No symbol table info available.
2018-06-03 19:29:57 +02:00
54f72efa70 Merge #8467 'vim-patches' 2018-06-03 18:12:27 +02:00
513804ed91 oldtests: comment out highlight group assertions
nvim always defines default highlight groups so hlexists() returns 1.
This happens even with `-u NONE --cmd`.
2018-06-03 10:48:54 -04:00
3818a47211 oldtests: comment out v:none assertions
nvim does not support v:none for json_encode() and json_decode().
2018-06-03 10:41:51 -04:00
8652458184 Merge #8465 'vim-patch:8.0.0558,8.0.0562' 2018-06-03 09:36:03 +02:00
402a797d08 Merge #8456 'API: nvim_list_uis: include channel id' 2018-06-03 08:29:45 +02:00
7b53b5380a vim-patch:8.0.1311: no test for strpart()
Problem:    No test for strpart().
Solution:   Add a test. (Dominique Pelle, closes vim/vim#2347)
c7d16dce2f
2018-06-02 12:20:01 -04:00
1ef585d6dc vim-patch:8.0.0435: some functions are not tested
Problem:    Some functions are not tested.
Solution:   Add more tests for functions. (Dominique Pelle, closes vim/vim#1541)
41042f3cfd
2018-06-02 12:13:32 -04:00
803baf3631 vim-patch:8.0.0261: not enough test coverage for eval functions
Problem:    Not enough test coverage for eval functions.
Solution:   Add more tests. (Dominique Pelle, closes vim/vim#1420)
24c2e48ef8
2018-06-02 12:08:06 -04:00
b8331e1a1c tui: handle termguicolors rgb value in bridge for now
When/if TUI/bridge teardown is refactored to use events, this
commit can be reverted.
2018-06-02 17:44:48 +02:00
dad7882cac vim-patch:8.0.0562: not enough test coverage for syntax commands
Problem:    Not enough test coverage for syntax commands.
Solution:   Add a few more tests. (Dominique Pelle, closes vim/vim#1624)
ea588154d0
2018-06-02 08:26:35 -04:00
9cd75ce73e oldtests: add conceal check for patch 8.0.0562 2018-06-02 08:19:01 -04:00
37e00c6e65 ex_getln: remove msg_scrolled cargo-cult magic, fixes #8251 2018-06-02 10:07:07 +02:00
1efe65a155 ex_getln: don't redraw statusline on top of scrolled messages 2018-06-02 09:39:39 +02:00
245b1ad7fa vim-patch:8.0.0558: :ownsyntax is not tested
Problem:    The :ownsyntax command is not tested.
Solution:   Add a test. (Dominique Pelle, closes vim/vim#1622)
f8ec998613
2018-06-01 21:20:24 -04:00
39a03c0fe7 wildmenu: close before redrawing statusline (#8453)
Fixes #8385
2018-06-02 00:22:53 +02:00
49a497a67c vim-patch:8.0.0519: character classes not well tested (#8460)
Problem:    Character classes are not well tested. They can differ between
            platforms.
Solution:   Add tests.  In the documentation make clear which classes depend
            on what library function.  Only use :cntrl: and :graph: for ASCII.
            (Kazunobu Kuriyama, Dominique Pelle, closes vim/vim#1560)
            Update the documentation.
0c078fc7db
2018-06-01 19:57:22 +02:00
5be3865ce7 nvim_list_uis: include channel id 2018-06-01 10:20:13 +02:00
c7350f542a vim-patch:8.0.0516 (#8458)
Problem:    A large count on a normal command causes trouble. (Dominique
            Pelle)
Solution:   Make "opcount" long.
b1e04fca37
2018-06-01 08:59:29 +02:00
4339fdd802 Merge #8454 from janlazo/vim-8.0.0321 2018-06-01 08:56:47 +02:00
2a30a71596 vim-patch:8.0.1232: MS-Windows users are confused about default mappings
Problem:    MS-Windows users are confused about default mappings.
Solution:   Don't map keys in the console where they don't work.  Add a choice
            in the installer to use MS-Windows key bindings or not. (Christian
            Brabandt, Ken Takata, closes vim/vim#2093)
c3fdf7f80b
2018-05-30 23:05:47 -04:00
27694577c3 vim-patch:8.0.0321: errors when trying to use scripts in tiny version
Problem:    When using the tiny version trying to load the matchit plugin
            gives an error. On MS-Windows some default mappings fail.
Solution:   Add a check if the command used is available. (Christian Brabandt)
8cc2a9c062
2018-05-30 23:03:21 -04:00
3585df3f0b Merge #8451 from ckelsel/vim-8.0.0507 2018-05-30 09:35:07 +02:00
77a2eaf08b vim-patch:8.0.0515: ml_get errors in silent Ex mode (#8452)
Problem:    ml_get errors in silent Ex mode. (Dominique Pelle)
Solution:   Clear valid flags when setting the cursor.  Set the topline when
            not in full screen mode.
d5d37537d1
2018-05-30 09:11:52 +02:00
6a0c727a0b vim-patch:8.0.0511: message for skipping client-server tests is unclear
Problem:    Menuage for skipping client-server tests is unclear.
Solution:   Be more specific about what's missing (Hirohito Higashi, Kazunobu
            Kuriyama)
a683ec44c3
2018-05-30 09:01:36 +08:00
bce3e95691 vim-patch:8.0.0507: client-server tests fail when $DISPLAY is not set
Problem:    Client-server tests fail when $DISPLAY is not set.
Solution:   Check for E240 before running the test.
a2845b8f5a
2018-05-30 08:45:07 +08:00
f711b63513 Merge #8434 'win/build: prefer Ninja' 2018-05-27 19:38:17 +02:00
2bfdceba37 Change to use bundled libuv to build luv 2018-05-27 18:16:29 +09:00
5b2cee03c8 vim-patch:8.0.0505: failed window split for :stag not handled (#8439)
Problem:    Failed window split for :stag not handled. (Coverity CID 99204)
Solution:   If the split fails skip to the end. (bstaletic, closes vim/vim#1577)
ba6ad17378
2018-05-26 11:29:12 +02:00
47fa9de580 vim-patch:8.0.0496: insufficient testing for folding (#8438)
Problem:    Insufficient testing for folding.
Solution:   Add a couple more fold tests. (Dominique Pelle, closes vim/vim#1579)
518c9b133b
2018-05-26 11:26:01 +02:00
438f2b6474 Merge #8436 win: test: cleanup on exit' 2018-05-26 11:14:59 +02:00
e21f454e11 fixup: always delete Xfile, fix exit code check
after_each + os.remove ensures Xfile is deleted after every test.
Windows exit code is inconsistent.
2018-05-25 07:43:02 -04:00
05282069db win: test: close shada file before os.remove 2018-05-24 22:11:16 -04:00
51db8ebf67 win: test: delete sautest/ 2018-05-24 22:11:15 -04:00
64177e3e98 win: test: don't test symlink if not admin user 2018-05-24 22:11:14 -04:00
209f05b487 win: test: disable non-admin failing tests
mkfifo (msysgit) does not work outside of msys2 environment.
gzip tests fail on Windows.

mklink requires admin privs for file symbolic links so mklink fails.
2018-05-24 22:11:12 -04:00
d2c460638c vim-patch:8.0.0454: compiler warnings for "always true" comparison (#8431)
Problem:    Compiler warnings for comparing unsigned char with 256 always
            being true. (Manuel Ortega)
Solution:   Add type cast.
977d037336
2018-05-24 23:32:32 +02:00
c67139f8aa vim-patch:8.0.0503: endless loop in updating folds with 32 bit ints (#8433)
Problem:    Endless loop in updating folds with 32 bit ints.
Solution:   Subtract from LHS instead of add to the RHS. (Matthew Malcomson)
vim/vim@9d20ce6
2018-05-24 23:30:21 +02:00
2ca6223967 API: Accept empty lists as dictionaries 2018-05-23 22:07:27 +02:00
333679ad0e Add empty options dict to buf_attach 2018-05-23 22:07:27 +02:00
65e7f6f0b9 Rename some more, fixe borked renaming 2018-05-23 22:07:27 +02:00
0bee3925ab Send changedtick as first event if buffer contents weren't requested 2018-05-23 22:07:27 +02:00
ad151847f1 Unify updates_start and updates to lines_event
Also rename changedtick -> changedtick_event
2018-05-23 22:07:27 +02:00
8ef3fb4e73 Use autogenerated declarations 2018-05-23 22:07:27 +02:00
491efc89d2 Lint 2018-05-23 22:07:27 +02:00
3866137eed Update test 2018-05-23 22:07:27 +02:00
e7451f8a91 Some renamings and doc changes 2018-05-23 22:07:27 +02:00
de5d1e863c Try fixing that test on travis 2018-05-23 22:07:27 +02:00
5aa8af7cdb Increase sendkeys timeout 2018-05-23 22:07:27 +02:00
2106bada5b Enable -Wconversion 2018-05-23 22:07:27 +02:00
6bdcbef2f5 The grand renaming 2018-05-23 22:07:27 +02:00
a1d831a49c Doc 2018-05-23 22:07:27 +02:00
995a2fad8c Fix memory leak 2018-05-23 22:07:27 +02:00
ec215a1962 Fix tests on windows
`cat` is distributed with neovim, so when can use it everywhere, as
opposed to `sort`.

The diffget test fails for unknown reasons on appveyor, mark it pending
for now.
2018-05-23 22:07:27 +02:00
61f467499b Bump up buffer capacity to 2GB 2018-05-23 22:07:27 +02:00
0476e0aef3 Make LiveUpdate return lastline instead of numreplaced
In analogy to `nvim_buf_set_lines`.
2018-05-23 22:07:27 +02:00
37b8e95fd6 Lint 2018-05-23 22:07:27 +02:00
8bcc011959 Make separate functions to start/stop live updates 2018-05-23 22:07:27 +02:00
71816e584c Adjust FUNC_API_SINCE for nvim_buf_live_updates 2018-05-23 22:07:27 +02:00
bafae1c427 Add argument to not send a buffers content when updates are enabled
Add a test.
2018-05-23 22:07:27 +02:00
9e97f14de2 Update to latest master 2018-05-23 22:07:27 +02:00
79184809bb Tests for buffer updates
Originally written by @phodge in
https://github.com/neovim/neovim/pull/5269.
2018-05-23 22:07:27 +02:00
db15a3b8f7 API: Document buffer updates
Originally written by @phodge in
https://github.com/neovim/neovim/pull/5269.
2018-05-23 22:07:27 +02:00
edcc73e766 API: Implement buffer updates
Originally written by @phodge in
https://github.com/neovim/neovim/pull/5269.
2018-05-23 22:07:27 +02:00
418abfc9d0 Merge pull request #6743 from bfredl/channel_info
Add methods to enumerate channels and clients to identify themselves
2018-05-23 20:34:27 +02:00
6da4548f0e api: list information about all channels/jobs.
Fire autocmd when channel opens or its info changes.
Add a way for API clients can describe themselves.
2018-05-23 18:18:16 +02:00
7f0095cc94 Change to use RUNTIME target for DLL installation 2018-05-23 22:13:53 +09:00
d337965e09 Change to not use library prefix on MSVC 2018-05-23 22:12:37 +09:00
655e3167ee Change conditions to more generally 2018-05-23 20:06:37 +09:00
fefb67fa88 Remove unnecessary copy of header 2018-05-23 20:03:53 +09:00
f1bc152fa0 doc: remove mentions of vimrc_example
closes #8426
2018-05-22 22:46:44 +02:00
fdf17e33d5 Change to always use cmake to build libuv on Windows 2018-05-22 21:42:05 +09:00
5000c9dc1f Change to use cmake to build libuv 2018-05-22 01:08:41 +09:00
828c9baad2 Change to enable build by Ninja on Windows 2018-05-21 19:32:19 +09:00
1642917f9b test/old: fix test filename 2018-05-20 19:12:34 +02:00
a93658502c win/build: Fix install (#8420) 2018-05-20 18:50:07 +02:00
35cc15e157 Merge #8419 'Fix PVS warnings' 2018-05-20 09:42:18 +02:00
ff0350d2ed Merge #8417 'vim-patch: 8.0.0489, 8.0.0491, 8.0.0495, 8.0.0500' 2018-05-20 09:14:27 +02:00
efa10881e5 deps: update to msgpack 3.0.0
Upgrade msgpack so that Nvim 0.3.0 builds on gcc 8.

ref #7506
2018-05-20 08:52:20 +02:00
5284b85d07 socket.c: Ignore PVS/V547: False positive
https://github.com/neovim/neovim/pull/8218#issuecomment-383412049
2018-05-20 08:46:26 +02:00
e24d338194 getchar.c: Fix PVS/V522: Dereference of null pointer mp_match 2018-05-20 08:46:17 +02:00
8e20b77bd1 strings.c: Fix PVS/V781: value of 'l + 1' is checked after it was used 2018-05-20 08:36:40 +02:00
7e9afca990 win/package: move gui shim to its runtime folder (#8418)
Close #7517

gui shim is for nvim-qt only.
2018-05-20 08:27:52 +02:00
fd5cc7dd0a vim-patch:8.0.0500: quotestar test is still a bit flaky
Problem:    Quotestar test is still a bit flaky.
Solution:   Add a slower check for v:version.
4889ad7c6c
2018-05-20 10:31:29 +08:00
4dd614e51a vim-patch:8.0.0495: quotestar test uses timer instead of timeout
Problem:    The quotestar test uses a timer instead of a timeout, thus it
            cannot be rerun like a flaky test.
Solution:   Remove the timer and add a timeout. (Kazunobu Kuriyama)
f5610da7a8
2018-05-20 10:28:18 +08:00
3046f4499b vim-patch:8.0.0491: quotestar test fails when features are missing
Problem:    The quotestar test fails when a required feature is missing.
Solution:   Prepend "Skipped" to the thrown exception.
bfd830d3e2
2018-05-20 10:22:38 +08:00
d0e07c043b vim-patch:8.0.0489: clipboard and "* register is not tested
Problem:    Clipboard and "* register is not tested.
Solution:   Add a test for Mac and X11. (Kazunobu Kuriyama)
7dd4850698
2018-05-20 10:19:41 +08:00
9af2e144a6 Merge #8411 from justinmk/vimpatches 2018-05-19 13:28:09 +02:00
725400d75d version.c: update [ci skip] (#8118)
vim-patch:8.0.0312: failure when a channel receives a split json message
vim-patch:8.0.0313: not enough testing for GUI functionality
vim-patch:8.0.0317: no test for setting 'guifont'
vim-patch:8.0.0318: small mistake in 7x13 font name
vim-patch:8.0.0329: xfontset and guifontwide are not tested
vim-patch:8.0.0332: GUI test fails on some systems
vim-patch:8.0.0348: using shadow dir on Mac lack +clipboard
vim-patch:8.0.0356: leaking memory when setting 'ttytype'
vim-patch:8.0.0362: tests fail on MS-Windows
vim-patch:8.0.0371: leaking memory when setting v:completed_item
vim-patch:8.0.0375: the "+ register is not tested
vim-patch:8.0.0382: warning in tiny build for unused variable
vim-patch:8.0.0383: misplaced vim/vim#ifdef
vim-patch:8.0.0384: timer test failed for no apparent reason
vim-patch:8.0.0403: GUI tests may fail
vim-patch:8.0.0409: set_progpath is defined but not always used              
vim-patch:8.0.0415: balloon test fails on MS-Windows                         
vim-patch:8.0.0416: setting v:progpath is not quite right                    
vim-patch:8.0.0419: test for v:progpath fails on MS-Windows                  
vim-patch:8.0.0438:                                                          
vim-patch:8.0.0441: dead code in vim/vim#ifdef                               
vim-patch:8.0.0447: getting font name does not work on X11                   
vim-patch:8.0.0450: v:progpath is not reliably set                           
vim-patch:8.0.0456: typo in MinGW test makefile                              
vim-patch:8.0.0460: can't build on HPUX                                      
vim-patch:8.0.0463: side effects from resetting 'compatible' in defaults.vim 
vim-patch:8.0.0464: can't find executable name on Solaris and FreeBSD        
vim-patch 8.0.0809: MS-Windows: tests hang                                   
vim-patch 8.0.0810: MS-Windows: tests still hang                             
vim-patch 8.0.0811: MS-Windows: test_expand_dllpath fails                    
vim-patch:8.0.0881: win32.mak no longer included in Windows SDK              
vim-patch:8.0.0925: MS-Windows GUI: channel I/O not handled right away       
vim-patch:8.0.1121: can uncheck executables in MS-Windows installer          
vim-patch:8.0.1141: MS-Windows build dependencies are incomplete
vim-patch:8.0.1150: MS-Windows GUI: dialog font size is incorrect
vim-patch:8.0.1180: MS-Windows testclean target deletes the color script
vim-patch:8.0.1181: tests using Vim command fail on MS-Windows
vim-patch:8.0.1191: MS-Windows: missing 32 and 64 bit files in installer
vim-patch:8.0.1197: MS-Windows build instructions are not up to date
vim-patch:8.0.1234: MS-Windows: composing chars are not shown properly
vim-patch:8.0.1472: MS-Windows: nsis installer is a bit slow
2018-05-19 13:26:52 +02:00
fdd59ef901 vim-patch:8.0.0559: setting ttytype to xxx does not always fail
Problem:    Setting ttytype to xxx does not always fail as expected. (Marvin
            Schmidt)
Solution:   Catch both possible errors. (closes vim/vim#1601)
f803a76978
2018-05-19 12:46:25 +02:00
39f16a0fee vim-patch:8.0.0342: double free with EXITFREE and setting 'ttytype'
Problem:    Double free when compiled with EXITFREE and setting 'ttytype'.
Solution:   Avoid setting P_ALLOCED on 'ttytype'. (Dominique Pelle,
            closes vim/vim#1461)
673911457d
2018-05-19 12:46:24 +02:00
a5de6770c5 vim-patch:8.0.0304: assign test fails in the GUI
Problem:    Assign test fails in the GUI.
Solution:   Skip the test for setting t_k1.
1fb0d49803

vim-patch:8.0.0354
2018-05-19 12:46:24 +02:00
0ea685ed9e test/old: remove abort from test declaration
No idea why this was added, it isn't in the Vim patch. The Vim (oldtest)
test-runner doesn't work with `Test_` functions marked as `abort`.
2018-05-19 12:38:14 +02:00
fb28b0c734 Merge #8377 'TextChangedP autocommand' 2018-05-19 11:48:37 +02:00
d995825c66 Merge #8377 'TextChangedP autocommand' 2018-05-19 11:44:52 +02:00
a82ac8accb vim-patch:8.0.0497: arabic support is not fully tested (#8404)
Problem:    Arabic support is not fully tested.
Solution:   Add more tests for the untested functions.  Comment out
            unreachable code.
vim/vim@3ff2f09
2018-05-19 10:37:10 +02:00
e3707c312a win: set TERMINFO_DIRS at build-time (#8408)
Fixes abnormal terminaion when TERM environment variable
is set in Windows.
2018-05-19 00:19:04 +02:00
50ec030b26 terminal: tickle statusline on entering #8323 2018-05-18 23:55:17 +02:00
3de81ea351 test: inccommand_spec: retry unreliable test (#8311) 2018-05-18 19:41:14 +02:00
2ed2939597 Merge #8406 'stdpath(): handle NULL default values' 2018-05-18 19:33:28 +02:00
91c4de83c9 cleanup 2018-05-18 19:04:37 +02:00
23f052edac main.c: remove useless call
Vim's vimrc_found() also handles setting 'nocompatible', that's why it
does vimrc_found(NULL, NULL).
2018-05-18 19:04:37 +02:00
26d5a981eb do not pass NULL to os_getenv
closes #8393
2018-05-18 19:04:37 +02:00
0ed297bdb4 Merge pull request #8381 from bfredl/chancrash
channel: avoid references to non-rooted vimL list with output
2018-05-18 10:10:45 +02:00
a676c658cc channel: avoid references to non-rooted vimL list with output
likely fixes #7768 #7913

If multiple internal stream callbacks were recieved before vimL
callbacks got called, only invoke one vimL callback with all data.
2018-05-17 19:09:32 +02:00
e121b1dbe7 Merge #8331 'handle various errors'
closes #8331
2018-05-17 09:14:54 +02:00
d2944e6a29 mf_open(): never fails (except for OOM) 2018-05-17 09:03:44 +02:00
c2d1684e05 coverity/13702: open_spellbuf: handle failed ml_open() 2018-05-17 09:03:13 +02:00
189a5f2b95 coverity/13713: do_pending_operator: handle failed u_save_cursor() 2018-05-17 09:03:02 +02:00
aea70b4404 coverity/13709: spell_add_word: handle failed fseek()
Check the return status after removing a duplicate word.  Add a
log for a nonzero return status.
2018-05-17 09:01:05 +02:00
32df42549a coverity/13700: ignore failed win_split()
win_split() does EMSG for all failure cases, so we don't need to log it.

Easiest thing to do here is ignore the return value (otherwise we need
to do some cleanup and might require some refactoring. jumpto_tag() can
deal with a failed split, so it's no big deal.
2018-05-17 08:49:14 +02:00
b44b533ada coverity/13969: handle u_save() failure
Looking at the implementation of u_save suggests that its failure is
a normal and expected situation (e.g. if undo isn't allowed for some
reason, it will fail). Also (most of) the other calls to u_save() in
do_put() return early.
2018-05-17 08:48:42 +02:00
2aa308c685 Merge #5658 'Apply :lmap in macros' 2018-05-17 02:13:31 +02:00
de7a0bdc35 Merge pull request #8383 from bfredl/timercrash
always run timer close callback after due callback
2018-05-15 07:47:33 +02:00
efb6caa39b test: nodejs_spec: fix test after upstream API change
closes https://github.com/neovim/node-client/issues/72
2018-05-15 00:03:21 +02:00
021c5875c1 vim-patch:8.0.1494: no autocmd triggered in Insert mode with visible popup menu
Problem:    No autocmd triggered in Insert mode with visible popup menu.
Solution:   Add TextChangedP. (Prabir Shrestha, Christian Brabandt,
            closes vim/vim#2372, closes vim/vim#1691)
            Fix that the TextChanged autocommands are not always triggered
            when sourcing a script.

5a09343719
2018-05-14 19:14:25 +08:00
11b55aa004 timer: make sure to free callback after the last timer due callback
fixes #6974

Before this change, the partial could be freed before the last due
callback got invoked, which caused a use-after-free when the due
callback called the partial.
2018-05-13 19:59:28 +02:00
36b2e3f743 Merge #8375 'API: nvim_get_commands'
closes #7833
ref #8029
2018-05-12 08:17:21 +02:00
137eedb4ed API: nvim_get_commands(): return Dictionary 2018-05-12 07:29:21 +02:00
cb6672853a API: nvim_get_commands(): builtin is irrelevant for buffer-local
builtin commands are never buffer-local, so we can return empty for that
case.
2018-05-12 07:29:21 +02:00
738bffea2c API: nvim_get_commands(): more attributes
Support more :command attributes:
  -bang
  -bar
  -register
2018-05-11 13:50:00 +02:00
9fa7727ce0 API: nvim_get_commands(): always return keys
- Always return all keys, with at least NIL value.
- Require `opts` param to be {"builtin":false}
- Validate `opts` param
2018-05-11 13:20:43 +02:00
25b6304840 API: nvim_get_commands() 2018-05-11 13:20:19 +02:00
273d2cd5d5 Merge #8329 'API: Make nvim_set_option() update :verbose set …' 2018-05-11 10:08:09 +02:00
e31d8ed36a lint 2018-05-10 22:31:55 -05:00
8d40b3617c Merge #8371 'API: more reliable/descriptive VimL errors' 2018-05-10 19:18:58 +02:00
1cd8517344 man.vim: s:get_path(): trim newline in all cases
ref #8372
2018-05-10 16:03:13 +02:00
966e7abc49 msgpack.vim: require python3 on Windows
timestamp.strftime('%s') workaround only works on unix.

ref: https://github.com/neovim/neovim/pull/8371#discussion_r186311766
2018-05-10 15:56:13 +02:00
3a6b80f2f4 UI: redraw statusline when entering cmdline (#8347) 2018-05-10 14:55:07 +02:00
f1a3075553 man.vim: get() first item if -w returns multiple paths #8372
OpenBSD's man returns all candidates when searching with -w instead of
the first one it finds.  So this patch takes the first one if multiple
entries are found.

closes #8372
closes #8341
2018-05-10 14:42:10 +02:00
cb8ea55d71 nvim_eval: fix memory leak 2018-05-10 04:01:25 +02:00
79a0d82755 test: API: fix tests after improved error capture 2018-05-10 04:01:25 +02:00
2326a4ac3a API: nvim_eval(): return non-generic VimL errors
Use the same pattern as nvim_call_function (_call_function).
2018-05-09 23:18:39 +02:00
32b0470b03 API: better way to capture abort-causing non-exception errors
This condition is not perfectly reliable:
    (did_emsg && force_abort && !current_exception)

The more proper way to check for abort-causing non-exception errors is
to set up `msg_list` using the "pattern" given by do_cmdline().
2018-05-09 23:18:38 +02:00
c9f3174075 API: return non-generic VimL errors
- Return VimL errors instead of generic errors for:
  - nvim_call_function
  - nvim_call_dict_function
- Fix tests which were silently broken before this change.

This violates #6150 where we agreed not to translate API errors.  But
that can be fixed later.
2018-05-09 23:18:38 +02:00
33bfea31b0 msgpack.vim: fix syntax errors, python2 errors 2018-05-09 23:18:38 +02:00
34b6a3d944 doc 2018-05-09 23:18:38 +02:00
ebb1acb3c0 Merge #8353 'API: nvim_call_dict_function' 2018-05-06 16:27:02 +02:00
cabffb0182 API: nvim_call_dict_function: expect actual function, not name 2018-05-06 14:52:21 +02:00
fe7ab60af7 API: nvim_call_dict_function: eliminate internal param
The `internal` param is difficult to explain, and will rarely be
anything but `true`.  To avoid it, use a hack: check if the resolved
dict value starts with "function(".
2018-05-06 14:38:26 +02:00
19c2ce1901 refactor: nvim_call_dict_function
- Add test coverage for errors.
- Rename, rearrange.
2018-05-06 14:38:26 +02:00
124275dd58 API: nvim_call_dict_function #3032 2018-05-06 14:38:26 +02:00
f46f138fb6 test: nvim_call_function: verify "too many arguments" error 2018-05-06 14:38:26 +02:00
8abd677d82 CI/travis: remove reference to non-exisiting script (#8366) 2018-05-06 11:40:59 +02:00
f8575fd1e4 CI/travis: fix building 32bit on linux (#8365)
Fixes #8351
2018-05-06 11:33:21 +02:00
8ce6393048 terminal: Leave 'relativenumber' alone (#8360)
ref #6796
2018-05-05 18:45:15 +02:00
bcc9a74e48 Merge pull request #8333 from jamessan/ccache
travis: Enable ccache
2018-05-04 19:43:43 -04:00
5009317525 Merge pull request #8358 from mhinz/screen
[RFC] screen: avoid artifacts
2018-05-04 19:42:58 -04:00
ec1a7791b0 test: screen artifacts 2018-05-04 22:14:27 +02:00
16ce2e006b screen: avoid artifacts
Put back the condition that was accidentally removed in
d42f934bcb

  -    if (enc_utf8 && ScreenLinesUC[off] != 0)
  -      bytes[utfc_char2bytes(off, bytes)] = NUL;
  -    else if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e) {
  -      bytes[0] = ScreenLines[off];
  -      bytes[1] = ScreenLines2[off];
  -      bytes[2] = NUL;
  -    } else if (enc_dbcs && MB_BYTE2LEN(bytes[0]) > 1) {
  -      bytes[1] = ScreenLines[off + 1];
  -      bytes[2] = NUL;
  -    }
  +    bytes[utfc_char2bytes(off, bytes)] = NUL;

Fixes #8357
2018-05-04 20:59:51 +02:00
0a349fd77d Merge pull request #8356 from bfredl/tabmsg
messages: redraw tabline if it was overdrawn by messages
2018-05-04 20:54:08 +02:00
0d037ad978 messages: redraw tabline if it was overdrawn by messages
fixes #8354

Regression from #8088, where we try to avoid clearing the screen
if not absolutely necessary
2018-05-04 09:15:19 +02:00
7170de1971 api: Make nvim_set_option() update :verbose set ...
Make `:verbose set ...` show when an option was last modified by an
API client or Lua script/chunk. In the case of an API client, the
channel ID is displayed.
2018-05-03 21:05:20 -05:00
e46534b423 Merge #4486 'refactor: Remove maxmem, maxmemtot options'
After this change we never release blocks from memory (in practice it
never happened because the memory limits are never reached).  Let the OS
take care of that.

---

On today's systems the 'maxmem' and 'maxmemtot' values are huge (4+ GB)
so the limits are never reached in practice, but Vim wastes a lot of
time checking if the limit was reached.

If the limit is reached Vim starts saving pieces of the swap file that were in
memory to the disk. Said in a different way: Vim implements its own
memory-paging mechanism. This is unnecessary and inefficient since the
operating system already has virtual memory and will swap to the disk if
programs start using too much memory.

This change does...

1. Reduce the number of config options and need for documentation.
2. Make the code more efficient as we don't have to keep track of memory
   usage nor check if the memory limits were reached to start swapping
   to disk every time we need memory for buffers.
3. Simplify the code. Once memfile.c is simple enough it could be
   replaced by actual operating system memory mapping (mmap,
   MemoryViewOfFile...). This change does not prevent Vim to recover
   changes from swap files since the swapping code is never triggered
   with the huge limits set by default.
2018-05-02 10:14:42 +02:00
c9e340b7be Point README to fullhtml PVS report rather then error list
[ci skip]
2018-05-01 21:00:16 +03:00
d5da357925 travis: Enable ccache 2018-05-01 07:02:44 -04:00
58b210e114 :digraphs : highlight with hl-SpecialKey #2690
closes #2690
2018-05-01 11:33:50 +02:00
5d6732ff09 Merge #8335 from blueyed/provider 2018-05-01 08:41:43 +02:00
1f2301eacf health#provider: fix sys.path for Python
Remove "" from sys.path (typically the first entry), which could cause
e.g. "logging" to be added from the current directory.
This gets done already for loading the host in
runtime/autoload/provider/pythonx.vim.
2018-04-30 16:54:35 +02:00
7d8327fd30 health#provider: improve error reporting
- quote command, so that e.g. markdown handling is not applied to `__init__.py`
- include cwd
2018-04-30 16:50:01 +02:00
87d3f265bc health#provider: fix logic with s:shellify
It should be quoted if there is any character that needs escaping, but
not if there is a character that does not need escaping.
2018-04-30 16:48:32 +02:00
4744142fad lint 2018-04-28 11:01:16 +02:00
6208c7fb98 doc: clarify stdout_buffered docs (#8299)
Fixes #8150
2018-04-28 00:45:55 +02:00
7e7c3111b6 Merge #4985
closes #4985
2018-04-27 23:37:30 +02:00
bd17ef75b3 test/unit/undo_spec.lua: fixup after rebase #4985 2018-04-27 13:06:41 +02:00
d6a1640260 test/util: move general functions into global helpers 2018-04-27 13:06:41 +02:00
34f29ac858 test/unit: some unit tests for undo.c #4985 2018-04-27 13:06:31 +02:00
53f11dcfc7 Merge #8218 'Fix errors reported by PVS'
closes #4983
2018-04-27 09:25:02 +02:00
009ccfe170 win: open child stdio handles in overlapped-mode (#8113)
This will be used e.g. by the python client for native asyncio support
2018-04-25 10:11:08 +02:00
a369385009 ci/travis: fix restore from cache #8316
closes #8281
2018-04-24 21:43:13 +02:00
ad60927d09 Merge #8304 "default to 'nofsync'" 2018-04-24 02:51:07 +02:00
77cb14cc6d API: nvim__stats()
Use it to verify fsync() behavior.
2018-04-24 00:44:06 +02:00
32f3937477 test: fsync() codepaths 2018-04-23 21:29:07 +02:00
ZyX
4ce8521ee4 pvscheck: Disable V011 warning 2018-04-22 20:54:17 +03:00
ZyX
a37819dbb1 spellfile: Fix clint error 2018-04-22 20:35:17 +03:00
ZyX
953d167015 syntax: Fix PVS/V560: condition was already checked 2018-04-22 20:34:32 +03:00
ZyX
76c2a60ff3 spellfile: Fix PVS/V547: allocator now never returns NULL 2018-04-22 20:33:42 +03:00
ZyX
03c2844b53 functests: Fix testlint errors 2018-04-22 20:32:25 +03:00
ZyX
4bab9d34e6 *: Fix clint errors 2018-04-22 20:31:40 +03:00
ffb8904913 tui/input.c: add support for mouse release events in urxvt (#8309)
Some terminals don't report which buttons are involved in some mouse
events. For example, the urxvt protocol
(http://www.huge-man-linux.net/man7/urxvt.html section "Mouse
reporting") does not report which button has been released.
In this case libtermkey reports button 0
(http://www.leonerd.org.uk/code/libtermkey/doc/termkey_interpret_mouse.3.html)

Up to now, forward_mouse_event did not handle button==0.
On press events there is not much we can do, and we keep the
current behavior which is dropping the event. But on drag-and-release
events we can compensate by remembering the last button pressed.

fixes #3182 for urxvt
fixes #5400
2018-04-22 19:26:04 +02:00
ZyX
4b41680828 window: Fix PVS/V547: expression already checked in previous if() 2018-04-22 20:25:44 +03:00
ZyX
c8648daab3 window: Silence PVS/V547: height may be changed by curwin ptr 2018-04-22 20:24:57 +03:00
ZyX
d9c010e45d api/vim: Fix PVS/V547: node was already dereferenced, so can’t be NULL 2018-04-22 20:23:50 +03:00
ZyX
a90672fc3d undo: Silence PVS/V547: expression may be false on other system 2018-04-22 20:22:46 +03:00
ZyX
43df2edd20 ui_bridge: Silence PVS/V547: assuming stopped may be changed via ptr 2018-04-22 20:21:55 +03:00
ZyX
6c2b442ee0 eval/typval: Silence PVS/V576: format is correct 2018-04-22 20:20:53 +03:00
ZyX
f50670aeff ugrid: Silence PVS/V625: UGRID_FOREACH_CELL may be used for one row 2018-04-22 20:18:29 +03:00
ZyX
f9b728e2f8 tui: Silence PVS/V560: condition is set to true in prev-previous if() 2018-04-22 20:16:58 +03:00
ZyX
9da2e7b021 syntax: Fix PVS/V560: condition was checked in previous if(), breaking 2018-04-22 20:15:42 +03:00
ZyX
3f4ec1aed2 syntax: Fix PVS/V547: condition was checked
In surrounding if() `off` was checked for being non-zero and in previous if() it
was checked for being positive.
2018-04-22 20:15:42 +03:00
ZyX
e724667ef4 syntax: Silence PVS/V560: condition is always true at that point 2018-04-22 20:12:23 +03:00
ZyX
2a951d16a4 syntax: Silence PVS/V522: retval is always non-NULL on this round 2018-04-22 20:08:49 +03:00
ZyX
5ba267722c syntax: Fix PVS/V560: condition checked in previous if() 2018-04-22 20:06:35 +03:00
ZyX
0eaecbaf47 strings: Fix PVS/V547: condition already checked by surrounding if 2018-04-22 20:05:32 +03:00
ZyX
b9b17a58da strings: Fix PVS/V779: wrong assert() position 2018-04-22 20:03:48 +03:00
ZyX
fb0c35105f spellfile: Silence PVS/V547: expression may be true on other systems 2018-04-22 20:02:50 +03:00
ZyX
f45df71081 spellfile: Fix PVS/V547: allocator never returns NULL now 2018-04-22 20:02:50 +03:00
ZyX
0ba2ec0bae spellfile: Fix PVS/V560: allocator never returns NULL now 2018-04-22 19:54:40 +03:00
ZyX
60577eeaf5 spell: Fix PVS/V512: use of sprintf() 2018-04-22 19:53:06 +03:00
ZyX
9f3e67a814 search: Fix PVS/V547: allocator never returns NULL now 2018-04-22 19:50:13 +03:00
ZyX
2cdf9d1388 search: Fix PVS/V560: condition checked in previous if with goto 2018-04-22 19:47:45 +03:00
ZyX
db1c9b625c search: Fix PVS/V547: condition already checked in surrounding if 2018-04-22 19:46:27 +03:00
ZyX
b144a77f38 search: Fix PVS/V547: checking variable right after assigning it 2018-04-22 19:44:56 +03:00
ZyX
3c7cc03f34 screen: Fix PVS/V560: col never reassigned in this part of code 2018-04-22 19:43:27 +03:00
ZyX
4ff4e66fd7 screen: Fix PVS/V519: duplicate successive assignment 2018-04-22 19:40:47 +03:00
ZyX
9c981f5a19 screen: Fix PVS/V560: condition was checked in surrounding if 2018-04-22 19:39:39 +03:00
ZyX
e3bffa47a6 globals: Do not use false for enc_dbcs
Based on screen.c code this value is not a boolean, so `false` is not 
appropriate. It should be either 0 or one of DBCS_… values.
2018-04-22 19:33:46 +03:00
ZyX
d42f934bcb screen: Get rid of ScreenLines2 as it is no longer used
Should also fix some PVS warnings in process.
2018-04-22 19:32:17 +03:00
ZyX
adfc1212b5 regexp_nfa: Silence PVS/V560: current code is more obvious
While warning is technically true (cannot enter this case with `state->c` 
greater then NFA_Z…9) it makes condition less readable and relies on knownledge 
of enum internal structure.
2018-04-22 19:09:20 +03:00
ZyX
190cc43cf3 quickfix: Silence PVS/V560: memory is referenced and may be changed 2018-04-22 18:59:23 +03:00
ZyX
3ee187b770 quickfix: Fix PVS/V547: allocator never returns NULL now 2018-04-22 18:57:34 +03:00
ZyX
4d43ce85f1 quickfix: Fix PVS/V547,V560: no conversion with fixed &encoding 2018-04-22 18:54:52 +03:00
d05712fbe7 inccommand: pause :terminal redraws (#8307)
fix #5584
2018-04-22 12:26:16 +02:00
51af911a27 inccommand: do not execute trailing commands #8256
fix #7494
2018-04-21 13:06:46 +02:00
b71697bc67 lint 2018-04-21 12:51:27 +02:00
9139bf81cf defaults: disable 'fsync'
ref #6725

fsync() is very slow on some systems.  And since the parent commit, Nvim
is smarter about flushing files at certain times (e.g. CursorHold),
regardless of whether 'fsync' is enabled.  So it's less risky to disable
'fsync'.

Profiling showed slow (2-4s) :write and :quit caused by fsync():

:quit
    shada_write_file(NULL, false);

:write + fsync
    0  0x00007f72da567b2d in fsync () at ../sysdeps/unix/syscall-template.S:84
    1  0x0000000000638970 in uv__fs_fsync (req=<optimized out>) at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:150
    2  uv__fs_work (w=<optimized out>) at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:953
    3  0x0000000000639a70 in uv_fs_fsync (loop=<optimized out>, req=<optimized out>, file=41, cb=0x7f72da567b2d <fsync+45>)
       at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:1094
    4  0x0000000000573694 in os_fsync (fd=41) at ../src/nvim/os/fs.c:631
    5  0x00000000004ec9dc in buf_write (buf=<optimized out>, fname=<optimized out>, sfname=<optimized out>, start=1, end=1997, eap=0x7fffc864c570,
       append=<optimized out>, forceit=<optimized out>, reset_changed=<optimized out>, filtering=<optimized out>) at ../src/nvim/fileio.c:3387
    6  0x00000000004b44ff in do_write (eap=0x7fffc864c570) at ../src/nvim/ex_cmds.c:1745
    ...

:write + nofsync
    0  0x00007f72da567b2d in fsync () at ../sysdeps/unix/syscall-template.S:84
    1  0x0000000000638970 in uv__fs_fsync (req=<optimized out>) at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:150
    2  uv__fs_work (w=<optimized out>) at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:953
    3  0x0000000000639a70 in uv_fs_fsync (loop=<optimized out>, req=<optimized out>, file=36, cb=0x7f72da567b2d <fsync+45>)
       at /home/vagrant/neovim/.deps/build/src/libuv/src/unix/fs.c:1094
    4  0x0000000000573694 in os_fsync (fd=36) at ../src/nvim/os/fs.c:631
    5  0x0000000000528f5a in mf_sync (mfp=0x7f72d8968d00, flags=5) at ../src/nvim/memfile.c:466
    6  0x000000000052d569 in ml_preserve (buf=0x7f72d890f000, message=0) at ../src/nvim/memline.c:1659
    7  0x00000000004ebadf in buf_write (buf=<optimized out>, fname=<optimized out>, sfname=<optimized out>, start=1, end=1997, eap=0x7fffc864c570,
       append=<optimized out>, forceit=<optimized out>, reset_changed=<optimized out>, filtering=<optimized out>) at ../src/nvim/fileio.c:3071
    8  0x00000000004b44ff in do_write (eap=0x7fffc864c570) at ../src/nvim/ex_cmds.c:1745
    ...
2018-04-21 12:51:27 +02:00
498731615c IO: let 'fsync' option control more cases
Vim has the 'swapsync' option which we removed in 62d137ce09.
Instead let 'fsync' control swapfile-fsync.

These cases ALWAYS force fsync (ignoring 'fsync' option):
- Idle (CursorHold).
- Exit caused by deadly signal.
- SIGPWR signal.
- Explicit :preserve command.
2018-04-21 12:51:27 +02:00
a02d22cca8 IO: shada should respect 'fsync' option
shada_write_file() is called on exit (:quit and friends), this can be
very slow.

Note: AFAICT Vim (do_viminfo()) does not appear to fsync() viminfo.
2018-04-21 12:50:28 +02:00
fe5f38d8bd terminal: do not call redraw_buf_later() (#8306)
fixes #8290
2018-04-21 04:11:45 +02:00
be2a3ddd58 test: "Command-line option -s": avoid indeterminism (#8305)
closes #8303
2018-04-21 03:15:18 +02:00
c10a207a20 test/util: throttle retry() (#8296)
Avoid a hot loop in retry(), there's no need to retry more than 50/s.

Also use luv.sleep() to implement sleep() instead of spinning the
event-loop, so events are not silently discarded.
2018-04-20 23:56:50 +02:00
d29c243bef doc: platform-specific config locations (#8297)
Fixes #7374.
2018-04-20 19:04:30 +02:00
ZyX
b7a46f2299 eval/typval: Remove struct dictitem_S which is not used anywhere 2018-04-20 00:04:25 +03:00
be1448213c Merge pull request #8291 from bfredl/ui_resize
ui_events: correct wrong argument order in resize event
2018-04-19 10:22:19 +02:00
a1530ece87 Merge #8293 from justinmk/test-nodejs
test: nodejs_spec: allow more time for nodejs init
2018-04-18 19:58:05 +02:00
522443d6bf test/util: retry(): also decorate non-string error 2018-04-18 09:47:51 +02:00
1dc497398e test: nodejs_spec: allow more time for nodejs init 2018-04-18 09:42:56 +02:00
c8189096e8 ui_events: correct wrong argument order 2018-04-17 19:09:18 +02:00
7a13611ba2 Merge #8276 'startup: Make -s - read from stdin' 2018-04-17 10:33:36 +02:00
ZyX
8cdaac0d80 event/process: Silence PVS/V547: assuming stream->num_bytes changes
Not familiar with the code, but I assume that loop_poll_events can actually 
change stream->num_bytes, so condition is not always false.
2018-04-17 01:49:46 +03:00
ZyX
cb3bb0becb pvscheck: Add --update switch 2018-04-17 01:44:11 +03:00
ZyX
57c66bc168 pvscheck: Remove outputs before running plog-converter
plog-converter behaviour is not the best one when creating fullhtml report and
directory already exists: it puts report inside an existing directory. Not sure
what exactly it does if inside exists as well, but if I am not mistaking report
will not be created.
2018-04-17 01:37:58 +03:00
ZyX
eba61fbc97 path: Silence PVS/V557: impossible to reach with NUL-terminated string 2018-04-17 01:36:18 +03:00
ZyX
4a1251206a path: Fix PVS/V560: condition is essentially A && A 2018-04-17 01:07:16 +03:00
48967695c4 test: tui_spec.lua: relax test (#8289)
Sometimes an extra FocusGained/FocusLost event might trigger. This
doesn't matter, we just want to test that the events were received in
cmdline-mode.
2018-04-16 23:35:58 +02:00
0cec184cd6 startup: ignore -X
closes #8285
2018-04-16 22:38:02 +02:00
84359a467f terminal: resize to the max dimensions (#8249)
closes #8096
2018-04-16 22:25:23 +02:00
9a1f57b488 contrib: fix local.mk.example (#8286)
We have two ways to disable third-party/

  1. make USE_BUNDLED_DEPS=OFF
  2. cmake USE_BUNDLED=OFF

The example used the make option in a cmake context.
2018-04-16 21:21:44 +02:00
ZyX
fab09ea0d6 option: Silence PVS/V547: expression is true on 64-bit systems 2018-04-16 11:37:39 +03:00
ZyX
d0850586df option: Fix PVS/V547: var is always NULL at that point 2018-04-16 11:36:06 +03:00
ZyX
6a5b9de546 option: Fix PVS/V560: EXPAND_BOOL_SETTINGS already caused early return 2018-04-16 11:34:26 +03:00
ZyX
61b6eb926d option: Fix PVS/V547: allocator never returns NULL now 2018-04-16 11:33:11 +03:00
ZyX
d66217ab6d option: Fix PVS/V517: duplicate check for titlelen 2018-04-16 11:32:00 +03:00
ZyX
0eb1d7ca4c option: Silence PVS/V594: GLOBAL_WO macros is not really necessary
In that case it is completely possible to just use w_allbuf_opt directly.
2018-04-16 11:31:27 +03:00
ZyX
95cc2507c9 ops: Fix PVS/V560: pre may not be zero as that was already checked 2018-04-16 11:23:22 +03:00
ed6a113804 Merge #8273 'job-control: avoid kill-timer race' 2018-04-16 08:44:28 +02:00
ZyX
fc1ebb060e ops: Fix PVS/V614: use of uninitialized variable
I have actually no idea how code managed to work and not trigger ASAN/etc here. 
It does not look like a false positive at all.
2018-04-15 21:49:47 +03:00
ZyX
dae1975394 ops: Fix PVS/V547: allocator never returns NULL 2018-04-15 21:46:32 +03:00
ZyX
2b7a8ceeb6 ops: Fix PVS/V547: did_change is almost always set
Only exception is early `goto theend`.
2018-04-15 21:44:36 +03:00
ZyX
4a145f2036 ops: Silence PVS/V614: regtype is always initialized 2018-04-15 21:40:30 +03:00
ZyX
3b32e717d9 message: Fix PVS/V547: c is never equal to KS_ZERO
Since `c` there is a result of evaluating `TO_SPECIAL` macros it may be only one 
of the following three things:

1. K_SPECIAL
2. K_ZERO (note: not KS_ZERO)
3. negative integer resulting from evaluating TERMCAP2KEY macro.

All variants here are negative and thus fail next !IS_SPECIAL(c) check (negative 
is special). If `c` was really NUL it would fall into the `!IS_SPECIAL(c)` block 
and use whatever character is third in `<80>{a}{b}` combo. For `<Nul>` it is 
X (`<80><ff>X`).
2018-04-15 21:32:26 +03:00
ZyX
cb3230776e memline: Fix PVS/V547: allocator now never returns NULL 2018-04-15 20:56:42 +03:00
ZyX
2940af8321 memline: Fix PVS/V560: allocator now never returns NULL 2018-04-15 20:55:26 +03:00
ZyX
a2f9188418 mbyte: Fix PVS/V557: do not do useless job
I do not see how array overrun is actually possible, but still EUC encodings may 
do fine without a cycle.
2018-04-15 20:53:29 +03:00
ZyX
24ee261317 if_cscope: Fix PVS/V560: condition would result in earlier return
Previous block just checks for totmatches being zero and returns if it is. And 
totmatches is unsigned, so `totmatches > 0` may never be true.
2018-04-15 20:36:21 +03:00
ZyX
b8f69b6b9a os/fs: Fix PVS/V560: condition was already checked in while()
It is not possible to enter while loop body with unsigned2 == 0 if loop 
condition requires unsigned1 < unsigned2.
2018-04-15 20:34:27 +03:00
ZyX
3189841984 fileio: Silence PVS/V614: buffer is initialized if conv_restlen > 0 2018-04-15 20:32:21 +03:00
ZyX
cd27198526 fileio: Fix PVS/V547: split is not used
This is removed functionality, specifically no longer supported 16-bit integers.
2018-04-15 20:30:31 +03:00
ZyX
1fb4282f1c fileio: Fix PVS/V560: end was already checked
See condition at line 3309.
2018-04-15 20:27:41 +03:00
ZyX
11f6411771 file_search: Silence PVS/V614: used buffer is never uninitialized 2018-04-15 20:18:20 +03:00
ZyX
d084628c4b kvec: Silence PVS/V512: it is not needed to fill the whole array 2018-04-15 20:14:55 +03:00
ZyX
a20261fae7 viml/parser/expressions: Fix PVS/V547: condition checked earlier
See previous goto with the same label.
2018-04-15 20:11:21 +03:00
ZyX
bc235bf1f6 viml/parser/expressions: Fix PVS/V547: condition checked earlier
See previous goto with the same label.
2018-04-15 20:10:48 +03:00
ZyX
6196738a3b ex_cmds: Fix PVS/V547: expression was already checked in outer if() 2018-04-15 20:08:32 +03:00
ZyX
17e21eae24 eval: Silence PVS/V547: PVS cannot stand !known_val expressions 2018-04-15 20:07:07 +03:00
ZyX
092b4d9774 *: Add some PVS comments 2018-04-15 20:07:07 +03:00
ZyX
469ba2fb49 ex_getln: Fix PVS/V547: function is stated to never return NULL 2018-04-15 20:07:07 +03:00
ZyX
c90e9df5b5 ex_getln: Fix PVS/V560: there are no longer NULL returns for OOM 2018-04-15 20:07:07 +03:00
ZyX
cad616c94e ex_docmd: Fix PVS/V547: condition was already checked in surr. if() 2018-04-15 20:07:07 +03:00
ZyX
d7e4449adb ex_docmd: Fix PVS/V547: due to short-circuiting name_len is never > 4 2018-04-15 20:07:07 +03:00
ZyX
103be37f42 ex_cmds: Fix PVS/V557: possible array overrun in :ascii
Some calculation show that with the current setup there will not be enough bytes
occupied for that, barring the case of malicious translation. Still should be
possible to have array overrun with specially crafted translation.
2018-04-15 20:07:07 +03:00
b2c066409d job-control: children_kill_cb(): do not check elapsed time
1. Don't check elapsed time in children_kill_cb(), it's already implied
   by the start-time of the timer itself.
2. Restart timer from children_kill_cb() for PTY jobs, to send SIGKILL
   after SIGTERM. There is an edge case where SIGKILL might follow
   SIGTERM too quickly, if jobstop() is called near the 2-second timer
   window.  But this edge case is not worth code complication.
2018-04-15 18:23:11 +02:00
142ac021ac job-control: one-shot timer instead of repeating
Before f31c26f1af the timer was used to try SIGTERM *and* SIGKILL, so
a repeating timer was needed.  After f31c26f1af process_stop() sends
SIGTERM immediately, and the timer only sends SIGKILL.

So we don't need a repeating timer.
- Simplifies the logic: don't need to call uv_timer_stop() explicitly.
- Avoids a problem: if process_stop() is called more than once in the
  2-second window, the first on_process_exit() would call
  uv_timer_stop() which stops the timer for all stopped processes.
2018-04-15 18:23:11 +02:00
8fa0b8051d job-control: mitigate process-kill race
children_kill_cb() is racey. One obvious problem is that
process_close_handles() is *queued* by on_process_exit(), so when
children_kill_cb() is invoked, the dead process might still be in the
`loop->children` list.  If the OS already reclaimed the dead PID, Nvim
may try to SIGKILL it.

Avoid that by checking `proc->status`.

Vim doesn't have this problem because it doesn't attempt to kill
processes that ignored SIGTERM after a timeout.

closes #8269
2018-04-15 18:23:11 +02:00
c8f409c2f2 loop: remove children_stop_requests
It serves no purpose because process_stop() is already guarded by
`proc->stopped_time`.
2018-04-15 18:23:11 +02:00
7598e6cf17 Merge #8120 'test: win: prefer cmd.exe' 2018-04-15 18:16:37 +02:00
ZyX
aa5008c1f0 ex_cmds: Simplify do_ascii
Specifically apply constants like enc_utf8 (which are constants *now*) and 
simplify conditions after that. Also some style changes.
2018-04-15 19:01:58 +03:00
ZyX
db7f80302b ex_cmds: Remove #ifdef USE_GUI
`ag` shows that this identifier (`USE_GUI`) is found in exactly one place (zero 
after this commit). So I assume macros is never defined.
2018-04-15 18:52:37 +03:00
ZyX
1df9ac1c03 eval: Fix PVS/V547: skipping is now done using eval0 2018-04-15 18:50:02 +03:00
ZyX
f8d574225b eval: Silence PVS/V547: E882 may be triggered
I failed to deduce why analyzer thinks E882 may not be triggered, though 
conditions for triggering it are strange: it would trigger E882 only in the 
single case “function returned non-number”. Cases “function thrown exception”, 
or “built-in sorter encountered error” will neither yield E882 nor stop 
sort()/uniq().

Note though that searching test code revealed that neither E702 nor E882 are not 
tested anywhere.
2018-04-15 18:45:12 +03:00
1e71978cf0 events: VimSuspend, VimResume #8280
closes #3648
ref #5959
2018-04-15 15:05:02 +02:00
1e7d5e8cdf Merge #6272 'stdpath()' 2018-04-15 04:09:30 +02:00
5abfa94ed2 test: win: use "start" to test backgrounded job (#8171) 2018-04-15 02:43:18 +02:00
a7e7f7bd83 Merge #8160 'win: oldtests: prefer cmd.exe' 2018-04-15 02:37:22 +02:00
ee4e1fd8ec win: Fix reading content from stdin (#8267)
Fixes #6890 by reading from the Windows console input buffer after
stdin has been closed.

Vim defines HAVE_DUP for Windows and does the close-dup dance[1]:

    close(0);
    dup(2);

which always fails, then falls back to reading from the Windows console
input buffer[2].

[1] e7499ddc33/src/fileio.c (L2397-L2398)
[2] e7499ddc33/src/os_win32.c (L1703-L1714)
2018-04-14 21:59:07 +02:00
387fbcd95c win: Fix reading from stdin
* Reading from stdin on Windows is fixed in the same way as it was in
  #8267.
* The file_read function was returning without filling the
  destination buffer when it was called with a non-blocking file
  descriptor.
2018-04-14 14:21:36 -05:00
ad999eaa77 Merge branch 'master' into s-dash-stdin 2018-04-14 14:17:51 -05:00
ef4feab0e7 version: rename "0.2.3" to "0.3.0" (#8268)
0.2.1 was a big release, it should have been renamed to 0.3.0.
0.2.3 also has significant changes, so rename it.
2018-04-13 22:15:52 +02:00
51b9d85bb4 ci/win: redirect stderr to fix mingw build 2018-04-13 13:42:12 -04:00
ad30907814 Revert "ci/win: don't use lastexitcode hack on mingw build"
This reverts commit bc43d2559f.

stderr redirection should make the workaround work for mingw builds.
2018-04-13 13:38:31 -04:00
8e87d89a99 oldtests: win: skip test49
Vim doesn't test it on Windows.
See https://github.com/vim/vim/blob/master/src/testdir/Make_all.mak
2018-04-12 21:11:55 -04:00
27e26b10a2 tui: abort on unexpected enum value (#8266)
ref #8261
2018-04-13 01:03:00 +02:00
1c3a849881 API/nvim_command_output: handle :echon capture (#8265)
ref https://github.com/neovim/python-client/pull/290
2018-04-13 00:49:37 +02:00
5e18550ddd Merge #7813 'channels: delay free'
fix #7699
2018-04-13 00:35:50 +02:00
0865adbbc2 channels: cleanup channel freeing code 2018-04-12 22:33:05 +02:00
aea079a25d channels: delay free so that libuv can cleanup handles
add test for a crash this caused
2018-04-12 18:22:47 +02:00
2cbeb7ca56 ui_set_option: pass String.data, not String 2018-04-12 12:58:27 +02:00
f44fb5b1a5 build/freebsd: set CMAKE_MAKE_PROGRAM iff "Unix Makefiles" (#8260)
It's only appropriate to set CMAKE_MAKE_PROGRAM to gmake when we're
using the "Unix Makefiles" generator.  On QB, the nodes have Ninja
available and will use it, which means CMAKE_GENERATOR is set to
"Ninja".  Setting CMAKE_MAKE_PROGRAM was forcing the build to use gmake
instead of ninja, which was causing the build failure.
2018-04-12 12:51:38 +02:00
d48df146d1 tui: fix uninitialize variable usage (#8261)
This fixes an issue with compiles failing in release mode due to shape
having the possibility of being used uninitialized (since the default
case was missing).
2018-04-12 12:50:01 +02:00
714e0f8bf0 oldtests: win: keep set dir=/
Any user can create a directory on root.
Creating a directory on root allows any user to write files within that directory.

Test_recover_root_dir() passes when run locally as a regular user (not admin).
2018-04-12 02:44:06 -04:00
bc43d2559f ci/win: don't use lastexitcode hack on mingw build
The heck is for MSVC builds to workaround msbuild error detection for cmake.
2018-04-12 02:39:25 -04:00
7c8122f36d win: getftype(symlink) returns 'link'
Vim doesn't detect symlinks correctly so stick with Neovim's behaviour.
2018-04-12 02:28:38 -04:00
49e86cebf0 oldtests: check +iconv for makeencoding
MSVC builds don't include it.
Test utf8 and latin only if +iconv is missing.
2018-04-12 02:27:10 -04:00
4bbe51b79e oldtests: win: help sp?it opens split()
Vim 8 and Neovim 0.2.3 open the same target on Windows.
2018-04-12 02:24:46 -04:00
6245b4873d oldtests: win: shellslash for cdpath,tags,:find 2018-04-12 02:24:29 -04:00
fa0e32fba2 oldtests: win: cmd.exe echo has trailing CR 2018-04-12 02:23:53 -04:00
e3687165a7 oldtests: use expand() to fix pathsep
Fix failing oldtests because of noshellslash.
2018-04-12 02:22:33 -04:00
979569356f ci/win: prefer msys find.exe
runnvim.sh depends on it for file glob patterns.
2018-04-12 02:19:03 -04:00
79a8d905ab oldtests: newstyle: win: reset shell to cmd.exe
Unset $SHELL so that child nvim use cmd.exe as default shell.

Unset $TERM so that child nvim don't segfault with negative exit code.
sh/bash use TERM=cygwin by default if it is unset.
mintty sets TERM to xterm.
2018-04-12 02:18:18 -04:00
87f4d2592c test/util: expect_err() (#8257)
other cleanup, ref #8245
2018-04-11 22:07:00 +02:00
f96d99ad11 Merge #8247 'server: introduce --listen' 2018-04-11 03:29:18 +02:00
777d34ec37 lint 2018-04-11 02:41:05 +02:00
704ba4151e server: init v:servername if $NVIM_LISTEN_ADDRESS is invalid
Before this change, if $NVIM_LISTEN_ADDRESS was invalid, v:servername
was left empty.
2018-04-11 02:41:05 +02:00
507bda1c95 server: introduce --listen, deprecate $NVIM_LISTEN_ADDRESS 2018-04-11 02:41:05 +02:00
7362ca4430 cleanup: remove main_start_gui() 2018-04-11 01:58:42 +02:00
9f598e5765 serverstop(): return FALSE for invalid address 2018-04-11 01:58:41 +02:00
b11b681289 test/util: matches() 2018-04-11 01:58:41 +02:00
f19db1b9ba remove scripts/run-api-tests.exp
Usage of this script was removed 0c2ec77ae0.
2018-04-11 00:56:36 +02:00
ZyX
6f19b9f4e1 eval: Silence PVS/V614: use of potentially uninitialized pointer
It is hard to say whether it actually is uninitialized, need to go deeper into 
regex code. Probably analyzer did not go that far as regmatch for sure would not 
be initialized up until calling NFA/DFA engine functions, which is to be done by 
pointer.
2018-04-10 01:52:18 +03:00
ZyX
4d1b3bf317 eval: Fix PVS/V560: unneded check for name_len
It is unsigned, zero length would already cause early return and length 1 is 
checked earlier in the same condition.
2018-04-10 01:52:08 +03:00
ZyX
07b67f9eff eval: Fix PVS/V547: ufunc_T is actually an incomplete type 2018-04-10 01:51:52 +03:00
ZyX
536d9a6168 edit: Fix PVS/V560: remove always true/false checks 2018-04-10 01:12:59 +03:00
ZyX
ef57cd81fe diff: Fix PVS/V547: remove no longer needed OOM handler 2018-04-10 01:12:38 +03:00
84bac9f507 Merge pull request #8250 from bfredl/shellscreen
remove last usages of screen functions in os/shell.c
2018-04-09 11:39:03 +02:00
d4688add96 os/shell: use msg functions instead of screen when throttling 2018-04-09 10:34:31 +02:00
c28dbede27 os/shell: remove dead calls to screen functions 2018-04-09 10:30:24 +02:00
ZyX
5acda03576 eval/decode: Silence PVS/V547: code written for 32-bit integers 2018-04-09 10:29:34 +03:00
ZyX
db29fa8164 charset: Fix PVS/V560: remove condition which was already checked 2018-04-09 10:29:33 +03:00
ZyX
1edb4894dc charset: Silence PVS/V785: remove switch()
No idea why it thinks that pre is constant expression, but switch() may be 
removed.
2018-04-09 10:29:32 +03:00
ZyX
f8a44b73f0 event/loop: Silence PVS/V547: condition is false in case of no timeout 2018-04-09 10:29:32 +03:00
ZyX
92759ef34f buffer: Fix PVS/V560: condition was checked three lines above 2018-04-09 10:29:31 +03:00
ZyX
840027c7f5 buffer: Fix PVS/V547: base is never set to octal 2018-04-09 10:29:30 +03:00
ZyX
93be2ba542 charset: Fix transchar() with multibyte characters
It appears that transchar() was working under assumption that 
`transchar_nonprint()` may be used for multibyte characters while its 
documentation stated exact opposite. It was not actually untrue though, except 
that longer buffer would be needed then the one stated in documentation. But it 
is false now with assert().
2018-04-09 10:29:29 +03:00
ZyX
58a5699a44 buffer: PVS/V557: Refactor maketitle() 2018-04-09 10:29:28 +03:00
ZyX
2a6491cdf8 os/env: Refactor home_replace() to the new style and to return length 2018-04-09 10:29:26 +03:00
ZyX
0d7daaad98 charset,*: Refactor transstr() 2018-04-09 01:39:33 +03:00
ZyX
e670756676 memory: Fix documentation of some string copying functions 2018-04-09 01:36:52 +03:00
ZyX
414ef75ee6 buffer: Beautify code a bit 2018-04-09 01:35:23 +03:00
fa6415f13f test/API: validate channel arg (#8245) 2018-04-08 03:01:15 +02:00
929a732d00 build/clang 6.0.0: fix type conversion warnings (#8235) 2018-04-07 16:20:31 +02:00
1ca138f236 build/OpenBSD: force gmake (#8222)
fix #8216
2018-04-07 16:10:01 +02:00
2ec94eb23f win/install: xxd.exe (#8241) 2018-04-07 04:09:43 +02:00
7034feb666 Merge pull request #8236 from bfredl/tuishape
TUI: clean up handling of CursorShape enum
2018-04-06 12:51:19 +02:00
de0d1a0d2a TUI: EMSG2 must not be used from TUI thread 2018-04-06 11:50:11 +02:00
d49c1dda8b Merge #8228 from mhinz/fix-fgets 2018-04-05 00:54:58 +02:00
1fd54f29c1 Make vim_fgets() return the same values as in Vim
The implementation of vim_fgets() differs between Neovim and Vim.

Vim says that it only returns `true` for EOF. But it always returns `true` when
fgets() returns NULL. This happens for EOF _or_ errors.

That probably misguided the author of Neovim's vim_fgets(), which does NOT
return `true` for errors.

Since all the callers of vim_fgets() probably expect it to work as it does in
Vim (and not as it says), it now returns the same values as the Vim
implementation.

Fixes #8227
2018-04-04 21:13:14 +02:00
e8c39f72fd Merge #8226 from justinmk/insert-mode-meta 2018-04-04 04:36:13 +02:00
224ebc0078 insert-mode: interpret unmapped META as ESC
closes #2454
closes #8213
ref #7972
2018-04-04 03:23:15 +02:00
8b8a75b2cf Merge #7524 from justinmk/vim-8.0.1281 2018-04-04 01:29:56 +02:00
e40e300c16 ins_compl_add_tv: fix memory leaks via get_spec_reg (#8224)
Fixes #8186
2018-04-03 01:30:48 +02:00
e25e552a3d vim-patch:8.0.1284: loading file type detection slows down startup
Problem:    Loading file type detection slows down startup.
Solution:   Store the last pattern of an autocommand event to make appending
            quicker.
462455ee8b
2018-04-02 23:59:49 +02:00
eb00fc0cf0 vim-patch:8.0.0564: cannot detect Bazel BUILD files on some systems
Problem:    Cannot detect Bazel BUILD files on some systems.
Solution:   Check for BUILD after script checks. (Issue vim/vim#1340)
39170e2d97

vim-patch:8.0.1283: test 86 fails under ASAN
2018-04-02 23:59:49 +02:00
b982f0e654 vim-patch:8.0.1285
d09a206ee9

vim-patch:8.0.0564: cannot detect Bazel BUILD files on some systems
2018-04-02 23:59:49 +02:00
411d578137 vim-patch:8.0.1282
Problem:    script-local variable defined in the wrong script
Solution:   Move variable to autoload/filetype.vim.

cef7322d8a
2018-04-02 23:59:48 +02:00
04f5062978 vim-patch:8.0.1281
Problem:    Loading file type detection slows down startup.
Solution:   Move functions to an autoload script.
851ee6c3da

---

vim-patch:8.0.0635
Problem:    When 'ignorecase' is set script detection is inaccurate.
Solution:   Enforce matching case for text. (closes #1753)
2018-04-02 23:59:46 +02:00
60e96a45b4 screen: winhl=Normal:Background should not override syntax (#8093)
fixes #7375
2018-04-02 14:21:14 +02:00
cb5cde6e2b build/CMake: use CMake-2.8.7-compatible list-check (#8220)
Tested with:
    make CMAKE_EXTRA_FLAGS='-DLANGUAGES="en_GB;ja;sk"'

closes #8219
2018-04-02 12:40:31 +02:00
0c59ac1a2c Merge #5908 'shada: Also save numbered marks' 2018-04-02 12:01:00 +02:00
4b26e365ae Merge #8208 'Clean up dependency patches'
closes #6659
2018-04-02 11:57:27 +02:00
9b7ce00486 build/OpenBSD: need -lpthread -lc++abi for LuaJIT (#8215) 2018-04-02 11:08:11 +02:00
ZyX
5d9bb16d66 functests: Use proper path in eq() 2018-04-02 11:14:11 +03:00
ec459965f5 test/options: Fix stdpath() failures on Windows 2018-04-01 22:40:20 -04:00
1b898d7af5 build/windows: Patch Luv with a patch file instead of CMake 2018-04-01 20:32:22 -05:00
57fef8b49b build/windows: Move libtermkey patches into this repository 2018-04-01 20:32:22 -05:00
ZyX
1fc09b5b98 eval/typval_encode: Silence PVS/V501,V547,V779
These kinds of warnings are inevitable for generic macros.
2018-04-02 00:46:18 +03:00
ZyX
5660482406 api/buffer: Fix PVS/V547: use correct border for lnum
Should actually be silencing that for the sake of the case when `long` is 
actually not 64-bit. But it appears that Vim had already defined maximal line 
number. And even declared that exact value invalid, so no need in silencing.
2018-04-02 00:41:00 +03:00
ZyX
bf160dd668 quickfix: Fix PVS/V560: remove duplicate condition
Condition was checked in surrounding if().
2018-04-02 00:31:29 +03:00
ZyX
6b84f7813c pvscheck: Also provide source tree root to plog-converter 2018-04-02 00:16:22 +03:00
ZyX
65d0b8ed32 pvscheck: Also produce fullhtml reports 2018-04-02 00:15:31 +03:00
ZyX
7eceac218e pvscheck: Make realdir work with nonexistent directories 2018-04-02 00:07:05 +03:00
ZyX
bdf5f57989 shada: Fix conversion warnings 2018-04-01 23:37:23 +03:00
ZyX
dd1b493f75 shada: Fix some memory leaks and completely ignore numbered mark names
Problems:
- In two places in shada_read_when_writing() memory just was not freed. Both 
  places were verified to cause test failures.
- Numbered marks got assigned incorrect (off-by-one compared to position in the 
  array) numbers in replace_numbered_mark.
- It was possible to have non-continuously populated array of numbered marks 
  which messed up code for merging them.

(Note about tests: marks with additional data are always compared different when 
merging, that caused some confusion regarding why test did not work the way 
I expected.)
2018-04-01 21:29:47 +03:00
ZyX
f5373e2cdc shada: Add functions to format ShaDa entries for debugging purposes
To be used in debugging printfs.
2018-04-01 21:23:43 +03:00
ZyX
200898546e shada: When storing numeric marks reset the numbers
Attempt to fix observed crash. Crash currently not reproduced.
2018-04-01 20:05:19 +03:00
ZyX
1ac1f520f0 functests: Add test for merging with file with only numeric mark
Known to cause memory leak, but not an expected crash.
2018-04-01 20:04:35 +03:00
98e7112390 msg: do not scroll entire screen (#8088) 2018-03-31 11:12:27 +02:00
362346f563 build/CMake: LANGUAGES config option #8203
Signed-off-by: Marty E. Plummer <hanetzer@startmail.com>
2018-03-31 10:59:45 +02:00
c8fd7ce08b ci/AppVeyor: cover MinGW and MSVC in PRs (#8206) 2018-03-30 21:54:39 +02:00
30f6ff7021 .gitignore 2018-03-30 17:47:25 +02:00
f21867a15c timer_pause: stop the timer resource (#8199)
If the timer isn't stopped, it still emits events which consume some CPU.

Fix #8188
2018-03-30 17:09:29 +02:00
868b84199e eval: Add stdpath() method (#5297)
Adds the :stdpath method for fetching XDG standard directories.

Fixes #5297
2018-03-29 10:41:04 -04:00
e54ff10d44 lint 2018-03-29 10:32:12 -04:00
b5a47f4907 Merge pull request #6377 from yagebu/option-fixes
options: fixes and some refactoring for number options

Closes #6696
2018-03-29 09:11:22 -04:00
e9cf40f2b6 build/NetBSD: use kinfo_proc2; undef uint64_t (#8197)
closes #8196

For historical reasons, uint64_t and friends are defined both as 
typedefs and macros. Some platforms that do that define the macros as
identity (#define uint64_t uint64_t), others like NetBSD define to the
backing type (#define uint64_t __uint64_t). This is normally
transparent, except when multiple levels of macro expansions are used
inconsistently.
2018-03-29 10:37:49 +02:00
bbca3142e8 ci/AppVeyor: build MinGW only on master branch (#8193)
Else the build takes too long.
2018-03-29 09:17:44 +02:00
79f9c2d9c6 Merge branch 'master' into yagebu/option-fixes 2018-03-28 21:54:39 -04:00
3f3de9b1a9 Merge #8183 'build/msvc: Fix functional tests'
MSBuild still returns a non-zero exit code because it detects the word "error" in the stdout which is caused by some of the test names such as api/buf {get,set,del}_line get_line : out-of-bounds is an error. 

CMake mailing list thread:
https://cmake.org/pipermail/cmake-developers/2015-October/026775.html

There isn't any good solution for it, so I modified the build script to detect the error message printed by RunTests.cmake.
2018-03-27 23:02:27 +02:00
8d5a46e77b TUI: implement "standout" attribute #8081
closes #8054
2018-03-27 04:38:19 +02:00
ZyX
3df11cfbca Revert "shada: In place of ignoring cursor position with lnum 0 save with 1"
This reverts commit aa728798b4.
2018-03-27 03:03:02 +03:00
ZyX
920c582320 test/helpers: Support booleans 2018-03-27 01:35:21 +03:00
ZyX
aa728798b4 shada: In place of ignoring cursor position with lnum 0 save with 1 2018-03-27 01:35:21 +03:00
ZyX
30e7fb2e32 shada: Also filter out invalid cursor position when writing '0' mark
Based on https://github.com/neovim/neovim/pull/5908#issuecomment-375909903, but 
with adjusted condition as line number or column less then zero should not 
appear at all based on what I know.
2018-03-27 01:33:59 +03:00
ZyX
7941aaa3bf macros: Rename LAST_ARRAY_ENTRY to ARRAY_LAST_ENTRY 2018-03-27 01:33:59 +03:00
ZyX
0bfc91be96 shada: Make ignore_buf also inline 2018-03-27 01:33:59 +03:00
ZyX
17ea0f2214 functests: Fix existing functional tests 2018-03-27 01:33:59 +03:00
393935c32d ci/AppVeyor: enable MSVC_32 build 2018-03-26 10:54:44 -05:00
c7caca60b9 ci/AppVeyor: Remove gperf from downloaded MSYS2 packages 2018-03-26 10:54:44 -05:00
cffdc1da02 ci/AppVeyor: Remove Git Unix utilities from the PATH 2018-03-26 10:54:44 -05:00
ab6051331c build/msvc: Fix check for cksum on Windows 2018-03-26 10:54:44 -05:00
afe6b4881f build/msvc: Add workaround for false positive exit code from MSBuild
See https://cmake.org/pipermail/cmake-developers/2015-October/026775.html
2018-03-26 10:54:44 -05:00
afd46b78c5 build/msvc: Fix libvterm patch 2018-03-26 10:54:44 -05:00
51f5cfc16e test: win: enable jobpid() tests
Use ping to test job detach
Use find.exe as an alternative to cat.exe
Use nvim_get_proc to check pid
2018-03-26 01:45:42 -04:00
ad6d577314 fixup: ping.exe works with cmd.exe pipe 2018-03-26 01:45:41 -04:00
e6ee06ee11 Revert "test/win: use cmd.exe for test"
This reverts commit ae409b5042.

This PR (#8120) defaults to cmd.exe for job_spec.lua
2018-03-26 01:45:41 -04:00
03e69a5d9c test: win: use find.exe /v "" as alternative cat - 2018-03-26 01:45:40 -04:00
3bd555f1e6 test: win: try stderr callback and slow output 2018-03-26 01:45:38 -04:00
cf4fbb6f04 test: win: use powershell for Start-Sleep only
cmd.exe (shell) is faster and more reliable than powershell (.NET frontend).
It's best for short and basic tests that don't require non-trivial scripting.
cmd.exe doesn't support sleep so use powershell's Start-Sleep as substitute.
2018-03-26 01:45:37 -04:00
ZyX
607e0d2202 shada: Save numbered marks
Problems so far:

- Marks in the current instance are not adjusted.
- Duplicates are not removed (not that it works in Vim either now, not at 
  8.0.134 at least).
2018-03-26 00:38:29 +03:00
a9c94f7bb0 Merge #7881 from ZyX-I/fix-7876 2018-03-25 19:13:45 +02:00
ce5c2030bf vim-patch:8.0.0417: test for the clipboard fails sometimes (#8174)
Problem:    Test for the clipboard fails sometimes.
Solution:   Add it to the flaky tests.
0fbff646d5
2018-03-25 17:20:59 +02:00
9ebe2ad331 runtime/dircolors.vim: support termguicolors (#8175) 2018-03-25 15:45:02 +02:00
ZyX
201a4ef11c *: Replace did_throw checks with current_exception checks
Removes obsolete did_throw after that.
2018-03-25 15:13:05 +03:00
ZyX
79b4b6fc86 *: Make sure that !did_throw implies !current_exception
Fixes #7876
2018-03-25 14:50:48 +03:00
f8d2aef4f2 vim-patch.sh: remove blank line before URL
This "stacks" better in squashed PRs, etc.
2018-03-24 23:08:40 +01:00
5fecd59c26 Merge #8167, #7943 2018-03-24 23:06:36 +01:00
8d64a2fb1d test: lua test for vim-patch:8.0.0184
2b7bc567b9
2018-03-24 23:06:09 +01:00
29395fd304 vim-patches: test_system.vim
vim-patch:8.0.0185: system() test fails on MS-Windows
vim-patch:8.0.0197: system() test skips some parts for MS-Windows
vim-patch:8.0.0701: system test failing when using X11 forwarding
2018-03-24 23:06:09 +01:00
f50ce7d510 vim-patch:8.0.0184: fix ex-mode exit code #7943
Problem:    When in Ex mode and an error is caught by try-catch, Vim still
            exits with a non-zero exit code.
Solution:   Don't set ex_exitval when inside a try-catch. (partly by Christian
            Brabandt)

2b7bc567b9
2018-03-24 22:33:41 +01:00
131aad953c win: defaults: 'shellcmdflag', 'shellxquote' #7343
closes #7698

Wrapping a command in double-quotes allows cmd.exe to safely dequote the
entire command as if the user entered the entire command in an
interactive prompt. This reduces the need to escape nested and uneven
double quotes.

The `/s` flag of cmd.exe makes the behaviour more reliable:

    :set shellcmdflag=/s\ /c

Before this patch, cmd.exe cannot use cygwin echo.exe (as opposed to
cmd.exe `echo` builtin) even if it is wrapped in double quotes.

Example:
:: internal echo
> cmd /s /c " echo foo\:bar" "
foo\:bar"

:: cygwin echo.exe
> cmd /s /c " "echo" foo\:bar" "
foo:bar
2018-03-24 22:05:53 +01:00
be67d926c5 build/msvc: Add libintl to bundled dependencies (#8163) 2018-03-24 17:58:32 +01:00
6a7c904648 Merge #4419 'implement <Cmd> key' 2018-03-24 17:45:48 +01:00
1b61167373 Merge #8168 'refactor: rename some functions' 2018-03-24 16:07:11 +01:00
0ecf7e3a2d refactor/rename: path_to_absolute() 2018-03-24 14:17:40 +01:00
7ae4144208 refactor/rename: path_try_shorten_fname() 2018-03-24 14:17:40 +01:00
998a16c926 refactor/rename: path_is_absolute() 2018-03-24 14:17:40 +01:00
84a25770ac Merge #8165 'provider/RPC: fix double-free' 2018-03-24 14:03:16 +01:00
82cd0be2ea refactor: eliminate autocmd_fname_full global
It's a micro-optimization; check path_is_absolute_path(autocmd_fname)
instead.

The main optimization (which is still in place) afforded by Vim 7.2.021
was to avoid resolving <afile> when it is not needed.
2018-03-24 12:16:39 +01:00
189c5abeba provider/RPC: apply_autocmds_group(): fix double-free
During provider dispatch, eval_call_provider() saves global
state--including pointers, such as `autocmd_fname`--into
`provider_caller_scope` which is later restored by f_rpcrequest().

But `autocmd_fname` is special-cased in eval_vars(), for performance
(see Vim patch 7.2.021; this is also the singular purpose of the
`autocmd_fname_full` global. Yay!)

If eval_vars() frees `autocmd_fname` then its provider-RPC-scoped alias
becomes a problem.

Solution: Don't free autocmd_fname in eval_vars(), just copy into it.

closes #5245
closes #5617

Reference
------------------------------------------------------------------------

Vim patch 7.2.021
f6dad43c98
Problem:    When executing autocommands getting the full file name may be
            slow. (David Kotchan)
Solution:   Postpone calling FullName_save() until autocmd_fname is used.

vim_dev discussion (2008): "Problem with CursorMoved AutoCommand when
Editing Files on a Remote WIndows Share"
https://groups.google.com/d/msg/vim_dev/kj95weZa_eE/GTgj4aq5sIgJ
2018-03-24 11:01:24 +01:00
d407a48665 getchar: implement <Cmd> key to invoke command in any mode 2018-03-23 14:01:49 +01:00
9627325684 vim-patch:8.0.0387: compiler warnings (#8162)
Problem:    compiler warnings
Solution:   Add type casts. (Christian Brabandt)
b113c3a618
2018-03-23 07:59:08 +01:00
ce3bc12e25 vim-patch:8.0.0357: crash when setting 'guicursor' to weird value (#8161)
Problem:    Crash when setting 'guicursor' to weird value.
Solution:   Avoid negative size. (Dominique Pelle, closes vim/vim#1465)
24922ec233
2018-03-22 07:34:42 +01:00
535bf89597 Merge #8147 'Run old tests in :terminal' 2018-03-21 00:26:39 +01:00
ZyX
519ff2ad42 oldtests: Make test output least verbose
Also removes `-` before `rm -rf` as `-f` is supposed to already suppress error.
2018-03-21 00:54:32 +03:00
10008f7d49 build/cmake: avoid CMP0054 (#8149)
CMP0054: Only interpret if() arguments as variables or keywords when unquoted.
2018-03-20 22:19:07 +01:00
739fb93a90 Merge #8128 'build/windows: Simplify build requirements' 2018-03-18 23:46:12 +01:00
1fb44676cd build: avoid CMP0046 "dependency target does not exist" #8128 2018-03-18 23:41:48 +01:00
ZyX
1c0a2a39b6 oldtests: Run old tests in :terminal
Reasoning:

- No need to check for terminal size.
- No need to mess with terminal title.
- Allows old tests to timeout with the rest of the build proceeding.
- Less and less messy output to travis log.
- Opens a path allowing old tests run in parallel. Though last bit needs test
  refactoring.
2018-03-18 23:51:43 +03:00
3bf57c1171 log/channels: Formatting. Also log loopback channel. #8146 2018-03-18 21:15:41 +01:00
c49dac7cd3 build: Fix CMake target dependency problem
nvim was being ran before its runtime dependencies were copied.
2018-03-18 12:51:39 -05:00
feee814b30 build/windows: Add CMakeLists.txt for gperf 2018-03-18 12:51:39 -05:00
229604213e build/windows: Add CMake script to generate headers for Libvterm
On Windows the CMake script will replace the Perl script used by
Libvterm to generate headers.
2018-03-18 12:51:30 -05:00
15c53a44d3 build/windows: Add CMakeLists.txt for Libuv on Windows
Adding a CMakeLists.txt for Libuv removes the need for Python
when building on Windows.
2018-03-18 12:50:39 -05:00
bf789b04f3 build/windows: Ignore whitespace when applying patches
The --ignore-whitespace argument was added when applying patches to
prevent failures when patched files have different line endings.
2018-03-18 12:50:39 -05:00
4e02f1ab87 Merge #8107 'jobs: separate process-group' 2018-03-18 18:36:02 +01:00
0848add488 screen.c: define column width by function (#5802)
This does not change the behavior but centralizes column size for future use
(like dynamic signcolumn width depending on the maximum number of signs on a line).

The returned value is limited by the size of the `extra` tab in win_line
(currently allows for 18 ASCII characters).
2018-03-18 17:31:28 +01:00
ae409b5042 test/win: use cmd.exe for test
Can revert this after #8120.
2018-03-18 17:15:06 +01:00
167898a517 test: jobstop() kills entire process tree
Test correctly fails before 8d90171f8b.
ref #6530
2018-03-18 17:03:05 +01:00
72e4c9d8e7 Merge #8142 'build/msvc: fix some warnings' 2018-03-18 16:47:25 +01:00
65b66bc332 build/MSVC: fix "C4005: RGB: macro redefinition" 2018-03-18 14:30:05 +01:00
26b84a8b3e build/MSVC: fix "C4003: not enough actual parameters for macro"
For the case of TV_DICTITEM_STRUCT, we can't just pass `1` because:
https://github.com/neovim/neovim/pull/8142#discussion_r175262436
> this variant will trigger array overrun warnings from various static analyzers.
2018-03-18 14:30:05 +01:00
960f093625 build/MSVC: fix "C4028: formal parameter different from declaration" 2018-03-18 14:11:39 +01:00
66a8b593e7 ci/travis: report cache size 2018-03-18 14:11:39 +01:00
8f82f95c1c ci/travis: also cache $DEPS_DOWNLOAD_DIR
ref #5166
2018-03-18 14:11:38 +01:00
a034d4b69d API: nvim_get_proc()
TODO: "exepath" field (win32: QueryFullProcessImageName())

On unix-likes `ps` is used because the platform-specific APIs are
a nightmare.  For reference, below is a (incomplete) attempt:

diff --git a/src/nvim/os/process.c b/src/nvim/os/process.c
index 09769925aca5..99afbbf290c1 100644
--- a/src/nvim/os/process.c
+++ b/src/nvim/os/process.c
@@ -208,3 +210,60 @@ int os_proc_children(int ppid, int **proc_list, size_t *proc_count)
   return 0;
 }

+/// Gets various properties of the process identified by `pid`.
+///
+/// @param pid Process to inspect.
+/// @return Map of process properties, empty on error.
+Dictionary os_proc_info(int pid)
+{
+  Dictionary pinfo = ARRAY_DICT_INIT;
+#ifdef WIN32
+
+#elif defined(__APPLE__)
+  char buf[PROC_PIDPATHINFO_MAXSIZE];
+  if (proc_pidpath(pid, buf, sizeof(buf))) {
+    name = getName(buf);
+    PUT(pinfo, "exepath", STRING_OBJ(cstr_to_string(buf)));
+    return name;
+  } else {
+    ILOG("proc_pidpath() failed for pid: %d", pid);
+  }
+#elif defined(BSD)
+# if defined(__FreeBSD__)
+#  define KP_COMM(o) o.ki_comm
+# else
+#  define KP_COMM(o) o.p_comm
+# endif
+  struct kinfo_proc *proc = kinfo_getproc(pid);
+  if (proc) {
+    PUT(pinfo, "name", cstr_to_string(KP_COMM(proc)));
+    xfree(proc);
+  } else {
+    ILOG("kinfo_getproc() failed for pid: %d", pid);
+  }
+
+#elif defined(__linux__)
+  char fname[256] = { 0 };
+  char buf[MAXPATHL];
+  snprintf(fname, sizeof(fname), "/proc/%d/comm", pid);
+  FILE *fp = fopen(fname, "r");
+  // FileDescriptor *f = file_open_new(&error, fname, kFileReadOnly, 0);
+  // ptrdiff_t file_read(FileDescriptor *const fp, char *const ret_buf,
+  //                     const size_t size)
+  if (fp == NULL) {
+    ILOG("fopen() of /proc/%d/comm failed", pid);
+  } else {
+    size_t n = fread(buf, sizeof(char), sizeof(buf) - 1, fp);
+    if (n == 0) {
+      WLOG("fread() of /proc/%d/comm failed", pid);
+    } else {
+      size_t end = MIN(sizeof(buf) - 1, n);
+      end = (end > 0 && buf[end - 1] == '\n') ? end - 1 : end;
+      buf[end] = '\0';
+      PUT(pinfo, "name", STRING_OBJ(cstr_to_string(buf)));
+    }
+  }
+  fclose(fp);
+#endif
+  return pinfo;
+}
2018-03-18 00:11:45 +01:00
b0e5187e49 ci/travis: Don't destroy cache during prepare
This change was missed in c7f95fde1b.
ref #5166
2018-03-17 14:26:34 +01:00
f407a94032 vim-patch:8.0.0344: unlet command leaks memory (#8141)
Problem:    Unlet command leaks memory. (Nikolai Pavlov)
Solution:   Free the memory on error. (closes vim/vim#1497)
49439c4cdf
2018-03-17 09:49:06 +01:00
330e5acbce win: nvim_get_proc_children()
TODO: Raymond Chen explains[1] racy behavior of the
CreateToolhelp32Snapshot approach.  Better approach:

> create a job object and put process P in it. Then call
> QueryInformationJobObject with JobObjectBasicProcessIdList to get the
> list of child processes.

[1] "Why is CreateToolhelp32Snapshot returning incorrect parent process IDs all of a sudden?"
    https://blogs.msdn.microsoft.com/oldnewthing/20150403-00/?p=44313
2018-03-16 10:55:12 +01:00
12af7016e2 nvim_get_proc_children: fallback to shell
/proc/…/children may be unavailable because of an unset kernel option.
Fallback to `pgrep` invoked in a shell.
2018-03-16 10:55:12 +01:00
dbad797edd API: nvim_get_proc_children()
ref https://github.com/libuv/libuv/pull/836
2018-03-16 10:55:12 +01:00
de86f82483 win: os_proc_tree_kill()
XXX: comment at https://stackoverflow.com/q/1173342 :
> Windows recycles PIDs quite fast, you have to be extra careful not
> to kill unrelated processes. These APIs will report PPIDs for long
> dead processes whose PIDs may have been recycled. Check the parent
> start date to make sure it is related to the processes you spawned.
2018-03-16 10:55:12 +01:00
8d90171f8b jobs: child proc must have a separate process-group
UV_PROCESS_DETACHED compels libuv:uv__process_child_init() to call
setsid() in the child just after fork().  That ensures the process and
its descendants are grouped in a separate session (and process group).

The following jobstart() call correctly groups `sh` and `sleep` in a new
session (and process-group), where `sh` is the "session leader" (and
process-group leader):

    :call jobstart(['sh','-c','sleep 60'])

     SESN  PGRP   PID  PPID  Command
    30383 30383 30383  3620  │  ├─ -bash
    30383 31432 31432 30383  │  │  └─ nvim -u NORC
    30383 31432 31433 30383  │  │     ├─ nvim -u NORC
     8105  8105  8105 31432  │  │     └─ sh -c sleep 60
     8105  8105  8106  8105  │  │        └─ sleep 60

closes #6530
ref: https://stackoverflow.com/q/1046933
ref: https://unix.stackexchange.com/a/404065

Helped-by: Marco Hinz <mh.codebro+github@gmail.com>

Discussion
------------------------------------------------------------------------

On my linux box before this patch, the termclose_spec.lua:'kills job
trapping SIGTERM' test indirectly causes cmake/busted to wait for 60s.
That's because the test spawns a `sleep 60` descendant process which
hangs around even after nvim exits: nvim killed the parent PID, but not
PGID (process-group), so the grandchild "reparented" to init (PID 1).

Session contains processes (and process-groups) which are logically part
of the same "login session". Process-group is a set of
logically/informally-related processes within a session; for example,
shells assign a process group to each "job". Session IDs and PGIDs both
have type pid_t (like PIDs).

These OS-level mechanisms are, as usual, legacy accidents whose purpose
is upheld by convention and folklore.  We can use session-level grouping
(setsid), or we could use process-group-level grouping (setpgid).

Vim uses setsid() if available, otherwise setpgid(0,0).

Windows
------------------------------------------------------------------------

UV_PROCESS_DETACHED on win32 sets CREATE_NEW_PROCESS_GROUP flag.
But uv_kill() does not kill the process-group:
https://github.com/nodejs/node/issues/3617

Ideas:
- Set UV_PROCESS_DETACHED (CREATE_NEW_PROCESS_GROUP), then call
  GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, pid)
   - Maybe won't work because MSDN says "Only processes that share the
     same console as the calling process receive the signal."
     https://docs.microsoft.com/en-us/windows/console/generateconsolectrlevent
     But CREATE_NEW_PROCESS_GROUP creates a new console ...
     ref https://stackoverflow.com/q/1453520
- Group processes within a "job". libuv does that *globally* for
  non-detached processes: uv__init_global_job_handle.
- Iterate through CreateToolhelp32Snapshot().
   - https://stackoverflow.com/q/1173342
   - Vim does this, see terminate_all()
2018-03-16 10:55:12 +01:00
de47515477 test: use luv.now() instead of os.time() 2018-03-16 10:55:12 +01:00
cca407b43e DirChanged: support <buffer> (#8140) 2018-03-16 07:29:20 +01:00
0093c25dd3 doc: nodejs 2018-03-15 04:59:18 +01:00
338664e96c node/provider: support g:node_host_prog #8135 2018-03-15 04:55:48 +01:00
9058a5a19a clint 2018-03-14 10:39:14 +00:00
cc58ec9a80 Update documentation
Update vim_diff.txt with :lmap differences, update documentation on
'keymap', and add tests.

The tests added are to demonstrate the behaviour specified in the
documentation of :loadkeymap.
2018-03-14 10:39:14 +00:00
3b304fc04a 'keymap' now uses :lmap instead of :lnoremap
This means that the major way that :lmap mappings are applied works as
one would expect with macros.
This also means that having a translation with 'keymap' does not
preclude using mappings in insert mode with :imap.
2018-03-14 10:39:14 +00:00
d989051220 Split :lnoremap test into done and pending
There is some behaviour that we keep with the recent changes, and some
behaviour that we change.
Instetad of having one failing test covering  all behaviour, we split
the test into two.
2018-03-14 10:39:14 +00:00
e01f35c4bb :lnoremap mappings should not be remapped when replaying a recording 2018-03-14 10:39:14 +00:00
9beaf84d2f Ensure :lmap mappings take preference
If the mental model of :lmap mappings is a translation between your
keyboard and vim proper, then they should take preference over :imap
(and other) mappings. This patch makes that happen.
2018-03-14 10:39:14 +00:00
8e71a26e19 Record :lmap transformed keys in gotchars()
The mental model of :lmap and 'keymap' is of a transformation done
before anything else. Hence when recording a macro, or writing to a
scriptfile, the transformed keys should be recorded instead of the keys
before the transformation.
2018-03-14 10:39:14 +00:00
20bfe0f2a3 Account for :lmap in macros
close #5652
Start by adding some tests
2018-03-14 10:39:14 +00:00
1aefbff641 Add some basic tests for macros 2018-03-14 10:39:14 +00:00
5ce8158a5d vim-patch:8.0.0316: :help z? does not work (#8134)
Problem:    ":help z?" does not work. (Pavol Juhas)
Solution:   Remove exception for z?.
dad7309dd2
2018-03-14 10:30:24 +01:00
f5b0f5e17f Merge pull request #8127 from jamessan/update-pvs-headers
Add missing PVS headers to new files
2018-03-11 20:17:28 -04:00
e24e98534b ci/AppVeyor: use PowerShell (#8124) 2018-03-11 23:44:07 +01:00
4e5e6506b5 pvscheck: Ignore exit code of pvs-studio-analyzer
Since its typically non-zero, the script immediately exits instead of
converting the binary log into useful formats.
2018-03-11 18:01:44 -04:00
8bd1bbcec8 Add missing PVS headers to new files 2018-03-11 17:24:09 -04:00
c7f95fde1b ci/travis: Don't destroy cache during prepare
Use `cp -r` instead of `mv`.
Remove use of `dirname`, that was missed in 10cdf8c286.

closes #5166
2018-03-11 20:29:20 +01:00
241c380da9 Merge #8117 'build/CI/MSVC/LuaRocks' 2018-03-11 19:53:05 +01:00
a2d1e9cc79 vim-patch:8.0.0262,8.0.0263 (#8123)
vim-patch:8.0.0262: Farsi support is barely tested
Problem:    Farsi support is barely tested.
Solution:   Add more tests for Farsi.  Clean up the code.
ddf662a1c8

vim-patch:8.0.0263: Farsi support is not tested enough
Problem:    Farsi support is not tested enough.
Solution:   Add more tests for Farsi.  Clean up the code.
80627cf51f
2018-03-11 19:22:58 +01:00
b0b656dd37 ci/travis: rename $BUILD_NVIM_DEPS to $CACHE_ENABLE 2018-03-11 15:38:18 +01:00
9a0147754c build: respect $DEPS_BUILD_DIR
Without this, the CI_TARGET=lint travis job cant't find the cached deps
(in $HOME/nvim-deps), nor can it update the cache.
2018-03-11 15:38:18 +01:00
45e81e03f8 ci/macOS: skip python2 on travis macOS
macOS travis builds recently started failing (travis caches were cleared
recently, maybe related). python2 is reasonably covered by linux CI. Not
going to waste time on it for macOS CI.

    ==> Installing python@2
    ==> Downloading https://homebrew.bintray.com/bottles/python@2-2.7.14_3.el_capita
    ==> Pouring python@2-2.7.14_3.el_capitan.bottle.tar.gz
    Error: The `brew link` step did not complete successfully
    The formula built, but is not symlinked into /usr/local
    Could not symlink bin/2to3-2
    Target /usr/local/bin/2to3-2
    is a symlink belonging to python. You can unlink it:
      brew unlink python
    To force the link and overwrite all conflicting files:
      brew link --overwrite python@2
    To list all files that would be deleted:
      brew link --overwrite --dry-run python@2
    Possible conflicting files are:
    /usr/local/bin/2to3-2 -> /usr/local/Cellar/python/2.7.12_1/bin/2to3-2
    /usr/local/bin/2to3-2.7 -> /usr/local/Cellar/python/2.7.12_1/bin/2to3-2.7
    /usr/local/bin/idle -> /usr/local/Cellar/python/2.7.12_1/bin/idle
    ...
2018-03-11 12:45:15 +01:00
968c7ab17e ci/travis: use ninja instead of make 2018-03-11 12:45:15 +01:00
ffad8d4c51 ci/AppVeyor: disable MSVC_32 build
The MSVC_32 currently hangs.  When MSVC becomes the primary Windows
target, we can enable MSVC_32 and retire one of the mingw builds.  In
the meantime it adds too much time.
2018-03-11 12:43:42 +01:00
de919b9b94 build/luarocks: avoid parallelism for luarocks build
Is there a race between the luarocks `make bootstrap` dependencies?

reverts f73b4911312b35bfe38ed068672a2f8ba8875ba7
ref https://github.com/luarocks/luarocks/pull/774
2018-03-11 12:43:42 +01:00
90963a9c55 build/luarocks: apply "Fix siteconfig" patch
upstream: https://github.com/luarocks/luarocks/pull/774
2018-03-11 12:43:42 +01:00
496b0f944f test: next_msg(): default timeout to 10s
Infinite timeout results in hangs which waste time. If some test needs
longer than 10s to wait for a message, it should specify the timeout
explicitly.
2018-03-11 12:43:42 +01:00
fd4021387e test: rename next_message() to next_msg() 2018-03-11 12:43:42 +01:00
d554a6c7f0 ci/AppVeyor: fix set whitespace quoting 2018-03-11 12:43:42 +01:00
2bf0869160 test: handle non-deterministic message cadence 2018-03-11 12:43:42 +01:00
9154782386 Merge pull request #8122 from jamessan/appimagev2
Create v2 AppImages and include update information
2018-03-09 22:06:57 -05:00
9dc3cc2c68 genappimage: Include update information for releases/nightlies
This will allow users to use AppImageUpdate to update their AppImage.
It requires publishing the created zsync file alongside the appimage
file for the releases.
2018-03-09 20:49:26 -05:00
e1f27cdb4c genappimage: Create a type 2 AppImage 2018-03-09 20:49:26 -05:00
b0d08998f5 genappimage: Use AppImage/AppImages repo to avoid redirects 2018-03-09 20:49:24 -05:00
d53aa0e94f vim-patch.sh: more colorful #8115 2018-03-09 00:58:12 +01:00
9cefd83cc7 Merge #8084 'build/win: support MSVC' 2018-03-08 20:26:18 +01:00
d82621877b version.c: update [ci skip] (#7999)
NA:
vim-patch:8.0.0207: leaking file descriptor when system() fails
vim-patch:8.0.1434: GTK: :promtfind does not put focus on text input
2018-03-08 20:11:30 +01:00
5ec0a6d13f vim-patch:8.0.0513: fix getting name of cleared highlight group (#8103)
Problem:    Getting name of cleared highlight group is wrong. (Matt Wozniski)
Solution:   Only skip over cleared names for completion. (closes vim/vim#1592)
            Also fix that a cleared group causes duplicate completions.
c96272e30e
2018-03-08 19:49:21 +01:00
0adf950ccf build/msvc: Fix AppVeyor build script for 'MINGW_64-gcov' configuration 2018-03-07 11:07:07 -06:00
8ba8d7244f build/msvc: Add Git as a requirement for Windows patches 2018-03-06 20:52:27 -06:00
c29a82c45f build/msvc: Make shell-test fix only apply to MSCV 2018-03-06 20:38:10 -06:00
e0d55f2871 build/msvc: Allow MSVC AppVeyor builds to fail 2018-03-05 11:01:47 -06:00
7612ba5ad9 build/msvc: Change MSBuild verbosity to normal 2018-03-05 11:00:01 -06:00
fb3667cd16 build/msvc: Remove confusing comment 2018-03-04 17:44:23 -06:00
cfb713b5c6 build/msvc: Add Appveyor CI for MSVC 2018-03-04 17:44:23 -06:00
353ca83f73 build/msvc: Workaround for compiler optimization bug 2018-03-04 17:44:23 -06:00
d7ee323326 build/msvc: Fix errors caused by compiler intrinsics 2018-03-04 17:44:23 -06:00
773f23e00d build/msvc: Make shell-test work
MSVC doesn't have unistd.h or usleep() so it was replaced with the
Sleep() WinAPI function.
2018-03-04 17:44:23 -06:00
01fc02beee build/msvc: Add missing WIN32 macro
MSVC predefines `_WIN32`, but not `WIN32`. Also, some unnecessary includes have been removed.
2018-03-04 17:44:23 -06:00
8e30598115 build/msvc: Remove pkgconfig dependency on Windows 2018-03-04 17:44:23 -06:00
1d5eec2c62 health/provider: python: warning with correct host prog (#8049)
I have `g:python3_host_prog` set to the system Python, where a package
is also installed to provide the "neovim" module.

`:checkhealth provider` however displays a warning for this:

> Your virtualenv is not set up optimally.

This is because /usr/bin/python is not in /home/user/.pyenv.

I think this warning should not get displayed if host_prog_var exists.

It goes back to the initial commit (20447ba09), and is maybe only
missing the `!` there as with the previous commit.

Full output:
```
  - INFO: pyenv: /home/user/.pyenv/libexec/pyenv
  - INFO: pyenv root: /home/user/.pyenv
  - INFO: Using: g:python3_host_prog = "/usr/bin/python"
  - WARNING: Your virtualenv is not set up optimally (/usr/bin/python is not in /home/user/.pyenv).
    - ADVICE:
      - Create a virtualenv specifically for Neovim and use `g:python3_host_prog`.  This will avoid the need to install Neovim's Python module in each virtualenv.
  - WARNING: $VIRTUAL_ENV exists but appears to be inactive. This could lead to unexpected results.
    - ADVICE:
      - If you are using Zsh, see: http://vi.stackexchange.com/a/7654
  - INFO: Executable: /usr/bin/python
  - INFO: Python3 version: 3.6.4
  - INFO: python-neovim version: 0.2.1
  - OK: Latest python-neovim is installed: 0.2.1
```
2018-03-04 20:04:52 +01:00
b615192a37 vim-patch:8.0.0220: highlight completion misses some values #8013
Problem:    Completion for :match does not show "none" and other missing
            highlight names.
Solution:   Skip over cleared entries before checking the index to be at the
            end.
15eedf1d62
2018-03-04 16:34:59 +01:00
544cef0155 vim-patch:8.0.0234,8.0.0236,8.0.0225 (#8052)
vim-patch:8.0.0234: crash when using put in Visual mode
Problem:    When several lines are visually selected and one of them is short,
            using put may cause a crash. (Axel Bender)
Solution:   Check for a short line. (Christian Brabandt)
941c12da3c

vim-patch:8.0.0236: gcc complains about uninitialized variable
Problem:    Gcc complains that a variable may be used uninitialized. Confusion
            between variable and label name. (John Marriott)
Solution:   Initialize it.  Rename end to end_lnum.
6a717f17ec

vim-patch:8.0.0225: put in Visual block mode terminates early
Problem:    When a block is visually selected and put is used on the end of
            the selection only one line is changed.
Solution:   Check for the end properly. (Christian Brabandt, neovim issue
            5781)
9957a10d0f
2018-03-04 15:53:50 +01:00
b22d3385b9 Merge pull request #8077 from bfredl/msgchar
message: don't output unprintable chars to screen
2018-03-04 09:37:30 +01:00
cee9a8ce8a message: don't output unprintable chars to screen
fixes #7586 #8070
2018-03-04 08:37:57 +01:00
a98736b9c0 scripts: fix shebang of shadacat.py [ci skip] 2018-03-04 02:52:23 +01:00
90fc7c6ad0 ci: the homebrew formula for Python 3 was renamed (#8094)
Homebrew changed a few formulae to meet their standards. "python3" was renamed
to "python", and "python2" to "python@2".

As for why, read this announcement: https://brew.sh/2018/01/19/homebrew-1.5.0

Since we install Python 3 via homebrew anyway, we now do the same for Python 2
as well. We do that because the system Python 2 of macOS comes without pip
installed and this way seems cleaner than doing "sudo easy_install pip".

The Python 2 formula is keg-only now, so it doesn't interfere with the system
Python 2. Therefore we have to add its executables to $PATH ourselves.
2018-03-04 01:11:09 +01:00
c21cf6d3cc vim-patch:8.0.1561: crash with rust syntax highligting (#8095)
Problem:    Crash with rust syntax highligting. (Edd Barrett)
Solution:   Avoid going past the end of an empty line.

069dafc1de

Closes #6248
2018-03-03 22:14:16 +01:00
9f994bb699 api: nvim_list_uis #8004
ref #7438
closes #4842
2018-03-03 15:06:24 +01:00
37b755ab47 Merge #8072 from mhinz/vim-8.0.1439
vim-patch: 8.0.1439, 8.0.1442
2018-03-03 13:09:36 +01:00
de3a833ec7 Merge branch 'master' into msvc-compat 2018-03-01 22:56:59 -06:00
adfad73d8e build/msvc: Make libtermkey depend on Unibilium 2018-03-01 22:50:02 -06:00
b3d0241416 build/msvc: Add patch for LuaRocks
LuaRocks bundles an outdated wget.exe for downloading packages on Windows. It is too old to support GitHub's TLS, so this patch will replace it with curl.
2018-03-01 22:50:02 -06:00
305673e923 build/msvc: Add patch for libvterm
The patch removes VLAs because MSVC does not support them.
2018-03-01 22:50:02 -06:00
fa6f892055 build/msvc: Add CMakeLists.txt and header for Unibilium
A header was added for compatibility with MSVC and CMakeLists.txt was
added for building with CMake.
2018-03-01 22:48:15 -06:00
3d2f4154b1 third-party: build all deps with debugging symbols (#8042)
When building with CMAKE_BUILD_TYPE=Debug, the dependencies are built like this:

| Dep        | Defaults  | Debug                                       |
|------------|-----------|---------------------------------------------|
| unibilium  | `-O2`     | `make CFLAGS=-O0 DEBUG=1`                   |
| msgpack    | `-g -O3`  | `cmake . -DCMAKE_C_FLAGS_DEBUG="-O0 -ggdb"` |
| libuv      | `-g -O2`  | `./configure CFLAGS="-O0 -ggdb"`            |
| luv        | `-g -O2`  | `cmake . -DCMAKE_C_FLAGS_DEBUG="-O0 -ggdb"` |
| libvterm   | not set   | `make CFLAGS=-O0 DEBUG=1`                   |
| libtermkey | not set   | `make CFLAGS=-O0 DEBUG=1`                   |
| jemalloc   | `-g3 -O3` | `./configure CFLAGS="-O0 -ggdb"`            |
| gperf      | `-g -O2`  | `./configure CXXFLAGS="-O0 -ggdb"`          |
| luajit     | `-g -O2`  | haven't checked yet                         |

This means that only unibilium, libtermkey, and libvterm don't build with
debugging symbols by default.

Build them with debugging symbols and optimisations that don't hinder
debugging: -Og -g
2018-03-01 10:23:21 +01:00
f2b6145d74 build/msvc: Use patched libvterm for MSVC 2018-02-28 19:38:30 -06:00
cb245a71ca build/msvc: Add MSVC compiler flag when building LuaRocks 2018-02-28 19:38:30 -06:00
3a6ee8819e build/msvc: Remove unnecessary copy command for msgpack DLL 2018-02-28 19:38:30 -06:00
0169872fd3 build/msvc: Fix linking for luajit and luv 2018-02-28 19:38:30 -06:00
9aec64c34e build/msvc: Allow building Unibilium on Windows 2018-02-28 19:38:30 -06:00
8f39e96d21 build/msvc: Remove unnecessary header include 2018-02-28 19:38:30 -06:00
60a341a05f build/msvc: Fix standard IO file number definitions
With MSVC, STDOUT_FILENO and STDERR_FILENO are defined as function calls instead of constants, meaning they can't be assigned to enum values. The enum was only used in one file, so it has been removed. A definition for STDIN_FILENO has been added that is consistent with the other two definitions.
2018-02-28 19:37:58 -06:00
2c414fbbb1 build/msvc: Fix missing restrict keyword
MSVC has the __restrict keyword and a marco is defined for it in `win_defs.h`.
2018-02-28 19:37:58 -06:00
f04b53aa24 build/msvc: Move include into unix_defs.h 2018-02-28 19:37:58 -06:00
d99f8feea3 build/msvc: Fix name of import library 2018-02-28 19:37:58 -06:00
d520e2590a build/msvc: Add mode_t typedef to win_defs.h 2018-02-28 19:37:58 -06:00
69da692b0a build/msvc: Fix preprocessor parsing
Preprocessor directives on the first line of the file were not being parsed.
2018-02-28 19:37:58 -06:00
ba87a2cde7 cscope: ignore EINTR while reading the prompt (#8079)
The following code..

    au VimEnter,DirChanged * if filereadable('.git/cscope.out') |
        \ exe 'cs add .git/cscope.out' | endif

..would lead to this issue:

    Error detected while processing VimEnter Auto commands for "*":
    cs_read_prompt EOF: Interrupted system call
    Error detected while processing VimEnter Auto commands for "*":
    E262: error reading cscope connection 0

A signal, in this case SIGCHLD, during a system call leads to errno being set
to EINTR. Ignore it.

This is merely a workaround for the time being. We don't block SIGCHLD signals,
since they're needed by libuv. The proper fix would be to rewrite if_cscope.c to
use libuv for handling processes.
2018-02-28 23:37:05 +01:00
611351677d Merge pull request #8069 from jamessan/use-luacheck-release
third-party: Use luacheck releases (0.21.2 for now) instead of master
2018-02-26 21:38:06 -05:00
e237cff0c8 vim-patch:8.0.1442: using pointer before it is set
Problem:    Using pointer before it is set.
Solution:   Search in whole buffer instead of next token.

a172b63ab8
2018-02-26 14:42:54 +01:00
81a520e60e vim-patch:8.0.1439: if cscope fails a search Vim may hang
Problem:    If cscope fails a search Vim may hang.
Solution:   Bail out when a search error is encountered. (Safouane Baroudi,
            closes vim/vim#2598)

1274d33493
2018-02-26 14:40:27 +01:00
ff8c848128 third-party: Explicitly version pin all luarocks modules 2018-02-26 08:09:00 -05:00
9938196298 third-party: Install all luarocks by name instead of URL 2018-02-25 19:02:39 -05:00
f588113191 shada: fix typo (#8066) 2018-02-25 20:14:32 +01:00
c19ff66bfd third-party: Use luacheck releases (0.21.2 for now) instead of master
Tracking master subjects us to breakages (as happened when
luacheck-scm-1.rockspec got renamed to luacheck-dev-1.rockspec) and
makes older releases unbuildable when that happens.
2018-02-25 13:11:27 -05:00
158f8b7ce3 unittest: Ignore all _Float-prefixed types (#8067)
Previously, we ignored only _Float128. But glibc 2.27 added _Float32
and _Float32x.  Rather than play whack-a-mole, ignore everything.
2018-02-25 10:23:12 +01:00
f72630b784 Merge pull request #8055 from bfredl/strictwritedelay
make 'writedelay' show all redraws when negative
2018-02-24 09:40:20 +01:00
e18177692a screen.c: make negative 'writedelay' show all redraws
Currently writedelay shows the sequence of characters that are sent to
the UI/TUI module. Here nvim has already applied an optimization: when
attempting to put a char in a screen cell, if the same char already was
there with the same attributes, UI output is disabled. When debugging
redrawing it it sometimes more useful to inspect the redraw stream one
step earlier, what region of the screen nvim actually is recomputing
from buffer contents (win_line) and from evaluating statusline
expressions.

Take the popupmenu as an example. When closing the popupmenu (in the
TUI), currently 'writedelay' looks like vim only is redrawing the region
which the pum covered. This is not what happens internally: vim redraws
the entire screen, even if only outputs the changed region.

This commit allows negative values of 'writedelay', which causes a delay
for all redrawn characters, even if the character already was displayed
by the UI before.
2018-02-24 09:10:00 +01:00
f3f1970597 Merge #8035 from justinmk/teto-fillchars-pr 2018-02-23 01:14:30 +01:00
384a39479a 'fillchars': fix defaults logic; handle ambiwidth=double #7986
Update tests.
2018-02-23 00:48:35 +01:00
0c930c2969 defaults: 'fillchars'
Most fonts should have these by now. Both are a significant visual
improvement.

- Vertical connecting bar `│` is used by tmux, pstree, Windows 7 cmd.exe
  and nvim-qt.exe.
- Middle dot `·` works on Windows 7 cmd.exe, nvim-qt.exe.

For reference: tmux uses these chars to draw lines: │ ├ ─
2018-02-23 00:48:35 +01:00
15670ca1ad Merge pull request #8050 from bfredl/stopbridge
ui_bridge: make sure TUI receives no more messages after "stop" message
2018-02-22 15:51:28 +01:00
8b05da1577 ui_bridge: make sure TUI receives no more UI events after "stop" event 2018-02-22 10:26:45 +01:00
8c8cf46c71 Merge #8044 'build: improve Lua module checks' 2018-02-22 09:38:10 +01:00
4696a5a10e health.vim: minor cleanup (#8046) 2018-02-22 02:42:08 +01:00
830b5819a0 health/provider: check Python also with loaded_var (#8047)
`g:loaded_python3_provider` gets set when the autoload file is sourced,
but this might error out, e.g. with deoplete:

    [deoplete] Failed to load python3 host. You can try to see what happened by starting nvim with $NVIM_PYTHON_LOG_FILE set and opening the generated log file. Also, the host stderr is available in messages.
    [deoplete] function remote#define#FunctionBootstrap[1]..remote#host#Require[10]..provider#pythonx#Require[13]..provider#Poll, line 14
    [deoplete] deoplete requires Python3 support("+python3").
    [deoplete] deoplete failed to load. Try the :UpdateRemotePlugins command and restart Neovim.  See also :checkhealth.

It refers to `:checkhealth` from there explicitly, which would then
(without this patch) say that Python 3 is disabled.

This patch changes the reported info to include that it might have been
disabled due to some error, and keeps on going.
2018-02-22 02:38:00 +01:00
1eb4aff57a checkhealth: python: do not report pythonx_errs twice (#8045)
They get reported unconditionally as errors below.
2018-02-22 02:37:23 +01:00
c8074e3792 runtime/autoload/health/*.vim: fix vint warning (#8048) 2018-02-22 02:30:39 +01:00
ef0a07c073 cmake/LuaHelpers.cmake: check_lua_module: use 'lua -l'
It only shortens the traceback a bit for when a module is not found
though, only removing the "(command line):1: in main chunk" (with
lua5.2).
2018-02-22 01:22:26 +01:00
8851903434 cmake/LuaHelpers.cmake: check_lua_module: display errors
This helps to figure out what the problem is, e.g. in my case I have
lua51-mpack installed to be used with luajit, but it is broken (missing
libmpack).

With this patch you get:

    -- Checking Lua interpreter /usr/bin/luajit
    /usr/bin/luajit: error loading module 'mpack' from file '/usr/lib/lua/5.1/mpack.so':
            libmpack.so.0: cannot open shared object file: No such file or directory
    stack traceback:
            [C]: at 0x55fcf0166fb0
            [C]: in function 'require'
            (command line):1: in main chunk
            [C]: at 0x55fcf01188a0
    -- [/usr/bin/luajit] The 'mpack' lua package is required for building Neovim
    -- Checking Lua interpreter /usr/bin/lua5.1
    /usr/bin/lua5.1: error loading module 'mpack' from file '/usr/lib/lua/5.1/mpack.so':
            libmpack.so.0: cannot open shared object file: No such file or directory
    stack traceback:
            [C]: ?
            [C]: in function 'require'
            (command line):1: in main chunk
            [C]: ?
    -- [/usr/bin/lua5.1] The 'mpack' lua package is required for building Neovim
    -- Checking Lua interpreter /usr/bin/lua5.2
    /usr/bin/lua5.2: (command line):1: module 'mpack' not found:
            no field package.preload['mpack']
            no file '/usr/share/lua/5.2/mpack.lua'
            no file '/usr/share/lua/5.2/mpack/init.lua'
            no file '/usr/lib/lua/5.2/mpack.lua'
            no file '/usr/lib/lua/5.2/mpack/init.lua'
            no file './mpack.lua'
            no file '/usr/lib/lua/5.2/mpack.so'
            no file '/usr/lib/lua/5.2/loadall.so'
            no file './mpack.so'
    stack traceback:
            [C]: in function 'require'
            (command line):1: in main chunk
            [C]: in ?
    -- [/usr/bin/lua5.2] The 'mpack' lua package is required for building Neovim
    -- Checking Lua interpreter /usr/bin/lua
    /usr/bin/lua: (command line):1: module 'mpack' not found:
            no field package.preload['mpack']
            no file '/usr/share/lua/5.3/mpack.lua'
            no file '/usr/share/lua/5.3/mpack/init.lua'
            no file '/usr/lib/lua/5.3/mpack.lua'
            no file '/usr/lib/lua/5.3/mpack/init.lua'
            no file './mpack.lua'
            no file './mpack/init.lua'
            no file '/usr/lib/lua/5.3/mpack.so'
            no file '/usr/lib/lua/5.3/loadall.so'
            no file './mpack.so'
    stack traceback:
            [C]: in function 'require'
            (command line):1: in main chunk
            [C]: in ?
    -- [/usr/bin/lua] The 'mpack' lua package is required for building Neovim
    CMake Error at CMakeLists.txt:459 (message):
      A suitable Lua interpreter was not found.

While this makes it more verbose for the expected error case ("module
'mpack' not found"), the behavior before this patch hides too much.
This is the old output:

    -- Checking Lua interpreter /usr/bin/luajit
    -- [/usr/bin/luajit] The 'mpack' lua package is required for building Neovim
    -- Checking Lua interpreter /usr/bin/lua5.1
    -- [/usr/bin/lua5.1] The 'mpack' lua package is required for building Neovim
    -- Checking Lua interpreter /usr/bin/lua5.2
    -- [/usr/bin/lua5.2] The 'mpack' lua package is required for building Neovim
    -- Checking Lua interpreter /usr/bin/lua
    -- [/usr/bin/lua] The 'mpack' lua package is required for building Neovim
    CMake Error at CMakeLists.txt:459 (message):
      A suitable Lua interpreter was not found.

This is for when the whole configuration runs (i.e. after `make
distclean`), afterwards only one Lua interpreter gets checked only.
2018-02-22 01:22:19 +01:00
4a8f081971 vim-patch:8.0.0225: put in Visual block mode terminates early (#8040)
Problem:    When a block is visually selected and put is used on the end of
            the selection only one line is changed.
Solution:   Check for the end properly. (Christian Brabandt, neovim issue
            5781)
9957a10d0f
2018-02-21 21:56:47 +01:00
471d6d4db5 Merge pull request #8039 from bfredl/deadscreen
remove dead code in screen.c for terminals without scroll regions
2018-02-21 20:33:33 +01:00
464ac8fe2a screen: win_del_lines/win_ins_lines cleanup 2018-02-21 19:20:23 +01:00
54c0bf6429 screen: remove dead code emulating terminals without scroll regions
This logic is now in tui/tui.c
2018-02-21 16:10:10 +01:00
ec02d9aad6 vim-patch:8.0.0222: blockwise put on multi-byte char (#8030)
Note: code change was covered by c2a1821611

Problem:    When a multi-byte character ends in a zero byte, putting blockwise
            text puts it before the character instead of after it.
Solution:   Use int instead of char for the character under the cursor.
            (Luchr, closes vim/vim#1403)  Add a test.
c81299684b
2018-02-20 21:44:37 +01:00
c57d315963 Merge pull request #8031 from bfredl/gotintstatus
jobwait: return -2 on interrupt even with timeout
2018-02-20 15:15:06 +01:00
04fdbfe17d jobwait: return -2 on interrupt also with timeout 2018-02-20 12:32:23 +01:00
6bbec71fde Merge pull request #8019 from jamessan/invalid-provider-stderr
Improve error handling and reduce duplication of providers' #Require()
2018-02-19 20:10:10 -05:00
e215b6cb85 Merge #7412 'win: enable more tests' 2018-02-20 00:13:58 +01:00
e177c186e4 vim-patch:8.0.0214 (#8010)
vim-patch:8.0.0214: leaking memory when syntax cluster id is unknown

Problem:    Leaking memory when syntax cluster id is unknown. (Coverity)
Solution:   Free the memory.

d7a96151e0
2018-02-19 23:41:25 +01:00
4b81f627c6 build/gcc: disable -Warray-bounds entirely #7923
We need to disable -Warray-bounds locally for kbtree.h, but we can't
because _Pragma("GCC diagnostic pop") is broken in GCC 5.x+.

So this commit disables -Warray-bounds entirely (for GCC only).

GCC bug:
"_Pragma diagnostic 'ignored' in macro with strict-overflow not
suppressing warning fully with -Werror"
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66099

ref https://github.com/neovim/neovim/pull/7083#issuecomment-326323599
closes #7921
2018-02-19 22:14:34 +01:00
06b7561e78 build: remove contents of build/runtime/doc/* surgically (#8024)
Only remove the directory contents. If the directory itself is removed,
then `sudo make install` creates a root-owned …/doc/ directory. That
breaks the next non-root build.

This was an accident of 0b1904d835.

Note: the following does not work, because it misses renamed help files
(which would no longer be in the build-tree definition)

    COMMAND ${CMAKE_COMMAND} -E remove ${BUILDDOCFILES} ${GENERATED_HELP_TAGS}
2018-02-19 21:10:16 +01:00
7fa69fb288 Resolve issues mentioned in PR review 2018-02-19 07:10:47 -05:00
795da343bb test: win: emulate yes with for loop 2018-02-19 07:10:46 -05:00
07dfe0f5ea test: win: enable ui/wildmode_spec.lua 2018-02-19 07:10:46 -05:00
8dcfd58e2c test: win: enable termclose_spec.lua 2018-02-19 07:10:46 -05:00
d80bf3c656 test: enable ex_cmds/cd_spec.lua on Windows 2018-02-19 07:10:46 -05:00
df99ab461e test: enable legacy/fixeol_spec in Windows
Try nvim's delete() for cross-platform file remove in Windows
2018-02-19 07:10:45 -05:00
55ce6bfffb test: enable ex_cmds/write_spec.lua in Windows 2018-02-19 07:10:45 -05:00
6beb7ee77a win: enable legacy test 051 2018-02-19 07:10:44 -05:00
f1e6828b7b win: enable legacy test 059 2018-02-19 07:10:44 -05:00
2943056f75 win: enable legacy test 107 2018-02-19 07:10:44 -05:00
44dc8b4753 win: enable legacy test 093 2018-02-19 07:10:43 -05:00
10fbae086a win: enable legacy/arglist_spec.lua 2018-02-19 07:10:43 -05:00
18a53b6502 win: enable legacy test 30 2018-02-19 07:10:43 -05:00
c5a7f451ce win: enable legacy/getcwd_spec.lua 2018-02-19 07:10:43 -05:00
3c0cc9c2fb win: enable legacy/wordcount_spec.lua 2018-02-19 07:10:43 -05:00
e55de56a99 win: enable legacy/packadd_spec.lua 2018-02-19 07:10:42 -05:00
f4d82c1438 win: enable legacy test 011 2018-02-19 07:10:42 -05:00
4f65cd7c0a win: enable legacy/delete_spec.lua 2018-02-19 07:10:42 -05:00
bde32edefe win: enable legacy test 097 2018-02-19 07:10:42 -05:00
0fd899aa07 win: enable legacy test 025 2018-02-19 07:10:41 -05:00
3e19e18f4c win: enable job tests that use jobstart only
- echo "" does not hang in powershell
    - cmd.exe's echo command does not hang.
    - job tests default to powershell (WHY?)
- wait 5 seconds for powershell to create an empty file
    - powershell is slow
    - cannot reliably validate the id returned by jobstart via jobpid, jobstop
    - if using cmd.exe, waiting for a second should be enough
- remaining job tests are unreliable in Windows because any build can pass/fail
  for same conditions without changes, especially if the error is in stderr
2018-02-19 07:10:41 -05:00
00665d3c70 vim-patch:8.0.1493: completion items cannot be annotated (#8003)
Problem:    Completion items cannot be annotated.
Solution:   Add a "user_data" entry to the completion item. (Ben Jackson,
            coses vim/vim#2608, closes vim/vim#2508)

9b56a57cda
2018-02-18 23:56:59 +01:00
eccd60aaf4 runtime/doc: modeline is mandatory in help docs
see Vim 8.0.0650 e9134421ab
2018-02-18 22:17:47 +01:00
44071fe77a vim-patch:8.0.0212: buffer for key name may be too small (#8009)
Problem:    The buffer used to store a key name theoreticaly could be too
            small. (Coverity)
Solution:   Count all possible modifier characters.  Add a check for the
            length just in case.

423977d3ce
2018-02-18 21:55:39 +01:00
71e89cec23 Merge #8018 from justinmk/test-eq_any 2018-02-18 19:59:06 +01:00
7973847d02 test/util: remove eq_any()
It was added in the parent commit, but ended up not being used. And
I can't think of a case where it will be used: instead we would probably
want to generalize expect_msg_seq() if necessary.
2018-02-18 19:22:44 +01:00
e72ecdb7ca test/util: expect_msg_seq()
job_spec.lua on AppVeyor (Windows) often fails like this:

      FAILED  ] C:/projects/neovim/test/functional\core\job_spec.lua @ 72: jobs changes to given `cwd` directory
    C:/projects/neovim/test/functional\core\job_spec.lua:81: Expected objects to be the same.
    Passed in:
    (table) {
      [1] = 'notification'
      [2] = 'stdout'
     *[3] = {
        [1] = 0
       *[2] = {
          [1] = 'C:\projects\neovim\Xtest-tmpdir\nvimmSjq1S\0' } } }
    Expected:
    (table) {
      [1] = 'notification'
      [2] = 'stdout'
     *[3] = {
        [1] = 0
       *[2] = {
          [1] = 'C:\projects\neovim\Xtest-tmpdir\nvimmSjq1S\0'
         *[2] = '' } } }
    stack traceback:

Message chunking is non-deterministic, so we need to try different
variants.
2018-02-18 19:19:03 +01:00
8b543d09d8 Merge pull request #8011 from nimitbhardwaj/vim-8.0.0649
vim-patch:8.0.0649 and vim-patch:8.0.0650
2018-02-17 12:09:44 +01:00
2f018b1833 third-party: upgrade libunibilium from 1.2.1 to 2.0.0 (#8016)
❯ git log --oneline v2.0.0...v1.2.1
e3b16d6 (HEAD -> master, tag: v2.0.0, origin/master, origin/HEAD) version 2.0.0
6f0037b (origin/wide-int) update README with build instructions / prerequisites
f40c97a explicitly mention the new "wide integer" format in the man pages
37aa305 use ncurses*-config to get TERMINFO_DIRS if possible
2461ee1 use perl instead of sed hackery to create unibilium.pc
23e9dea don't cast between pointer types of different alignments
1b5b8fd add basic test for wide format
cfe4216 add xterm-256color; regenerate static tests from ncurses 6.1
6e55e75 escape backslashes properly
42f3cdd add 32 bit number support (wide terminfo format)
73385ba unibi-dump: accept a filename as argument
ec9ef0a don't pass NULL to memcpy
b42315b (origin/typecheck) make unibi_var_t slightly more type-safe
2018-02-17 00:35:39 +01:00
3af3515e74 Add provider#Poll() to handle starting and polling the provider 2018-02-16 14:08:12 -05:00
6fbb8d6739 provider: Safely access job.stderr in #Require
If `jobstart()` fails, then the subsequent `rpcrequest()` will throw due
to an invalid channel id.  This causes `job.stderr` not to exist, so we
throw another exception when trying to dump the job's stderr.

    Error detected while processing function remote#define#AutocmdBootstrap[1]..remote#host#Require[10]..provider#pythonx#Require:
    line 22:
    E716: Key not present in Dictionary: stderr

This obfuscates the actual problem.
2018-02-16 13:33:23 -05:00
48dc1f3f90 provider: ruby: Use stderr_buffered to collect stderr 2018-02-16 13:33:07 -05:00
e9134421ab vim-patch-8.0.0649 and vim-patch-8.0.0650: autocmd open help 2 times 2018-02-17 00:02:16 +05:30
09b51bbf87 vim-patch:8.0.0323: one second pause when running cmdline test (#8015)
Problem:    When running the command line tests there is a one second wait.
Solution:   Change an Esc to Ctrl-C. (Yegappan Lakshmanan)

31eb139b88
2018-02-16 12:04:06 +01:00
77286915a8 Merge pull request #8008 from bfredl/arrayfree
ex_getln: clear cmdline_block after it's freed
2018-02-14 19:23:11 +01:00
d9497053e8 ex_getln: clear cmdline_block after it's freed 2018-02-14 19:20:28 +01:00
674cb2afde cmake/GetCompileFlags: remove duplicate include dirs
Reduces noise in :version message.
2018-02-14 09:57:58 +01:00
0daa45bd44 Merge pull request #7759 from bfredl/ext_options
ui: refactor external widget options
2018-02-13 21:57:15 +01:00
6e5cb0debd ui: refactor ui options 2018-02-13 20:48:51 +01:00
0f1bc5ddce test/python: less-noisy Python skip-message
Developer can use :checkhealth to get more details, don't need to blast
the details in the skip-message every time.
2018-02-12 13:24:48 +01:00
9e9e4431c1 Merge #8001 from justinmk/vimpatches 2018-02-12 02:59:29 +01:00
7da4d1561b lint 2018-02-12 01:32:52 +01:00
418947fcb3 Merge #7966 'vim-patch:8.0.0470,8.0.0471' 2018-02-12 00:55:56 +01:00
c68d89521f vim-patch:8.0.1271: still too many old style tests
Problem:    Still too many old style tests.
Solution:   Convert a few more tests to new style. (Yegappan Lakshmanan,
            closes vim/vim#2290)

fb094e14c1
2018-02-12 00:48:30 +01:00
6bcee20806 vim-patch:8.0.0490: vertical split makes 'winfixwidth' window smaller (#7990)
Problem:    Splitting a 'winfixwidth' window vertically makes it one column
            smaller. (Dominique Pelle)
Solution:   Add one to the width for the separator.
38e3483637
2018-02-12 00:00:24 +01:00
5191f963bf test/old: skip encoding=latin1 test 2018-02-11 23:53:05 +01:00
ef39f854d7 vim-patch:8.0.1302: still too many old style tests
Problem:    Still too many old style tests.
Solution:   Convert a few more tests to new style. (Yegappan Lakshmanan,
            closes vim/vim#2326)

209d3874c1
2018-02-11 23:30:18 +01:00
04993f220a vim-patch:8.0.1205: it is possible to unload a changed buffer
Problem:    Using "1q" it is possible to unload a changed buffer. (Rick Howe)
Solution:   Check the right window for changes.

ff930cad8a
2018-02-11 22:50:54 +01:00
2929dbf223 vim-patch:8.0.0858: can exit while a terminal is still running a job
Problem:    Can exit while a terminal is still running a job.
Solution:   Consider a buffer with a running job like a changed file.

eb44a68b42
2018-02-11 22:40:12 +01:00
3ffeceb851 vim-patch:8.0.1226: edit and popup tests failing
Problem:    Edit and popup tests failing.
Solution:   Make the tests pass.

2a45d64d0a
2018-02-11 22:40:12 +01:00
43631675d8 vim-patch:8.0.1333: some tests are run twice
Problem:    Some tests are run twice.
Solution:   Invoked most utf8 tests only from test_alot_utf8. (Yegappan
            Lakshmanan, closes vim/vim#2369)

2c997d7603
2018-02-11 22:40:12 +01:00
aaff91d925 vim-patch:8.0.0311: linebreak tests are old style
Problem:    Linebreak tests are old style.
Solution:   Turn the tests into new style. Share utility functions. (Ozaki
            Kiichi, closes vim/vim#1444)

544d3bc9f0
2018-02-11 22:40:12 +01:00
85e240c045 vim-patch:26a280c47a1c
Fix duplication of patch.

26a280c47a
2018-02-11 22:40:12 +01:00
67e3b1e0c5 vim-patch:8.0.0699: checksum tests are not actually run
Problem:    Checksum tests are not actually run.
Solution:   Add the tests to the list. (Dominique Pelle, closes vim/vim#1819)

710b4a1646
2018-02-11 20:15:44 +01:00
e3cfe7853d vim-patch:8.0.0684: old style tests are not nice
Problem:    Old style tests are not nice.
Solution:   Turn two tests into new style. (pschuh, closes vim/vim#1797)

28b238225a
2018-02-11 20:15:44 +01:00
1257b04747 vim-patch:8.0.0446: the ";" command does not work after some characters
Problem:    The ";" command does not work after characters with a lower byte
            that is NUL.
Solution:   Properly check for not having a previous character. (Hirohito
            Higashi)

454709baff
2018-02-11 20:15:44 +01:00
ff4a628081 test/old: restore test_alot_utf8.vim
Needed for later Vim patches.
Stub test_alot_latin.vim to avoid merge-conflict noise.

vim-patch:7.4.1700
vim-patch:7.4.1734
vim-patch:7.4.1740
vim-patch:7.4.2086
vim-patch:7.4.2223
vim-patch:8.0.0250
2018-02-11 20:15:43 +01:00
f389196a34 Merge #7960 'vim patches' 2018-02-11 19:59:37 +01:00
f26a4d484b lint 2018-02-11 19:03:29 +01:00
22173a64dd vim-patch:8.0.0479: remote_peek() is not tested
Problem:    remote_peek() is not tested.
Solution:   Add a test.

6caf606b14
2018-02-11 19:03:29 +01:00
fda2b1e906 vim-patch:8.0.0295: test_viml hangs
Problem:    test_viml hangs.
Solution:   Put resetting 'more' before sourcing the script.

7a073549a3
2018-02-11 19:03:29 +01:00
7a91177bc9 vim-patch:8.0.0293: some tests have a one or three second wait
Problem:    Some tests have a one or three second wait.
Solution:   Reset the 'showmode' option.  Use a test time of one to disable
            sleep after an error or warning message.

e5f2a075e3
2018-02-11 19:03:29 +01:00
840a2bb67d vim-patch:8.0.1370: channel test for callback is flaky
Problem:    Channel test for callback is flaky.
Solution:   Add the test to thelist of flaky tests.

1eca6f13d6
2018-02-11 19:03:28 +01:00
bef505c158 vim-patch:8.0.1365: when one channel test fails others fail as well
Problem:    When one channel test fails others fail as well.
Solution:   Stop the job after a failure.  Also add a couple of tests to the
            list of flaky tests.

24820691e6
2018-02-11 19:03:28 +01:00
44f275d518 vim-patch:8.0.1329: when a flaky test fails it also often fails the second time
Problem:    When a flaky test fails it also often fails the second time.
Solution:   Sleep a couple of seconds before the second try.

5505860152
2018-02-11 19:03:28 +01:00
1be0107168 vim-patch:8.0.0480: the remote_peek() test fails on MS-Windows
Problem:    The remote_peek() test fails on MS-Windows.
Solution:   Check for pending messages. Also report errors in the first run if
            a flaky test fails twice.

15e737f768
2018-02-11 19:03:28 +01:00
bcd8541863 vim-patch:7.4.1477
Problem:    Test_reltime is flaky, it depends on timing.
Solution:   When it fails run it a second time.

b5760a1ce5
2018-02-11 19:03:28 +01:00
8dd63dbe31 vim-patch:8.0.1262: terminal redir test is flaky
Problem:    Terminal redir test is flaky.
Solution:   Add it to the list of flaky tests.

7dd88c5133
2018-02-11 19:03:28 +01:00
e4952ee006 vim-patch:8.0.1219: terminal test is flaky
Problem:    Terminal test is flaky.
Solution:   Add test function to list of flaky tests.

f204e05ae9
2018-02-11 19:03:28 +01:00
f69e0d314f vim-patch:8.0.0975: using freed memory when setting 'backspace'
Problem:    Using freed memory when setting 'backspace'.
Solution:   When changing oldval also change origval.

edbc0d46cf
2018-02-11 19:03:28 +01:00
82a9051857 vim-patch:8.0.1188: autocmd test fails on MS-Windows
Problem:    Autocmd test fails on MS-Windows.
Solution:   Give the buffer a name and find the buffer to be wiped out by
            name.

1d68d9b2bd
2018-02-11 19:03:28 +01:00
5c05cd43cb test/old: skip test for unsupported 'cpoptions' flag 2018-02-11 19:03:28 +01:00
9bf9cc69c1 test/arglist_spec: update to Vim 8.0.0721 behavior 2018-02-11 19:03:28 +01:00
163b2b241b vim-patch:8.0.1200: tests switch the bell off twice
Problem:    Tests switch the bell off twice.
Solution:   Don't set 'belloff' in individual tests. (Christian Brabandt)

67418d97b4
2018-02-11 19:03:28 +01:00
66f5e5c7d7 test/old: TODO: skip Test_BufLeave_Wipe()
This test exposes a bug (present on current master).

Steps to reproduce:

  CC=clang make CMAKE_BUILD_TYPE=Debug CMAKE_EXTRA_FLAGS="-DCLANG_ASAN_UBSAN=ON"
  export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer
  TEST_FILE=test_autocmd.res make oldtest

==3668==ERROR: AddressSanitizer: heap-use-after-free on address 0x6260001411c8 at pc 0x000000a38a47 bp 0x7fff9982ee50 sp 0x7fff9982ee48
READ of size 4 at 0x6260001411c8 thread T0
    0 0xa38a46 in _typval_encode_nothing_convert_one_value /home/vagrant/neovim/build/../src/nvim/eval/typval_encode.c.h:320:15
    1 0xa340d5 in encode_vim_to_nothing /home/vagrant/neovim/build/../src/nvim/eval/typval_encode.c.h:830:9
    2 0xa0ad63 in tv_clear /home/vagrant/neovim/build/../src/nvim/eval/typval.c:2189:25
    3 0x85d584 in vars_clear_ext /home/vagrant/neovim/build/../src/nvim/eval.c:18894:9
    4 0x7efac9 in vars_clear /home/vagrant/neovim/build/../src/nvim/eval.c:18871:3
    5 0x7ef471 in eval_clear /home/vagrant/neovim/build/../src/nvim/eval.c:638:3
    6 0xf80a7c in free_all_mem /home/vagrant/neovim/build/../src/nvim/memory.c:676:3
    7 0x12789dc in mch_exit /home/vagrant/neovim/build/../src/nvim/os_unix.c:152:3
    8 0xe85039 in getout /home/vagrant/neovim/build/../src/nvim/main.c:671:3
    9 0xbb4496 in ex_quit_all /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:6051:5
    10 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    11 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    12 0x845302 in call_user_func /home/vagrant/neovim/build/../src/nvim/eval.c:21332:3
    13 0x81097b in call_func /home/vagrant/neovim/build/../src/nvim/eval.c:6358:11
    14 0x825778 in get_func_tv /home/vagrant/neovim/build/../src/nvim/eval.c:6120:11
    15 0x81e361 in ex_call /home/vagrant/neovim/build/../src/nvim/eval.c:2735:9
    16 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    17 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    18 0xb17fdd in do_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2973:3
    19 0xb14630 in cmd_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2718:14
    20 0xb14727 in ex_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2699:3
    21 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    22 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    23 0xb34015 in do_cmdline_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:280:10
    24 0xe829d3 in exe_commands /home/vagrant/neovim/build/../src/nvim/main.c:1702:5
    25 0xe708bd in main /home/vagrant/neovim/build/../src/nvim/main.c:524:5
    26 0x7f0cd5b7e82f in __libc_start_main /build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:291
    27 0x44d628 in _start (/home/vagrant/neovim/build/bin/nvim+0x44d628)

0x6260001411c8 is located 200 bytes inside of 10256-byte region [0x626000141100,0x626000143910)
freed by thread T0 here:
    0 0x50df60 in __interceptor_cfree.localalias.0 (/home/vagrant/neovim/build/bin/nvim+0x50df60)
    1 0xf7dbe4 in xfree /home/vagrant/neovim/build/../src/nvim/memory.c:133:3
    2 0x676577 in free_buffer /home/vagrant/neovim/build/../src/nvim/buffer.c:749:5
    3 0x66e15b in close_buffer /home/vagrant/neovim/build/../src/nvim/buffer.c:590:5
    4 0x67a835 in do_buffer /home/vagrant/neovim/build/../src/nvim/buffer.c:1216:9
    5 0x681a1d in do_bufdel /home/vagrant/neovim/build/../src/nvim/buffer.c:945:16
    6 0xb9cd72 in ex_bunload /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:4585:17
    7 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    8 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    9 0x845302 in call_user_func /home/vagrant/neovim/build/../src/nvim/eval.c:21332:3
    10 0x81097b in call_func /home/vagrant/neovim/build/../src/nvim/eval.c:6358:11
    11 0x825778 in get_func_tv /home/vagrant/neovim/build/../src/nvim/eval.c:6120:11
    12 0x81e361 in ex_call /home/vagrant/neovim/build/../src/nvim/eval.c:2735:9
    13 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    14 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    15 0x8646b1 in ex_execute /home/vagrant/neovim/build/../src/nvim/eval.c:19478:7
    16 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    17 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    18 0x845302 in call_user_func /home/vagrant/neovim/build/../src/nvim/eval.c:21332:3
    19 0x81097b in call_func /home/vagrant/neovim/build/../src/nvim/eval.c:6358:11
    20 0x825778 in get_func_tv /home/vagrant/neovim/build/../src/nvim/eval.c:6120:11
    21 0x81e361 in ex_call /home/vagrant/neovim/build/../src/nvim/eval.c:2735:9
    22 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    23 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    24 0xb17fdd in do_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2973:3
    25 0xb14630 in cmd_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2718:14
    26 0xb14727 in ex_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2699:3
    27 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    28 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    29 0xb34015 in do_cmdline_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:280:10

previously allocated by thread T0 here:
    0 0x50e340 in calloc (/home/vagrant/neovim/build/bin/nvim+0x50e340)
    1 0xf7dc97 in xcalloc /home/vagrant/neovim/build/../src/nvim/memory.c:147:15
    2 0x67eb65 in buflist_new /home/vagrant/neovim/build/../src/nvim/buffer.c:1641:11
    3 0xa8fdcc in do_ecmd /home/vagrant/neovim/build/../src/nvim/ex_cmds.c:2221:13
    4 0x683b21 in empty_curbuf /home/vagrant/neovim/build/../src/nvim/buffer.c:1031:12
    5 0x67a098 in do_buffer /home/vagrant/neovim/build/../src/nvim/buffer.c:1196:14
    6 0x68173f in do_bufdel /home/vagrant/neovim/build/../src/nvim/buffer.c:927:11
    7 0xb9cd72 in ex_bunload /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:4585:17
    8 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    9 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    10 0x845302 in call_user_func /home/vagrant/neovim/build/../src/nvim/eval.c:21332:3
    11 0x81097b in call_func /home/vagrant/neovim/build/../src/nvim/eval.c:6358:11
    12 0x825778 in get_func_tv /home/vagrant/neovim/build/../src/nvim/eval.c:6120:11
    13 0x81e361 in ex_call /home/vagrant/neovim/build/../src/nvim/eval.c:2735:9
    14 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    15 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    16 0x8646b1 in ex_execute /home/vagrant/neovim/build/../src/nvim/eval.c:19478:7
    17 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    18 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    19 0x845302 in call_user_func /home/vagrant/neovim/build/../src/nvim/eval.c:21332:3
    20 0x81097b in call_func /home/vagrant/neovim/build/../src/nvim/eval.c:6358:11
    21 0x825778 in get_func_tv /home/vagrant/neovim/build/../src/nvim/eval.c:6120:11
    22 0x81e361 in ex_call /home/vagrant/neovim/build/../src/nvim/eval.c:2735:9
    23 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    24 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    25 0xb17fdd in do_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2973:3
    26 0xb14630 in cmd_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2718:14
    27 0xb14727 in ex_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2699:3
    28 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    29 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20

SUMMARY: AddressSanitizer: heap-use-after-free /home/vagrant/neovim/build/../src/nvim/eval/typval_encode.c.h:320:15 in _typval_encode_nothing_convert_one_va
lue
Shadow bytes around the buggy address:
  0x0c4c800201e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4c800201f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4c80020200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4c80020210: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4c80020220: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x0c4c80020230: fd fd fd fd fd fd fd fd fd[fd]fd fd fd fd fd fd
  0x0c4c80020240: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4c80020250: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4c80020260: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4c80020270: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4c80020280: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==3668==ABORTING
2018-02-11 19:03:27 +01:00
9af9ea6099 test/old: TODO: skip Test_virtual_replace()
This test exposes a bug (present on current master) in ins_char_bytes()
or somewhere earlier.

Steps to reproduce:

    inoremap <C-D> <Del>
    enew!
    exe "normal a\nabcdefghi\njk\tlmn\n    opq  rst\n\<C-D>uvwxyz"
    call cursor(1,1)
    exe "normal gR0\<C-D> 1\nA\nBCDEFGHIJ\n\tKL\nMNO\nPQR"

or run `TEST_FILE=test_visual.res make oldtest`.

Executing Test_virtual_replace()
2 buffers wiped out=================================================================
==31341==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000c4f34 at pc 0x0000004f7971 bp 0x7ffdf87bb190 sp 0x7ffdf87ba940
WRITE of size 1 at 0x6020000c4f34 thread T0
    0 0x4f7970 in __asan_memmove (/home/vagrant/neovim/build/bin/nvim+0x4f7970)
    1 0xfde7a3 in ins_char_bytes /home/vagrant/neovim/build/../src/nvim/misc1.c:1488:3
    2 0xfdef41 in ins_char /home/vagrant/neovim/build/../src/nvim/misc1.c:1403:3
    3 0x79dd03 in insertchar /home/vagrant/neovim/build/../src/nvim/edit.c:5285:7
    4 0x7be70f in insert_special /home/vagrant/neovim/build/../src/nvim/edit.c:5071:5
    5 0x7bd94a in insert_handle_key /home/vagrant/neovim/build/../src/nvim/edit.c:1229:7
    6 0x76df14 in insert_execute /home/vagrant/neovim/build/../src/nvim/edit.c:764:10
    7 0x173cda9 in state_enter /home/vagrant/neovim/build/../src/nvim/state.c:67:26
    8 0x77601d in insert_enter /home/vagrant/neovim/build/../src/nvim/edit.c:458:5
    9 0x76986e in edit /home/vagrant/neovim/build/../src/nvim/edit.c:1327:3
    10 0x1118661 in invoke_edit /home/vagrant/neovim/build/../src/nvim/normal.c:7591:7
    11 0x10e60bc in nv_Replace /home/vagrant/neovim/build/../src/nvim/normal.c:6070:7
    12 0x10f235d in nv_g_cmd /home/vagrant/neovim/build/../src/nvim/normal.c:6541:5
    13 0x10c0eaa in normal_execute /home/vagrant/neovim/build/../src/nvim/normal.c:1136:3
    14 0x10b8444 in normal_cmd /home/vagrant/neovim/build/../src/nvim/normal.c:7995:9
    15 0xb80982 in exec_normal /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:8197:5
    16 0xb8065b in exec_normal_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:8180:3
    17 0xbb08df in ex_normal /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:8098:7
    18 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    19 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    20 0x8646b1 in ex_execute /home/vagrant/neovim/build/../src/nvim/eval.c:19478:7
    21 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    22 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    23 0x845302 in call_user_func /home/vagrant/neovim/build/../src/nvim/eval.c:21332:3
    24 0x81097b in call_func /home/vagrant/neovim/build/../src/nvim/eval.c:6358:11
    25 0x825778 in get_func_tv /home/vagrant/neovim/build/../src/nvim/eval.c:6120:11
    26 0x81e361 in ex_call /home/vagrant/neovim/build/../src/nvim/eval.c:2735:9
    27 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    28 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    29 0x8646b1 in ex_execute /home/vagrant/neovim/build/../src/nvim/eval.c:19478:7
    30 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    31 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    32 0x845302 in call_user_func /home/vagrant/neovim/build/../src/nvim/eval.c:21332:3
    33 0x81097b in call_func /home/vagrant/neovim/build/../src/nvim/eval.c:6358:11
    34 0x825778 in get_func_tv /home/vagrant/neovim/build/../src/nvim/eval.c:6120:11
    35 0x81e361 in ex_call /home/vagrant/neovim/build/../src/nvim/eval.c:2735:9
    36 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    37 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    38 0xb17fdd in do_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2973:3
    39 0xb14630 in cmd_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2718:14
    40 0xb14727 in ex_source /home/vagrant/neovim/build/../src/nvim/ex_cmds2.c:2699:3
    41 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    42 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    43 0xb34015 in do_cmdline_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:280:10
    44 0xe829d3 in exe_commands /home/vagrant/neovim/build/../src/nvim/main.c:1702:5
    45 0xe708bd in main /home/vagrant/neovim/build/../src/nvim/main.c:524:5
    46 0x7f0012a7782f in __libc_start_main /build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:291
    47 0x44d628 in _start (/home/vagrant/neovim/build/bin/nvim+0x44d628)

0x6020000c4f34 is located 0 bytes to the right of 4-byte region [0x6020000c4f30,0x6020000c4f34)
allocated by thread T0 here:
    0 0x50e128 in malloc (/home/vagrant/neovim/build/bin/nvim+0x50e128)
    1 0xf7d871 in try_malloc /home/vagrant/neovim/build/../src/nvim/memory.c:87:15
    2 0xf7da99 in xmalloc /home/vagrant/neovim/build/../src/nvim/memory.c:121:15
    3 0xfde3c7 in ins_char_bytes /home/vagrant/neovim/build/../src/nvim/misc1.c:1473:18
    4 0xfdef41 in ins_char /home/vagrant/neovim/build/../src/nvim/misc1.c:1403:3
    5 0x79dd03 in insertchar /home/vagrant/neovim/build/../src/nvim/edit.c:5285:7
    6 0x7be70f in insert_special /home/vagrant/neovim/build/../src/nvim/edit.c:5071:5
    7 0x7bd94a in insert_handle_key /home/vagrant/neovim/build/../src/nvim/edit.c:1229:7
    8 0x76df14 in insert_execute /home/vagrant/neovim/build/../src/nvim/edit.c:764:10
    9 0x173cda9 in state_enter /home/vagrant/neovim/build/../src/nvim/state.c:67:26
    10 0x77601d in insert_enter /home/vagrant/neovim/build/../src/nvim/edit.c:458:5
    11 0x76986e in edit /home/vagrant/neovim/build/../src/nvim/edit.c:1327:3
    12 0x1118661 in invoke_edit /home/vagrant/neovim/build/../src/nvim/normal.c:7591:7
    13 0x10e60bc in nv_Replace /home/vagrant/neovim/build/../src/nvim/normal.c:6070:7
    14 0x10f235d in nv_g_cmd /home/vagrant/neovim/build/../src/nvim/normal.c:6541:5
    15 0x10c0eaa in normal_execute /home/vagrant/neovim/build/../src/nvim/normal.c:1136:3
    16 0x10b8444 in normal_cmd /home/vagrant/neovim/build/../src/nvim/normal.c:7995:9
    17 0xb80982 in exec_normal /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:8197:5
    18 0xb8065b in exec_normal_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:8180:3
    19 0xbb08df in ex_normal /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:8098:7
    20 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    21 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    22 0x8646b1 in ex_execute /home/vagrant/neovim/build/../src/nvim/eval.c:19478:7
    23 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5
    24 0xb2dd03 in do_cmdline /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:609:20
    25 0x845302 in call_user_func /home/vagrant/neovim/build/../src/nvim/eval.c:21332:3
    26 0x81097b in call_func /home/vagrant/neovim/build/../src/nvim/eval.c:6358:11
    27 0x825778 in get_func_tv /home/vagrant/neovim/build/../src/nvim/eval.c:6120:11
    28 0x81e361 in ex_call /home/vagrant/neovim/build/../src/nvim/eval.c:2735:9
    29 0xb4ba9c in do_one_cmd /home/vagrant/neovim/build/../src/nvim/ex_docmd.c:2242:5

SUMMARY: AddressSanitizer: heap-buffer-overflow (/home/vagrant/neovim/build/bin/nvim+0x4f7970) in __asan_memmove
Shadow bytes around the buggy address:
  0x0c0480010990: fa fa fd fa fa fa fd fa fa fa 00 fa fa fa 01 fa
  0x0c04800109a0: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
  0x0c04800109b0: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
  0x0c04800109c0: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
  0x0c04800109d0: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
=>0x0c04800109e0: fa fa 05 fa fa fa[04]fa fa fa fa fa fa fa fa fa
  0x0c04800109f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0480010a00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0480010a10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0480010a20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0480010a30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==31341==ABORTING
2018-02-11 19:03:27 +01:00
d285d6ca0d vim-patch:8.0.1223: crash when using autocomplete and tab pages
Problem:    Crash when using autocomplete and tab pages.
Solution:   Check if the current tab changed. (Christian Brabandt, closes
            vim/vim#2239)

9ad89c6c4f
2018-02-11 19:03:27 +01:00
abed6a0b1a vim-patch:8.0.1475: invalid memory access in read_redo()
Problem:    Invalid memory access in read_redo(). (gy741)
Solution:   Convert the replacement character back from a negative number to
            CR or NL. (hint by Dominique Pelle, closes vim/vim#2616)

f12519dec8
2018-02-11 19:03:27 +01:00
4b7f7be301 test: port Test_edit_08() to Lua test
Test_edit_08() depends on special-case handling in has_compl_option()
and redrawing() which are in Vim but are not wanted in Nvim. Using a Lua
test instead of depending on workarounds in the core to make the VimL
test work.
2018-02-11 19:03:27 +01:00
9b6ed6c71c vim-patch:8.0.1224: still interference between test functions
Problem:    Still interference between test functions.
Solution:   Clear autocommands. Wipe all buffers.  Fix tests that depend on a
            specific start context.

cf1ba35fc2
2018-02-11 19:03:27 +01:00
348193f49c vim-patch:8.0.1222: test functions interfere with each other
Problem:    Test functions interfere with each other.
Solution:   Cleanup tab pages, windows and buffers.  Reset option.

ce11de87e2
2018-02-11 19:03:27 +01:00
48af5991b9 vim-patch:8.0.1007: no test for filetype detection for scripts
Problem:    No test for filetype detection for scripts.
Solution:   Add a first test file script filetype detection.

cbe6944956
2018-02-11 19:03:27 +01:00
e15f2b4b96 vim-patch:8.0.0906: don't recognize Couchbase files
Problem:    Don't recognize Couchbase files.
Solution:   Add filetype detection. (Eugene Ciurana, closes vim/vim#1951)

d9bc8a801a
2018-02-11 19:03:27 +01:00
6ab9e87599 vim-patch:8.0.0895: filetype test fails on MS-Windows
Problem:    Filetype test fails on MS-Windows.
Solution:   Fix file names.

8ab3c1dc6b
2018-02-11 19:03:27 +01:00
9c14a78afd test/oldtest: account for Nvim man.vim handling 2018-02-11 19:03:26 +01:00
9baf60c617 vim-patch:8.0.0894: there is no test for runtime filetype detection
Problem:    There is no test for runtime filetype detection.
Solution:   Test a list of filetypes from patterns.

0a0217abfa
2018-02-11 19:03:26 +01:00
16a4168364 vim-patch:8.0.0613: the conf filetype is used before ftdetect from packages
Problem:    The conf filetype detection is done before ftdetect scripts from
            packages that are added later.
Solution:   Add the FALLBACK argument to :setfiletype. (closes vim/vim#1679,
            closes vim/vim#1693)

3e54569b17
2018-02-11 19:03:26 +01:00
a1ee06a099 test/oldtest: restore test_autochdir.vim
We have a ported Lua version, but we should also keep the Vim version
around to make merging easier.
2018-02-11 15:29:19 +01:00
cebf31cf70 vim-patch:8.0.1210: CTRL-G and CTRL-T are ignored with typeahead
Problem:    When typing a search pattern CTRL-G and CTRL-T are ignored when
            there is typeahead.
Solution:   Don't pass SEARCH_PEEK and don't call char_avail(). (haya14busa,
            closes vim/vim#2233)

f8e8c0643b
2018-02-11 15:29:19 +01:00
2de447b60c vim-patch:8.0.1221: still too many old style tests
Problem:    Still too many old style tests.
Solution:   Convert a few more tests to new style. (Yegappan Lakshmanan,
            closes vim/vim#2256)

15993ce921
2018-02-11 15:29:19 +01:00
0a531ddf87 vim-patch:8.0.0847: :argadd without argument can't handle space in file name
Problem:    :argadd without argument can't handle space in file name. (Harm te
            Hennepe)
Solution:   Escape the space. (Yasuhiro Matsumoto, closes vim/vim#1917)

398ee7326b
2018-02-11 15:29:19 +01:00
bbdb074aec vim-patch:8.0.0721: :argedit can only have one argument
Problem:    :argedit can only have one argument.
Solution:   Allow for multiple arguments. (Christian Brabandt)
90305c66a8
2018-02-11 15:29:19 +01:00
6df80e8762 vim-patch:8.0.0439: ":%argdel" gives an error for an empty arglist
Problem:    Using ":%argdel" while the argument list is already empty gives an
            error. (Pavol Juhas)
Solution:   Don't give an error. (closes vim/vim#1546)
69a92fb5ae

Also:
vim-patch:8.0.0473
2018-02-11 15:29:18 +01:00
77bfbc3006 test/oldtest: restore test_arglist.vim
We have a ported Lua version, but we should also keep the Vim version
around to make merging easier.

---

vim-patch:8.0.0723: arglist test fails if file name case is ignored
Problem:    Arglist test fails if file name case is ignored.
Solution:   Wipe existing buffers, check for fname_case property.
9b50bba643
2018-02-11 15:29:18 +01:00
e247dd2535 test/oldtest: runtest.vim: align with upstream 2018-02-11 15:29:16 +01:00
070f8df4dd vim-patch:8.0.1204: a QuitPre autocommand may get the wrong file name
Problem:    A QuitPre autocommand may get the wrong file name.
Solution:   Pass the buffer being closed to apply_autocmds(). (Rich Howe)

87ffb5c1a3
2018-02-11 15:27:57 +01:00
b5acf6e0c1 vim-patch:8.0.0700: segfault with QuitPre autocommand closes the window
Problem:    Segfault with QuitPre autocommand closes the window. (Marek)
Solution:   Check that the window pointer is still valid. (Christian Brabandt,
            closes vim/vim#1817)

0ea5070d79
2018-02-11 15:27:57 +01:00
6116af02ef vim-patch:8.0.1403: using freed buffer in grep command
Problem:    Using freed buffer in grep command. (gy741, Dominique Pelle)
Solution:   Lock the dummy buffer to avoid autocommands wiping it out.

4fb921e388
2018-02-11 15:27:57 +01:00
5ae90c84ea vim-patch:8.0.1402: crash with nasty autocommand
Problem:    Crash with nasty autocommand. (gy741, Dominique Pelle)
Solution:   Check that the new current buffer isn't wiped out. (closes vim/vim#2447)

9bca805ec4
2018-02-11 15:27:57 +01:00
e578d586f2 vim-patch:8.0.0974: resetting a string option does not trigger OptionSet
Problem:    Resetting a string option does not trigger OptionSet. (Rick Howe)
Solution:   Set the origval.

8efa026a25
2018-02-11 15:27:57 +01:00
fd58863eb6 vim-patch:8.0.0703: illegal memory access with empty :doau command
Problem:    Illegal memory access with empty :doau command.
Solution:   Check the event for being out of range. (James McCoy)

faf29d7f91
2018-02-11 15:27:57 +01:00
2d151f7739 vim-patch:8.0.0676: crash when closing quickfix window in autocmd
Problem:    Crash when closing the quickfix window in a FileType autocommand
            that triggers when the quickfix window is opened.
Solution:   Save the new value before triggering the OptionSet autocommand.
            Add the "starting" flag to test_override() to make the text work.

182a17b1e8
2018-02-11 15:27:57 +01:00
61f9a7b0d0 vim-patch:8.0.0736: OptionSet not triggered when entering diff mode
Problem:    The OptionSet autocommand event is not triggered when entering
            diff mode.
Solution:   use set_option_value() instead of setting the option directly.
            Change the tests from old to new style. (Christian Brabandt)

04f62f881c
2018-02-11 15:27:56 +01:00
ce92e784e1 vim-patch:8.0.1186: still quite a few old style tests
Problem:    Still quite a few old style tests.
Solution:   Convert old to new style tests. (Yegappan Lakshmanan)
            Avoid ringing the bell while running tests.
4a6fcf8047
2018-02-11 15:27:56 +01:00
c9aafda6ac vim-patch:8.0.0600: test_recover fails on some systems
Problem:    test_recover fails on some systems.
Solution:   Explicitly check if "/" is writable. (Ken Takata)

2a0b06def4
2018-02-11 15:27:56 +01:00
4c83567da3 vim-patch:8.0.0338: :recover test fails on MS-Windows
Problem:    :recover test fails on MS-Windows.
Solution:   Use non-existing directory on MS-Windows.

803452046b
2018-02-11 15:27:56 +01:00
4c1afd1e83 vim-patch:8.0.0337: invalid memory access in :recover command
Problem:    Invalid memory access in :recover command.
Solution:   Avoid access before directory name. (Dominique Pelle,
            closes vim/vim#1488)

c525e3a1c2
2018-02-11 15:27:56 +01:00
fafe23cad7 vim-patch:8.0.0472: when a test fails another test may also fail
Problem:    When a test fails and test.log is created, Test_edit_CTRL_I
            matches it instead of test1.in.
Solution:   Match with runtest.vim instead.
c537947100
2018-02-11 15:27:56 +01:00
cbecae46f4 vim-patch:8.0.0861: still many old style tests
Problem:    Still many old style tests.
Solution:   Convert several tests to new style. (Yegappan Lakshmanan)
4a137b4586

vim-patch:8.0.0862: file size test fails on MS-Windows
Problem:    File size test fails on MS-Windows.
Solution:   Set fileformat after opening new buffer.  Strip CR.
07c043af5f
2018-02-11 15:27:56 +01:00
4fe4b5abb6 vim-patch:8.0.0622: selecting quoted text fails with 'selection' "exclusive"
Problem:    Using a text object to select quoted text fails when 'selection'
            is set to "exclusive". (Guraga)
Solution:   Swap cursor and visual start position. (Christian Brabandt,
            closes vim/vim#1687)

c5e2b040b4
2018-02-11 15:27:56 +01:00
54b9510e05 vim-patch:8.0.1158: still old style tests
Problem:    Still old style tests.
Solution:   Convert serveral tests to new style. (Yegappan Lakshmanan)

db51007108
2018-02-11 15:27:56 +01:00
7d12597d29 vim-patch:8.0.0692: CTRL-G with 'incsearch' and ? goes in the wrong direction
Problem:    Using CTRL-G with 'incsearch' and ? goes in the wrong direction.
            (Ramel Eshed)
Solution:   Adjust search_start. (Christian Brabandt)

da5116da45
2018-02-11 15:27:56 +01:00
ca24ad0b95 vim-patch:8.0.0689: ~ character not escaped when extending search pattern
Problem:    The ~ character is not escaped when adding to the search pattern
            with CTRL-L. (Ramel Eshed)
Solution:   Escape the character. (Christian Brabandt)

a693d0584b
2018-02-11 15:27:55 +01:00
c8356e1151 vim-patch:8.0.0440: not enough test coverage in Insert mode
[Nvim note: test_override() omitted]

Problem:    Not enough test coverage in Insert mode.
Solution:   Add lots of tests.  Add test_override(). (Christian Brabandt,
            closes vim/vim#1521)
eb992cb90f
2018-02-11 15:27:55 +01:00
b67ce84c45 vim-patch.sh: delete *.orig files 2018-02-11 15:27:55 +01:00
e69a71427c vim-patch.sh: remove --posix from patch invocation
This was supposed to avoid creating *.orig. It doesn't do that, and
worse, it also seems to prevent new files from being created.
2018-02-11 15:27:47 +01:00
2cfc1b055b Merge #7939 "fix crash: 'spell' and long lines" 2018-02-11 13:04:39 +01:00
ed0d135247 Merge #7939 "fix crash: 'spell' and long lines"
closes #7937
2018-02-11 13:03:24 +01:00
564ad60c06 Merge pull request #7982 from bfredl/hlrefactor
Refactor HlAttrs so that termguicolors is implemented purely on TUI side
2018-02-11 13:01:31 +01:00
dd068928c1 version.c: update [ci skip] (#7953) 2018-02-11 12:27:47 +01:00
5d8da126d0 ui/tui: highlighting refactor
Make HlAttr contain highlighting state for both color modes (cterm and rgb).
This allows us to implement termguicolors completely in the TUI.

Simplify some logic duplicated between ui.c and screen.c. Also avoid
some superfluous highlighting reset events.
2018-02-11 10:29:32 +01:00
c205360f00 Merge pull request #7993 from blueyed/vim-8.0.1483
vim-patch:8.0.1483: searchpair() might return an invalid value on timeout
2018-02-10 23:18:04 +01:00
d929a41f5f vim-patch:8.0.1483: searchpair() might return an invalid value on timeout
Problem:    Searchpair() might return an invalid value on timeout.
Solution:   When the second search times out, do not accept a match from the
            first search. (Daniel Hahler, closes vim/vim#2552)

9d32276b52
2018-02-10 22:49:42 +01:00
34b99bc06b Merge pull request #7979 from bfredl/shellbell
Shell: support bell and buffer incomplete UTF-8 sequences
2018-02-10 22:30:49 +01:00
c03a847884 win: enable backtick_expansion and shell output tests 2018-02-10 22:28:12 +01:00
f75c4b39ec shell: handle split-up UTF-8 sequences 2018-02-10 22:28:12 +01:00
01cdeff626 tests: integrate ex_cmds/bang_filter_spec into ui/output_spec
they test the same thing. Filtering is tested elsewhere.
2018-02-10 22:28:12 +01:00
60ce7d9e0a shell: support bell 2018-02-10 22:28:12 +01:00
a6052c7307 Merge #7984 'defaults: sidescroll=1' 2018-02-09 11:46:13 +01:00
7229493eb1 test/oldtest: move Nvim setup to testdir/setup.vim 2018-02-09 02:25:03 +01:00
a265334406 defaults: sidescroll=1
ref #6289
2018-02-09 02:15:25 +01:00
dc53629587 macOS: Use pbpaste to detect a working clipboard (#7983)
`pbcopy` writes to the clipboard, it should not be used to sanity-check the clipboard.
2018-02-08 00:27:54 +01:00
a6136e8b0b screen.c: resolve neovim issue #7937 2018-02-07 13:46:37 -06:00
f66ebcd0a2 Merge pull request #7977 from jamessan/remove-coveralls
Switch to codecov and track coverage per test suite
2018-02-07 09:47:10 -05:00
d071578ed0 codecov: Report coverage even if some CI failed 2018-02-07 07:51:22 -05:00
366528130e Merge #6713 'tests for :! output' 2018-02-07 09:57:23 +01:00
35a7892781 lint, minor cleanup 2018-02-07 09:25:51 +01:00
ed37136c5c UI: restore 'writedelay' feature.
Removed by e0e41b30c6, probably
unintentionally. Useful for ye olde redraw debugging.

TODO: Also delay redraw of statusline.
2018-02-07 09:25:51 +01:00
352a51e831 test: :! print binary data, control chars
closes #5442
closes #4142
ref #6618
ref #4376
ref #7844
ref #2958
ref #4338
2018-02-07 09:25:51 +01:00
9fdd5d7f03 codecov: Submit test suite specific coverage 2018-02-06 23:23:59 -05:00
6e2bb564e1 ci: Remove coveralls coverage reporting 2018-02-06 21:18:54 -05:00
538361955d exit: annotate FUNC_ATTR_NORETURN functions #7954 (#7954)
This should fix a particular false positive from clang 5.0.0 scan-build,
which thinks that nlua_init() can continue after preserve_exit().
2018-02-07 02:32:50 +01:00
b1412dc412 Merge #7971 ':terminal Enter/Leave should not increment jumplist' 2018-02-07 01:52:10 +01:00
d73dd1588c :terminal Enter/Leave should not increment jumplist
The old behavior is probably not justified, for the usual reason:
terminal buffers may have interactive processes, so cursor placement is
arbitrary, therefore tracking it in the jumplist is useless (or worse).

N.B.: per the docstring for `checkpcmark()` it looks like we were
calling `checkpcmark()` and `setpcmark()` in the wrong order.

closes #3723
2018-02-07 00:01:58 +01:00
2a4c9c6e45 Merge pull request #7844 from bfredl/shellout
shell: use msg functions for :!cmd so UTF-8 and binary is supported.
2018-02-06 22:58:38 +01:00
6744f48d88 tests: cleanup bufhl test 2018-02-06 20:16:38 +01:00
4e7d85e635 shell: update execute('!cmd') test to new behavior
And similarly nvim_command_output test
2018-02-06 20:16:38 +01:00
9af14506e5 shell: add test for binary and multibyte output
Also update existing tests for new (vim-compatible) newline behavior
2018-02-06 10:23:26 +01:00
5f5caa367a use split instead of smile for neovim 2018-02-06 09:09:59 +08:00
2d99b81ab5 shell: use msg_outtrans_len_attr for :!cmd
fixes #7830 and #7788
2018-02-05 22:57:43 +01:00
0851057a8d Merge pull request #7957 from jamessan/lua-functionaltest
[RFC] Ensure build works without LuaJIT available
2018-02-04 07:54:30 -05:00
ab35caf9cf vim-patch:8.0.0471: exit callback test sometimes fails
Problem:    Exit callback test sometimes fails.
Solution:   Add it to the list of flaky tests.

0529b3eb01
2018-02-04 16:10:22 +08:00
40d6a95670 vim-patch:8.0.0470: not enough testing for help commands
Problem:    Not enough testing for help commands.
Solution:   Add a few more help tests. (Dominique Pelle, closes vim/vim#1565)

751ba616d1
2018-02-04 16:04:03 +08:00
de10ea55f3 lint 2018-02-03 22:19:08 -05:00
ZyX
2316a38dd1 tests: Make format_string('%q', ...) output more stable
It appears to be different on lua and luajit.
2018-02-02 07:28:56 -05:00
ZyX
a2dfeb8a16 functests: Improve error reporting in _check_parsing function
May be needed for unit tests as well though.
2018-02-02 07:28:56 -05:00
e243dbdc32 test: man_spec: Fix use of nested [[ quoting
Lua (not LuaJIT) complains about the "^[[" strings inside the expect,
since it sees them as nested quotes.  Change the quoting to [=[ ]=] to
avoid the issue.
2018-02-02 07:28:56 -05:00
5da6f0e903 travis: Don't run unit tests for functionaltest-lua build 2018-02-02 07:28:56 -05:00
86ee92f2a2 cmake: Set TEST_LIBNVIM_PATH to empty string when not unit testing 2018-02-02 07:28:56 -05:00
e34f2897d5 third-party: Install luabitop if using Lua 2018-02-02 07:28:56 -05:00
71190f1f34 third-party: lua: Set LUA_ROOT to ${DEPS_INSTALL_DIR} 2018-02-02 07:28:55 -05:00
204ec6337e third-party: luarocks: Use Lua if LuaJIT is disabled 2018-02-02 07:28:55 -05:00
4487657576 travis: Disable LuaJIT for functionaltest-lua build
Since we're already using Lua for the testing this allows us to ensure
our build still works properly without LuaJIT available.
2018-02-02 07:28:49 -05:00
e2afcfb020 build: BuildLuarocks.cmake: fix luacheck rockspec (#7961)
luacheck renamed the filename from luacheck-scm-1.rockspec to luacheck-dev-1.rockspec.
2018-02-02 11:21:58 +01:00
709a87d194 Merge #7463 'incsearch + hlsearch highlight all' 2018-02-01 23:25:55 +01:00
6710164c2c provider: make has('ruby') only return 1 if gem is installed (#7944) 2018-02-01 13:14:29 +01:00
f8010ea3ec test: robust cleanup, unique filenames #7950 (#7950)
Use unique filenames to avoid test conflicts.
Use read_file() instead of io.popen(), to ensures the file is closed.
Use helpers.rmdir(), it is far more robust than lfs.

closes #7911
2018-02-01 03:12:37 +01:00
648fed975e os_system(): do not set up input stream for empty string #7951
Test failure:
test/functional/eval/system_spec.lua: "works with an empty string"
E5677: Error writing input to shell-command: EPIPE

ref https://github.com/neovim/neovim/pull/6558#issuecomment-361061035
ref #6554
2018-02-01 02:28:54 +01:00
ec7cbabf01 version.c: update [ci skip] (#7886)
vim-patch:8.0.0175: setting language on MS-Windows does not always work
vim-patch:8.0.0185: system() test fails on MS-Windows
vim-patch:8.0.1435: memory leak in test_arabic
vim-patch:8.0.0424: compiler warnings on MS-Windows
vim-patch:8.0.0434: clang version not correctly detected
vim-patch:8.0.0458: potential crash if adding list or dict to dict fails
2018-02-01 02:24:45 +01:00
dfcd09dc22 vim-patch:8.0.0672: synconcealed() changes too often #7887
Problem:    Third item of synconcealed() changes too often. (Dominique Pelle)
Solution:   Reset the sequence number at the start of each line.
cc0750dc6e

closes #7589
2018-02-01 02:12:21 +01:00
3a5721e91b tui: libtermkey: force CSI driver for mouse input #7948
Fixes #7932

Nvim (tui.c) always enables SGR mouse (TUIData.unibi_ext.enable_mouse).
But if libtermkey sees key_mouse (kmous) in terminfo its terminfo driver
(driver-ti.c) will be activated, which by accident only supports X10
protocol. The libtermkey CSI driver (driver-csi.c), in contrast,
supports SGR.

We can force libtermkey to ignore the terminfo key_mouse entry by
returning NULL in the tui_tk_ti_getstr hook. That forces the CSI driver.

What is the effect of returning NULL from `tui_tk_ti_getstr()`?
- libtermkey `driver-ti.c:load_terminfo()` skips the entry.
- `termkey.c:peekkey()` iterates through all drivers, it finds
  `TERMKEY_RES_NONE` for the ti driver and falls back to the CSI driver.
2018-01-31 23:55:15 +01:00
6452831cf9 clipboard: macOS: fallback to tmux if pbcopy is broken #7940
On some versions of macOS, pbcopy doesn't work in tmux <2.6
https://superuser.com/q/231130
Fallback to tmux in that case.

Add a healthcheck for this scenario.
2018-01-31 11:37:05 +01:00
649123d07c vim-patch:8.0.0358,8.0.0359 (#7832)
vim-patch:8.0.0358: invalid memory access in C-indent code
Problem:    Invalid memory access in C-indent code.
Solution:   Don't go over end of empty line. (Dominique Pelle, closes vim/vim#1492)
60629d6425

vim-patch:8.0.0359: 'number' and 'relativenumber' are not properly tested
Problem:    'number' and 'relativenumber' are not properly tested.
Solution:   Add tests, change old style to new style tests. (Ozaki Kiichi,
            closes vim/vim#1447)
dc9a081712
2018-01-30 21:21:29 +01:00
5d2dd2ebe2 win: has("wsl") on Windows Subsystem for Linux #7330
Per CMAKE docs, CMAKE_HOST_SYSTEM_VERSION is the result of `uname -r`:
https://cmake.org/cmake/help/v3.4/variable/CMAKE_HOST_SYSTEM_VERSION.html?highlight=uname

    A numeric version string for the system. On systems that support
    uname, this variable is set to the output of uname -r. On other
    systems this is set to major-minor version numbers.

On Windows it is something like "6.1", so it won't match ".*-Microsoft".

Closes #7329
2018-01-30 21:12:49 +01:00
8728a5d50b vim-patch:8.0.0448: some macros are lower case (#7936)
Problem:    Some macros are in lower case, which can be confusing.
Solution:   Make a few lower case macros upper case.
b5aedf3e22

ref #6297
2018-01-30 20:29:15 +01:00
2a1a624878 vim-patch:8.0.0443: terminal width is set to 80 in test3 (#7933)
Problem:    Terminal width is set to 80 in test3.
Solution:   Instead of setting 'columns' set 'wrapmargin' depending on
            'columns.

38a3d6c960
2018-01-30 20:15:05 +01:00
397ff2c35b Merge #5822 'mouse.c: Fix mouse click on multibyte + concealed' 2018-01-29 23:50:43 +01:00
ca31f81a31 dist: snap packaging #7918 2018-01-29 23:02:15 +01:00
b55f831678 Merge #7842 'win: fnamemodify()' 2018-01-29 22:56:35 +01:00
41b3c7850f test: use helpers.pathroot() to avoid a syscall 2018-01-29 00:05:35 -05:00
1813c53e8d Updated tests 2018-01-28 23:47:11 -05:00
2eb8dc40ac Safer loop for skipping consecutive concealed chars 2018-01-28 23:47:11 -05:00
be7990bb49 Use one variable for tracking adjustment instead of two 2018-01-28 23:47:11 -05:00
caf87f597f Adjust cursor according to character display widths 2018-01-28 23:47:11 -05:00
60d0353119 Don't move cursor to the left if on the first column of wrapped line
ref: #7887
2018-01-28 23:47:11 -05:00
d2ff5d5bb0 Use utfc_ptr2len instead of utf_ptr2len 2018-01-28 23:47:11 -05:00
0376874c32 mouse.c: Fix mouse click on lines with multibyte text
fixes #5341, #5801
2018-01-28 23:47:11 -05:00
9a36337d32 vim-patch:8.0.0528: highlight wrong text when 'wim' includes "longest" (#7927)
Problem:    When 'wildmenu' is set and 'wildmode' has "longest" then the first
            file name is highlighted, even though the text shows the longest
            match.
Solution:   Do not highlight the first match. (LemonBoy, closes vim/vim#1602)

ef8eb08978
2018-01-29 02:01:16 +01:00
2569fabf04 vim-patch:8.0.0427: 'makeencoding' missing from the options window (#7907)
Problem:    'makeencoding' missing from the options window.
Solution:   Add the entry.
ad4187e6fc
2018-01-28 22:53:53 +01:00
b251c42195 Merge #7924 'test/old: various fixes' 2018-01-28 22:51:51 +01:00
f9b738235e test/old: fix Test_set_completion()
Vim's src/testdir has more directories in it, so the "./samples/" item
happens to have a space in front of it.  This isn't relevant to the
test, so just elide the space for our case.
2018-01-28 22:29:17 +01:00
0578087e5e test: osx: try resolve($TMPDIR) 2018-01-28 13:58:56 -05:00
5c09f37d4a test: fix failed tests with $TMPDIR in QuickBuild 2018-01-28 13:58:56 -05:00
7ac21332cf Revert "test: fix failed test cases with tmpdir = $TMPDIR"
This reverts commit f7fe3012204169f22412194a78f196ffc72bb8c3.

Fails on QuickBuild because it uses a non-local path.
Need a environment-agnostic solution
2018-01-28 13:58:56 -05:00
28236867a0 test: fix failed test cases with tmpdir = $TMPDIR 2018-01-28 13:58:55 -05:00
c08c09add7 test: try $TMPDIR for temporary directory 2018-01-28 13:58:55 -05:00
5a39d2d00e test: fnamemodify with :8 filename modifier 2018-01-28 13:58:54 -05:00
984a93df96 win: enable legacy/fnamemodify_spec.lua 2018-01-28 13:58:54 -05:00
eb59dd6547 fixup: get network drive only, not entire path 2018-01-28 13:58:54 -05:00
273c7cfa2a fixup: lint errors 2018-01-28 13:58:53 -05:00
534abe4aaf test: win: get current network drive via io.popen 2018-01-28 13:58:53 -05:00
ec5af91b90 win: explicitly specify pathsep 2018-01-28 13:58:53 -05:00
e39be42c09 fixup: compile-time errors 2018-01-28 13:58:52 -05:00
909c967f35 win: detect / and \ as root path separator 2018-01-28 13:58:52 -05:00
a619c3fcf9 test: win: add tests for shellslash 2018-01-28 13:58:51 -05:00
afbdafffc2 test: fnamemodify() 2018-01-28 13:58:51 -05:00
499c9a1553 test/win: fix some environment assumptions #7912
fix #7909
fix #7910
2018-01-28 19:10:18 +01:00
8821579baa test/old: $TMPDIR must be absolute
Internals `chdir` here and there, this causes relative $TMPDIR to break
some things. Don't know why this only happened on macOS...
2018-01-28 13:16:33 +01:00
6f4c4be952 ex_diffpatch: don't need redraw_later(CLEAR), Nvim uses pipes 2018-01-28 12:33:22 +01:00
16a6f44570 Merge #7903 'test/old: minor fixes for local invocation' 2018-01-28 11:33:56 +01:00
c6fe06bbc0 tui: fix use-after-free after UI stop event #7922
ui_bridge:ui_bridge_stop() calls ui_detach_impl() last, so the check for
ui_active() in ui:ui_refresh() doesn't help: tui_main() already freed
the `ui` object.

There is a race between ui_bridge_stop (thread T0) and tui_main (thread T1).
UIBridgeData.stopped could be set while ui_bridge_stop() is in the
middle of loop_poll_events(), which may invoke tui_scheduler() on T0.
The pointers in tui_scheduler() may be invalid by then.

Solution(?): Use the `UI.data` field as a "stopped" flag and check it in
tui_scheduler().

ASAN use-after-free report observed in #7908:

    = ==20066==ERROR: AddressSanitizer: heap-use-after-free on address 0x611000000cd0 at pc 0x00000182abed bp 0x7ffe23b07070 sp 0x7ffe23b07068
    = READ of size 8 at 0x611000000cd0 thread T0
    =     0 0x182abec in tui_scheduler /home/travis/build/neovim/neovim/src/nvim/tui/tui.c:393:23
    =     1 0x1876afd in ui_bridge_update_fg /home/travis/build/neovim/neovim/build/src/nvim/auto/ui_events_bridge.generated.h:205:3
    =     2 0x186c130 in ui_resize /home/travis/build/neovim/neovim/src/nvim/ui.c:310:3
    =     3 0x146b9c2 in screen_resize /home/travis/build/neovim/neovim/src/nvim/screen.c:7483:3
    =     4 0x186a6f0 in ui_refresh /home/travis/build/neovim/neovim/src/nvim/ui.c:284:3
    =     5 0x186bbe0 in ui_refresh_event /home/travis/build/neovim/neovim/src/nvim/ui.c:297:3
    =     6 0xa2219a in multiqueue_process_events /home/travis/build/neovim/neovim/src/nvim/event/multiqueue.c:150:7
    =     7 0xa1bd7f in loop_poll_events /home/travis/build/neovim/neovim/src/nvim/event/loop.c:63:3
    =     8 0x1872709 in ui_bridge_stop /home/travis/build/neovim/neovim/src/nvim/ui_bridge.c:121:5
    =     9 0x1864247 in ui_builtin_stop /home/travis/build/neovim/neovim/src/nvim/ui.c:143:3
    =     10 0x1249ec8 in mch_exit /home/travis/build/neovim/neovim/src/nvim/os_unix.c:140:3
    =     11 0xe56ba9 in getout /home/travis/build/neovim/neovim/src/nvim/main.c:671:3
    =     12 0xfc4c8f in preserve_exit /home/travis/build/neovim/neovim/src/nvim/misc1.c:2653:3
    =     13 0x1247c02 in deadly_signal /home/travis/build/neovim/neovim/src/nvim/os/signal.c:137:3
    =     14 0x1247921 in on_signal /home/travis/build/neovim/neovim/src/nvim/os/signal.c:162:9
    =     15 0xa35618 in signal_event /home/travis/build/neovim/neovim/src/nvim/event/signal.c:47:3
    =     16 0xa2219a in multiqueue_process_events /home/travis/build/neovim/neovim/src/nvim/event/multiqueue.c:150:7
    =     17 0xa1bd7f in loop_poll_events /home/travis/build/neovim/neovim/src/nvim/event/loop.c:63:3
    =     18 0x1237bd6 in input_poll /home/travis/build/neovim/neovim/src/nvim/os/input.c:349:3
    =     19 0x123334f in inbuf_poll /home/travis/build/neovim/neovim/src/nvim/os/input.c:372:24
    =     20 0x123316d in os_inchar /home/travis/build/neovim/neovim/src/nvim/os/input.c:110:19
    =     21 0x170d20e in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:55:13
    =     22 0xbd7441 in command_line_enter /home/travis/build/neovim/neovim/src/nvim/ex_getln.c:384:3
    =     23 0xbd0a60 in getcmdline /home/travis/build/neovim/neovim/src/nvim/ex_getln.c:1920:10
    =     24 0xbdb365 in getexline /home/travis/build/neovim/neovim/src/nvim/ex_getln.c:2100:10
    =     25 0xb00a6b in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:528:47
    =     26 0x10a7837 in nv_colon /home/travis/build/neovim/neovim/src/nvim/normal.c:4552:18
    =     27 0x1091e15 in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1136:3
    =     28 0x170d439 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:67:26
    =     29 0x104ee14 in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:466:3
    =     30 0xe4295c in main /home/travis/build/neovim/neovim/src/nvim/main.c:572:3
    =     31 0x2b2ba340bf44 in __libc_start_main /build/eglibc-ripdx6/eglibc-2.19/csu/libc-start.c:287
    =     32 0x44d24b in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x44d24b)
    =
    = 0x611000000cd0 is located 16 bytes inside of 240-byte region [0x611000000cc0,0x611000000db0)
    = freed by thread T1 here:
    =     0 0x4ee0e2 in __interceptor_free /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:47:3
    =     1 0xf4f6d4 in xfree /home/travis/build/neovim/neovim/src/nvim/memory.c:133:3
    =     2 0x182a963 in tui_main /home/travis/build/neovim/neovim/src/nvim/tui/tui.c:383:3
    =     3 0x18792b0 in ui_thread_run /home/travis/build/neovim/neovim/src/nvim/ui_bridge.c:106:3
    =     4 0x2b2ba2697183 in start_thread /build/eglibc-ripdx6/eglibc-2.19/nptl/pthread_create.c:312
    =
    = previously allocated by thread T0 here:
    =     0 0x4ee61a in calloc /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:76:3
    =     1 0xf4f787 in xcalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:147:15
    =     2 0x182000a in tui_start /home/travis/build/neovim/neovim/src/nvim/tui/tui.c:127:12
    =     3 0x1863f7c in ui_builtin_start /home/travis/build/neovim/neovim/src/nvim/ui.c:125:3
    =     4 0xe41bb9 in main /home/travis/build/neovim/neovim/src/nvim/main.c:457:5
    =     5 0x2b2ba340bf44 in __libc_start_main /build/eglibc-ripdx6/eglibc-2.19/csu/libc-start.c:287
    =
    = Thread T1 created by T0 here:
    =     0 0x4d774d in __interceptor_pthread_create /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/asan_interceptors.cc:317:3
    =     1 0x1aae6b0 in uv_thread_create /home/travis/nvim-deps/build/src/libuv/src/unix/thread.c:75
    =     2 0x18217fa in tui_start /home/travis/build/neovim/neovim/src/nvim/tui/tui.c:159:10
    =     3 0x1863f7c in ui_builtin_start /home/travis/build/neovim/neovim/src/nvim/ui.c:125:3
    =     4 0xe41bb9 in main /home/travis/build/neovim/neovim/src/nvim/main.c:457:5
    =     5 0x2b2ba340bf44 in __libc_start_main /build/eglibc-ripdx6/eglibc-2.19/csu/libc-start.c:287

---

Alternative attempt:

    commit 6ad9c02491606a0c31e907f38c9931f324327aa5
    Author: Justin M. Keyes <justinkz@gmail.com>
    Date:   Sat Jan 27 15:12:58 2018 +0100

        tui: fix use-after-free: swap in empty scheduler

        This should make life easier for UIs like VimR which implement their own
        in-process bridged UI: they don't need to worry that their `scheduler`
        might receive an invalid pointer.

        To avoid that, ui_bridge_stopped() swaps in an empty scheduler. Note
        that this requires the call to loop_poll_events() to be moved into the
        critical section.

    diff --git a/src/nvim/ui_bridge.c b/src/nvim/ui_bridge.c
    index 779585416f80..491052d19d3b 100644
    --- a/src/nvim/ui_bridge.c
    +++ b/src/nvim/ui_bridge.c
    @@ -93,10 +93,18 @@ UI *ui_bridge_attach(UI *ui, ui_main_fn ui_main, event_scheduler scheduler)
       return &rv->bridge;
     }

    +static void ui_bridge_null_scheduler(Event event, void *d)
    +{
    +  WLOG("ignoring event (bridge stopped)");
    +}
    +
     void ui_bridge_stopped(UIBridgeData *bridge)
     {
       uv_mutex_lock(&bridge->mutex);
       bridge->stopped = true;
    +  // Replace with an empty scheduler, so that the UI internal scheduler does
    +  // not get invoked with an invalid pointer. #7922
    +  bridge->scheduler = ui_bridge_null_scheduler;
       uv_mutex_unlock(&bridge->mutex);
     }

    @@ -111,14 +119,11 @@ static void ui_bridge_stop(UI *b)
       UIBridgeData *bridge = (UIBridgeData *)b;
       bool stopped = bridge->stopped = false;
       UI_BRIDGE_CALL(b, stop, 1, b);
    -  for (;;) {
    +  while (!stopped) {
         uv_mutex_lock(&bridge->mutex);
         stopped = bridge->stopped;
    -    uv_mutex_unlock(&bridge->mutex);
    -    if (stopped) {
    -      break;
    -    }
         loop_poll_events(&main_loop, 10);  // Process one event (at most).
    +    uv_mutex_unlock(&bridge->mutex);
       }
       uv_thread_join(&bridge->ui_thread);
       uv_mutex_destroy(&bridge->mutex);
2018-01-28 03:08:04 +01:00
300d3651e2 Merge #7919 from hardenedapple/langremap-after-map 2018-01-27 16:26:14 +01:00
df4f9342b9 Make 'langnoremap' apply directly after a map
We were initially checking whether to apply 'langmap' translation based
on typebuf.tb_maplen.
This gets set to 0 on the last byte of a map when the del_typebuf()
function is called, which means that the option was not working for the
last character of a mapping.
For this reason, we switched to using KeyTyped to decide whether to
apply the transformation or not in commit 53da57d27.
Substituting one for the other isn't enough, because KeyTyped isn't set
until vgetorpeek() is returning.
This means 'langmap' translations are not applied when searching for
characters to map in the vgetorpeek() function if the *previous* key was
not typed.

We can't assert that both hold, as we would then *not* apply the
transformation when looking for a map starting with the first typed key
after a previously expanded map (as KeyTyped would be `false` from the
previously expanded map, and not yet reset).

Hence we assert that if we are looking for the mapping while in
vgetorpeek(), the map length should be zero, otherwise, KeyTyped must be
`true`.

This is implemented by checking for the variable `vgetc_busy`.
2018-01-27 11:44:15 +00:00
f2ea15f364 Add some tests for 'langmap' 2018-01-27 11:20:10 +00:00
87e03c2b85 vim-patch:8.0.1393: too much highlighting with 'hlsearch' and 'incsearch' set
Problem:    Too much highlighting with 'hlsearch' and 'incsearch' set.
Solution:   Do not highlight matches when the pattern matches everything.

6621605eb9
2018-01-26 18:39:20 +03:00
9bc1410ee1 vim-patch:8.0.1304: CTRL-G/CTRL-T don't work with incsearch and empty pattern
Problem:    CTRL-G/CTRL-T don't work with incsearch and empty pattern.
Solution:   Use the last search pattern. (Christian Brabandt, closes vim/vim#2292)

d048009717
2018-01-26 18:39:20 +03:00
cd59577d57 vim-patch:8.0.1396: memory leak when CTRL-G in search command line fails
Problem:    Memory leak when CTRL-G in search command line fails.
Solution:   Move restore_last_search_pattern to after "if".

a1d5c154db
2018-01-26 18:39:20 +03:00
997fc8b133 Add tests 2018-01-26 18:39:20 +03:00
660bfb3fb3 Update included_patches 2018-01-26 18:39:20 +03:00
cd973be11b vim-patch:8.0.1250
Problem:    'hlsearch' highlighting not removed after incsearch (lacygoill)
Solution:   Redraw all windows. Start search at the end of the match.  Improve
            how CTRL-G works with incremental search. Add tests. (Christian
            Brabandt, Hirohito Higashi, haya14busa, closes vim/vim#2267)

f8f8b2eadb
2018-01-26 18:39:20 +03:00
41394d8236 vim-patch:8.0.1238
Problem:    Incremental search only shows one match.
Solution:   When 'incsearch' and and 'hlsearch' are both set highlight all
            matches. (haya14busa, closes vim/vim#2198)

2e51d9a097
2018-01-26 18:39:20 +03:00
0a56bd3330 build/macOS: remove -iframework line #7891
Linker error:

    [1/3] Linking C executable bin/nvim
    ld: warning: directory not found for option '-FCoreFoundation'

Only the -isysroot change is needed, see
https://github.com/neovim/neovim/pull/7891#discussion_r164036958
2018-01-26 11:42:07 +01:00
83880cced3 Merge pull request #6558 from jamessan/tv_as_string-fix
eval: save_tv_as_string: Correctly handle an empty string
2018-01-25 14:09:36 -05:00
8b1f7d8774 vim-patch:8.0.0431 (#7908)
vim-patch:8.0.0431: 'cinoptions' cannot set indent for extern block
Problem:    'cinoptions' cannot set indent for extern block.
Solution:   Add the "E" flag in 'cinoptions'. (Hirohito Higashi)
7720ba8599
2018-01-25 11:26:47 +01:00
a3daa8cb13 build: fix luacheck detection (avoids re-download on win32) (#7905) 2018-01-24 10:29:30 +01:00
3ff92ba1ee eval: save_tv_as_string: Correctly handle an empty string
When tv_get_string_chk returns a non-NULL value, we have a valid string.
Propagating an error state (*len = -1, NULL return) for an empty string
is invalid.

Closes #6554
2018-01-23 17:56:50 -05:00
5d88830d51 test/old: always set $TMPDIR
On macOS $TMPDIR defaults to something very long. There's not really
a need to support overriding the $TMPDIR used by tests, so always use
the workspace-local path "Xtest-tmpdir".
2018-01-23 23:06:22 +01:00
090cd10975 test/old: Fix_truncated_tmpfile(): more flexible 2018-01-23 23:06:22 +01:00
15119f943a test: system(): fix test
For the test to be valid it should actually send input.

ref #3529
ref #5241
2018-01-23 21:33:44 +01:00
6762c20af8 Merge pull request #7894 from jamessan/cmake-cmp0026-fix
cmake: Use generator expression to determine libnvim-test path
2018-01-23 08:41:04 -05:00
7dd97eb597 test/inccommand_spec: test the test (#7897) 2018-01-23 00:53:22 +01:00
3308b76339 Merge #7890 'vim-patch: various' 2018-01-22 23:13:54 +01:00
41a91af5cf cmake: Use generator expression to determine libnvim-test path
Prior to CMake 2.8.12, generator expressions could only be used in
custom commands so the path to libnvim-test in test/config/paths.lua was
set by inspecting the target's LOCATION property.  Post 2.8.12, the
file(GENERATE) command exists to handle this, but it can't interpolate
normal CMake variables.

In order to bridge the gap while < 2.8.12 is supported, use
configure_file() to create paths.lua.gen with the
$<TARGET_FILE:nvim-test> generator expression and then generate the
final paths.lua file.

Closes #7077
2018-01-22 14:16:31 -05:00
84d4e4a7ef Merge #7891 'build: fix creating generated files on macOS' 2018-01-22 19:40:58 +01:00
59ac170340 Merge #7893 'man.vim: use correct offset in presence of modifier commands' 2018-01-22 17:31:36 +01:00
dbcdd29139 man.vim: use correct offset in presence of modifier commands
The argument expansion for :Man depends on the number of arguments given to it
starting at the command itself. But user completion functions always provide the
entire command-line which can include modifier commands like :tab, :vert, etc.
leading to a wrong number of arguments.

Prune all arguments up to :Man.

Fixes #7872.
2018-01-22 17:05:52 +01:00
17b21eae52 build: fix creating generated files on macOS
For some reason, using the clang executable inside of the Xcode default
toolchain the platform's sysroot include isn't present.  This was
debugged by adding "-###" on the command line for generating the header
for nvim/os/lang.c and is was evident the flag was missing.
2018-01-22 06:27:14 -05:00
b69fa866db Merge #7888 'defaults: enable cscopeverbose' 2018-01-22 10:17:55 +01:00
872ee4259a vim-patch: NA
vim-patch:8.0.0674: cannot build with eval but without timers
vim-patch:8.0.0673: build failure without conceal feature
vim-patch:8.0.0668: nsis installer script does not work
vim-patch:8.0.0666: dead for loop
vim-patch:8.0.0665: warning for uninitialized variable
vim-patch:8.0.0664: mouse does not work in tmux
vim-patch:8.0.0661: recognizing urxvt mouse codes does not work well
vim-patch:8.0.0660: silent install on MS-Windows shows dialog
2018-01-21 18:42:45 +01:00
d6cbe6ca87 vim-patch:8.0.0667: more tests for :endfunc
[Only the test is merged; code was addressed by 60c025267265.]

Problem:    Memory access error when command follows :endfunction. (Nikolai
            Pavlov)
Solution:   Make memory handling in :function straightforward. (closes vim/vim#1793)
53564f7c1a
2018-01-21 18:42:45 +01:00
fb855feb52 vim-patch:8.0.0662: stray FIXME for fixed problem
Problem:    Stray FIXME for fixed problem.
Solution:   Remove the comment. (Dominique Pelle)

4670490673
2018-01-21 18:42:45 +01:00
154822933e vim-patch:8.0.0659: no test for conceal mode
Problem:    No test for conceal mode.
Solution:   Add a conceal mode test. (Dominique Pelle, closes vim/vim#1783)

4d785895d1
2018-01-21 18:42:45 +01:00
a5d33d5e90 vim-patch:8.0.0656: cannot use ! after some user commands
[Test passes, and the code change doesn't look applicable. So this only
includes the test.]

Problem:    Cannot use ! after some user commands.
Solution:   Properly check for existing command. (Higashi Higashi)
6f9a476b2f
2018-01-21 18:42:45 +01:00
a185ab70fd vim-patch:8.0.0655: not easy to make sure a function does not exist
Problem:    Not easy to make sure a function does not exist.
Solution:   Add ! as an optional argument to :delfunc.

d6abcd154c
2018-01-21 18:42:45 +01:00
52778d62fc vim-patch:8.0.0654: no warning for text after :endfunction
Problem:    Text found after :endfunction is silently ignored.
Solution:   Give a warning if 'verbose' is set.  When | or \n are used,
            execute the text as a command.
663bb23316

Note: the code part of this patch was addressed by 60c0252672.
2018-01-21 18:42:44 +01:00
2820860ba3 Merge #7885 'vim-patch: diff-related patches' 2018-01-21 13:33:04 +01:00
53749e1749 defaults: enable 'cscopeverbose', and deprecate it 2018-01-21 13:18:05 +01:00
e2eff5269f doc: if_cscop: cleanup 2018-01-21 12:41:35 +01:00
ab279c6fb8 vim-patch:8.0.0444: diffpatch fails when the file name has a quote
Problem:    Diffpatch fails when the file name has a quote.
Solution:   Escape the name properly. (zetzei)

a95ab32120
2018-01-21 12:21:48 +01:00
456cf72974 vim-patch:8.0.0442: patch shell command not well escaped
Problem:    Patch shell command uses double quotes around the argument, which
            allows for $HOME to be expanded. (Etienne)
Solution:   Use single quotes on Unix. (closes vim/vim#1543)

1ef73e33c9
2018-01-21 12:21:47 +01:00
ce09d4134b vim-patch:8.0.0433: beeps when running tests
Problem:    Quite a few beeps when running tests.
Solution:   Set 'belloff' for these tests. (Christian Brabandt)

c3c766ea8c
2018-01-21 12:21:47 +01:00
9c92eed86f vim-patch:8.0.0599: diff mode is insufficiently tested
Problem:    diff mode is insufficiently tested
Solution:   Add more test cases. (Dominique Pelle, closes vim/vim#1685)

79a213d6a4

NA / already applied:
---------------------
vim-patch:8.0.0421: diff mode wrong when adding line at end of buffer
Problem:    Diff mode is displayed wrong when adding a line at the end of a
            buffer.
Solution:   Adjust marks in diff mode. (James McCoy, closes vim/vim#1329)
f58a8475e1
2018-01-21 12:21:47 +01:00
9db4dc971d vim-patch:8.0.0301 #7685
Problem:    No tests for ":set completion" and various errors of the :set
            command.
Solution:   Add more :set tests. (Dominique Pelle, closes vim/vim#1440)
698f8b207b

---

Also move test_options from test_alot to Makefile.  (That's done upstream
in Vim patch 8.0.0430.)
2018-01-21 11:22:43 +01:00
72422b0748 version.c: update [ci skip] (#7828) 2018-01-21 11:04:39 +01:00
eb4aab7173 ui: forward 'linespace' option #7883
ref #7520
2018-01-21 09:39:12 +01:00
ada1956206 Merge #7880 'lua/executor: Remove lightuserdata' 2018-01-21 08:09:16 +01:00
6bf359fa79 vim-patch:8.0.0426: insufficient testing for statusline (#7882)
Problem:    Insufficient testing for statusline.
Solution:   Add several tests. (Dominique Pelle, closes vim/vim#1534)

300af82eca
2018-01-21 06:50:31 +01:00
ZyX
db346b5b48 lua/executor: Remove all places where lightuserdata is used
Should fix problems with luajit+arm64.

Fixes #7879
Ref LuaJIT/LuaJIT#230
2018-01-21 01:47:46 +03:00
0daaa49586 Merge #7863 'mingw64: fix gcc warnings' 2018-01-20 17:18:32 +01:00
ee84da358c Merge #7878 from justinmk/keymap-leak 2018-01-20 16:33:43 +01:00
5a96a9eba2 free_buf_options(): free buf_T.b_kmap_ga
ASAN log:

    ==23244==ERROR: LeakSanitizer: detected memory leaks

    Direct leak of 3348 byte(s) in 228 object(s) allocated from:
        0 0x4ee3d3 in malloc /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:67:3
        1 0xf4e681 in try_malloc /home/travis/build/neovim/neovim/src/nvim/memory.c:87:15
        2 0xf4e8a9 in xmalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:121:15
        3 0xf4ee68 in xmallocz /home/travis/build/neovim/neovim/src/nvim/memory.c:196:15
        4 0x170e3ee in vim_strnsave /home/travis/build/neovim/neovim/src/nvim/strings.c:70:28
        5 0x73b2ff in ex_loadkeymap /home/travis/build/neovim/neovim/src/nvim/digraph.c:1814:16
        6 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5
        7 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20
        8 0xaee67d in do_source /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2970:3
        9 0xae82ae in source_callback /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2326:9
        10 0xae7adf in do_in_path /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2404:15
        11 0xae7f48 in do_in_path_and_pp /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2448:12
        12 0xae8281 in source_in_path /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2496:10
        13 0xae610c in source_runtime /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2490:10
        14 0x739887 in keymap_init /home/travis/build/neovim/neovim/src/nvim/digraph.c:1755:9
        15 0x11d423e in did_set_string_option /home/travis/build/neovim/neovim/src/nvim/option.c:2678:16
        16 0x11eecc4 in set_string_option /home/travis/build/neovim/neovim/src/nvim/option.c:2409:27
        17 0x119852f in set_option_value /home/travis/build/neovim/neovim/src/nvim/option.c:4849:14
        18 0x11bccac in set_bool_option /home/travis/build/neovim/neovim/src/nvim/option.c:3984:7
        19 0x11a9d50 in do_set /home/travis/build/neovim/neovim/src/nvim/option.c:1424:30
        20 0xb8caf7 in ex_set /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:9764:9
        21 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5
        22 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20
        23 0x818b42 in call_user_func /home/travis/build/neovim/neovim/src/nvim/eval.c:21315:3
        24 0x7e41bb in call_func /home/travis/build/neovim/neovim/src/nvim/eval.c:6358:11
        25 0x7f8fb8 in get_func_tv /home/travis/build/neovim/neovim/src/nvim/eval.c:6120:11
        26 0x7f1ba1 in ex_call /home/travis/build/neovim/neovim/src/nvim/eval.c:2735:9
        27 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5
        28 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20
        29 0x837ef1 in ex_execute /home/travis/build/neovim/neovim/src/nvim/eval.c:19463:7

    Direct leak of 456 byte(s) in 228 object(s) allocated from:
        0 0x4ee3d3 in malloc /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:67:3
        1 0xf4e681 in try_malloc /home/travis/build/neovim/neovim/src/nvim/memory.c:87:15
        2 0xf4e8a9 in xmalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:121:15
        3 0xf4ee68 in xmallocz /home/travis/build/neovim/neovim/src/nvim/memory.c:196:15
        4 0x170e3ee in vim_strnsave /home/travis/build/neovim/neovim/src/nvim/strings.c:70:28
        5 0x73b18f in ex_loadkeymap /home/travis/build/neovim/neovim/src/nvim/digraph.c:1811:18
        6 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5
        7 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20
        8 0xaee67d in do_source /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2970:3
        9 0xae82ae in source_callback /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2326:9
        10 0xae7adf in do_in_path /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2404:15
        11 0xae7f48 in do_in_path_and_pp /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2448:12
        12 0xae8281 in source_in_path /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2496:10
        13 0xae610c in source_runtime /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2490:10
        14 0x739887 in keymap_init /home/travis/build/neovim/neovim/src/nvim/digraph.c:1755:9
        15 0x11d423e in did_set_string_option /home/travis/build/neovim/neovim/src/nvim/option.c:2678:16
        16 0x11eecc4 in set_string_option /home/travis/build/neovim/neovim/src/nvim/option.c:2409:27
        17 0x119852f in set_option_value /home/travis/build/neovim/neovim/src/nvim/option.c:4849:14
        18 0x11bccac in set_bool_option /home/travis/build/neovim/neovim/src/nvim/option.c:3984:7
        19 0x11a9d50 in do_set /home/travis/build/neovim/neovim/src/nvim/option.c:1424:30
        20 0xb8caf7 in ex_set /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:9764:9
        21 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5
        22 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20
        23 0x818b42 in call_user_func /home/travis/build/neovim/neovim/src/nvim/eval.c:21315:3
        24 0x7e41bb in call_func /home/travis/build/neovim/neovim/src/nvim/eval.c:6358:11
        25 0x7f8fb8 in get_func_tv /home/travis/build/neovim/neovim/src/nvim/eval.c:6120:11
        26 0x7f1ba1 in ex_call /home/travis/build/neovim/neovim/src/nvim/eval.c:2735:9
        27 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5
        28 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20
        29 0x837ef1 in ex_execute /home/travis/build/neovim/neovim/src/nvim/eval.c:19463:7

    SUMMARY: AddressSanitizer: 3804 byte(s) leaked in 456 allocation(s).
    Failed: E /tests/oldtests|logs :: Runtime errors detected.
2018-01-20 15:35:08 +01:00
6a826fce91 busted: explicit LUA_PATH to test scripts (#7864)
in case LUA_PATH does not contain `./?.lua`, busted can not load lua test scripts.
(for instance on nixos). Thus we make it explicit.
2018-01-20 14:43:16 +01:00
ecf851bc60 Merge #7867 'Add completion for :checkhealth'
Add completion for :checkhealth
2018-01-20 13:15:21 +01:00
b00fd49640 vim-patch:8.0.0423: changing 'cinoptions' does not always work
Problem:    The effect of adding "vim/vim#" to 'cinoptions' is not always removed.
            (David Briscoe)
Solution:   Reset b_ind_hash_comment. (Christian Brabandt, closes vim/vim#1475)

6b64394f34
2018-01-20 15:48:23 +08:00
10b1738f59 Fix lint error in option.c 2018-01-19 13:01:30 +08:00
82adba0f2f Fix for lint 2018-01-19 13:01:30 +08:00
e76c6e2ee8 Fix warning: multi-line comment [-Wcomment] use :341,355s/: \zs.*/\=string(submatch(0)) 2018-01-19 13:01:29 +08:00
2408a05151 Fix warning, read/write have unsigned int count on windows. 2018-01-19 13:01:29 +08:00
94f4469638 man.vim: infer $MANPAGER invocation in more cases
This should handle most cases where Nvim was invoked as $MANPAGER.

Ultimately the stakes are low: :quit will prompt if there are unsaved
changes.

fix #7873
2018-01-19 02:05:23 +01:00
20e0cb8d47 Merge #7424 'vim-patch: 8.0.0198, 8.0.0200, 8.0.0201, 8.0.0202, 8.0.0204' 2018-01-18 22:58:50 +01:00
72a7a884b4 tests: :checkhealth completion 2018-01-18 22:47:37 +01:00
6acbd76b00 Add completion for :checkhealth 2018-01-18 22:47:36 +01:00
421f2605c0 Fix warning about NULL compare 2018-01-18 21:43:45 +08:00
23102bc18e Fix bug, use &loop->uv replace loop. 2018-01-18 21:43:44 +08:00
43833af53c Fix warning about math functions, include isnan, isinf, fpclassify. 2018-01-18 21:43:44 +08:00
3632f02564 Fix warning about variable length array. 2018-01-18 21:43:43 +08:00
5a594091dc Fix warning about unused value. 2018-01-18 21:30:06 +08:00
15334dcd89 Fix warning unused static function 2018-01-18 21:30:05 +08:00
12acf0f7a7 Fix warning when assing size_t type value to uv_buf_t.len, convert type to ULONG on Windows. 2018-01-18 21:30:04 +08:00
bac86a1941 Fix warning when redefine RGB on Windows
1
2018-01-18 21:30:04 +08:00
06994e0e21 Fix warning about conversion on mingw64 2018-01-18 21:30:03 +08:00
bc17ad31dc os/input.c: parse keycodes in non-string context #7411
cb02137dfa had two mistakes, of the same nature: trans_special() must
be invoked with in_string=false unless the parsing context is a VimL
string. replace_termcodes() and input_enqueue() are low-level
mechanisms where VimL strings do not exist.

keymap.c: adjust double-quote case to satisfy keymap_spec.lua

closes #7410
2018-01-18 01:37:51 +01:00
8fc437ef43 runtime: UpdateRemotePlugins: allow bar (#7865) 2018-01-17 20:50:17 +01:00
1c6e956079 Merge #7862 'fix resize-related segfaults' 2018-01-16 10:10:02 +01:00
fed928b438 ugrid.c: destroy_cells(): avoid double-free
https://github.com/neovim/neovim/issues/7572#issuecomment-345257295
2018-01-16 09:38:08 +01:00
1be315de37 tui: final_column_wrap(): fix row calculation
closes #7572
closes #7579
closes #7628

ASAN report:

    ==9500==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6040000024c0 at pc 0x00000187d2ca bp 0x7fc3c6e58d10 sp 0x7fc3c6e58d08
    READ of size 8 at 0x6040000024c0 thread T1
        0 0x187d2c9 in ugrid_put /home/vagrant/neovim/build/../src/nvim/ugrid.c:107:17
        1 0x1850adf in tui_put /home/vagrant/neovim/build/../src/nvim/tui/tui.c:1012:10
        2 0x18a6ce6 in ui_bridge_put_event /home/vagrant/neovim/build/src/nvim/auto/ui_events_bridge.generated.h:154:3
        3 0xa4dcda in multiqueue_process_events /home/vagrant/neovim/build/../src/nvim/event/multiqueue.c:150:7
        4 0xa478bf in loop_poll_events /home/vagrant/neovim/build/../src/nvim/event/loop.c:63:3
        5 0x185451c in tui_main /home/vagrant/neovim/build/../src/nvim/tui/tui.c:362:12
        6 0x18a3080 in ui_thread_run /home/vagrant/neovim/build/../src/nvim/ui_bridge.c:106:3
        7 0x7fc3caaac6b9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)
        8 0x7fc3c9ca33dc in clone /build/glibc-bfm8X4/glibc-2.23/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:109

    0x6040000024c0 is located 0 bytes to the right of 48-byte region [0x604000002490,0x6040000024c0)
    allocated by thread T1 here:
        0 0x50e048 in malloc (/home/vagrant/neovim/build/bin/nvim+0x50e048)
        1 0xf7ab71 in try_malloc /home/vagrant/neovim/build/../src/nvim/memory.c:87:15
        2 0xf7ad99 in xmalloc /home/vagrant/neovim/build/../src/nvim/memory.c:121:15
        3 0x187937b in ugrid_resize /home/vagrant/neovim/build/../src/nvim/ugrid.c:32:17
        4 0x184be58 in tui_resize /home/vagrant/neovim/build/../src/nvim/tui/tui.c:770:3
        5 0x18a3dc8 in ui_bridge_resize_event /home/vagrant/neovim/build/src/nvim/auto/ui_events_bridge.generated.h:4:3
        6 0xa4dcda in multiqueue_process_events /home/vagrant/neovim/build/../src/nvim/event/multiqueue.c:150:7
        7 0xa478bf in loop_poll_events /home/vagrant/neovim/build/../src/nvim/event/loop.c:63:3
        8 0x185451c in tui_main /home/vagrant/neovim/build/../src/nvim/tui/tui.c:362:12
        9 0x18a3080 in ui_thread_run /home/vagrant/neovim/build/../src/nvim/ui_bridge.c:106:3
        10 0x7fc3caaac6b9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)

    Thread T1 created by T0 here:
        0 0x4655ed in __interceptor_pthread_create (/home/vagrant/neovim/build/bin/nvim+0x4655ed)
        1 0x1ad87b0 in uv_thread_create /home/vagrant/neovim/.deps/build/src/libuv/src/unix/thread.c:75
        2 0x184b9aa in tui_start /home/vagrant/neovim/build/../src/nvim/tui/tui.c:159:10
        3 0x188dd4c in ui_builtin_start /home/vagrant/neovim/build/../src/nvim/ui.c:125:3
        4 0xe6d399 in main /home/vagrant/neovim/build/../src/nvim/main.c:457:5
        5 0x7fc3c9bbc82f in __libc_start_main /build/glibc-bfm8X4/glibc-2.23/csu/../csu/libc-start.c:291
2018-01-16 09:37:55 +01:00
60d6a8b13d Merge #7860 'fix get_buffer_lines' 2018-01-16 08:21:25 +01:00
514a51ef3e get_buffer_lines: Return a string, when requested, on invalid input
Closes #7859
2018-01-15 22:55:15 -05:00
c06995b34d Merge #7858 'vim-patch: spell-related patches' 2018-01-16 02:14:41 +01:00
9cabe826ba lint 2018-01-16 01:12:16 +01:00
b558f750bf vim-patch:8.0.1419: cursor column is not updated after ]s
Problem:    Cursor column is not updated after ]s. (Gary Johnson)
Solution:   Set the curswant flag.

b73fa629d6
2018-01-16 00:13:22 +01:00
6020e8b69e vim-patch:8.0.1225: no check for spell region being zero
Problem:    No check for spell region being zero. (geeknik)
Solution:   Check for zero. (closes vim/vim#2252)

ee03b94124
2018-01-16 00:08:22 +01:00
fe7a53f3cf test/old: skip enc=latin1 tests 2018-01-16 00:06:59 +01:00
682d5ff8e6 vim-patch:8.0.0792: spell test leaves files behind
Problem:    Spell test leaves files behind.
Solution:   Delete the files.

1a0f200500
2018-01-16 00:04:13 +01:00
34cc04d753 vim-patch:8.0.0658: spell test is old style
Problem:    Spell test is old style.
Solution:   Turn the spell test into a new style test (pschuh, closes vim/vim#1778)

d2c061d24c
2018-01-16 00:03:05 +01:00
3f9f7cfab1 vim-patch:8.0.0601: no test coverage for :spellrepall
Problem:    No test coverage for :spellrepall.
Solution:   Add a test. (Dominique Pelle, closes vim/vim#1717)

545cb79da5
2018-01-16 00:01:19 +01:00
2b1bcd446b runtime: include en.utf-8.spl
Install en.utf-8.spl by default.

- Allows spell-related tests to run.
- Avoids download prompt for spelllang=en users
2018-01-15 23:58:52 +01:00
26251d6d06 vim-patch:8.0.0374: invalid memory access when using :sc in Ex mode (#7849)
Problem:    Invalid memory access when using :sc in Ex mode. (Dominique Pelle)
Solution:   Avoid the column being negative.  Also fix a hang in Ex mode.

ba748c8a84
2018-01-15 23:54:56 +01:00
f8f7f9d5f5 vim-patch:8.0.0151,3,4 #7389
vim-patch:8.0.0151
Problem:    To pass buffer content to system() and systemlist() one has to
            first create a string or list.
Solution:   Allow passing a buffer number. (LemonBoy,
            closes vim/vim#1240)
12c4492dd3

vim-patch:8.0.0153
Problem:    system() test fails on MS-Windows.
Solution:   Deal when extra space and CR.
9d9c356517

vim-patch:8.0.0154
Problem:    system() test fails on OS/X.
Solution:   Deal with leading spaces.
31f19ce0a0
2018-01-15 23:50:40 +01:00
de0a9548f7 Merge #7806 from ZyX-I/list-stat
Add a way to collect list usage statistics
2018-01-15 23:35:20 +01:00
726197d890 Merge #7850 'vim patches' 2018-01-15 22:42:52 +01:00
f09a30d5b0 Merge #7839 'coverity fixes' 2018-01-15 22:31:11 +01:00
900708f93b Merge #7855 from ckelsel/vim-8.0.0398 2018-01-15 22:10:05 +01:00
7dd3910f47 tutor: don't resize (#7854) 2018-01-15 21:59:37 +01:00
ac87d9de69 Fix an off-by-one error in the documentation of nvim_buf_clear_highlight (#7853) 2018-01-15 21:45:10 +01:00
423d7af3df man.lua: avoid float conversion on lua 5.3 (#7851)
Error detected while processing function man#open_page[58]..<SNR>54_put_page:
    line    8:
    E5105: Error while calling lua chunk: /usr/share/nvim/runtime/lua/man.lua:165: Vim(let):E805: Using a Float as a Number
2018-01-15 20:14:27 +01:00
808f504305 vim-patch:8.0.0421: diff mode wrong when adding line at end of buffer
Problem:    Diff mode is displayed wrong when adding a line at the end of a
            buffer.
Solution:   Adjust marks in diff mode. (James McCoy, closes vim/vim#1329)

f58a8475e1
2018-01-15 20:20:15 +08:00
28998cfd81 vim-patch:8.0.0402: :map completion does not have <special>
Problem:    :map completion does not have <special>. (Dominique Pelle)
Solution:   Recognize <special> in completion.  Add a test.

cf5fdf7d16
2018-01-15 19:48:18 +08:00
63bb7198df vim-patch:8.0.0398: illegal memory access with "t"
Problem:    Illegal memory access with "t".
Solution:   Use strncmp() instead of memcmp(). (Dominique Pelle, closes vim/vim#1528)

66727e1607
2018-01-15 19:41:01 +08:00
b9f3805447 vim-patch:8.0.0406: arabic shaping code is verbose
Problem:    The arabic shaping code is verbose.
Solution:   Shorten the code without changing the functionality.

7f73b54631
2018-01-15 19:16:04 +08:00
770ec228c7 vim-patch:8.0.0391: arabic support is verbose and not well tested
Problem:    Arabic support is verbose and not well tested.
Solution:   Simplify the code.  Add more tests.

5f53dd3f74
2018-01-15 18:18:59 +08:00
fc97e9fbdf vim-patch:8.0.0389: test for arabic does not check what is displayed
Problem:    Test for arabic does not check what is displayed.
Solution:   Improve what is asserted. (Dominique Pelle, closes vim/vim#1523)
            Add a first shaping test.

5342f00ff9
2018-01-15 17:33:13 +08:00
fe4ba69958 vim-patch:8.0.0385: no tests for arabic
Problem:    No tests for arabic.
Solution:   Add a first test for arabic. (Dominique Pelle, closes vim/vim#1518)

b5e8377364
2018-01-14 20:57:27 +08:00
7faeaf9f24 vim-patch:8.0.0381: diff mode is not sufficiently tested
Problem:    Diff mode is not sufficiently tested.
Solution:   Add more diff mode tests. (Dominique Pelle, closes vim/vim#1515)

aeb661e1f4
2018-01-14 20:50:59 +08:00
4b8d6caf48 vim-patch:8.0.0380: with 'linebreak' double wide char wraps badly
Problem:    With 'linebreak' set and 'breakat' includes ">" a double-wide
            character results in "<<" displayed.
Solution:   Check for the character not to be replaced. (Ozaki Kiichi,
            closes vim/vim#1456)

38632faf63
2018-01-14 20:50:35 +08:00
ZyX
a8cb510a2e channel: Make empty output be represented by [''] again 2018-01-14 01:33:18 +03:00
ZyX
6a1557f2f4 eval/typval: Log list actions
New logging is guarded by cmake LOG_LIST_ACTIONS define. To make it more
efficient it is allocated as a linked list with chunks of length
2^(7+chunk_num); that uses basically the same idea as behind increasing kvec
length (make appending O(1) (amortized)), but reduces constant by not bothering
to move memory around what realloc() would surely do: it is not like we need
random access to log entries here to justify usage of a single continuous memory
block.
2018-01-14 01:33:18 +03:00
ZyX
c10ae4bc85 os/fileio: Fix some flag names in file_* functions documentation 2018-01-14 01:33:17 +03:00
ZyX
9ea1752d60 *: Provide list length when allocating lists 2018-01-14 01:33:16 +03:00
8eb0888a5d vim-patch:8.0.0582: illegal memory access with z= command
Problem:    Illegal memory access with z= command. (Dominique Pelle)
Solution:   Avoid case folded text to be longer than the original text.  Use
            MB_PTR2LEN() instead of MB_BYTE2LEN().

5b276aa80e
2018-01-13 19:42:07 +01:00
9ddeb6e187 vim-patch:8.0.0364 (#7837)
vim-patch:8.0.0364: ]s does not move cursor with two spell errors in one line

Problem:    ]s does not move cursor with two spell errors in one line. (Manuel
            Ortega)
Solution:   Don't stop search immediately when wrapped, search the line first.
            (Ken Takata)  Add a test.

d3f78dc9eb

* disable spell test for now
2018-01-13 19:26:21 +01:00
624ac8aede coverity/161216: get_user_input: RETURN_LOCAL
*** CID 161216:  Memory - illegal accesses  (RETURN_LOCAL)
    /src/nvim/eval.c: 11143 in get_user_input()
    11137       rettv->vval.v_string =
    11138         (char_u *)getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
    11139                                     xp_type, xp_arg, input_callback);
    11140       ex_normal_busy = save_ex_normal_busy;
    11141       callback_free(&input_callback);
    11142
    >>>     CID 161216:  Memory - illegal accesses  (RETURN_LOCAL)
    >>>     Using "cancelreturn", which points to an out-of-scope variable "def".
    11143       if (rettv->vval.v_string == NULL && cancelreturn != NULL) {
    11144         rettv->vval.v_string = (char_u *)xstrdup(cancelreturn);
    11145       }
    11146
    11147       xfree(xp_arg);
    11148
2018-01-11 10:45:16 +01:00
18d244eded coverity/169163: decode_string: Null pointer deref
*** CID 169163:  Null pointer dereferences  (FORWARD_NULL)
    /src/nvim/eval/decode.c: 290 in decode_string()
    284         if (elw_ret == -1) {
    285           tv_clear(&tv);
    286           return (typval_T) { .v_type = VAR_UNKNOWN, .v_lock = VAR_UNLOCKED };
    287         }
    288         return tv;
    289       } else {
    >>>     CID 169163:  Null pointer dereferences  (FORWARD_NULL)
    >>>     Passing null pointer "s" to "xmemdupz", which dereferences it. (The dereference is assumed on the basis of the 'nonnull' parameter attribute.)
    290         return (typval_T) {
    291           .v_type = VAR_STRING,
    292           .v_lock = VAR_UNLOCKED,
    293           .vval = { .v_string = (char_u *)(
    294               s_allocated ? (char *)s : xmemdupz(s, len)) },
    295         };
2018-01-11 10:45:16 +01:00
911b1e49ab Merge #7821 'api: nvim_command_output' 2018-01-11 10:39:41 +01:00
5055d4a755 api: nvim_command_output: direct impl 2018-01-10 23:58:56 +01:00
c095f83116 api: change nvim_command_output behavior
Implement nvim_command_output with `execute({cmd},"silent")`.

Behavior changes:
- does not provoke any hit-enter prompt
- no longer prepends a newline char
- does not capture some noise (like the "[New File]" message, see the
  change to tabnewentered_spec.lua)

Technically ("bug-for-bug") this a breaking change.  But the previous
behavior of nvim_command_output meant that it probably wasn't used for
anything outside of tests.

Also remove the undocumented `v:command_output` variable which was
a hack introduced only for the purposes of nvim_command_output.

closes #7726
2018-01-10 23:45:44 +01:00
f0845197d8 ci/travis: require "sudo" for ASAN_UBSAN build
Workaround for this fun new issue:

    ==27404==LeakSanitizer has encountered a fatal error.
    ==27404==HINT: For debugging, try setting environment variable LSAN_OPTIONS=verbosity=1:log_threads=1
    ==27404==HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc)
    Failed: E /build|logs :: Runtime errors detected.

https://github.com/travis-ci/travis-ci/issues/9033
https://github.com/google/sanitizers/issues/764
2018-01-10 23:35:10 +01:00
34de6d33c9 lint 2018-01-09 22:58:24 +00:00
b23fc444b5 vim-patch:8.0.0204: compiler warns for uninitialized variable
Problem:    Compiler warns for uninitialized variable. (Tony Mechelynck)
Solution:   When skipping set "id" to -1.

eb46f8fa14
2018-01-09 22:11:16 +00:00
e888439f55 vim-patch:8.0.0202: no test for invalid syntax group name
Problem:    No test for invalid syntax group name.
Solution:   Add a test for group name error and warning.

4007ed4a5e
2018-01-09 22:11:16 +00:00
7f70c5f7b7 vim-patch:8.0.0201: completion of highlight groups includes cleared names
Problem:    When completing a group name for a highlight or syntax command
            cleared groups are included.
Solution:   Skip groups that have been cleared.

d61e8aaae5
2018-01-09 22:11:16 +00:00
889bc3c20c vim-patch:8.0.0200: some syntax arguments are not tested
Problem:    Some syntax arguments are not tested.
Solution:   Add more syntax command tests.

58f60ca2fc
2018-01-09 22:11:16 +00:00
b58c17f8df vim-patch:8.0.0198
Problem:    Some syntax arguments take effect even after "if 0". (Taylor
            Venable)
Solution:   Properly skip the syntax statements.  Make "syn case" and "syn
            conceal" report the current state.  Fix that "syn clear" didn't
            reset the conceal flag.  Add tests for :syntax skipping properly.

de318c5c35
2018-01-09 22:11:15 +00:00
a8ad6b4d51 cmake: install *.lua files 2018-01-09 11:37:49 +01:00
59888b68ab Merge #7623 'man.vim: highlight bold, underlined text' 2018-01-09 10:10:22 +01:00
0ed31303b5 Merge #7826 from ckelsel/vim-8.0.0351 2018-01-08 22:23:05 +01:00
e182a8c836 vim-patch:8.0.0352: not easy to see when a typval needs to be cleared
Problem:    The condition for when a typval needs to be cleared is too
            complicated.
Solution:   Init the type to VAR_UNKNOWN and clear it always.

f06e5a549f
2018-01-08 13:23:05 +08:00
b61a305039 vim-patch:8.0.0351: no test for concatenating an empty string
Problem:    No test for concatenating an empty string that results from out of
            bounds indexing.
Solution:   Add a simple test.

218426896c
2018-01-08 12:24:21 +08:00
9370a0e5d8 ci/travis: install neovim npm module on osx (#7825)
Always get latest nvm on osx to fix lts aliases.
2018-01-08 00:37:31 +01:00
ccdbcfea0b Merge #7820 'ci/travis/macOS: skip ruby gem install' 2018-01-07 20:34:16 +01:00
46a9600d0e ci/travis: macOS: skip ruby-neovim install
With 6fa0a0a516 the neovim-ruby gem installs successfully, but
ruby_spec.lua can't find it: g:ruby_host_prog needs to be set correctly.

Just skip the whole thing for now, so that CI builds don't fail.
2018-01-07 20:09:25 +01:00
6fa0a0a516 ci/travis: macOS: switch ruby version
Travis macOS builds are failing because of neovim-ruby gem dependencies.
Switch default ruby to a newer version to make the builds pass.
2018-01-07 20:04:57 +01:00
8c2cb81d7e test: set_shell_powershell(): update flags (#7819) 2018-01-07 16:20:37 +01:00
4fedad6c5b Merge #7753 'win: enable more functional tests' 2018-01-06 17:52:14 +01:00
ab1e11e44f test: win: yes is unavailable on Windows 2018-01-06 17:50:49 +01:00
d4485f7cc0 win: test: check non-shell system() 2018-01-06 17:49:42 +01:00
8d58012786 test: use unix fileformat to test NULs on systemlist 2018-01-06 17:49:42 +01:00
7311fb7cad win: enable more functional tests
- plugin/shada_spec.lua: Use \r\n as Windows EOL for tests on
  BufWriteCmd, FileWriteCmd, FileAppendCmd. Alternative is 'set
  fileformat=unix'.
2018-01-06 17:47:00 +01:00
e9b5616eaf win: enable tests in ex_terminal_spec 2018-01-06 17:46:49 +01:00
c82e7c75fe version.c: update [ci skip] (#7780) 2018-01-06 16:35:19 +01:00
a18db72a36 third-party: revert to jemalloc 4.5.0
ref #7746
closes #7808
jemalloc-5.0.1 broke the Ubuntu Unstable PPA builds on arm64:
https://launchpadlibrarian.net/351647411/buildlog_ubuntu-artful-arm64.neovim_0.2.0ubuntu1+git201712291800+3837+26~ubuntu17.10.1_BUILDING.txt.gz).

    make[5]: Entering directory '/<<BUILDDIR>>/neovim-0.2.0ubuntu1+git201712291800+3837+26~ubuntu17.10.1/build'
    Segmentation fault (core dumped)
    runtime/CMakeFiles/vimball-tags.dir/build.make:57: recipe for target 'runtime/CMakeFiles/vimball-tags' failed
    make[5]: *** [runtime/CMakeFiles/vimball-tags] Error 139
    make[5]: Leaving directory '/<<BUILDDIR>>/neovim-0.2.0ubuntu1+git201712291800+3837+26~ubuntu17.10.1/build'
    CMakeFiles/Makefile2:7467: recipe for target 'runtime/CMakeFiles/vimball-tags.dir/all' failed

jemalloc bug:
https://github.com/jemalloc/jemalloc/issues/979
2018-01-06 16:22:38 +01:00
b616ef9b22 tests: stderr output contains cp noise
closes #7811
2018-01-05 18:18:26 +01:00
7c4bb23ff3 defaults: do :filetype stuff unless explicitly "off"
Until now, the default `:filetype ...` setup was skipped if the user
config touched `:filetype` in any way (including implicitly via `:syntax
on`).  No one needs that, and it's very confusing.

Instead, proceed with `:filetype ... on` unless the user explicitly
called `:filetype ... off`.

closes #7765
2018-01-04 10:32:09 +01:00
dc4a9cbe85 Merge #7805 'eval.c: fix some scan-build warnings' 2018-01-03 19:34:47 +01:00
0a881575da vim-patch:8.0.0955: Test_existent_file() fails on some file systems
Problem:    Test_existent_file() fails on some file systems.
Solution:   Run the test again with a sleep when the test fails without a
            sleep. (James McCoy, closes vim/vim#1984)

82de3c2c03
2018-01-03 19:16:17 +01:00
5898a1dcbb Merge #7801 'tutor: adjust for 80 columns' 2018-01-03 19:11:02 +01:00
d2bc610d64 Merge pull request #7804 from jamessan/vim-8.0.0160
[RFC] vim-patch:8.0.0160
2018-01-03 07:22:35 -05:00
d55881d278 test: enable K_spec tests in Windows 2018-01-03 00:12:28 -05:00
88d643eb36 Add null check when adding variable to dict. 2018-01-02 17:22:33 -08:00
1bbe6d0a30 Add null pointer assertions for do_unlet_var. 2018-01-02 17:22:33 -08:00
2e630d2611 Refactor profiling check in call_user_func.
do_profiling is a global variable, and as such the clang static
analyzer has trouble making arguments about it.

This commit does one comparison against do_profiling and puts the
result in a local variable. This prevents errors from the value of
do_profiling changing between comparisons.
2018-01-02 17:22:33 -08:00
65ec4ea629 Add assertions for watchers
The clang static analyzer convinced itself lp->ll_newkey could be NULL.
This adds an assertion that checks this doesn't actually happen, as well
as a parallel assertion for di->di_key.
2018-01-02 17:22:33 -08:00
dea7a41138 Add another const to tv_copy
Clang static analyzer had trouble with filter_map in eval.c because
tv_copy could, in principle, change the v_type of argvars[0]. It
saw a potential null pointer going somewhere it shouldn't as a result.

The from argument in tv_copy should be const, which also cleans up the
static analyzer's complaint.
2018-01-02 17:22:33 -08:00
d63c3d9d10 Add assertion in set_var_lval for null pointer.
If the lval is a index into a list, li should not be null.
2018-01-02 17:22:33 -08:00
5f5011e8f6 lint 2018-01-02 19:35:29 -05:00
b86e44aa35 vim-patch:8.0.0160: EMSG() is sometimes used where it should be IEMSG()
Problem:    EMSG() is sometimes used for internal errors.
Solution:   Change them to IEMSG(). (Dominique Pelle)  And a few more.

de33011ec6
2018-01-02 19:35:22 -05:00
09b9f9b7ce Merge pull request #7803 from jamessan/remove-ci-special-cases
[RFC] Simplify Travis builds
2018-01-02 19:12:57 -05:00
dd0fa4fd0e ci: asan_check: No-op unless performing ASAN build 2018-01-02 08:15:32 -05:00
d162815ca9 travis: Reduce stages to flaky builds (gcov, tsan) and everything else
Separating the non-flaky builds (asan, normal builds, lint) into
separate stages simply slowed down overall CI turnaround.  Since none of
the builds rely on the output of others, reducing the stages increases
the opportunities for parallel builds.
2018-01-02 08:15:31 -05:00
dc1444e112 travis: Remove ubuntu-r-toolchain/test ppa
Use unversioned gcc/gcov commands rather than pulling in a separate
repo.
2018-01-02 08:15:31 -05:00
90aae43984 travis: Use Ubuntu's clang instead of llvm's repo
The llvm repos commonly have access issues, so removing them will
improve stability of the Travis builds.

Filtering check_log's output through asan_symbolize also avoids the
version dance every time a new clang version makes its way into Travis.
2018-01-02 08:15:31 -05:00
60716371e9 tui: support TERM=konsole-256color
TERM=konsole-256color is recognized by ncurses.

TERM=konsole-xterm might be more clever, but should not be necessary
(for Nvim at least), we already special-case Konsole in various places.
We may need to clean up some areas that currently assume Konsole always
"pretends xterm" (`TERM=xterm-256color`), though I didn't find any such
cases.

ref #6403
ref https://github.com/neovim/neovim/issues/6403#issuecomment-348713346
2018-01-01 20:30:30 +01:00
6a9f2cdc68 tutor: install metadata files for tutor documents 2018-01-01 19:08:01 +01:00
95a8af093f Merge #7800 'vim patches' 2018-01-01 18:36:36 +01:00
c5f9762b7e vim-patch:8.0.0336: flags of :substitute not sufficiently tested
Problem:    Flags of :substitute not sufficiently tested.
Solution:   Test up to two letter flag combinations. (James McCoy, closes
            vim/vim#1479)

8c50d50b6e
2018-01-01 16:47:11 +01:00
321a46b724 vim-patch: b:changedtick-related patches
vim-patch:8.0.0334
vim-patch:8.0.0335
vim-patch:8.0.0343
vim-patch:8.0.0345

Problem:    Can't access b:changedtick from a dict reference.
Solution:   Make changedtick a member of the b: dict. (inspired by neovim
            vim/vim#6112)
79518e2ace

vim-patch:8.0.0343: b:changedtick can be unlocked
Problem:    b:changedtick can be unlocked, even though it has no effect.
            (Nikolai Pavlov)
Solution:   Add a check and error E940. (closes #1496)

vim-patch:8.0.0345: islocked('d.changedtick') does not work
Problem:    islocked('d.changedtick') does not work.
Solution:   Make it work.

vim-patch:8.0.0335: functions test fails
Problem:    Functions test fails.
Solution:   Use the right buffer number.
507647da31
2018-01-01 16:43:38 +01:00
1d8c612f78 vim-patch:8.0.0339: illegal memory access with vi' (#7794)
Problem:    Illegal memory access with vi'
Solution:   For quoted text objects bail out if the Visual area spans more
            than one line.

46522af724
2018-01-01 16:08:26 +01:00
f4e372c8ab tutor: readjust tutor for 80 char wide terminals 2018-01-01 14:26:45 +01:00
907b2f18f7 Merge pull request #7795 from jamessan/vim-8.0.0591
[RFC] vim-patch:8.0.0591,8.0.0634,8.0.0641,8.0.0657
2017-12-31 16:07:53 -05:00
9fe6c12e81 doc: deprecate 'gdefault'
[ci skip]
2017-12-31 10:18:43 -05:00
d0c4bd23f7 vim-patch:8.0.0657: cannot get and set quickfix list items
Problem:    Cannot get and set quickfix list items.
Solution:   Add the "items" argument to getqflist() and setqflist(). (Yegappan
            Lakshmanan)

6a8958db25
2017-12-31 01:00:59 -05:00
3efc50d1d4 vim-patch:8.0.0641: cannot set a separate highlighting for the quickfix line
Problem:    Cannot set a separate highlighting for the current line in the
            quickfix window.
Solution:   Add QuickFixLine. (anishsane, closes vim/vim#1755)

2102035488
2017-12-31 00:32:59 -05:00
6742fd8aea vim-patch:8.0.0634: cannot easily get to the last quickfix list
Problem:    Cannot easily get to the last quickfix list.
Solution:   Add "$" as a value for the "nr" argument of getqflist() and
            setqflist(). (Yegappan Lakshmanan)

875feea6ce
2017-12-31 00:25:01 -05:00
89d1b36084 vim-patch:8.0.0591: changes to eval functionality not documented
Problem:    Changes to eval functionality not documented.
Solution:   Include all the changes.

45d2cca1ea
2017-12-30 23:35:45 -05:00
9ad557fb2d Merge pull request #7762 from ZyX-I/remove-some-listitems
Remove some tv_list_item_…() functions
2017-12-31 01:11:50 +01:00
ZyX
8ac7c23b7d eval: Fix linter errors 2017-12-31 01:00:13 +03:00
ZyX
c55cf5f4c1 eval,lua/converter: Fix problems spotted in review 2017-12-31 01:00:13 +03:00
46f432074e tests: termclose_spec: fix flaky SIGTERM test #7787
Followup to https://github.com/neovim/neovim/pull/7217.
Build failure: https://travis-ci.org/neovim/neovim/jobs/322930672#L2958.
2017-12-30 22:49:50 +01:00
a30242d661 Merge pull request #7791 from jamessan/vim-8.0.0608
[RFC] vim-patch:8.0.0608
2017-12-30 10:04:03 -05:00
0d548b73ef scripts/vim-patch.sh: continue when patching with -P fails (#7790)
The `set -e` caused the script to stop in case `patch` fails, but it is
better to continue giving instructions.
2017-12-30 14:15:51 +01:00
9dc90fcde1 Merge #7782 'Fix TabClose autocommand via close_windows' 2017-12-30 14:12:25 +01:00
caf94c72c5 lint 2017-12-30 07:56:12 -05:00
697fb05c58 vim-patch:8.0.0608: cannot manipulate other than the current quickfix list
Problem:    Cannot manipulate other than the current quickfix list.
Solution:   Pass the list index to quickfix functions. (Yegappan Lakshmanan)

a3921f48c6
2017-12-30 01:34:08 -05:00
5dd2ca767f use snprintf and has_event 2017-12-29 20:52:56 +01:00
e84e1b68c1 Move applying of TabClosed to win_close_othertab 2017-12-29 20:38:17 +01:00
3eaa9a2579 man.vim: always keep the alternate buffer (#7784)
Closes #7772
2017-12-29 19:00:10 +01:00
5563e808da health.vim: fix $VIRTUAL_ENV validation
Check that the full path to the python interpreter starts with
$VIRTUAL_ENV.

closes #7770
2017-12-29 18:45:21 +01:00
49f4358b0a third-party: update deps #7746
- Latest commit from LuaJIT 2.0.5
2017-12-29 17:38:37 +01:00
2c436b3362 Fix TabClose autocommand via close_windows
Fixes https://github.com/neovim/neovim/issues/7781
2017-12-29 16:56:14 +01:00
ddcfb49262 Merge #7755 2017-12-28 22:48:49 +01:00
eb44519b5d Address PR comments 2017-12-27 23:28:04 -05:00
134c0f0bdb Add functional tests for man highlighting 2017-12-27 23:27:14 -05:00
6740c94562 Add support for escape sequences 2017-12-27 23:27:14 -05:00
c28ce5f619 Switch to processing in Lua 2017-12-27 23:27:14 -05:00
0446d4d691 Highlight backspaced characters 2017-12-27 23:27:14 -05:00
061b942dc0 Merge #7771
health.vim: remove :CheckHealth command
2017-12-27 19:30:16 +01:00
2f3e001717 health.vim: minor refactor (group related logic) 2017-12-27 13:53:01 +01:00
341102fe9f health.vim: remove :CheckHealth command
For back-compat, :CheckHealth runs :checkhealth. But don't define
:CheckHealth explicitly, it adds noise to wildmenu completion.

Completion of healthchecks doesn't yet work with :checkhealth, this is
a regression but it needs to be implemented for :checkhealth rather than
keeping :CheckHealth around.
2017-12-27 13:00:58 +01:00
102e0689d8 Merge #7735 'runtime fixes, doc updates' 2017-12-27 12:53:54 +01:00
ac2f90f2e1 version.c: update 2017-12-27 12:30:55 +01:00
7773bbd098 vimpatch.lua: automate version.c
Invoke it like this:

    VIM_SOURCE_DIR=~/neovim/.vim-src/ nvim -i NONE -u NONE --headless +'luafile ./scripts/vimpatch.lua' +q
2017-12-27 12:30:55 +01:00
903ed09a61 vim-patch.sh: extract list_vimpatch_tokens()
Use streams instead of for-loop (20x speedup for list_vimpatch_tokens).
2017-12-26 04:00:18 +01:00
973bd10a12 vim-patch.sh: introduce -V 2017-12-26 04:00:18 +01:00
fe60fa9faa doc
vim-patch:8.0.1206: no autocmd for entering or leaving the command line
(commit a4f6cec7a3)

NA patches:
vim-patch:8.0.0320: warning for unused variable with small build
2017-12-26 03:58:28 +01:00
ZyX
b6ee90a243 eval: Refactor some potentially dangerous list appends 2017-12-25 01:44:44 +03:00
ZyX
6ab5eb347b eval: Remove magic numbers from find_some_match() type argument 2017-12-25 01:08:58 +03:00
ZyX
bc52ec6110 *: Fix linter errors 2017-12-24 23:09:26 +03:00
ZyX
7997147245 eval: Replace some tv_list_item_remove() calls
There is nothing wrong with them, just it is generally better to remove
a range then to remove items individually.
2017-12-24 17:52:24 +03:00
ZyX
2923e8533d unittests: Do gc after reporting error, not before
Reason: test may contain cleanup at the endwhich is needed for GC to work 
properly, but is not done if test fails. With collectgarbage() in former 
position it would crash when collecting garbage.
2017-12-24 17:42:23 +03:00
ZyX
32689aa5be unittests: Remove start of trace, not end 2017-12-24 17:13:49 +03:00
ZyX
67fa9e5237 eval: Rename tv_list_remove_items() to tv_list_drop_items()
tv_list_remove_items() may cause confusion with tv_list_item_remove()
2017-12-24 16:38:30 +03:00
ZyX
ac55558c97 eval/typval: Make tv_list_item_remove return pointer to the next item 2017-12-24 14:09:36 +03:00
ZyX
608c3d7baf eval/typval: Remove tv_list_item_free() as it is unused 2017-12-24 14:09:36 +03:00
ZyX
6bf3dc77c4 eval/typval: Make tv_list_item_alloc static
Better write this bit in lua then make reviewers or clint filter out 
tv_list_item_alloc().
2017-12-24 14:09:36 +03:00
ZyX
0c533a488f *: Remove most calls to tv_list_item_alloc
Still left calls in eval/typval.c and test/unit/eval/helpers.lua. Latter is the 
only reason why function did not receive `static` modifier.
2017-12-24 14:09:35 +03:00
249bdb07dd Merge #7761 from ZyX-I/fix-7169 2017-12-24 09:24:39 +01:00
ZyX
6b45dbca04 mark: Make sure that jumplist item will not have zero lnum
Fixes #7169
2017-12-24 00:32:43 +03:00
dee78a4095 Merge #7708 from ZyX-I/hide-container-impl 2017-12-23 18:17:01 +01:00
ec86f4215f Merge #7646 from bfredl/chan_buffered
Document and defer error message when buffered stream would overwrite channels dict key
2017-12-23 15:49:13 +01:00
61ba3c5e31 provider: delete vimL stderr collector, now that it exists builtin 2017-12-23 14:32:25 +01:00
308dd53783 channel: check for existance before trying to set key
This avoids an error message in async context, where it is not safe.
2017-12-23 14:02:00 +01:00
ZyX
5cb7a709e7 clint: Make linter report line where it found opening brace 2017-12-23 15:47:23 +03:00
ZyX
d2c01d529f regexp: Fix linter errors 2017-12-23 15:47:04 +03:00
ZyX
c9ab209f9e Merge branch 'master' into hide-container-impl 2017-12-23 15:27:42 +03:00
eb95b88156 vim-patch:8.0.0315: :help :[range] does not work
Problem:    ":help :[range]" does not work. (Tony Mechelynck)
Solution:   Translate to insert a backslash.

a76f59d817
2017-12-21 18:55:56 +08:00
6c731d33f6 vim-patch:8.0.0314: getcmd*() functions are not tested
Problem:    getcmdtype(), getcmdpos() and getcmdline() are not tested.
Solution:   Add tests. (Yegappan Lakshmanan)

65189a1294
2017-12-21 18:40:10 +08:00
aa951b1489 Merge pull request #7751 from jamessan/vim-8.0.0590
[RFC] vim-patch:8.0.0590,8.0.0595,8.0.0597,8.0.0606
2017-12-19 19:21:30 -05:00
190814bdae vim-patch:8.0.0606: cannot set the context for a specified quickfix list
Problem:    Cannot set the context for a specified quickfix list.
Solution:   Use the list index instead of the current list. (Yegappan
            Lakshmanan)

6e62da3e14
2017-12-19 14:07:24 -05:00
cdd86f42cf vim-patch:8.0.0597: off-by-one error in size computation
Problem:    Off-by-one error in buffer size computation.
Solution:   Use ">=" instead of ">". (Lemonboy, closes vim/vim#1694)

253f912877
2017-12-19 14:07:24 -05:00
6fcadab3ce vim-patch:8.0.0595: Coverity warning for not checking return value
Problem:    Coverity warning for not checking return value of dict_add().
Solution:   Check the return value for FAIL.

beb9cb19c6
2017-12-19 14:07:24 -05:00
20708a07bf vim-patch:8.0.0590: cannot add a context to locations
Problem:    Cannot add a context to locations.
Solution:   Add the "context" entry in location entries. (Yegappan Lakshmanan,
            closes vim/vim#1012)

8f77c5a4ec
2017-12-19 14:07:24 -05:00
53a530b2f5 Merge pull request #7747 from jamessan/vim-8.0.0565
vim-patch:8.0.0565,8.0.0574,8.0.0579,8.0.0580
2017-12-18 23:52:06 -05:00
4d2d844c12 vim-patch:8.0.0580: cannot set the valid flag with setqflist()
Problem:    Cannot set the valid flag with setqflist().
Solution:   Add the "valid" argument. (Yegappan Lakshmanan, closes vim/vim#1642)

f1d21c8cc8
2017-12-18 21:44:42 -05:00
9fb7926a0d vim-patch:8.0.0579: duplicate test case for quickfix
Problem:    Duplicate test case for quickfix.
Solution:   Remove the function. (Yegappan Lakshmanan)

9b77016545
2017-12-18 21:40:24 -05:00
dd27392861 vim-patch:8.0.0574: get only one quickfix list after :caddbuf
Problem:    Get only one quickfix list after :caddbuf.
Solution:   Reset qf_multiline. (Yegappan Lakshmanan)

99895eac1c
2017-12-18 21:39:51 -05:00
1b2d386a85 vim-patch:8.0.0565: using freed memory in :caddbuf
Problem:    Using freed memory in :caddbuf after clearing quickfix list.
            (Dominique Pelle)
Solution:   Set qf_last to NULL.

31bdd13c33
2017-12-18 21:36:44 -05:00
88863bb6ae Merge pull request #7744 from jamessan/vim-8.0.0517
[RFC] vim-patch:8.0.0517,8.0.0536,8.0.0584
2017-12-18 21:34:09 -05:00
c01a84e344 Updating to latest UNIBILIUM (#7745)
Update to unibilium 1.2.1
2017-12-18 18:53:53 -05:00
765ff94b5b vim-patch:8.0.0584: memory leak when executing quickfix tests
Problem:    Memory leak when executing quickfix tests.
Solution:   Free the list reference. (Yegappan Lakshmanan)

d788f6fe89
2017-12-18 14:57:57 -05:00
f0bd2bc39a vim-patch:8.0.0536: quickfix window not updated when freeing quickfix stack
Problem:    Quickfix window not updated when freeing quickfix stack.
Solution:   Update the quickfix window. (Yegappan Lakshmanan)

69f40be645
2017-12-18 14:56:17 -05:00
fb8592b7ba vim-patch:8.0.0517: there is no way to remove quickfix lists
Problem:    There is no way to remove quickfix lists (for testing).
Solution:   Add the 'f' action to setqflist(). Add tests. (Yegappan
            Lakshmanan)

b6fa30ccc3
2017-12-18 14:35:55 -05:00
6b5d92f9e0 Merge pull request #7740 from jamessan/vim-8.0.0404
[RFC] vim-patch:8.0.0404,8.0.0484
2017-12-18 07:05:51 -05:00
8536348813 vim-patch:8.0.0484: :lhelpgrep does not fail after a successful one
Problem:    Using :lhelpgrep with an argument that should fail does not
            produce an error if the previous :helpgrep worked.
Solution:   Use another way to detect that autocommands made the quickfix info
            invalid. (Yegappan Lakshmanan)

ee85df3763
2017-12-17 21:05:20 -05:00
ccbf14322a vim-patch:8.0.0404: not enough testing for quickfix
Problem:    Not enough testing for quickfix.
Solution:   Add some more tests. (Yegappan Lakshmanan)

391b1dd040
2017-12-17 20:55:50 -05:00
e6f8b105b0 Merge pull request #7736 from jamessan/vim-8.0.0420
[RFC] vim-patch:8.0.0420: text garbled when the system encoding differs from 'encoding'
2017-12-17 20:15:12 -05:00
cca6d4b267 provider/nodejs: more robust version-check (#7738) 2017-12-18 01:48:30 +01:00
451ff827b8 Merge #7739 'ASAN/LeakSanitizer: ignore loop_schedule_deferred()' 2017-12-18 01:44:22 +01:00
6e0c038a3c ASAN/LeakSanitizer: ignore loop_schedule_deferred()
clang ASAN/LeakSanitizer error (observed in #7706):

    ==21832==ERROR: LeakSanitizer: detected memory leaks
    Direct leak of 56 byte(s) in 1 object(s) allocated from:
        0 0x511b26 in malloc (/home/travis/build/neovim/neovim/build/bin/nvim+0x511b26)
        1 0x1009a84 in try_malloc /home/travis/build/neovim/neovim/src/nvim/memory.c:87:15
        2 0x1009c44 in xmalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:121:15
        3 0xaa8c36 in loop_schedule_deferred /home/travis/build/neovim/neovim/src/nvim/event/loop.c:89:19
        4 0x190856a in tui_main /home/travis/build/neovim/neovim/src/nvim/tui/tui.c:367:5
        5 0x1963d61 in ui_thread_run /home/travis/build/neovim/neovim/src/nvim/ui_bridge.c:106:3
        6 0x2b5d4190d183 in start_thread /build/eglibc-SvCtMH/eglibc-2.19/nptl/pthread_create.c:312

Possible explanation: During exit, `Loop.thread_events` may not get
flushed, so `loop_deferred_event()` is never called.

We could instead try to unwind `Loop.thread_events` during teardown, but
it seems lower-risk to just tell ASAN to ignore it.

Valgrind does not complain:
    $ while :; do { 2>valglog.txt valgrind ./build/bin/nvim -u NONE +q ; } ; if ! [ $? = 0 ] ; then break ; fi ; done
2017-12-17 22:47:37 +01:00
4a58bd514e Merge pull request #7732 from jamessan/patch-summary
vim-patch.sh: Include upstream summary in commit message
2017-12-17 14:10:30 -05:00
2851bb9eff health.vim: mention g:ruby_host_prog #7737 2017-12-17 18:04:47 +01:00
f3d7eeff77 health.vim: Try pyenv root #7341 2017-12-17 17:45:59 +01:00
db0685a663 lint 2017-12-17 11:20:28 -05:00
c162bc6294 vim-patch:8.0.0420: text garbled when the system encoding differs from 'encoding'
Problem:    When running :make the output may be in the system encoding,
            different from 'encoding'.
Solution:   Add the 'makeencoding' option. (Ken Takata)

2c7292dc5b
2017-12-17 11:20:28 -05:00
067bb1e9f4 vim-patch.sh: Include upstream summary in commit message
[ci skip]
2017-12-17 10:45:55 -05:00
be53c209c0 Merge #7706 'ci: nodejs acceptance-test' 2017-12-17 16:10:40 +01:00
103ff26c0a provider/nodejs: check version in Detect() 2017-12-17 16:09:18 +01:00
e0054fef7d health.vim: nodejs: skip if nodejs is too old 2017-12-17 16:09:18 +01:00
5b692124cc test: remove inspect test; set NODE_PATH in nodejs_spec.lua
provider#node#can_inspect will fail on some systems because it is common
to have old node versions in OS (any Linux OS that has LTS releases)
and CI (Travis, Appveyor).

NODE_PATH can be trivially set with VimL.
Build scripts don't have to set it for the nodejs tests to work.
NODE_PATH is optional to begin with and is used only as a workaround
for the neovim node.js host.
2017-12-17 16:09:18 +01:00
a1adfdc7d5 ci: nodejs client acceptance-test #7706
ci: install nodejs 8 in Appveyor, Travis

provider: check node version for debug support
Resolve https://github.com/neovim/neovim/pull/7577#issuecomment-350590592 for Unix.

provider: test if nodejs in ci supports --inspect-brk

nodejs host for neovim requires nodejs 6+ to work properly.
nodejs 6.12+ or 7.6+ is required for debug support via `node --inspect-brk`.

provider: run cli.js of nodejs host directly

npm shims are useless because the user cannot set node to debug mode via
--inspect-brk. This is problematic on Windows which use batchfiles and
shell scripts to compensate for not supporting shebang.

The patch uses `npm root -g` to get the absolute path of the global npm
modules. If that fails, then the user did not install neovim npm package
globally. Use that absolute path to find `neovim/bin/cli.js`, which is
what the npm shim actually runs with node. glob() is for a simple file
check in case bin/ is removed because the npm shims are ignored now.
2017-12-17 16:09:18 +01:00
ZyX
edccf18df5 eval: Fix some issues found in review 2017-12-17 15:23:27 +03:00
ZyX
023631463c functests: Fix linter error 2017-12-16 16:14:53 +03:00
ZyX
7f3b9a4acc Merge branch 'master' into hide-container-impl 2017-12-16 14:27:41 +03:00
ZyX
76ffe0c5aa eval: Fix linter error 2017-12-16 14:21:56 +03:00
bfb21f3e01 tui: rework deferred-termcodes ... again
- Revert timer-based approach.
- Instead, call loop_poll_events() with a timeout in an "active" loop,
  to infer that "TUI startup activity has mostly finished", but also to
  enforce a mininum time (100 ms) before emitting "enable focus
  reporting" termcode. (If TUI startup takes longer than that minimum
  time, it's probably a slow environment anyways.)
- Tickle `main_loop` by sending a dummy event.  Without this, the
  initial "focus-gained" response from the terminal may not get
  processed until the user hits a key.

ref #7720
ref #7664
ref #7649
ref #7664
ref 27f9b1c7b0
2017-12-16 10:31:13 +01:00
7afd26a6d1 Merge pull request #7306 from DarkDeepBlue/vim-8.0.0074
vim-patch:8.0.0074
2017-12-15 19:10:25 -05:00
ZyX
91d3efa35a eval/encode: Avoid unnecessary tv_list_idx_of_item() calls 2017-12-16 01:48:20 +03:00
dcb2780b83 lint 2017-12-15 15:57:38 -05:00
d5bce42b52 vim-patch:8.0.0074
Problem:    Cannot make Vim fail on an internal error.
Solution:   Add IEMSG() and IEMSG2(). (Domenique Pelle)  Avoid reporting an
            internal error without mentioning where.

95f096030e

Signed-off-by: Michael Schupikov <michael@schupikov.de>
2017-12-15 15:50:58 -05:00
ZyX
fb07391ce4 window: Fix matchaddpos() and enhance error reporting 2017-12-15 11:38:34 +03:00
ZyX
c8a5d6181b *: Fix some problems found during review
Still missing: problems in window.c, it should be possible to construct a test
for them.
2017-12-15 02:39:46 +03:00
6ff13d78b7 Merge #7720 'tui: rework deferred-termcodes implementation' 2017-12-14 00:24:35 +01:00
7164f61850 typval_encode.c.h: avoid -Wnonnull-compare warning (#7712)
* typval_encode.c.h: avoid -Wnonnull-compare warning

closes #6847

The NULL check is needed because TYPVAL_ENCODE_CONV_EMPTY_DICT may be
invoked with literal `NULL`.

Warning occurs even for `Debug` build-type:

    neovim/src/nvim/eval/typval.c: In function ‘_typval_encode_nothing_convert_one_value’:
    neovim/src/nvim/eval/typval.c:1802:10: warning: nonnull argument ‘tv’ compared to NULL [-Wnonnull-compare]
           if (tv != NULL) { \
              ^
    ../src/nvim/eval/typval_encode.c.h:398:9: note: in expansion of macro ‘TYPVAL_ENCODE_CONV_EMPTY_DICT’
             TYPVAL_ENCODE_CONV_EMPTY_DICT(tv, tv->vval.v_dict);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

gcc version:
    gcc (Ubuntu 6.3.0-12ubuntu2) 6.3.0 20170406

* fixup! typval_encode.c.h: avoid -Wnonnull-compare warning
2017-12-13 22:22:02 +01:00
ed92ece815 tui: defer termcodes using a timer
With this implementation there is no "jank" during startup.

Using the main_loop in any fashion is janky. Using only the TUI loop
emits the termcodes too soon, or requires bad hacks like counting
tui_flush invocations (9 seems to work).

ref #7664
ref #7649
ref #7664
ref 27f9b1c7b0
2017-12-13 22:18:25 +01:00
6b51c72e0c tui: rework deferred-termcodes implementation
Try another approach to defer the termcodes. Seems less janky, but still
not perfect.

ref #7664
ref #7649
ref #7664
ref 27f9b1c7b0
2017-12-13 22:17:39 +01:00
6203c23449 pty_process_unix: _exit() on execvp() failure
Mostly cargo-culting based on a reading of the manpages, interwebs, and
the Vim source.
2017-12-13 22:17:38 +01:00
34057045be ui: forward relevant option updates to UIs (#7520)
also make termguicolors mutable after startup
2017-12-12 18:23:19 +01:00
ZyX
932ea7a0d1 clint,eval: Make linter check for direct usage of list attributes 2017-12-12 08:43:31 +03:00
f976826690 Merge pull request #7718 from jamessan/disable-titleold-translation
Disable translation of default 'titleold' value
2017-12-11 20:41:16 -05:00
ZyX
45998deb5d *: Fix linter errors 2017-12-12 00:52:14 +03:00
ZyX
1f9dd689b9 Merge branch 'master' into hide-container-impl 2017-12-12 00:44:25 +03:00
ceed29687f Disable translation of default 'titleold' value
It's an empty string, so there's no reason to try to translate it.

Closes #7717
2017-12-11 12:52:38 -05:00
ZyX
9f534422e6 eval/typval: Fix typo
[ci skip]
2017-12-11 11:09:09 +03:00
ZyX
1a961b5750 eval: Fix add() 2017-12-11 10:34:58 +03:00
ZyX
f4132fb38b *: Fix linter errors 2017-12-11 10:19:20 +03:00
ZyX
d46e37cb4c *: Finish hiding list implementation 2017-12-11 10:12:59 +03:00
8813b29cec Merge #7555 'vim-patch.sh, doc updates' 2017-12-11 02:12:05 +01:00
23fb833ea7 vim-patch.sh: remove version.c in generated patch
Vim patch tracking is now driven completely by `vim-patch:xxx` tokens in
the VCS logs. version.c will be auto-generated, if it is used at all.
2017-12-11 00:54:25 +01:00
56b49955b7 vim-patch.sh: introduce -L 2017-12-11 00:49:44 +01:00
ZyX
ceb45a0885 *: Fix test failures 2017-12-11 01:43:36 +03:00
ZyX
fe55f37083 eval: Still check for NULL when doing :unlet 2017-12-10 23:18:24 +03:00
ZyX
622d355ab4 functests: Add some more NULL tests 2017-12-10 23:16:00 +03:00
ZyX
d11884db49 eval: Fix uniq() crash in legacy test 055 2017-12-10 23:02:19 +03:00
ZyX
7572d5ac5a eval/encode: Fix crash in json_encode test suite 2017-12-10 22:41:00 +03:00
ZyX
0b03ac2cb2 functests: Mark islocked("v:_null_list") behaviour correct
It is the same for other VAR_FIXED lists.
2017-12-10 22:34:32 +03:00
ZyX
83f77c80c0 quickfix: Fix :cexpr and :lexpr 2017-12-10 22:33:05 +03:00
ZyX
5008205a3e eval: Fix setmatches(), setqflist() and setloclist() 2017-12-10 22:28:18 +03:00
ZyX
f572bd7e4e eval,functests: Fix tests and complete() and setline() behaviour 2017-12-10 22:24:11 +03:00
ZyX
ac4bbf55f6 *: Hide list implementation in other files as well 2017-12-10 22:04:43 +03:00
e9504b7fd8 vim-patch: NA
vim-patch:8.0.0299 NA
vim-patch:8.0.0309 NA
vim-patch:8.0.0310 NA

vim-patch:8.0.0215 NA
Problem:    When a Cscope line contains CTRL-L a NULL pointer may be used.
            (Coverity)
Solution:   Don't check for an emacs tag in a cscope line.
e362c3d2c3

vim-patch:8.0.0244 NA
Problem:    When the user sets t_BE empty after startup to disable bracketed
            paste, this has no direct effect.
Solution:   When t_BE is made empty write t_BD.  When t_BE is made non-empty
            write the new value.
d9c60648e5

Some patches were not properly marked in the commit logs. So they are
marked here:

vim-patch:8.0.1230
vim-patch:8.0.1229
vim-patch:8.0.0618
vim-patch:8.0.0104

vim-patch:8.0.0405
vim-patch:8.0.0400
vim-patch:8.0.0302
vim-patch:8.0.0288
vim-patch:8.0.0285
vim-patch:8.0.0284
vim-patch:8.0.0281
vim-patch:8.0.0279
vim-patch:8.0.0278
vim-patch:8.0.0277
vim-patch:8.0.0276
vim-patch:8.0.0273
vim-patch:8.0.0272
vim-patch:8.0.0271
vim-patch:8.0.0270
vim-patch:8.0.0269
vim-patch:8.0.0268
vim-patch:8.0.0267
vim-patch:8.0.0260
vim-patch:8.0.0257
vim-patch:8.0.0249
vim-patch:8.0.0248
vim-patch:8.0.0246
vim-patch:8.0.0244
vim-patch:8.0.0241
vim-patch:8.0.0240
vim-patch:8.0.0239
vim-patch:8.0.0232
vim-patch:8.0.0221
vim-patch:8.0.0217
vim-patch:8.0.0215
vim-patch:8.0.0213
vim-patch:8.0.0211
vim-patch:8.0.0203
vim-patch:8.0.0199
vim-patch:8.0.0193
vim-patch:8.0.0192
vim-patch:8.0.0191
vim-patch:8.0.0187
vim-patch:8.0.0183
vim-patch:8.0.0180
vim-patch:8.0.0173
vim-patch:8.0.0171
vim-patch:8.0.0170
vim-patch:8.0.0169
vim-patch:8.0.0166
vim-patch:8.0.0163
vim-patch:8.0.0162
vim-patch:8.0.0161
vim-patch:8.0.0152
vim-patch:8.0.0145
vim-patch:8.0.0144
vim-patch:8.0.0141
vim-patch:8.0.0139
vim-patch:8.0.0138
vim-patch:8.0.0130
vim-patch:8.0.0129
vim-patch:8.0.0123
vim-patch:8.0.0122
vim-patch:8.0.0120
vim-patch:8.0.0117
vim-patch:8.0.0115
vim-patch:8.0.0114
vim-patch:8.0.0113
vim-patch:8.0.0109
vim-patch:8.0.0108
vim-patch:8.0.0107
vim-patch:8.0.0105
vim-patch:8.0.0103
vim-patch:8.0.0098
vim-patch:8.0.0097
vim-patch:8.0.0095
vim-patch:8.0.0094
vim-patch:8.0.0093
vim-patch:8.0.0089
vim-patch:8.0.0087
vim-patch:8.0.0082
vim-patch:8.0.0080
vim-patch:8.0.0077
vim-patch:8.0.0076
vim-patch:8.0.0072
vim-patch:8.0.0071
vim-patch:8.0.0070
vim-patch:8.0.0067
vim-patch:8.0.0065
vim-patch:8.0.0063
vim-patch:8.0.0061
vim-patch:8.0.0059
vim-patch:8.0.0055
vim-patch:8.0.0054
vim-patch:8.0.0051
vim-patch:8.0.0050
vim-patch:8.0.0048
vim-patch:8.0.0045
vim-patch:8.0.0039
vim-patch:8.0.0036
vim-patch:8.0.0030
vim-patch:8.0.0029
vim-patch:8.0.0028
vim-patch:8.0.0027
vim-patch:8.0.0024
vim-patch:8.0.0022
vim-patch:8.0.0021
vim-patch:8.0.0018
vim-patch:8.0.0016
vim-patch:8.0.0015
vim-patch:8.0.0014
vim-patch:8.0.0013
vim-patch:8.0.0011
vim-patch:8.0.0010
vim-patch:8.0.0009
vim-patch:8.0.0007
vim-patch:8.0.0005
2017-12-10 17:13:22 +01:00
5bd8827431 vim-patch.sh: always use git log, not version.c 2017-12-10 17:13:22 +01:00
ad9c2d3cb9 doc
closes #7622
2017-12-10 17:13:22 +01:00
9ada97a810 gen_api_vimdoc.py: require "nvim_" prefix
Avoids doxygen bugs (things that aren't functions) and other noise (e.g.
`remote_ui_disconnect()` was incorrectly included in api.txt).
2017-12-10 17:13:22 +01:00
dc232b74fb doc: hack to avoid doxygen bug
Use `@cond <something>` to obscure a section from doxygen.

doxygen thinks kvec_withinit_t() is a function. That adds noise to the
generated API documentation, and also prevents the following function
from being noticed.
2017-12-10 17:13:22 +01:00
6f41ce0260 Merge pull request #7704 from jamessan/mac-lang-fix
mac: Set $LANG based on the system locale
2017-12-10 10:47:13 -05:00
abe38f7d26 window.c: do BufEnter in correct window after closing help #7431
closes #7429

Problem: after a help window was closed, a window was selected and its
autocommands triggered. After that, restore_snapshot was called and the
focused window changed, confusing the user.

Solution: Add function get_snapshot_focus() that returns the window that
holds the cursor in a snapshot. Use this function in win_close to make
sure the right window is selected before any autocommand is triggered.
2017-12-10 14:55:59 +01:00
1f2b35860f mac: Set $LANG based on the system locale
Unix's typical locale-related environment variables aren't always set
appropriately on a Mac.  Instead of relying on them, query the locale
information using Mac specific APIs and then set $LANG appropriately for
the rest of nvim.

Closes #5873
2017-12-10 07:45:04 -05:00
4a5bc6275d ci: run oldtests in Appveyor #7705 2017-12-10 02:45:41 +01:00
ZyX
5c1ddb5078 eval: Fix writefile() 2017-12-10 04:00:54 +03:00
ZyX
21745d72b8 eval: Fix inputlist() 2017-12-10 04:00:54 +03:00
ZyX
274f32d42e *: Start hiding list implementation
Most of files, except for eval.c and eval/* were only processed by perl.
2017-12-10 04:00:52 +03:00
ZyX
49dd615693 eval/typval: Add macros useful for hiding list item implementation 2017-12-10 03:40:34 +03:00
ZyX
ddce5bca03 eval/typval: Add functions useful for hiding list implementation 2017-12-10 03:40:34 +03:00
3cc7ebf810 Merge #7234 'built-in expression parser' 2017-12-09 18:47:34 +01:00
afae4b5141 ci: Install neovim gem in Appveyor (#7700)
ref #7655
2017-12-07 10:21:03 +01:00
a58c9094db Merge #7676 from florolf/atomic-unibilium
closes #7381
2017-12-06 20:51:24 +01:00
873af01245 Merge pull request #7692 from bfredl/wildcmd
ui: fix glitch with both ext_cmdline and cmd_wildmenu
2017-12-06 19:19:05 +01:00
b6c268b32a build: de-parallelize luarocks dependencies (#7697)
ref 6647f3c047
closes #7535
2017-12-06 14:14:07 +01:00
5cbd3b383c tui: ignore st terminfo cursor shape (Se, Ss) entries
closes #7641
2017-12-06 11:03:43 +01:00
ba7d6a9e6b ui: fix glitch with both ext_cmdline and cmd_wildmenu 2017-12-06 09:41:51 +01:00
54087d80f3 tui: always hide cursor when flushing
The previous commit ensures that we can never flush the buffer in a
state where toggling cursor visibility can corrupt other escape codes.
Thus, we can remove the workaround added as part of e838452, simplyfing
the code and hiding the cursor on more occasions.
2017-12-05 21:40:37 +01:00
90dd2b1473 tui: never flush buffers in midst of unibilium output
e83845285 fixed an issue where long (true color) escape sequences got
interrupted by the cursor visibility toggling caused by buffer flushes.

cdfaecb25 introduces a new issue which causes similar problems: While
the old buffer flushing code appended the cursor visibility escapes to
the buffer before/after flushing, the new code effectively prepends the
sequences.

Assume the following sequence of events occurs:

 - A long escape code is issued using unibi_out when the buffer is
   almost full
 - out() gets called for a prefix of that escape code, causing the
   buffer to fill up
 - flush_buf(ui, false) is called and (correctly) does not insert any
   cursor toggling escapes
 - The rest of the escape code is written into the now empty buffer
 - At some later point, some other part of nvim calls flush_buf(ui,
   true), which then toggles the cursor, corrupting the escape code

This could possibly also be fixed by tracking the state of the buffer
(i.e. does it contain a partially output escape code?), but this seems
fragile in the same way e83845285 turned out to be.

The root cause for all these problems is the mismatch between nvim's
(implicit) assumption that the buffer is flushable at any point in time
and the non-atomicity of unibilium's character based callback interface.
The proper fix (without modifying unibilium) is to ensure nvim's
assumption about the buffer state holds at all times.

To that end, add a "cork" flag which ensures one unibi_out-call never
splits its output across a buffer flush; if an escape code does not fit
into the current buffer, flush it without any part of the escape code in
it and insert the whole escape code in the emptied buffer. This is a
little more complex because it modifies the buffer in place rather than
printing into another buffer, checking the remaining space in the
terminal buffer and then memcpy'ing it.
2017-12-05 21:40:37 +01:00
9714b9f590 tests: cleanup ui/cmdline_spec.lua 2017-12-05 13:32:02 +01:00
aec81f44d1 Merge #7477 from FlorianGit/empty-lists-dicts-strings 2017-12-05 03:33:01 +01:00
67848c0b91 Merge #7653 from justinmk/tui-termcap 2017-12-05 02:42:10 +01:00
2d4abc1cae tui: flush -V3 ('verbose' >= 3) info ASAP 2017-12-05 01:46:41 +01:00
837100fcb1 test/tui: -V3log logs terminfo values 2017-12-05 01:46:41 +01:00
5f288220f9 test: write_file(): support append-mode 2017-12-05 01:46:41 +01:00
7f386b175c test: retry(): fix time calculation
libuv caches the results of uv.now() until the next loop tick. If a test
does not spin the libuv event loop, retry() enters an infinite cycle.
2017-12-05 01:46:40 +01:00
175174597d test: macOS 10.13: unibilium cannot find "xterm" terminfo
On some macOS versions we can't find the terminfo for whatever reason,
so just skip the test if it fails.
2017-12-05 01:46:40 +01:00
a11751eae8 test: tui_spec: narrower scope for timeout tweaks 2017-12-05 01:46:40 +01:00
1cae99b4bf msg_outtrans_special(): handle NULL
This is convenient for terminfo_info_msg().
2017-12-05 01:46:40 +01:00
5de1eae4f2 msg_outtrans_special(): const some strings 2017-12-05 01:46:40 +01:00
586dafee2f str2specialbuf(): fix comparison
regression by 832c158a66
2017-12-05 01:46:39 +01:00
9d689d639d tui: set descriptions on termcap extensions 2017-12-05 01:46:39 +01:00
3aa24042a8 tui: dump termcap info if -V3 ('verbose' >= 3)
Get terminal debugging info by starting Nvim with 'verbose' level 3:

    nvim -V3log

This is like Vim's `:set termcap`, which was removed in Nvim (and would
be very awkward to restore because of the decoupled UI).
2017-12-05 01:45:39 +01:00
a494c99918 Merge pull request #7683 from fszymanski/master
Fix job_control doc
2017-12-03 15:07:54 -05:00
e9990b43c2 Fix job_control doc 2017-12-03 20:49:01 +01:00
ZyX
fbdc3ac4ef tests: Fix linter errors 2017-12-03 20:22:09 +03:00
d763d2fe7a Viml: Make filter and map handle null list correct
filter('v:_null_list, 'v:val') should return v:_null_list and a similar
statement should hold for map.

Changes after review

 * Test inserted in legacy test suite has been removed by reverting the commit
adding it.
 * Change the fix to tv_copy the argument before returning.
 * Readd the two tests on crashes, and modified their expected return value.
 * Move the test from 'incorrect behaviour' section to 'correct behaviour section'
 * Add analogous tests for v:_null_dict

Always copy list or dictionary to return variable

If the type of input is correct (i.e. either a list or a dictionary), this
should also be returned.
2017-12-03 17:03:31 +01:00
ZyX
6bc54832ef Revert "fix! set lsan options"
This reverts commit 6299332349.
2017-12-03 16:53:29 +03:00
ZyX
78bc52ea53 getchar: Move REMAP_… values into a enum 2017-12-03 16:50:37 +03:00
ZyX
c49e22d396 Merge branch 'master' into s-dash-stdin 2017-12-03 16:49:30 +03:00
ZyX
7af8601db4 Merge branch 'master' into expression-parser
Hoping that could fix the LSAN issue: no idea what it is talking about.
2017-12-03 16:19:40 +03:00
27a577586e Merge pull request #7666 from wsdjeg/patch-1
Fix example in job_control doc
2017-12-02 20:34:31 +01:00
44421a22c0 vim-patch:8.0.0306 (#7675)
Problem:    mode() not sufficiently tested.
Solution:   Add more tests. (Yegappan Lakshmanan)

e971df39a5
2017-12-02 17:25:50 +01:00
ad32307e3b Merge #7672 from ckelsel/vim-8.0.0298 2017-12-02 17:20:05 +01:00
7a4c9dc1c2 vim-patch:8.0.0295 (#7671)
Problem:    test_viml hangs.
Solution:   Put resetting 'more' before sourcing the script.

7a073549a3
2017-12-02 17:14:18 +01:00
4b83f37912 tui.c: request focus-reporting (fix regression) #7670
ref #7649
ref #7664

27f9b1c7b0 caused a regression: it uses loop_schedule_deferred() to
defer emitting the "enable focus reporting" termcode. tui_main() never
processes `tui_loop.events` (which loop_schedule_deferred() depends on),
so the event was never actually processed.

But fixing that (by processing `tui_loop.events`) would bring back the
problem 27f9b1c7b0 tried to fix: it still emits the event too soon.

Instead, do a little dance: schedule the event on `main_loop` and then
forward it to `tui_loop`.

NOTE: after this commit, in tmux 2.3 with `focus-events` enabled,
FocusGained is fired on startup and when resuming from suspend.

Using `script` to record the terminal session (and `vterm-dump` to
post-process the result):

BEFORE:
    {DECSM 1049}{DECSM 1}{ESC =}
    {CUP *}{ED *}{DECSM 2004}{DECSM 1004}{CSI 1,43 r}
    {CUP 1,1}
    {CUP *}{ED *}{SM 34}{DECSM 25}
    {DECRM 25}{CSI 2   q}{CSI 2   q}
    {CUP *}{ED *}{LF}
    {SGR *}{LS1}{SGR 94}~
    ...

AFTER:
    {CUP *}{ED *}{CSI 1,43 r}
    {CUP 1,1}
    {CUP *}{ED *}{SM 34}{DECSM 25}
    {DECRM 25}{CSI 2   q}{CSI 2   q}
    {CUP *}{ED *}{DECSM 2004}{DECSM 1004}{LF}
    {SGR *}{LS1}{SGR 94}~
    ...
2017-12-02 15:55:09 +01:00
7ab36403e1 fix lint error 2017-12-02 15:45:19 +08:00
585d664b7b vim-patch:8.0.0298
Problem:    Ex command range with repeated search does not work. (Bruce
            DeVisser)
Solution:   Skip over \/, \? and \&.

cbf20fbcd3
2017-12-02 15:40:57 +08:00
ee2e6d1d1a Fix type in job_control doc 2017-12-01 06:40:03 -06:00
27f9b1c7b0 tui: emit some termcodes later (after startup) (#7664)
For some reason, enabling focus reporting during terminal setup, causes
slow rendering during Nvim startup on tmux 2.3 with the tmux
`focus-events` option enabled.

To workaround that issue, this commit defers the request.

closes #7649

init.vim:
    call plug#begin('~/.config/nvim/plugged')
    Plug 'morhetz/gruvbox'
    call plug#end()
    set background=light " background light just to see the effect more quickly
    colorscheme gruvbox
.tmux.conf:
    set -g focus-events on
    set-option -ga terminal-overrides ",xterm-256color:Tc"
    set-option -g default-terminal "screen-256color"

Using `script` to record the terminal session (and `vterm-dump` to
post-process the result):

BEFORE this commit:
    ./build/bin/nvim -u NONE{CR}{LF}
    {DECSM 1049}{DECSM 1}{ESC =}
    {CUP *}{ED 2}{DECSM 2004}{DECSM 1004}{CSI 8,44,156 t}{CSI * r}
    {CUP 1,1}
    {CUP *}{ED 2}{DECSM 25}
    {DECRM 25}{CSI 2   q}{CSI 2   q}
    {CUP *}{ED 2}{LF}
    {ESC (B}{SGR *}{SGR 94}~                                                                                                                                                           {CR}{LF}
    ~                                                                                                                                                           {CR}{LF}

AFTER this commit:
    ./build/bin/nvim -u NONE{CR}{LF}
    {DECSM 1049}{DECSM 1}{ESC =}
    {CUP *}{ED 2}{CSI 8,44,156 t}{CSI * r}
    {CUP 1,1}
    {CUP *}{ED 2}{DECSM 2004}{DECSM 1004}{DECSM 25}
    {DECRM 25}{CSI 2   q}{CSI 2   q}
    {CUP *}{ED 2}{LF}
    {ESC (B}{SGR *}{SGR 94}~                                                                                                                                                           {CR}{LF}
    ~                                                                                                                                                           {CR}{LF}
    ...
2017-12-01 04:18:34 +01:00
3d0ee17c91 tui/rxvt: enable focus-reporting
closes #7578
2017-12-01 04:12:59 +01:00
ZyX
6299332349 fix! set lsan options 2017-12-01 00:34:16 +03:00
ZyX
5ab0f988ca *: Replace all occurrences of NVim with Nvim 2017-11-30 11:53:25 +03:00
ZyX
0b4054e043 unittests: Reduce memory used by vim_str2nr test 2017-11-30 11:48:23 +03:00
10c3b206cb version.c: Mark 8.0.0171 as NA
[ci skip]
2017-11-29 20:43:07 -05:00
ZyX
b588ccddd7 Merge branch 'master' into expression-parser 2017-11-30 02:02:55 +03:00
ZyX
de45ec0146 keymap: Do not use vim_isIDc in keymap.c
Note: there are three changes to ascii_isident. Reverting first two (in 
find_special_key and first in get_special_key_code) normally fails the new test 
with empty &isident, but reverting the third does not. Hence adding `>` to 
&isident.

Ref vim/vim#2389.
2017-11-30 02:01:49 +03:00
4618c9c43b Revert "tui: update cleared area only if non-default bg"
Reverts 0b93bab6c2. This change was
counter-productive to the other changes which intended to reduce the
role of BCE.

ref #7624
2017-11-29 23:51:48 +01:00
e0466dc592 Merge pull request #7657 from jamessan/float128-ffi
unittest: Ignore _Float128 types in ffi
2017-11-29 15:23:49 -05:00
59f4bd435c unittest: Ignore _Float128 types in ffi
When building with certain GCC versions, a _Float128 type is present
when setting up the ffi for unit tests.

    ./test/unit/helpers.lua:256: declaration specifier expected near '_Float128' at line 396
    /usr/bin/luajit: /usr/share/lua/5.1/busted/runner.lua:99: attempt to concatenate local 'message' (a table value)
    stack traceback:
    	/usr/share/lua/5.1/busted/runner.lua:99: in function 'fn'
    	/usr/share/lua/5.1/mediator.lua:103: in function 'publish'
    	/usr/share/lua/5.1/busted/modules/helper_loader.lua:21: in function 'helperLoader'
    	/usr/share/lua/5.1/busted/runner.lua:147: in function </usr/share/lua/5.1/busted/runner.lua:11>
    	/usr/bin/busted:3: in main chunk
    	[C]: at 0x004044a0

    CMake Error at /<<PKGBUILDDIR>>/cmake/RunTests.cmake:53 (message):
      Running unit tests failed with error: 1.

Since this is being pulled in by a dependency, not directly used by
nvim, just ignore the type.

Closes #7423
2017-11-29 10:07:12 -05:00
2d732a11b1 provider: fix batchfile extension for ruby gem (#7651)
ruby uses batchfiles with 'cmd' extension.
gem creates batchfiles with 'bat' extension.
`gem install rails` does the following in Windows (not Cygwin):

1. Run `gem.cmd install rails` on cmd.exe
2. gem.cmd runs `ruby.exe -x gem install rails`
3. `rails` gem is installed.
   `rails.bat` is created in the same directory
   where ruby.exe and gem.cmd reside.
2017-11-29 03:19:33 +01:00
27a4fc436f Merge pull request #7639 from jamessan/openbsd-chr
Add OpenBSD as an expected OS for opening char devices
2017-11-28 19:47:44 -05:00
8f91f2c9b4 Use defined(BSD) check when defining OPEN_CHR_FILES
Rather than enumerate predefines for all BSD systems, just rely on the
fact that they all "#define BSD" in sys/param.h.

Debian's GNU/kFreeBSD still requires its own check, since it isn't using
the BSD userspace.

References:
OpenBSD - 210ebf9df0/sys/sys/param.h (L40)
FreeBSD - f5d95e1f8d/sys/sys/param.h (L43)
NetBSD - ea62098079/sys/sys/param.h (L49)
DragonFlyBSD - 94ecf1295b/sys/sys/param.h (L41)

vim-patch:8.0.1357
2017-11-28 18:07:51 -05:00
20bde8866e Add OpenBSD as an expected OS for opening char devices
Closes #7542
2017-11-28 17:53:41 -05:00
122dbc86ab Merge pull request #7650 from jamessan/na-patches
version.c: mark NA patches
2017-11-28 16:24:27 -05:00
27a70fec48 version.c: mark NA patches
- channels: vim-patch:8.0.0018
- GUI: vim-patch:8.0.0021
- Different recursive function implementation: vim-patch:8.0.0141
- JSON handling: vim-patch:8.0.0166, vim-patch:8.0.0169, vim-patch:8.0.0170,
  vim-patch:8.0.0171, vim-patch:8.0.0180

Mark vim-patch:8.0.0096 applied, since it was added in
860ecd7055.

[ci skip]
2017-11-28 15:56:51 -05:00
d109f5645b Merge #7640 'term' option 2017-11-27 22:07:23 +01:00
e3c4c8a90e tests: mark flaky socket test pending for now 2017-11-27 11:43:24 +01:00
df019cebd5 Revert "provider: delete vimL stderr collector, now that it exists builtin"
This change exposed a memory issue with buffered channels, possibly
involving GC. Revert until it has been fixed.

This reverts commit 0de019b6a6.
2017-11-27 11:07:49 +01:00
6cf186edb5 lint 2017-11-27 09:45:32 +01:00
c8b40930c0 test: tui_spec.lua: use robust settings 2017-11-27 09:45:32 +01:00
944e3c0619 tui: expose terminal type in 'term' option
Since "builtin" terminfo definitions were implemented (7cbf52db1b),
the decisions made by tui.c and terminfo.c are more relevant. Exposing
that decision in the 'term' option helps with troubleshooting.

Also: remove code that allowed setting t_Co. `:set t_Co=…` has never
worked; the highlight_spec test asserting that nvim_set_option('t_Co')
_does_ work makes no sense, and should not have worked.
2017-11-27 09:45:32 +01:00
a043899ba2 Merge #7633 'Retry fgets on EINTR'
closes #7632
2017-11-26 21:17:35 +01:00
ZyX
36a4f3a259 viml/parser/expressions: Make sure that listed nodes may be present
With the new test leaving `assert(false);` for any of the cases makes tests 
crash.
2017-11-26 16:57:42 +03:00
ZyX
cddf84c398 functests: Add some more tests 2017-11-26 16:45:29 +03:00
ZyX
17077b6813 viml/parser/expressions: Make $ENV not depend on &isident 2017-11-26 16:08:53 +03:00
ZyX
11a05e778f doc: Some small fixes 2017-11-26 15:56:27 +03:00
ZyX
b9c7813058 Merge branch 'master' into expression-parser 2017-11-26 15:54:03 +03:00
207b7ca4bc Merge pull request #6844 from bfredl/channel
channels: support buffered output and bytes sockets/stdio
2017-11-26 10:18:01 +01:00
0de019b6a6 provider: delete vimL stderr collector, now that it exists builtin 2017-11-26 09:17:06 +01:00
91b856ccce channels: tests 2017-11-26 09:17:04 +01:00
b57d9a4ff0 Merge #7631 'highlight: no refresh on validation error' 2017-11-25 23:22:46 +01:00
ebed8c6a2e test: :highlight validation errors
add test when highlight group doesn't exist.
add test when an invalid color name is used for `cterm`.
2017-11-25 23:22:23 +01:00
b1a4db0b69 :highlight : avoid redraw on error
do_highlight() should not redraw if a validation error occurred.
closes #7489
2017-11-25 23:22:08 +01:00
bab2f8200a io: fix handling EOF in vim_fgets
If an EOF is returned from `fgets`, `vim_fgets` might spin forever, as
it tries to consume the current line.

A `NULL` return value from `fgets` should break out of the function
(unless `errno` is `EINTR`), and then `feof` should be used to check for
the EOF condition on the stream.
2017-11-25 14:21:02 -08:00
0f9c90e0ed io: retry fgets on EINTR (#7632)
The calls to `fgets` in `src/nvim/if_cscope.c` (and elsewhere) can show
communication errors to the user if a signal is delivered during its
system calls. For plugins that proxy subprocess output into cscope
requests, a `SIGCHLD` might *always* interfere with calls into `fgets`.

To see this in a debugger, put a breakpoint on `cs_reading_emsg` and
watch signals come in (with lldb, using `process handle --notify true
--pass true`).  Next, run a subcommand from neovim that calls through
cscope when it returns.  A tag picker plugin, like vim-picker and fzy,
with `cscopetag` and `cscopetagorder=0` set, reproduced this reliably.
The breakpoint will hit after a `SIGCHLD` is delivered, and `errno` will
be set to 4, `EINTR`.

The caller of `fgets` should retry when `NULL` is returned with `errno`
set to `EINTR`.
2017-11-25 13:59:07 -08:00
303e1df13f Merge #7624 'tui: disable BCE almost always'
closes #7035
closes #7337
2017-11-25 22:36:34 +01:00
baa981ea21 channels: update documentation 2017-11-25 09:37:01 +01:00
753d0091e8 core dumps: don't use pipe, it does not work 2017-11-25 09:37:00 +01:00
8540b5e4ad test: add hexdump utilitiy function 2017-11-25 09:37:00 +01:00
85bc6630c0 input: only change mode of input fd if there is an input fd 2017-11-25 09:37:00 +01:00
9acd7bfe25 tui: job-control: use saved termios for pty jobs
On startup, if running in a terminal, save the termios properties.
Use the saved termios for `:terminal` and `jobstart()` pty jobs.

This won't affect nvim spawned outside of a terminal.

questions:

- This affects `:terminal` and `jobstart({'pty'✌️true})`.
  Should we be more conservative for `jobstart({'pty'✌️true})` (e.g.
  pass NULL to forkpty() and let the OS defaults prevail)?
  - Note: `iutf8` would not be set in that case.
2017-11-25 09:37:00 +01:00
a97cdff14d channels: improvements to buffering 2017-11-25 09:37:00 +01:00
fee367a74f channels: more consistent event handling
terminal: libvterm now receives data in async context. This was "almost" safe
already, as redraws were queued anyway.
2017-11-25 09:37:00 +01:00
f629f8312d channels: refactor jobwait 2017-11-25 09:37:00 +01:00
5517d2323b channels: reimplement logging (as stub for proper event) 2017-11-25 09:37:00 +01:00
5af4703177 channels: stderr channel 2017-11-25 09:37:00 +01:00
90e5cc5484 channels: generalize jobclose() 2017-11-25 09:37:00 +01:00
3e59c1e20d channels: move away term code from eval.c 2017-11-25 09:37:00 +01:00
1ebc96fe10 channels: allow bytes sockets and stdio, and buffered bytes output 2017-11-24 14:54:15 +01:00
5215e3205a channels: refactor 2017-11-24 14:50:00 +01:00
3717e2157f Revert channel logging, rebased on new code below 2017-11-24 14:04:56 +01:00
0b93bab6c2 tui: update cleared area only if non-default bg
This check was removed in 133ae5eeef without explanation.
2017-11-24 09:53:09 +01:00
b838ad5b7a tui: Disable BCE almost always. #7624
133ae5eeef implemented BCE (background color erase). But we can't
trust terminfo, so it is safer disable BCE if we are not certain.

Per https://github.com/kovidgoyal/kitty/issues/160#issuecomment-346470545
terminal support for BCE seems to be (1) optional and (2) inconsistent.

ref #4210 #4421 #7035 #7337 #7381 #7425 #7618
2017-11-24 09:18:13 +01:00
9888a54f15 tui: Disable BCE by default. #7624
133ae5eeef implemented BCE (background color erase).  That's fine if
the system terminfo claims to support it; but our built-in fallback
should not assume it.

Per https://github.com/kovidgoyal/kitty/issues/160#issuecomment-346470545
terminal support for BCE seems to be (1) optional and (2) inconsistent.
So the built-in terminfos should disable it by default.

ref #4210 #4421 #7035 #7337 #7381 #7425 #7618
2017-11-23 21:21:58 +01:00
d9b3ebfede FIXUP: duplicate error number in #7422 2017-11-23 07:36:35 +01:00
51637f4256 tui: move terminfo_is_term_family() 2017-11-22 23:19:51 +01:00
8c959be511 Merge #7593 'PVS static analysis fixes' 2017-11-22 23:12:30 +01:00
a4f6cec7a3 cmdline: CmdlineEnter and CmdlineLeave autocommands (#7422)
vim-patch:fafcf0dd59fd

patch 8.0.1206: no autocmd for entering or leaving the command line

Problem:    No autocmd for entering or leaving the command line.
Solution:   Add CmdlineEnter and CmdlineLeave.

fafcf0dd59
2017-11-22 22:35:20 +01:00
fe2546c81a move.c: remove unreachable break statement
n > 0 verified by while condition, (--n < 0) always false
2017-11-22 09:21:34 -08:00
1b94f24d6e eval.c: remove nonnullret deadcode
The following calls can't return null:
* xmalloc
* xcalloc
* get_buffer_info
* get_tabpage_info
* get_vim_var_str
* get_win_info
* tv_get_string
* tv_list_alloc
* tv_list_alloc_ret
* vim_strnsave
2017-11-22 09:21:34 -08:00
c030a38168 helpers.c: statically assert integer falls within range 2017-11-22 09:21:34 -08:00
c24b74c229 Fix for pvs V782, pointer access to first element of array 2017-11-22 09:21:34 -08:00
fdcde7dba3 input.c: replace if/else with switch 2017-11-22 09:21:34 -08:00
dddc609859 menu.c: remove conditional expression that is always true 2017-11-22 09:21:34 -08:00
9393be477a vim-patch:8.0.0289 (#7591)
Problem:    No test for "ga" and :ascii.
Solution:   Add a test. (Dominique Pelle, closes vim/vim#1429)

21d7c9b601
2017-11-22 11:59:30 +01:00
bb7795e820 vim-patch:8.0.0292 (#7592)
Problem:    The stat test is a bit slow.
Solution:   Remove a couple of sleep comments and reduce another.

a2f28859bf
2017-11-22 11:57:56 +01:00
7b686881a1 win: default grepprg to findstr.exe (#7611) 2017-11-22 00:35:51 +01:00
9b6bf8fa37 Merge #7345 'location-list update on buffer-modified' 2017-11-21 01:53:12 +01:00
84d9245c70 pvscheck.sh: auto-detect URL by default
The hardcoded URL breaks very often, this confuses people.
Instead, auto-detect if no URL is provided.

Also auto-detect if the script is invoked with no arguments.
2017-11-21 01:38:30 +01:00
8674b0c3d1 syntax.c: Fix maybe-uninitialized warning (#7596)
When building in release mode, gcc generated a maybe-initialized
warning in get_syn_options. The warning is both right and wrong;
there is an execution path where the len variable is not
initialized in the code:
...
int len;
...
for (fidx = ARRAY_SIZE(flagtab); --fidx >= 0; ) {
  p = flagtab[fidx].name;
  int i;
  for (i = 0, len = 0; p[i] != NUL; i += 2, ++len)
    if (arg[len] != p[i] && arg[len] != p[i + 1])
      break;
  // <snip>
}
...
  arg = skipwhite(arg + len);
...

The initial for loop will not execute if ARRAY_SIZE(flagtab) == 0,
and thus len will never be initialized. flagtab is a local-static
variable, initialized to a long array of structured data, so
ARRAY_SIZE(flagtab) can't be 0.

However, gcc doesn't recognize ARRAY_SIZE(flagtab) as a constant.
There are any number of reasons this could happen. In any case,
the message can be fixed with a len=0 before the first for loop.

In addition to the above warning, I've labeled flagtab and
first_letters as const. They should never change.
2017-11-21 00:04:49 +01:00
c391401648 helptags: fix double-free (#7600)
closes #7599
Helped-by: oni-link <knil.ino@gmail.com>

Freeing `dirname` was first introduced by a code refactoring from `ex_helptags()` to `do_helptags()` (`vim-patch:7.4.1551`)(#4648) and later removed by `vim-patch:7.4.1562`(#4660).
Only problem with that is, that the patches were not applied in order so the fixing patch was declared `N/A`.

So `do_helptags()` should have never freed `dirname`.
2017-11-20 21:20:01 +01:00
7d24a95b45 vim-patch:8.0.0287 (#7590)
Problem:    Cannot access the arguments of the current function in debug mode.
            (Luc Hermitte)
Solution:   use get_funccal(). (Lemonboy, closes vim/vim#1432, closes vim/vim#1352)

c7d9eacefa
2017-11-20 02:02:15 +01:00
df10714991 server.c: Fix bug in release mode (#7594)
When compiling with CMAKE_BUILD_TYPE=RelWithDebInfo, several
-Wmaybe-uninitialized warnings are printed. These were thought to
be false positives (#5061); there are no control paths that lead
to an uninitialized value. However, when gcc is run in -O2 mode,
it makes a mistake while generating the necessary logic.

Specifically, for the code:
...
  int = 0; // Index of the server whose address equals addr.
  for (; i < watchers.ga_len; i++) {
    watcher = ((SocketWatcher **)watchers.ga_data)[i];
    // <snip>
  }
  if (i >= watchers.ga_len) {
    ELOG("Not listening on %s", addr);
    return;
  }
...

Gcc generates:
...
<+98>:  cmp  %ebx, %ebp
<+100>: jg   0x530f13   <server_stop+55>
<+102>: cmp  %ebp, ebx
<+104>: jl   0x530f7e   <server_stop+162>
...

Normally, the if statement should catch the only control path
where watcher is not assigned: watchers.ga_len <= 0. When
compiled, the assembly lines 98 and 100 correspond to checking if
i < watchers.ga_len, and the lines 102 and 104 correspond to
checking if i >= watchers.ga_len. The assembly seems to compare
ebp (which is watchers.ga_len) with ebx (which is i), and jump
if greater; then do the same comparison and jump if less. This is
where gcc makes a mistake: it flips the order of the cmp
instruction. This means that the REAL behavior is first check if
i < watchers.ga_len and then check if i < watchers.ga_len. Which
means the code inside the if statement is NEVER executed; no
combination of i and watchers.ga_len will ever trigger ELOG().

So not only is this a use of an uninitialized value if
watchers.ga_len == 0 (or technically, if it's less than zero too),
it also clobbers any error detection if the for loop reaches the
last entry (which would normally cause i == watchers.ga_len too).

This commit fixes this issue by adding a bool to keep track of
whether a watcher was found during the loop. This makes gcc
generate the correct code, avoiding both bugs.
2017-11-20 01:55:28 +01:00
ZyX
05a3c12118 unittests: Run vim_str2nr tests with GC enabled 2017-11-19 23:36:40 +03:00
ZyX
1ffa4e5047 doc: Update documentation 2017-11-19 23:33:02 +03:00
ZyX
64158f2b0b unittests: Populate ARGTYPES in child process only 2017-11-19 22:32:02 +03:00
ZyX
fe3a58273e cmake: Fix api/version test failure 2017-11-19 22:24:26 +03:00
ZyX
03a129aacf Merge branch 'master' into expression-parser 2017-11-19 22:05:22 +03:00
ZyX
6ea3a08fdb syntax: Fix duplicate group definitions 2017-11-19 22:01:19 +03:00
ZyX
7c20f60b88 unittests: Avoid infinite cycle somewhere because of init failure 2017-11-19 22:01:14 +03:00
ZyX
ebb33eddd9 tests: Stabilize float format and %e in format_luav and format_string 2017-11-19 22:00:59 +03:00
ZyX
731dc82f8c ex_getln: Fix memory leak in color_expr_cmdline 2017-11-19 21:21:45 +03:00
ZyX
f20f97c936 *: Fix linter errors 2017-11-19 21:13:27 +03:00
ZyX
a94255a7ac tests: Use single test file for unit and functional parser tests 2017-11-19 20:20:06 +03:00
ZyX
53fa435a1f functests: Fix ui/cmdline test 2017-11-19 19:34:15 +03:00
ZyX
764cf3251d charset: Add missing include needed for vim_str2nr 2017-11-19 19:27:21 +03:00
ZyX
c287893225 viml/parser/expressions,unittests: Do better testing, fix found issues 2017-11-19 19:22:54 +03:00
de8b1fd1de Merge #7587 'vim-patch:8.0.0283' 2017-11-19 13:47:37 +01:00
540ed64635 vim-patch:8.0.0283
Problem:    The return value of mode() does not indicate that completion is
            active in Replace and Insert mode. (Zhen-Huan (Kenny) Hu)
Solution:   Add "c" or "x" for two kinds of completion. (Yegappan Lakshmanan,
            closes vim/vim#1397)  Test some more modes.

e90858d022
2017-11-19 19:53:47 +08:00
d6f9d1df04 version bump 2017-11-18 12:46:38 +01:00
6d2c30daf3 NVIM v0.2.2
FEATURES:
a6de144c3e 'viewoptions': add "curdir" flag #7447
b6a603fe51 node.js remote-plugin support #7458
f5d4da0144 :checkhealth : validate 'runtimepath' #7526

FIXES:
e6beb60da5 :terminal : fix crash on resize #7547
f19e5d6530 work around gnome-terminal memory leak #7573
07931ed1c8 'guicursor': use DECSCUSR for xterm-likes #7576
f185c739bc 'os_open: UV_EINVAL on NULL filename' #7561
e8af34dc63 win: provider: Detect(): return *.cmd path #7577
eacd788cf5 :checkhealth : fix check for npm and yarn #7569
a43a573ad5 health.vim: normalize slashes for script path #7525
69e3308771 cmake: install runtime/rgb.txt
d0b05e3c36 runtime: syntax error in `runtime/syntax/tex.vim` #7518
55d8967147 tutor: some fixes #7510

CHANGES:
9837a9c401 remove legacy alias to `v:count` #7407
c5f001a46a runtime: revert netrw update #7557
67e4529292 defaults: scrollback=10000 #7556
881f9e42d1 process_close(): uv_unref() detached processes #7539
2017-11-18 12:39:14 +01:00
f19e5d6530 tui: setrgbf/setrgbb: emit semicolons for VTE
Severe memory leak observed on gnome-terminal 3.26.2 VTE 0.50.2 when
colon-delimited RGB sequences are used.

closes #7573
2017-11-18 12:26:09 +01:00
a6de144c3e 'viewoptions': add "curdir" flag #7447
The flag enables the current local directory set by ":lcd" to be saved
to views which is the current default behaviour. The option can be
removed to disable this behaviour.

closes #7435

vim-patch:8.0.1289
2017-11-18 12:02:15 +01:00
f185c739bc Merge #7561 'os_open: UV_EINVAL on NULL filename' 2017-11-18 01:01:25 +01:00
e8af34dc63 win: provider: Detect(): return *.cmd path (#7577)
neovim-ruby-host is a ruby script.
neovim-node-host is a shell script.
Both don't work in cmd.exe so gem and npm provide batchfile shims.

Return the full path of these shims, cmd.exe knows better what to do with these files.
2017-11-17 23:52:51 +01:00
bf3f0efb3a os_nodetype: rework
Make the Windows impl closer to Vim os_win32.c, and the Unix impl closer
to Vim os_unix.c.

Outcomes:
- Do not send negative fd to close(). ref #4806 #4772 #6860
- Fallback return-value is now correct in (hopefully) all cases.
- unix: check S_ISXXX instead of relying on os_open (which can fail for
  irrelevant reasons). buf_write() expects NODE_WRITABLE for character
  devices such as /dev/stderr. 96f834a842
2017-11-17 23:26:51 +01:00
d135ba99b2 os_open, os_stat: UV_EINVAL on NULL filename
EINVAL (instead of EFAULT) because that's what glibc does:
https://github.com/bminor/glibc/blob/master/io/open.c#L35

os_nodetype: check for UV_EINVAL explicitly.

ref #4370
ref https://github.com/neovim/neovim/issues/4370#issuecomment-344366571
ref ac055d677a

ref #4772
2017-11-17 22:30:38 +01:00
07931ed1c8 tui: 'guicursor': use DECSCUSR for xterm-likes (#7576)
Anything claiming to be an xterm gets DECSCUSR. This is the only
reasonable choice unless/until we get more reliable detection (#7490).

ref #6997
closes #7550
2017-11-17 22:24:01 +01:00
ee031eb525 lint #7562 2017-11-17 00:57:36 +01:00
eacd788cf5 :checkhealth: fix check for npm and yarn (#7569)
Fix bug that checked for npm AND yarn, where we wanted npm OR yarn.
But since we call `npm` exclusively, and it's highly unlikely you have
yarn installed without npm, let's just remove the yarn check altogether.

Addresses https://github.com/neovim/node-client/issues/41
2017-11-16 23:43:50 +01:00
59b0d9f62d doc: Fix pathshorten() example (#7571) 2017-11-16 23:41:16 +01:00
f8d40e7d53 health.vim: define highlights as default (#7560) 2017-11-14 22:08:50 +01:00
c5f001a46a runtime: revert netrw update (#7557)
fixes #7527
fixes #7536
2017-11-14 20:56:00 +01:00
67e4529292 defaults: scrollback=10000 (#7556) 2017-11-14 20:55:25 +01:00
30a21830d0 doc: test/README.md: migrate wiki info (#7552) 2017-11-14 01:43:52 +01:00
8fff2ef74a vim-patch:8.0.0227 (#7548)
Problem:    Crash when 'fileformat' is forced to "dos" and the first line in
            the file is empty and does not have a CR character.
Solution:   Don't check for CR before the start of the buffer.

2aa5f696b9
2017-11-13 08:30:25 +01:00
8d8212d384 Merge pull request #7545 from jamessan/test-fixes
Fix test failures found in Debian builds, closes #7522
2017-11-12 21:09:44 -05:00
d5b7f28b44 test/unit/path_spec: expect correct buffer size (#7514)
Fixed-size buffers and lfs.currentdir().. does not compute. The tests would fail
if the current working directory was longer than expected.
2017-11-13 02:28:07 +01:00
a43a573ad5 health.vim: normalize slashes for script path (#7525)
:checkhealth reports that remote plugins are unregistered
after running :UpdateRemotePlugins because of the backslashes in filepath.
Normalize them to forward slashes because the paths in rplugin.vim are normalized in autoload/remote/host.vim.
2017-11-13 02:10:06 +01:00
e6beb60da5 :terminal : fix crash on resize (#7547)
closes #7538
Fix wrong window references from #7440

Remove some eager resizing. Still mostly doesn't address #4997.
2017-11-13 02:06:32 +01:00
20c672a460 Merge #7530 'vim-patch:8.0.0226 vim-patch:8.0.0224' 2017-11-13 01:26:22 +01:00
6b8c34137c vim-patch: NA
* vim-patch:8.0.0245

Problem:    The generated zh_CN.cp936.po message file is not encoded properly.
Solution:   Instead of using zh_CN.po as input, use zh_CN.UTF-8.po.

16038d50c4

* vim-patch:8.0.0248

Problem:    vim_strcat() cannot handle overlapping arguments.
Solution:   Use mch_memmove() instead of strcpy(). (Justin M Keyes,
            closes vim/vim#1415)

45600ce8f2
2017-11-12 23:27:08 +01:00
ZyX
342239a9c5 unittests,viml/parser/expressions: Start adding asgn parsing tests 2017-11-13 01:11:13 +03:00
ZyX
39c75d31be unittests: Fix automatic test case generation 2017-11-13 01:11:13 +03:00
ZyX
556451a7f2 unittests,syntax: Check for sanity of highlight_init_cmdline
Also fixes some errors found.
2017-11-13 01:11:13 +03:00
b63cde97f4 tests: terminal: Assert for SIGWINCH handling before continuing
Fixes test failures like

    test/functional/terminal/cursor_spec.lua @ 62: terminal cursor with number column is positioned correctly when focused
    ./test/functional/ui/screen.lua:302: Row 2 did not match.
    Expected:
      |{7:  1 }tty ready                                     |
      |*{7:  2 }{1: }                                             |
      |{7:  3 }                                              |
      |{7:  4 }                                              |
      |{7:  5 }                                              |
      |{7:  6 }                                              |
      |{3:-- TERMINAL --}                                    |
    Actual:
      |{7:  1 }tty ready                                     |
      |*{7:  2 }rows: 6, cols: 46                             |
      |{7:  3 }{1: }                                             |
      |{7:  4 }                                              |
      |{7:  5 }                                              |
      |{7:  6 }                                              |
      |{3:-- TERMINAL --}                                    |
2017-11-12 16:45:39 -05:00
0407ddb364 Use PRId64 to format Integer when calling api_set_error
Integer is a 64-bit type so using %d can produce incorrect results.

    test/functional/api/highlight_spec.lua @ 35: highlight api nvim_get_hl_by_id
    ...W7Xi/neovim-0.2.1/test/functional/api/highlight_spec.lua:46: Expected objects to be the same.
    Passed in:
    (string) 'Invalid highlight id: 7671724'
    Expected:
    (string) 'Invalid highlight id: 30000'
2017-11-12 16:45:39 -05:00
cf75de710c tui_spec: Convert nil to "" before formatting it
This fixes an apparent difference in behavior between Lua and LuaJIT.
Lua fails to format nil:

    test/functional/terminal/tui_spec.lua:381: bad argument #2 to 'format' (string expected, got nil)
2017-11-12 16:45:39 -05:00
69e3308771 cmake: install runtime/rgb.txt
closes #6682
2017-11-12 15:52:21 +01:00
881f9e42d1 process_close(): uv_unref() detached processes (#7539)
Doc for UV_PROCESS_DETACHED in uv.h mentions:
> child process will still keep the parent's event loop alive unless
> the parent process calls uv_unref() on the child's process handle.

ref #3944
2017-11-12 15:34:04 +01:00
ZyX
45445e2e03 unittests: Add some more edge test cases 2017-11-12 03:52:26 +03:00
ZyX
c7495ebcc0 viml/parser/expressions: Add support for parsing assignments 2017-11-12 02:18:43 +03:00
ZyX
1aa6276c29 viml/parser/expressions: Replace lambda-specific WantedNode entries
This way code will be easier to adapt to handling (partially) non-expressions 
like :let lvalue part or :function definitions, and that would be needed in the 
future both for proper completion support and for the Ex commands parser.
2017-11-12 00:03:45 +03:00
ZyX
bbb21e5dd3 unittests: Add a way to show some custom messages only when crashed 2017-11-11 23:50:37 +03:00
ea020f2e26 fix lint error 2017-11-11 09:04:48 +08:00
b6a603fe51 Merge #7458 'remote: add node host' 2017-11-11 01:54:32 +01:00
a2fdd0a72f vim-patch:8.0.0237 (#7531)
Problem:    When setting wildoptions=tagfile the completion context is not set
            correctly. (desjardins)
Solution:   Check for EXPAND_TAGS_LISTFILES. (Christian Brabandt, closes vim/vim#1399)

ba47b51ff8
2017-11-11 01:26:55 +01:00
4fa0970519 vim-patch:8.0.0242 (#7532)
Problem:    Completion of user defined functions is not covered by tests.
Solution:   Add tests.  Also test various errors of user-defined commands.
            (Dominique Pelle, closes vim/vim#1413)

65c836e600
2017-11-11 00:00:11 +01:00
faa15c5b83 vim-patch:8.0.0218 (#7529)
Problem:    No command line completion for :cexpr, :cgetexpr, :caddexpr, etc.
Solution:   Make completion work. (Yegappan Lakshmanan)  Add a test.

2b2207ba69
2017-11-10 23:35:55 +01:00
f5d4da0144 :checkhealth : validate 'runtimepath' (#7526) 2017-11-10 22:37:54 +01:00
67a2207c4a vim-patch:8.0.0226
Problem:    The test for patch 8.0.0224 misses the CR characters and passes
            even without the fix. (Christian Brabandt)
Solution:   Use double quotes and \<CR>.

1695f99d08
2017-11-10 23:33:40 +08:00
7e8212c459 vim-patch:8.0.0224
Problem:    When 'fileformats' is changed in a BufReadPre auto command, it
            does not take effect in readfile(). (Gary Johnson)
Solution:   Check the value of 'fileformats' after executing auto commands.
            (Christian Brabandt)

7a2699e868
2017-11-10 23:28:24 +08:00
314ff440f7 doc/vim_diff.txt: mention NormalNC 2017-11-10 02:44:18 +01:00
d0b05e3c36 runtime: Fix syntax error in runtime/syntax/tex.vim (#7518) 2017-11-10 01:38:08 +01:00
9baa7ca37f test/oldtest: count is not special in Nvim #7407 2017-11-09 11:11:12 +01:00
9837a9c401 compat: "v:count" distinct from "count" (#7407) 2017-11-09 02:20:12 +01:00
55d8967147 tutor: some fixes (#7510)
- conceal inline types
- fix some links
2017-11-08 23:32:49 +01:00
a48e078c0d doc: 'clipboard': soft-remove autoselect* flags #7509
We may restore this feature, but docs shouldn't mention it until then.

ref #2325
2017-11-08 23:28:14 +01:00
e98bcf0523 Merge #7465 has('ttyin'), has('ttyout') 2017-11-08 04:10:22 +01:00
c46d6f8da2 version bump 2017-11-08 01:25:06 +01:00
ZyX
4aebd00a9e *: Fix linter errors 2017-11-06 20:28:37 +03:00
ZyX
24a353364d Merge branch 'master' into expression-parser 2017-11-06 20:23:35 +03:00
ZyX
f2660bee6a *: Fix some typos found by oni-link 2017-11-06 20:20:31 +03:00
ZyX
42959d0e8f unittests: Add tests for vim_str2nr 2017-11-06 20:15:05 +03:00
ZyX
c85f485aa7 charset: Move vim_str2nr flags from vim.h to charset.h 2017-11-06 19:06:24 +03:00
ZyX
05f775b5f2 viml/parser/expressions: Briefly document some differences 2017-11-06 01:57:22 +03:00
ZyX
ebb5977837 api/vim: Add “len” dictionary key
This allows determining where parsing ended which may be needed for e.g. parsing
`:echo` with that API function.
2017-11-06 01:17:39 +03:00
ZyX
7849070f99 tests: Add missing test cases 2017-11-06 01:17:39 +03:00
ZyX
7bc6de7526 api/vim,functests: Add tests for nvim_parse_expression, fix found bugs 2017-11-06 01:17:39 +03:00
ZyX
07ec709141 vim/api: Actually dump AST, fix some bugs in nvim_parse_expression 2017-11-06 01:17:38 +03:00
ZyX
b9d5aea073 api/vim: Create part of nvim_parse_expression function 2017-11-06 01:17:38 +03:00
ZyX
d98199de9c charset: Refactor vim_str2nr 2017-11-06 01:17:38 +03:00
ZyX
3ecb95298f tests: Fix testlint errors 2017-11-06 01:17:37 +03:00
54cac3033f test: startup_spec: cmd.exe escaping 2017-11-04 09:36:52 +01:00
68bef0a57d test: has("ttyin"), has("ttyout") 2017-11-04 09:36:52 +01:00
860ecd7055 vim-patch:8.0.0096: has('ttyin'), has('ttyout')
Nvim note: intentionally did not include `--ttyfail` since its purpose
is not clear. (And it isn't used in any Vim test files/scripts).

---

Problem:    When the input or output is not a tty Vim appears to hang.
Solution:   Add the --ttyfail argument.  Also add the "ttyin" and "ttyout"
            features to be able to check in Vim script.

2cab0e1910
2017-11-04 09:36:52 +01:00
ff819d8ad7 quickfix: fix location list updates.
Fix quickfix performance optimization which prevented quickfix items
from being updated when there were multiple windows with location lists
but the buffer with errors only in one of the lists.
2017-10-31 19:14:23 +01:00
6340689582 quickfix: fix location list updates (test). 2017-10-31 19:14:23 +01:00
eed10f7e23 use provider#stderr_collector 2017-10-31 08:35:29 -07:00
ZyX
0356dbbb36 ex_getln: Fix variable name which is wrong after the merge 2017-10-30 01:38:02 +03:00
ZyX
a9b203d23f *: Fix linter errors
Big function in expressions.c may be refactored, if I ever catch the idea how to 
split it right.
2017-10-30 01:32:10 +03:00
ZyX
b29a776550 Merge branch 'master' into expression-parser 2017-10-30 00:49:12 +03:00
ZyX
538af1c90a syntax,viml/parser/expressions: Add missing highlight groups
Also adjusts some names.
2017-10-29 22:02:19 +03:00
ZyX
b91cb18c36 syntax: Adjust position and arguments of syn_init_cmdline_highlight
This way it works both after `nvim -u NORC` and after that and `colorscheme 
wombat256mod`. Removed the comment because I do not actually know why it works 
here with these arguments and not in previous position with previous arguments.
2017-10-29 21:42:37 +03:00
ZyX
748f3ad5bb syntax,viml/expressions/parser: Create defaults for expr highlighting 2017-10-29 21:30:06 +03:00
7890157931 remote: add node.js as a remote plugin provider 2017-10-29 11:10:33 -07:00
8b199cb2fe health: add node health check 2017-10-29 11:06:47 -07:00
ZyX
22d161a5dd api/vim: Add nvim_parse_expression function 2017-10-29 20:11:44 +03:00
ZyX
1be29dc5ac gen_declarations: Do not generate line numbers by default 2017-10-29 16:56:59 +03:00
ZyX
b935a12dab ex_getln: Make use of new parser to color expressions
Retires g:Nvim_color_expr callback.
2017-10-29 16:32:13 +03:00
ZyX
06bdc9ed83 klee: Update vim_str2nr in mock as well 2017-10-29 01:40:55 +03:00
ZyX
c202f17c8d unittests: Avoid alloc log checking errors when printing tests 2017-10-29 01:31:31 +03:00
ZyX
568cf73c90 viml/parser/expressions: Fix last error found by KLEE 2017-10-29 01:29:48 +03:00
ZyX
b574e95850 charset: Some more refactoring of vim_str2nr 2017-10-29 01:17:00 +03:00
ZyX
47938e1e22 viml/parser/expressions: Fix some errors spotted by KLEE
Not all of them are fixed yet though.
2017-10-19 10:48:05 +03:00
ZyX
895793fc82 viml/parser/expressions: Add some casts 2017-10-16 09:14:02 +03:00
ZyX
c9f511d24a viml/parser/expressions: Remove unused flag 2017-10-16 09:06:05 +03:00
ZyX
8e856ebcd0 klee: Add run.sh --help and run.sh -s 2017-10-16 09:00:39 +03:00
ZyX
252a76db80 unittests: Free everything and check for memory leaks
Also improves error reporting.
2017-10-16 03:06:34 +03:00
ZyX
c03dc13bb7 klee: Fix possible assertion error
No idea how it did not happen to hit me yet.
2017-10-16 03:05:27 +03:00
ZyX
4c8ed65b60 viml/parser/expressions: Fix memory leak when processing ternary 2017-10-16 03:04:22 +03:00
ZyX
248493f155 test/unit/formatc: Fix parsing of most recent viml_parser_highlight 2017-10-16 03:03:34 +03:00
ZyX
a535d68380 keymap: Remove incorrect cast 2017-10-16 01:00:58 +03:00
ZyX
15043e93b6 klee: Update key_name_entry table 2017-10-16 00:41:41 +03:00
ZyX
ed253b5fe6 klee: Include colors in test 2017-10-16 00:39:48 +03:00
ZyX
fe81380bf5 viml/parser/expressions: Highlight prefix separately from number
Should make accidental octals more visible.
2017-10-16 00:30:55 +03:00
ZyX
5e92ee6565 charset: Do not call strlen() from vim_str2nr 2017-10-16 00:19:02 +03:00
ZyX
1a3635304b charset: Avoid overflow in vim_str2nr 2017-10-16 00:07:32 +03:00
ZyX
2cb95bd937 viml/parser/expressions: Define east_node_type_tab only when needed 2017-10-15 21:39:01 +03:00
ZyX
4ccaf86110 keymap: Readd figure braces disappeared when resolving conflicts 2017-10-15 21:22:49 +03:00
ZyX
76f0466536 Merge branch 'master' into expression-parser 2017-10-15 21:16:27 +03:00
ZyX
3aa2c0d63a viml/parser/expressions,klee: Fix some problems found by KLEE run 2017-10-15 21:11:00 +03:00
ZyX
bc386c4882 charset: Fix out-of-bounds array access
It is incorrect to *first* access ptr[2] and *then* check whether maxlen allows 
it.
2017-10-15 21:09:08 +03:00
ZyX
57bb3346d9 viml/parser/expressions: Update some comments and add another check 2017-10-15 20:43:16 +03:00
ZyX
6c19cbef26 viml/parser/expressions,tests: Add AST freeing, with sanity checks 2017-10-15 20:05:35 +03:00
ZyX
206f7ae76a unittests: Test some edge cases 2017-10-15 19:18:17 +03:00
ZyX
c286155bfa viml/parser/expressions: Create tests for latest additions 2017-10-15 19:13:52 +03:00
ZyX
8178ba2871 klee: Fix some errors made in …parser.c 2017-10-15 19:13:52 +03:00
ZyX
fa3cfc0dd5 viml/parser/expressions: Finish parser
Note: formatc.lua was unable to swallow some newer additions to ExprASTNodeType 
(specifically `kExprNodeOr = '|'` and probably something else), so all `= …` 
were dropped: in any case they only were there in order to not bother updating 
viml_pexpr_debug_print_ast_node and since it is now known all nodes which will 
be present it is not much of an issue.
2017-10-15 19:13:52 +03:00
ZyX
af38cea133 viml/parser/expressions: Add support for string parsing 2017-10-15 19:13:52 +03:00
ZyX
c484613ce0 keymap: Lint some functions to be copied for symbolic tests 2017-10-15 19:13:52 +03:00
ZyX
e423cfe194 edit: Lint some functions which are to be copied for symbolic tests 2017-10-15 19:13:52 +03:00
ZyX
6f22b5afad mbyte: Lint some functions which are to be copied for symbolic tests 2017-10-15 19:13:52 +03:00
ZyX
bd3a4166b2 viml/parser/expressions: Add support for subscript and list literals 2017-10-15 19:13:51 +03:00
ZyX
e45e519495 viml/parser/expressions: Error out on multiple colons in a row 2017-10-15 19:13:51 +03:00
ZyX
21a5ce033c viml/parser/expressions: Add support for the dot operator and numbers 2017-10-15 19:13:50 +03:00
ZyX
163792e9b9 viml/parser/expressions: Make lexer parse numbers, support non-decimal 2017-10-15 19:13:50 +03:00
ZyX
0bc4e22379 viml/parser/expressions: Forbid dot or alpha characters after a float
This is basically what Vim already does, in addition to forbidding floats should
there be a concat immediately before it.
2017-10-15 19:13:50 +03:00
ZyX
6168e1127c viml/parser/expressions: Add support for comparison operators 2017-10-15 19:13:49 +03:00
ZyX
6791c57420 viml/parser/expressions: Make sure that arrows outside lambda throw 2017-10-15 19:13:49 +03:00
ZyX
6144e26eb9 viml/parser/expressions: Add support for ternary operator 2017-10-15 19:13:49 +03:00
ZyX
9e721031d5 viml/parser/expressions: Fix determining invalid commas/colons 2017-10-15 19:13:48 +03:00
ZyX
3735537a50 viml/parser/expressions: Fix call inside nested parenthesis
It may have incorrectly tried to call everything because of essentially “value” 
nodes being treated as not such.
2017-10-15 19:13:48 +03:00
ZyX
f33543377e viml/parser/expressions: Add a way to represent tokens from C code 2017-10-15 19:13:47 +03:00
ZyX
f265066081 unittests: Add support for dumping “expected” state
Purpose is similar to that of `screen:snapshot_util()`, but in different domain.
2017-10-08 22:25:09 +03:00
ZyX
9fa8f7fc0a viml/parser/expressions: Add a way to adjust lexer
It also adds support for kExprLexOr which for some reason was forgotten.

It was only made sure that KLEE test compiles in non-KLEE mode, not that
something works or that KLEE is able to run tests.
2017-10-08 22:25:08 +03:00
ZyX
0987d3b10f viml/parser/expressions: Make curly braces name actually work 2017-10-08 22:25:07 +03:00
ZyX
3cc65ac054 viml/parser/expressions: Make commas actually work when calling 2017-10-08 22:25:07 +03:00
ZyX
d4782fb1ca viml/parser/expressions: Make commas actually work when calling 2017-10-08 22:25:06 +03:00
ZyX
7980614650 viml/parser/expressions: Add support for figure braces (three kinds) 2017-10-08 22:25:06 +03:00
ZyX
7c97f78393 klee: Start preparing for klee tests
First stage: something compiling without klee, but with a buch of dirty
hacks - done.
Second stage: something running under klee, able to emit useful results,
but still using dirty hacks - done.

Third stage: make CMake care about clang argumnets - not done, may be
omitted if proves to be too hard. Not that klee can be run on CI in any
case.
2017-10-08 22:25:05 +03:00
ZyX
430e516d3a viml/parser/expressions: Start creating expressions parser
Currently supported nodes:

- Register as it is one of the simplest value nodes (even numbers are
  not that simple with that dot handling).
- Plus, both unary and binary.
- Parenthesis, both nesting and calling.

Note regarding unit tests: it stores data for AST in highlighting in
strings in place of tables because luassert fails to do a good job at
representing big tables. Squashing a bunch of data into a single string
simply yields more readable result.
2017-10-08 22:25:03 +03:00
ZyX
919223c23a unittests: Move some functions into helpers modules 2017-10-08 22:12:00 +03:00
ZyX
1265da0288 viml/parser: Add helper functions for highlighting 2017-10-08 22:12:00 +03:00
ZyX
2d8b9937de viml/parser: Handle encoding conversions 2017-10-08 22:11:59 +03:00
ZyX
0300c4d109 viml/expressions: Add lexer with some basic tests 2017-10-08 22:11:57 +03:00
ZyX
ad58e50b45 kvec: Add kv_Z which is like kv_A, but zero is the last value 2017-10-08 22:11:57 +03:00
ZyX
e479f3b944 kvec: Add kv_drop() which is to be used like (void)kv_pop(kvec) 2017-09-29 01:21:22 +03:00
ZyX
190c8516f5 unittests: Add a way to print trace on regular error 2017-09-29 01:21:13 +03:00
ZyX
520c0b91a5 test/helpers: Add format_string and format_luav
First intended to provide %r functionality like in Python (and also support for 
%*.*s, but this was not checked), second adds nice table formatting for use in 
cases similar to screen:snapshot_util().
2017-09-29 01:21:07 +03:00
4403864da3 update tests 2017-06-28 20:23:03 +02:00
e8829710bc Merge branch 'master' into option-fixes 2017-06-28 16:52:04 +02:00
ff8b2eb435 Merge branch 'master' into option-fixes 2017-04-24 11:35:10 +02:00
d0b08f32f5 Remove the mf_dont_release global after getting rid of maxmem[tot] 2017-04-11 00:33:09 +02:00
9ea111d1af Remove maxmem and maxmemtot options
> The option 'maxmem' ('mm') is used to set the maximum memory used for one
> buffer (in kilobytes).  'maxmemtot' is used to set the maximum memory used for
> all buffers (in kilobytes).  The defaults depend on the system used.  These
> are not hard limits, but tell Vim when to move text into a swap file.  If you
> don't like Vim to swap to a file, set 'maxmem' and 'maxmemtot' to a very large
> value.  The swap file will then only be used for recovery.  If you don't want
> a swap file at all, set 'updatecount' to 0, or use the "-n" argument when
> starting Vim.

On today's systems these values are huge (4GB in my machine with 8GB of RAM
since it's set as half the available memory by default) so the limits are
never reached in practice, but Vim wastes a lot of time checking if the limit
was reached.

If the limit is reached Vim starts saving pieces of the swap file that were in
memory to the disk. Said in a different way: Vim implements its own memory
swapping mechanism. This is unnecessary and inefficient since the operating
system already virtualized the memory and will swap to the disk if programs
start using too much memory.

This change does...

1. Reduce the number of config options and need for documentation.
2. Make the code more efficient as we don't have to keep track of memory usage
   nor check if the memory limits were reached to start swapping to disk every
   time we need memory for buffers.
3. Simplify the code. Once `memfile.c` is simple enough it could be replaced by
   actual operating system memory mapping (`mmap`, `MemoryViewOfFile`...).

This change does not prevent Vim to recover changes from swap files since the
swapping code is never triggered with the huge limits set by default.
2017-04-11 00:33:09 +02:00
4049492b6d also test set_option 2017-04-01 12:26:58 +02:00
8a55f9b1c8 update for changes in master; fix 'window'; tests 2017-03-31 18:30:06 +02:00
db095f6563 options: more tests; check first set later; stricter validation 2017-03-30 23:04:54 +02:00
44f039a1c8 options: fix setglobal for buf-local number options 2017-03-30 23:04:54 +02:00
2290a7a1b1 options: group num_option validation by type 2017-03-30 23:04:54 +02:00
2b0abdbd9a options: more of the same 2017-03-30 23:04:54 +02:00
0273f96ef6 options: move more validation together 2017-03-30 23:04:54 +02:00
1a56a032fe options: clean up num_options side-effects 2017-03-30 23:04:54 +02:00
f4920fb485 options: if invalid value is given, reset to old value 2017-03-30 23:04:54 +02:00
79d3e94942 options: move code around in set_num_option
handle side-effects after validation
2017-03-30 23:04:54 +02:00
628d0335b8 options: add some tests 2017-03-30 23:04:54 +02:00
e47622f26b options: setlocal should only set local value
For 'iminsert' and 'imsearch' the global value was always changed.
2017-03-30 23:04:54 +02:00
ZyX
62108c3b0b functests: Disable system(-s -) test on Windows
Assume something with system() if second test hangs as well. Assume something 
with reading stdin if not.
2017-03-23 21:06:39 +03:00
ZyX
99b4f25b99 functests: Do not run termopen test on Windows 2017-03-23 21:04:45 +03:00
ZyX
ca116df260 main: Translate full -s error message, not part of it 2017-03-19 19:28:16 +03:00
ZyX
ae4fae9d3e unittests: Add tests for new fileio functions 2017-03-19 19:16:44 +03:00
ZyX
7df4fc8941 functests: Test -s errors 2017-03-19 18:53:21 +03:00
ZyX
83b39a4a02 os/fileio: Fix QB failure 2017-03-19 18:24:20 +03:00
ZyX
88e1a17cde *: Fix linter errors 2017-03-19 17:36:04 +03:00
ZyX
e78e75d85d fileio,main: Do not restart syscall at EAGAIN when reading for -s 2017-03-19 17:29:48 +03:00
ZyX
bd798a3267 getchar: Use fileio instead of fdopen
Problem: as fileio is cached and reads blocks this is going to wait
until either EOF or reading enough characters to fill rbuffer. This is
not good when reading user input from stdin as script.
2017-03-19 16:56:00 +03:00
ZyX
fdfa1ed578 main: Temporary fix assertion error
This variant uses `fdopen()` which is not standard, but it fixes problem on my 
system. In next commit `scriptin` will use `FileDescriptor*` from os/fileio in 
place of `FILE*`.
2017-03-19 16:09:48 +03:00
ZyX
d2268d5ebb functests: Do not check stdout, it is different on Windows 2017-03-19 14:13:21 +03:00
ZyX
29654cfee7 functests: Fix testlint errors 2017-03-19 14:13:21 +03:00
ZyX
d4639ea6d9 functests: Use Neovim instance and system() in place of lua io.popen 2017-03-19 14:13:21 +03:00
ZyX
38687ee394 functests: Make sure that line ending is LF and not CRLF 2017-03-19 14:13:21 +03:00
ZyX
1ea7541f65 functests: Alter the order of checks
Check whether `repeated_read_cmd` returned nil and did not actually run nvim or 
it did, but still returned nil for whatever reason.
2017-03-19 14:13:21 +03:00
ZyX
3cd7bf31e2 tests: Fix repeated_popen_r usage, rename the function 2017-03-19 14:13:21 +03:00
ZyX
0e9286a19e tests: Fix CI failures 2017-03-19 14:13:21 +03:00
ZyX
0320a58082 functests: Check that -s works as expected 2017-03-19 14:13:21 +03:00
ZyX
65c41e6c2b main: Make -s - read from stdin 2017-03-19 14:13:21 +03:00
617 changed files with 68309 additions and 21199 deletions

15
.gitignore vendored
View File

@ -1,3 +1,8 @@
# Tools
.ropeproject/
# Visual Studio
/.vs/
# Build/deps dir
/build/
/cmake-build-debug/
@ -17,13 +22,13 @@ tags
/src/nvim/po/vim.pot
/src/nvim/po/*.ck
# generated by tests with $NVIM_LOG_FILE set.
# Generated by tests with $NVIM_LOG_FILE set.
/.nvimlog
# Files generated by scripts/vim-patch.sh
# Generated by scripts/vim-patch.sh
/.vim-src/
# Files generated by the tests
# Generated by old (Vim) tests.
/src/nvim/testdir/del
/src/nvim/testdir/test*.out
/src/nvim/testdir/test*.res
@ -36,10 +41,10 @@ tags
/src/nvim/testdir/valgrind.*
/src/nvim/testdir/.gdbinit
# Folder generated by the unit tests
# Generated by unit tests.
/test/includes/post/
# generated by luacheck during `make testlint'
# Generated by luacheck during `make testlint'
/test/.luacheckcache
# local make targets

View File

@ -4,13 +4,8 @@ language: c
env:
global:
# To force rebuilding of third-party dependencies, set this to 'true'.
- BUILD_NVIM_DEPS=false
# Travis has 1.5 virtual cores according to
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
- MAKE_CMD="make -j2"
# Update PATH for pip.
- PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:/usr/lib/llvm-symbolizer-4.0/bin:$PATH"
# Set "false" to force rebuild of third-party dependencies.
- CACHE_ENABLE=true
# Build directory for Neovim.
- BUILD_DIR="$TRAVIS_BUILD_DIR/build"
# Build directory for third-party dependencies.
@ -41,50 +36,54 @@ env:
- UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
# Environment variables for Valgrind.
- VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
# Cache marker for third-party dependencies cache.
# If this file exists, we know that the cache contains compiled
# dependencies and we can use it.
# If this file exists, the cache is valid (compile was successful).
- CACHE_MARKER="$HOME/.cache/nvim-deps/.travis_cache_marker"
# default target name for functional tests
- FUNCTIONALTEST=functionaltest
- CI_TARGET=tests
# Environment variables for ccache
- CCACHE_COMPRESS=1
- CCACHE_SLOPPINESS=time_macros,file_macro
- CCACHE_BASEDIR="$TRAVIS_BUILD_DIR"
jobs:
include:
- stage: sanitizers
os: linux
compiler: clang-4.0
env: >
CLANG_SANITIZER=ASAN_UBSAN
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
- stage: normal builds
os: linux
compiler: gcc-5
env: FUNCTIONALTEST=functionaltest-lua
compiler: clang
env: >
CLANG_SANITIZER=ASAN_UBSAN
# Use Lua so that ASAN can test our embedded Lua support. 8fec4d53d0f6
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
sudo: true
- os: linux
# Travis creates a cache per compiler.
# Set a different value here to store 32-bit
# dependencies in a separate cache.
compiler: gcc-5 -m32
compiler: gcc
env: >
FUNCTIONALTEST=functionaltest-lua
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
DEPS_CMAKE_FLAGS="$DEPS_CMAKE_FLAGS -DUSE_BUNDLED_LUAJIT=OFF"
- os: linux
# Travis creates a cache per compiler. Set a different value here to
# store 32-bit dependencies in a separate cache.
compiler: gcc
env: BUILD_32BIT=ON
- os: osx
compiler: clang
osx_image: xcode7.3 # macOS 10.11
- os: osx
compiler: gcc-4.9
compiler: gcc
osx_image: xcode7.3 # macOS 10.11
- stage: lint
os: linux
- os: linux
env: CI_TARGET=lint
- stage: Flaky builds
os: linux
compiler: gcc-5
env: GCOV=gcov-5 CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
compiler: gcc
env: GCOV=gcov CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
- os: linux
compiler: clang-4.0
compiler: clang
env: CLANG_SANITIZER=TSAN
allow_failures:
- env: GCOV=gcov-5 CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
- env: GCOV=gcov CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
- env: CLANG_SANITIZER=TSAN
fast_finish: true
@ -93,31 +92,25 @@ install: ci/install.sh
before_script: ci/before_script.sh
script: ci/script.sh
before_cache: ci/before_cache.sh
after_success: ci/after_success.sh
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-4.0
packages:
- autoconf
- automake
- apport
- build-essential
- clang-4.0
- clang
- cmake
- cscope
- g++-5-multilib
- g++-multilib
- gcc-5-multilib
- gcc-multilib
- gdb
- language-pack-tr
- libc6-dev-i386
- libtool
- llvm-4.0-dev
- locales
- ninja-build
- pkg-config
- unzip
- valgrind
@ -129,9 +122,11 @@ branches:
cache:
apt: true
ccache: true
directories:
- "$HOME/.cache/pip"
- "$HOME/.cache/nvim-deps"
- "$HOME/.cache/nvim-deps-downloads"
notifications:
webhooks:

View File

@ -1,5 +1,9 @@
cmake_minimum_required(VERSION 2.8.7)
project(nvim)
# CMAKE REFERENCE
# intro: https://codingnest.com/basic-cmake/
# best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
cmake_minimum_required(VERSION 2.8.12)
project(nvim C)
if(POLICY CMP0059)
cmake_policy(SET CMP0059 OLD) # Needed until cmake 2.8.12. #4389
@ -11,8 +15,41 @@ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
# We don't support building in-tree.
include(PreventInTreeBuilds)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Prefer our bundled versions of dependencies.
set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr" CACHE PATH "Path prefix for finding dependencies")
if(DEFINED ENV{DEPS_BUILD_DIR})
set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/usr" CACHE PATH "Path prefix for finding dependencies")
else()
set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr" CACHE PATH "Path prefix for finding dependencies")
# When running from within CLion or Visual Studio,
# build bundled dependencies automatically.
if(NOT EXISTS ${DEPS_PREFIX}
AND (DEFINED ENV{CLION_IDE}
OR DEFINED ENV{VisualStudioEdition}))
message(STATUS "Building dependencies...")
set(DEPS_BUILD_DIR ${PROJECT_BINARY_DIR}/.deps)
file(MAKE_DIRECTORY ${DEPS_BUILD_DIR})
execute_process(
COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
${PROJECT_SOURCE_DIR}/third-party
WORKING_DIRECTORY ${DEPS_BUILD_DIR})
execute_process(
COMMAND ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR}
--config ${CMAKE_BUILD_TYPE})
set(DEPS_PREFIX ${DEPS_BUILD_DIR}/usr)
endif()
endif()
if(CMAKE_CROSSCOMPILING AND NOT UNIX)
list(INSERT CMAKE_FIND_ROOT_PATH 0 ${DEPS_PREFIX})
list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX}/../host/bin)
@ -39,9 +76,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
endif()
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")
endif()
endif()
if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
@ -49,6 +83,9 @@ if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(USE_FNAME_CASE TRUE)
endif()
option(ENABLE_LIBINTL "enable libintl" ON)
option(ENABLE_LIBICONV "enable libiconv" ON)
# Set default build type.
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "CMAKE_BUILD_TYPE not given, defaulting to 'Debug'.")
@ -63,12 +100,12 @@ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
# If not in a git repo (e.g., a tarball) these tokens define the complete
# version string, else they are combined with the result of `git describe`.
set(NVIM_VERSION_MAJOR 0)
set(NVIM_VERSION_MINOR 2)
set(NVIM_VERSION_MINOR 3)
set(NVIM_VERSION_PATCH 1)
set(NVIM_VERSION_PRERELEASE "") # for package maintainers
# API level
set(NVIM_API_LEVEL 3) # Bump this after any API change.
set(NVIM_API_LEVEL 4) # Bump this after any API change.
set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change.
set(NVIM_API_PRERELEASE false)
@ -170,7 +207,6 @@ if(NOT HAS_ACCEPTABLE_FORTIFY)
# -U in add_definitions doesn't end up in the correct spot, so we add it to
# the flags variable instead.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FORTIFY_SOURCE_PREFIX}-U_FORTIFY_SOURCE ${_FORTIFY_SOURCE_PREFIX}-D_FORTIFY_SOURCE=1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FORTIFY_SOURCE_PREFIX}-U_FORTIFY_SOURCE ${_FORTIFY_SOURCE_PREFIX}-D_FORTIFY_SOURCE=1")
endif()
# Remove --sort-common from linker flags, as this seems to cause bugs (see #2641, #3374).
@ -204,6 +240,7 @@ int main(void)
if(MSVC)
# XXX: /W4 gives too many warnings. #3241
add_definitions(/W3 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
add_definitions(-DWIN32)
else()
add_definitions(-Wall -Wextra -pedantic -Wno-unused-parameter
-Wstrict-prototypes -std=gnu99)
@ -223,6 +260,9 @@ endif()
if(MINGW)
# Use POSIX compatible stdio in Mingw
add_definitions(-D__USE_MINGW_ANSI_STDIO)
endif()
if(WIN32)
# Windows Vista is the minimum supported version
add_definitions(-D_WIN32_WINNT=0x0600)
endif()
@ -249,14 +289,15 @@ if(HAS_DIAG_COLOR_FLAG)
add_definitions(-fdiagnostics-color=auto)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.5")
# Array-bounds testing is broken in some GCC versions before 4.8.5.
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273
check_c_compiler_flag(-Wno-array-bounds HAS_NO_ARRAY_BOUNDS_FLAG)
if(HAS_NO_ARRAY_BOUNDS_FLAG)
add_definitions(-Wno-array-bounds)
endif()
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
# 1. Array-bounds testing is broken in some GCC versions before 4.8.5.
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273
# 2. But _Pragma("...ignored") is broken (unresolved) in GCC 5+:
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66099
# So we must disable -Warray-bounds globally for GCC (for kbtree.h, #7083).
check_c_compiler_flag(-Wno-array-bounds HAS_NO_ARRAY_BOUNDS_FLAG)
if(HAS_NO_ARRAY_BOUNDS_FLAG)
add_definitions(-Wno-array-bounds)
endif()
endif()
@ -277,22 +318,25 @@ else()
set(DEBUG 0)
endif()
option(LOG_LIST_ACTIONS "Add list actions logging" OFF)
add_definitions(-DINCLUDE_GENERATED_DECLARATIONS)
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined")
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
set(NO_UNDEFINED "-Wl,--no-undefined -lsocket")
elseif(NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(NO_UNDEFINED "-Wl,--no-undefined")
endif()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${NO_UNDEFINED}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${NO_UNDEFINED}")
# For O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW flags on older systems
# (pre POSIX.1-2008: glibc 2.11 and earlier). #4042
# For ptsname(). #6743
add_definitions(-D_GNU_SOURCE)
endif()
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_NAME STREQUAL "SunOS")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined -lsocket")
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
# Required for luajit.
set(CMAKE_EXE_LINKER_FLAGS
@ -319,6 +363,7 @@ if(PREFER_LUA)
find_package(Lua REQUIRED)
set(LUA_PREFERRED_INCLUDE_DIRS ${LUA_INCLUDE_DIR})
set(LUA_PREFERRED_LIBRARIES ${LUA_LIBRARIES})
# Passive (not REQUIRED): if LUAJIT_FOUND is not set, nvim-test is skipped.
find_package(LuaJit)
else()
find_package(LuaJit REQUIRED)
@ -337,7 +382,7 @@ main(void)
}
" MSGPACK_HAS_FLOAT32)
if(MSGPACK_HAS_FLOAT32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_MSGPACK_HAS_FLOAT32")
add_definitions(-DNVIM_MSGPACK_HAS_FLOAT32)
endif()
option(FEAT_TUI "Enable the Terminal UI" ON)
@ -358,7 +403,7 @@ if(FEAT_TUI)
}
" UNIBI_HAS_VAR_FROM)
if(UNIBI_HAS_VAR_FROM)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_UNIBI_HAS_VAR_FROM")
add_definitions(-DNVIM_UNIBI_HAS_VAR_FROM)
endif()
find_package(LibTermkey REQUIRED)
@ -387,31 +432,30 @@ if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MA
message(FATAL_ERROR "Sanitizers are only supported for Clang.")
endif()
if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD|FreeBSD")
message(STATUS "detected OpenBSD/FreeBSD; disabled jemalloc. #5318")
if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD|FreeBSD|Windows") # see #5318
message(STATUS "skipping jemalloc on this system: ${CMAKE_SYSTEM_NAME}")
option(ENABLE_JEMALLOC "enable jemalloc" OFF)
else()
option(ENABLE_JEMALLOC "enable jemalloc" ON)
endif()
if (ENABLE_JEMALLOC)
if(ENABLE_JEMALLOC)
if(CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN)
message(STATUS "Sanitizers have been enabled; don't use jemalloc.")
else()
find_package(JeMalloc)
if(JEMALLOC_FOUND)
include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
endif()
find_package(JeMalloc REQUIRED)
include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
endif()
endif()
find_package(LibIntl)
if(LibIntl_FOUND)
if(ENABLE_LIBINTL)
# LibIntl (not Intl) selects our FindLibIntl.cmake script. #8464
find_package(LibIntl REQUIRED)
include_directories(SYSTEM ${LibIntl_INCLUDE_DIRS})
endif()
find_package(Iconv)
if(Iconv_FOUND)
if(ENABLE_LIBICONV)
find_package(Iconv REQUIRED)
include_directories(SYSTEM ${Iconv_INCLUDE_DIRS})
endif()
@ -498,6 +542,11 @@ add_subdirectory(test/includes)
add_subdirectory(config)
add_subdirectory(test/functional/fixtures) # compile test programs
add_subdirectory(runtime)
if(WIN32)
install_helper(
FILES ${DEPS_PREFIX}/share/nvim-qt/runtime/plugin/nvim_gui_shim.vim
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim-qt/runtime/plugin)
endif()
# Setup some test-related bits. We do this after going down the tree because we
# need some of the targets.
@ -505,17 +554,6 @@ if(BUSTED_PRG)
get_property(TEST_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
PROPERTY INCLUDE_DIRECTORIES)
# Set policy CMP0026 to OLD so we avoid CMake warnings on newer
# versions of cmake.
if(POLICY CMP0026)
cmake_policy(SET CMP0026 OLD)
endif()
if(CMAKE_GENERATOR MATCHES "Visual Studio")
set(TEST_LIBNVIM_PATH ${CMAKE_BINARY_DIR}/lib/nvim-test.dll)
else()
get_target_property(TEST_LIBNVIM_PATH nvim-test LOCATION)
endif()
# When running tests from 'ninja' we need to use the
# console pool: to do so we need to use the USES_TERMINAL
# option, but this is only available in CMake 3.2
@ -524,10 +562,6 @@ if(BUSTED_PRG)
list(APPEND TEST_TARGET_ARGS "USES_TERMINAL")
endif()
configure_file(
test/config/paths.lua.in
${CMAKE_BINARY_DIR}/test/config/paths.lua)
set(UNITTEST_PREREQS nvim-test unittest-headers)
set(FUNCTIONALTEST_PREREQS nvim printargs-test shell-test)
if(NOT WIN32)
@ -538,6 +572,7 @@ if(BUSTED_PRG)
# Useful for automated build systems, if they want to manually run the tests.
add_custom_target(unittest-prereqs
DEPENDS ${UNITTEST_PREREQS})
set_target_properties(unittest-prereqs PROPERTIES FOLDER test)
add_custom_target(functionaltest-prereqs
DEPENDS ${FUNCTIONALTEST_PREREQS})
@ -560,10 +595,23 @@ if(BUSTED_PRG)
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
DEPENDS ${UNITTEST_PREREQS}
${TEST_TARGET_ARGS})
set_target_properties(unittest PROPERTIES FOLDER test)
else()
message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}")
endif()
if(LUA_HAS_FFI)
set(TEST_LIBNVIM_PATH $<TARGET_FILE:nvim-test>)
else()
set(TEST_LIBNVIM_PATH "")
endif()
configure_file(
${CMAKE_SOURCE_DIR}/test/config/paths.lua.in
${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
file(GENERATE
OUTPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua
INPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
add_custom_target(functionaltest
COMMAND ${CMAKE_COMMAND}
-DBUSTED_PRG=${BUSTED_PRG}
@ -578,6 +626,8 @@ if(BUSTED_PRG)
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
DEPENDS ${FUNCTIONALTEST_PREREQS}
${TEST_TARGET_ARGS})
set_target_properties(functionaltest functionaltest-prereqs
PROPERTIES FOLDER test)
add_custom_target(benchmark
COMMAND ${CMAKE_COMMAND}
@ -593,6 +643,7 @@ if(BUSTED_PRG)
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
DEPENDS ${BENCHMARK_PREREQS}
${TEST_TARGET_ARGS})
set_target_properties(benchmark benchmark-prereqs PROPERTIES FOLDER test)
endif()
if(BUSTED_LUA_PRG)
@ -610,6 +661,7 @@ if(BUSTED_LUA_PRG)
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
DEPENDS ${FUNCTIONALTEST_PREREQS}
${TEST_TARGET_ARGS})
set_target_properties(functionaltest-lua PROPERTIES FOLDER test)
endif()
if(LUACHECK_PRG)

View File

@ -14,8 +14,15 @@ low-risk/isolated tasks:
Developer guidelines
--------------------
- Nvim developers should read `:help dev-help`.
- Nvim contributors should read `:help dev` (especially `:help dev-api`).
- External UI developers should read `:help dev-ui`.
- API client developers should read `:help dev-api-client`.
- Nvim developers are _strongly encouraged_ to install `ninja` for faster builds.
```
sudo apt-get install ninja-build
make distclean
make # Nvim build system uses ninja automatically, if available.
```
Reporting problems
------------------
@ -24,7 +31,7 @@ Reporting problems
- Search [existing issues][github-issues] (including closed!)
- Update Neovim to the latest version to see if your problem persists.
- Disable plugins incrementally, to narrow down the cause of the issue.
- When reporting a crash, include a stacktrace.
- When reporting a crash, [include a stacktrace](https://github.com/neovim/neovim/wiki/Development-tips#backtrace-linux).
- [Bisect][git-bisect] to the cause of a regression, if you are able. This is _extremely_ helpful.
- Check `$NVIM_LOG_FILE`, if it exists.
- Include `cmake --system-information` for **build** issues.
@ -92,7 +99,7 @@ and [AppVeyor].
- CI builds are compiled with [`-Werror`][gcc-warnings], so compiler warnings
will fail the build.
- If any tests fail, the build will fail.
See [Building Neovim#running-tests][wiki-run-tests] to run tests locally.
See [test/README.md#running-tests][run-tests] to run tests locally.
Passing locally doesn't guarantee passing the CI build, because of the
different compilers and platforms tested against.
- CI runs [ASan] and other analyzers.
@ -157,7 +164,7 @@ shows each commit's diff. To show the whole surrounding function of a change
as context, use the `-W` argument as well.
[gcc-warnings]: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
[git-bisect]: http://git-scm.com/book/tr/v2/Git-Tools-Debugging-with-Git
[git-bisect]: http://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git
[git-feature-branch]: https://www.atlassian.com/git/tutorials/comparing-workflows
[git-history-filtering]: https://www.atlassian.com/git/tutorials/git-log/filtering-the-commit-history
[git-history-rewriting]: http://git-scm.com/book/en/v2/Git-Tools-Rewriting-History
@ -168,7 +175,7 @@ as context, use the `-W` argument as well.
[hygiene]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
[style-guide]: http://neovim.io/develop/style-guide.xml
[ASan]: http://clang.llvm.org/docs/AddressSanitizer.html
[wiki-run-tests]: https://github.com/neovim/neovim/wiki/Building-Neovim#running-tests
[run-tests]: https://github.com/neovim/neovim/blob/master/test/README.md#running-tests
[wiki-faq]: https://github.com/neovim/neovim/wiki/FAQ
[review-checklist]: https://github.com/neovim/neovim/wiki/Code-review-checklist
[3174]: https://github.com/neovim/neovim/issues/3174

View File

@ -1,3 +1,4 @@
THIS_DIR = $(shell pwd)
filter-false = $(strip $(filter-out 0 off OFF false FALSE,$1))
filter-true = $(strip $(filter-out 1 on ON true TRUE,$1))
@ -8,11 +9,14 @@ CMAKE_PRG ?= $(shell (command -v cmake3 || echo cmake))
CMAKE_BUILD_TYPE ?= Debug
CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
DOC_DOWNLOAD_URL_BASE := https://raw.githubusercontent.com/neovim/doc/gh-pages
CLINT_ERRORS_FILE_PATH := /reports/clint/errors.json
BUILD_TYPE ?= $(shell (type ninja > /dev/null 2>&1 && echo "Ninja") || \
echo "Unix Makefiles")
DEPS_BUILD_DIR ?= .deps
ifneq (1,$(words [$(DEPS_BUILD_DIR)]))
$(error DEPS_BUILD_DIR must not contain whitespace)
endif
ifeq (,$(BUILD_TOOL))
ifeq (Ninja,$(BUILD_TYPE))
@ -48,7 +52,7 @@ endif
ifneq (,$(findstring functionaltest-lua,$(MAKECMDGOALS)))
BUNDLED_LUA_CMAKE_FLAG := -DUSE_BUNDLED_LUA=ON
$(shell [ -x .deps/usr/bin/lua ] || rm build/.ran-*)
$(shell [ -x $(DEPS_BUILD_DIR)/usr/bin/lua ] || rm build/.ran-*)
endif
# For use where we want to make sure only a single job is run. This does issue
@ -68,20 +72,20 @@ cmake:
$(MAKE) build/.ran-cmake
build/.ran-cmake: | deps
cd build && $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) ..
cd build && $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) $(THIS_DIR)
touch $@
deps: | build/.ran-third-party-cmake
ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),)
+$(BUILD_CMD) -C .deps
+$(BUILD_CMD) -C $(DEPS_BUILD_DIR)
endif
build/.ran-third-party-cmake:
ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),)
mkdir -p .deps
cd .deps && \
mkdir -p $(DEPS_BUILD_DIR)
cd $(DEPS_BUILD_DIR) && \
$(CMAKE_PRG) -G '$(BUILD_TYPE)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \
$(DEPS_CMAKE_FLAGS) ../third-party
$(DEPS_CMAKE_FLAGS) $(THIS_DIR)/third-party
endif
mkdir -p build
touch $@
@ -124,7 +128,7 @@ clean:
$(MAKE) -C runtime/doc clean
distclean: clean
rm -rf .deps build
rm -rf $(DEPS_BUILD_DIR) build
install: | nvim
+$(BUILD_CMD) -C build install
@ -141,6 +145,11 @@ check-single-includes: build/.ran-cmake
appimage:
bash scripts/genappimage.sh
# Build an appimage with embedded update information appimage-nightly for
# nightly builds or appimage-latest for a release
appimage-%:
bash scripts/genappimage.sh $*
lint: check-single-includes clint testlint lualint
.PHONY: test testlint lualint functionaltest unittest lint clint clean distclean nvim libnvim cmake deps install appimage

View File

@ -11,10 +11,11 @@
[![codecov](https://img.shields.io/codecov/c/github/neovim/neovim.svg)](https://codecov.io/gh/neovim/neovim)
[![Coverity Scan Build](https://scan.coverity.com/projects/2227/badge.svg)](https://scan.coverity.com/projects/2227)
[![Clang Scan Build](https://neovim.io/doc/reports/clang/badge.svg)](https://neovim.io/doc/reports/clang)
[![PVS-studio Check](https://neovim.io/doc/reports/pvs/badge.svg)](https://neovim.io/doc/reports/pvs)
[![PVS-studio Check](https://neovim.io/doc/reports/pvs/badge.svg)](https://neovim.io/doc/reports/pvs/PVS-studio.html.d)
[![Packages](https://repology.org/badge/tiny-repos/neovim.svg)](https://repology.org/metapackage/neovim)
[![Debian CI](https://badges.debian.net/badges/debian/testing/neovim/version.svg)](https://buildd.debian.org/neovim)
[![Downloads](https://img.shields.io/github/downloads/neovim/neovim/total.svg?maxAge=2592000)](https://github.com/neovim/neovim/releases/)
[![Downloads](https://img.shields.io/github/downloads/neovim/neovim/total.svg?maxAge=2592001)](https://github.com/neovim/neovim/releases/)
Neovim is a project that seeks to aggressively refactor Vim in order to:
@ -34,11 +35,17 @@ Install from source
make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install
To install to a non-default location, specify `CMAKE_INSTALL_PREFIX`:
To install to a non-default location, set `CMAKE_INSTALL_PREFIX`:
make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=/full/path/"
make install
To list all targets:
cmake --build build --target help
To skip "bundled" dependencies define `USE_BUNDLED_DEPS=NO` (CMake option: `USE_BUNDLED=NO`).
See [the wiki](https://github.com/neovim/neovim/wiki/Building-Neovim) for details.
Install from package
@ -69,9 +76,6 @@ Project layout
├─ third-party/ cmake subproject to build dependencies
└─ test/ tests (see test/README.md)
- To disable `third-party/` specify `USE_BUNDLED_DEPS=NO` or `USE_BUNDLED=NO`
(CMake option).
Features
--------

View File

@ -1,7 +1,10 @@
version: '{build}'
environment:
APPVEYOR_CACHE_ENTRY_ZIP_ARGS: "-t7z -m0=lzma -mx=9"
image: Visual Studio 2017
configuration:
- MSVC_64
- MSVC_32
- MINGW_64
- MINGW_32
- MINGW_64-gcov
@ -9,10 +12,12 @@ matrix:
allow_failures:
- configuration: MINGW_64-gcov
install: []
before_build:
- ps: Install-Product node 8
build_script:
- call ci\build.bat
- powershell ci\build.ps1
cache:
- C:\msys64\var\cache\pacman\pkg -> ci\build.bat
- C:\msys64\var\cache\pacman\pkg -> ci\build.ps1
- .deps -> third-party\**
artifacts:
- path: build/Neovim.zip

View File

@ -1,9 +0,0 @@
#!/usr/bin/env bash
set -e
set -o pipefail
if [[ -n "${GCOV}" ]]; then
coveralls --gcov "$(which "${GCOV}")" --encoding iso-8859-1 || echo 'coveralls upload failed.'
bash <(curl -s https://codecov.io/bash) || echo 'codecov upload failed.'
fi

View File

@ -4,16 +4,27 @@ set -e
set -o pipefail
CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CI_DIR}/common/build.sh"
source "${CI_DIR}/common/suite.sh"
# Don't cache pip's log and selfcheck.
rm -rf "${HOME}/.cache/pip/log"
rm -f "${HOME}/.cache/pip/selfcheck.json"
echo "before_cache.sh: cache size"
du -d 2 "${HOME}/.cache" | sort -n
echo "before_cache.sh: ccache stats"
ccache -s 2>/dev/null || true
# Update the third-party dependency cache only if the build was successful.
if ended_successfully; then
rm -rf "${HOME}/.cache/nvim-deps"
mv "${DEPS_BUILD_DIR}" "${HOME}/.cache/nvim-deps"
rm -rf "${HOME}/.cache/nvim-deps-downloads"
mv "${DEPS_DOWNLOAD_DIR}" "${HOME}/.cache/nvim-deps-downloads"
touch "${CACHE_MARKER}"
echo "Updated third-party dependencies (timestamp: $(stat -c '%y' "${CACHE_MARKER}"))."
echo "Updated third-party dependencies (timestamp: $(_stat "${CACHE_MARKER}"))."
fi

View File

@ -23,17 +23,26 @@ echo 'python info:'
2>&1 pyenv versions || true
) | sed 's/^/ /'
echo "Upgrade Python 2 pip."
pip2.7 -q install --user --upgrade pip
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
echo "Install Python 3."
brew install python3
echo "Upgrade Python 3."
brew upgrade python
echo "Upgrade Python 3 pip."
pip3 -q install --user --upgrade pip
else
echo "Upgrade Python 2 pip."
pip2.7 -q install --user --upgrade pip
echo "Upgrade Python 3 pip."
# Allow failure. pyenv pip3 on travis is broken:
# https://github.com/travis-ci/travis-ci/issues/8363
pip3 -q install --user --upgrade pip || true
fi
echo "Install node (LTS)"
if [[ "${TRAVIS_OS_NAME}" == osx ]] || [ ! -f ~/.nvm/nvm.sh ]; then
curl -o ~/.nvm/nvm.sh https://raw.githubusercontent.com/creationix/nvm/master/nvm.sh
fi
source ~/.nvm/nvm.sh
nvm install --lts
nvm use --lts

View File

@ -20,6 +20,9 @@ if [[ -n "${LLVM_SYMBOLIZER}" ]] && [[ ! $(type -P "${LLVM_SYMBOLIZER}") ]]; the
exit 1
fi
# Show ccache stats so we can compare in before_cache
ccache -s 2>/dev/null || true
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
# Adds user to a dummy group.
# That allows to test changing the group of the file by `os_fchown`.

View File

@ -1,62 +0,0 @@
:: These are native MinGW builds, but they use the toolchain inside
:: MSYS2, this allows using all the dependencies and tools available
:: in MSYS2, but we cannot build inside the MSYS2 shell.
echo on
if "%CONFIGURATION%" == "MINGW_32" (
set ARCH=i686
set BITS=32
) else (
set ARCH=x86_64
set BITS=64
)
if "%CONFIGURATION%" == "MINGW_64-gcov" (
set USE_GCOV="-DUSE_GCOV=ON"
)
:: We cannot have sh.exe in the PATH (MinGW)
set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
set PATH=C:\msys64\mingw%BITS%\bin;C:\Windows\System32;C:\Windows;%PATH%
:: The default cpack in the PATH is not CMake
set PATH=C:\Program Files (x86)\CMake\bin\cpack.exe;%PATH%
:: Build third-party dependencies
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Su" || goto :error
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm --needed -S mingw-w64-%ARCH%-cmake mingw-w64-%ARCH%-perl mingw-w64-%ARCH%-diffutils mingw-w64-%ARCH%-unibilium gperf" || goto :error
:: Setup python (use AppVeyor system python)
C:\Python27\python.exe -m pip install neovim || goto :error
C:\Python35\python.exe -m pip install neovim || goto :error
:: Disambiguate python3
move c:\Python35\python.exe c:\Python35\python3.exe
set PATH=C:\Python35;C:\Python27;%PATH%
:: Sanity check
python -c "import neovim; print(str(neovim))" || goto :error
python3 -c "import neovim; print(str(neovim))" || goto :error
mkdir .deps
cd .deps
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo ..\third-party\ || goto :error
mingw32-make VERBOSE=1 || goto :error
cd ..
:: Build Neovim
mkdir build
cd build
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUSTED_OUTPUT_TYPE=nvim %USE_GCOV% -DGPERF_PRG="C:\msys64\usr\bin\gperf.exe" .. || goto :error
mingw32-make VERBOSE=1 || goto :error
bin\nvim --version || goto :error
:: Functional tests
mingw32-make functionaltest VERBOSE=1 || goto :error
if defined USE_GCOV (
C:\msys64\usr\bin\bash -lc "cd /c/projects/neovim; bash <(curl -s https://codecov.io/bash) || echo 'codecov upload failed.'"
)
:: Build artifacts
cpack -G ZIP -C RelWithDebInfo
if defined APPVEYOR_REPO_TAG_NAME cpack -G NSIS -C RelWithDebInfo
goto :EOF
:error
exit /b %errorlevel%

129
ci/build.ps1 Normal file
View File

@ -0,0 +1,129 @@
Set-PSDebug -Trace 1
$env:CONFIGURATION -match '^(?<compiler>\w+)_(?<bits>32|64)(?:-(?<option>\w+))?$'
$compiler = $Matches.compiler
$compileOption = $Matches.option
$bits = $Matches.bits
$cmakeBuildType = 'RelWithDebInfo'
$depsCmakeVars = @{
CMAKE_BUILD_TYPE = $cmakeBuildType;
}
$nvimCmakeVars = @{
CMAKE_BUILD_TYPE = $cmakeBuildType;
BUSTED_OUTPUT_TYPE = 'nvim';
}
# For pull requests, skip some build configurations to save time.
if ($env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT -and $env:CONFIGURATION -match '^(MSVC_64|MINGW_32)$') {
exit 0
}
function exitIfFailed() {
if ($LastExitCode -ne 0) {
exit $LastExitCode
}
}
if ($compiler -eq 'MINGW') {
if ($bits -eq 32) {
$arch = 'i686'
}
elseif ($bits -eq 64) {
$arch = 'x86_64'
}
if ($compileOption -eq 'gcov') {
$nvimCmakeVars['USE_GCOV'] = 'ON'
$uploadToCodecov = $true
}
# These are native MinGW builds, but they use the toolchain inside
# MSYS2, this allows using all the dependencies and tools available
# in MSYS2, but we cannot build inside the MSYS2 shell.
$cmakeGenerator = 'MinGW Makefiles'
$cmakeGeneratorArgs = 'VERBOSE=1'
# Add MinGW to the PATH
$env:PATH = "C:\msys64\mingw$bits\bin;$env:PATH"
# Build third-party dependencies
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Su" ; exitIfFailed
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm --needed -S mingw-w64-$arch-cmake mingw-w64-$arch-perl mingw-w64-$arch-diffutils mingw-w64-$arch-unibilium" ; exitIfFailed
}
elseif ($compiler -eq 'MSVC') {
$cmakeGeneratorArgs = '/verbosity:normal'
if ($bits -eq 32) {
$cmakeGenerator = 'Visual Studio 15 2017'
}
elseif ($bits -eq 64) {
$cmakeGenerator = 'Visual Studio 15 2017 Win64'
}
}
# Remove Git Unix utilities from the PATH
$env:PATH = $env:PATH.Replace('C:\Program Files\Git\usr\bin', '')
# Setup python (use AppVeyor system python)
C:\Python27\python.exe -m pip install neovim ; exitIfFailed
C:\Python35\python.exe -m pip install neovim ; exitIfFailed
# Disambiguate python3
move c:\Python35\python.exe c:\Python35\python3.exe
$env:PATH = "C:\Python35;C:\Python27;$env:PATH"
# Sanity check
python -c "import neovim; print(str(neovim))" ; exitIfFailed
python3 -c "import neovim; print(str(neovim))" ; exitIfFailed
$env:PATH = "C:\Ruby24\bin;$env:PATH"
cmd /c gem.cmd install neovim ; exitIfFailed
where.exe neovim-ruby-host.bat ; exitIfFailed
cmd /c npm.cmd install -g neovim ; exitIfFailed
where.exe neovim-node-host.cmd ; exitIfFailed
cmd /c npm link neovim
function convertToCmakeArgs($vars) {
return $vars.GetEnumerator() | foreach { "-D$($_.Key)=$($_.Value)" }
}
mkdir .deps
cd .deps
cmake -G $cmakeGenerator $(convertToCmakeArgs($depsCmakeVars)) ..\third-party\ ; exitIfFailed
cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed
cd ..
# Build Neovim
mkdir build
cd build
cmake -G $cmakeGenerator $(convertToCmakeArgs($nvimCmakeVars)) .. ; exitIfFailed
cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed
bin\nvim --version ; exitIfFailed
# Functional tests
# The $LastExitCode from MSBuild can't be trusted
$failed = $false
# Temporarily turn off tracing to reduce log file output
Set-PSDebug -Off
cmake --build . --config $cmakeBuildType --target functionaltest -- $cmakeGeneratorArgs 2>&1 |
foreach { $failed = $failed -or
$_ -match 'Running functional tests failed with error'; $_ }
Set-PSDebug -Trace 1
if ($failed) {
exit $LastExitCode
}
if ($uploadToCodecov) {
C:\msys64\usr\bin\bash -lc "cd /c/projects/neovim; bash <(curl -s https://codecov.io/bash) -c -F functionaltest || echo 'codecov upload failed.'"
}
# Old tests
$env:PATH = "C:\msys64\usr\bin;$env:PATH"
& "C:\msys64\mingw$bits\bin\mingw32-make.exe" -C $(Convert-Path ..\src\nvim\testdir) VERBOSE=1
if ($uploadToCodecov) {
C:\msys64\usr\bin\bash -lc "cd /c/projects/neovim; bash <(curl -s https://codecov.io/bash) -c -F oldtest || echo 'codecov upload failed.'"
}
# Build artifacts
cpack -G ZIP -C RelWithDebInfo
if ($env:APPVEYOR_REPO_TAG_NAME -ne $null) {
cpack -G NSIS -C RelWithDebInfo
}

View File

@ -1,5 +1,16 @@
_stat() {
if test "${TRAVIS_OS_NAME}" = osx ; then
stat -f %Sm "${@}"
else
stat -c %y "${@}"
fi
}
top_make() {
${MAKE_CMD} "$@"
echo '================================================================================'
# Travis has 1.5 virtual cores according to:
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
ninja "$@"
}
build_make() {
@ -15,28 +26,23 @@ build_deps() {
DEPS_CMAKE_FLAGS="${DEPS_CMAKE_FLAGS} -DUSE_BUNDLED_LUA=ON"
fi
rm -rf "${DEPS_BUILD_DIR}"
mkdir -p "${DEPS_BUILD_DIR}"
mkdir -p "${DEPS_DOWNLOAD_DIR}"
# If there is a valid cache and we're not forced to recompile,
# use cached third-party dependencies.
if test -f "${CACHE_MARKER}" && test "${BUILD_NVIM_DEPS}" != "true" ; then
local statcmd="stat -c '%y'"
if test "${TRAVIS_OS_NAME}" = osx ; then
statcmd="stat -f '%Sm'"
fi
echo "Using third-party dependencies from Travis's cache (last updated: $(${statcmd} "${CACHE_MARKER}"))."
mkdir -p "$(dirname "${DEPS_BUILD_DIR}")"
mv "${HOME}/.cache/nvim-deps" "${DEPS_BUILD_DIR}"
else
mkdir -p "${DEPS_BUILD_DIR}"
# Use cached dependencies if $CACHE_MARKER exists.
if test "${CACHE_ENABLE}" = "false" ; then
export CCACHE_RECACHE=1
elif test -f "${CACHE_MARKER}" ; then
echo "Using third-party dependencies from Travis cache (last update: $(_stat "${CACHE_MARKER}"))."
cp -r "${HOME}/.cache/nvim-deps"/. "${DEPS_BUILD_DIR}"
cp -r "${HOME}/.cache/nvim-deps-downloads" "${DEPS_DOWNLOAD_DIR}"
fi
# Even if we're using cached dependencies, run CMake and make to
# update CMake configuration and update to newer deps versions.
cd "${DEPS_BUILD_DIR}"
echo "Configuring with '${DEPS_CMAKE_FLAGS}'."
CC= cmake ${DEPS_CMAKE_FLAGS} "${TRAVIS_BUILD_DIR}/third-party/"
CC= cmake -G Ninja ${DEPS_CMAKE_FLAGS} "${TRAVIS_BUILD_DIR}/third-party/"
if ! top_make; then
exit 1
@ -56,7 +62,7 @@ prepare_build() {
mkdir -p "${BUILD_DIR}"
cd "${BUILD_DIR}"
echo "Configuring with '${CMAKE_FLAGS} $@'."
cmake ${CMAKE_FLAGS} "$@" "${TRAVIS_BUILD_DIR}"
cmake -G Ninja ${CMAKE_FLAGS} "$@" "${TRAVIS_BUILD_DIR}"
}
build_nvim() {
@ -71,9 +77,11 @@ build_nvim() {
exit 1
fi
echo "Building nvim-test."
if ! top_make nvim-test ; then
exit 1
if test "${FUNCTIONALTEST}" != "functionaltest-lua"; then
echo "Building nvim-test."
if ! top_make nvim-test ; then
exit 1
fi
fi
fi
@ -87,3 +95,12 @@ build_nvim() {
cd "${TRAVIS_BUILD_DIR}"
}
macos_rvm_dance() {
# neovim-ruby gem requires a ruby newer than the macOS default.
source ~/.rvm/scripts/rvm
rvm get stable --auto-dotfiles
rvm reload
rvm use 2.2.5
rvm use
}

View File

@ -1,6 +1,15 @@
. "${CI_DIR}/common/build.sh"
. "${CI_DIR}/common/suite.sh"
submit_coverage() {
if [ -n "${GCOV}" ]; then
if curl --fail --output codecov.bash --silent https://codecov.io/bash; then
bash codecov.bash -c -F "$1" || echo "codecov upload failed."
rm -f codecov.bash
fi
fi
}
print_core() {
local app="$1"
local core="$2"
@ -71,7 +80,9 @@ valgrind_check() {
}
asan_check() {
check_logs "${1}" "*san.*"
if test "${CLANG_SANITIZER}" = "ASAN_UBSAN" ; then
check_logs "${1}" "*san.*" | asan_symbolize
fi
}
run_unittests() {(
@ -80,6 +91,7 @@ run_unittests() {(
if ! build_make unittest ; then
fail 'unittests' F 'Unit tests failed'
fi
submit_coverage unittest
check_core_dumps "$(which luajit)"
exit_suite
)}
@ -90,6 +102,7 @@ run_functionaltests() {(
if ! build_make ${FUNCTIONALTEST}; then
fail 'functionaltests' F 'Functional tests failed'
fi
submit_coverage functionaltest
asan_check "${LOG_DIR}"
valgrind_check "${LOG_DIR}"
check_core_dumps
@ -103,6 +116,7 @@ run_oldtests() {(
reset
fail 'oldtests' F 'Legacy tests failed'
fi
submit_coverage oldtest
asan_check "${LOG_DIR}"
valgrind_check "${LOG_DIR}"
check_core_dumps

View File

@ -8,18 +8,29 @@ if [[ "${CI_TARGET}" == lint ]]; then
fi
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
brew install ninja
brew install gettext
brew reinstall -s libtool
brew install ccache
export PATH="/usr/local/opt/ccache/libexec:$PATH"
fi
# Use default CC to avoid compilation problems when installing Python modules.
echo "Install neovim module and coveralls for Python 2."
CC=cc pip2.7 -q install --user --upgrade neovim cpp-coveralls
echo "Install neovim module for Python 3."
# Allow failure. pyenv pip3 on travis is broken:
# https://github.com/travis-ci/travis-ci/issues/8363
CC=cc pip3 -q install --user --upgrade neovim || true
echo "Install neovim RubyGem."
gem install --no-document --version ">= 0.2.0" neovim
if ! [ "${TRAVIS_OS_NAME}" = osx ] ; then
# Update PATH for pip.
export PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:$PATH"
# Use default CC to avoid compilation problems when installing Python modules.
echo "Install neovim module for Python 2."
CC=cc pip2.7 -q install --user --upgrade neovim
echo "Install neovim RubyGem."
gem install --no-document --version ">= 0.2.0" neovim
fi
echo "Install neovim npm package"
npm install -g neovim
npm link neovim

View File

@ -10,19 +10,19 @@ source "${CI_DIR}/common/suite.sh"
enter_suite 'clint'
run_test 'top_make clint-full' clint
run_test 'make clint-full' clint
exit_suite --continue
enter_suite 'testlint'
run_test 'top_make testlint' testlint
run_test 'make testlint' testlint
exit_suite --continue
enter_suite 'lualint'
run_test 'top_make lualint' lualint
run_test 'make lualint' lualint
exit_suite --continue
@ -31,7 +31,7 @@ enter_suite single-includes
CLICOLOR_FORCE=1 run_test_wd \
--allow-hang \
10s \
'top_make check-single-includes' \
'make check-single-includes' \
'csi_clean' \
single-includes

View File

@ -22,7 +22,9 @@ enter_suite tests
if test "$CLANG_SANITIZER" != "TSAN" ; then
# Additional threads are only created when the builtin UI starts, which
# doesn't happen in the unit/functional tests
run_test run_unittests
if test "${FUNCTIONALTEST}" != "functionaltest-lua"; then
run_test run_unittests
fi
run_test run_functionaltests
fi
run_test run_oldtests

View File

@ -8,7 +8,7 @@
include(LibFindMacros)
find_path(ICONV_INCLUDE_DIR NAMES iconv.h)
find_library(ICONV_LIBRARY NAMES iconv)
find_library(ICONV_LIBRARY NAMES iconv libiconv)
set(Iconv_PROCESS_INCLUDES ICONV_INCLUDE_DIR)
if(ICONV_LIBRARY)

View File

@ -27,16 +27,15 @@ find_path(LibIntl_INCLUDE_DIR
)
find_library(LibIntl_LIBRARY
NAMES intl libintl.a
NAMES intl libintl
)
if (LibIntl_INCLUDE_DIR)
set(CMAKE_REQUIRED_INCLUDES "${LibIntl_INCLUDE_DIR}")
endif()
# This is required because some operating systems don't have a separate
# libintl--it is built into glibc. So we only need to specify the library
# if one was actually found.
# On some systems (linux+glibc) libintl is passively available.
# So only specify the library if one was found.
if (LibIntl_LIBRARY)
set(CMAKE_REQUIRED_LIBRARIES "${LibIntl_LIBRARY}")
endif()
@ -53,6 +52,13 @@ int main(int argc, char** argv) {
}" HAVE_WORKING_LIBINTL)
if (HAVE_WORKING_LIBINTL)
# On some systems (linux+glibc) libintl is passively available.
# If HAVE_WORKING_LIBINTL then we consider the requirement satisfied.
# Unset REQUIRED so that libfind_process(LibIntl) can proceed.
if(LibIntl_FIND_REQUIRED)
unset(LibIntl_FIND_REQUIRED)
endif()
check_variable_exists(_nl_msg_cat_cntr HAVE_NL_MSG_CAT_CNTR)
endif()

View File

@ -31,11 +31,7 @@ if(LIBUV_USE_STATIC)
"${CMAKE_STATIC_LIBRARY_PREFIX}uv${CMAKE_STATIC_LIBRARY_SUFFIX}")
endif(LIBUV_USE_STATIC)
if(MSVC)
list(APPEND LIBUV_NAMES libuv)
else()
list(APPEND LIBUV_NAMES uv)
endif()
list(APPEND LIBUV_NAMES uv)
find_library(LIBUV_LIBRARY NAMES ${LIBUV_NAMES}
HINTS ${PC_LIBUV_LIBDIR} ${PC_LIBUV_LIBRARY_DIRS}

View File

@ -44,7 +44,7 @@ endif()
if(MSVC)
# The import library for the msgpack DLL has a different name
list(APPEND MSGPACK_NAMES msgpack_import)
list(APPEND MSGPACK_NAMES msgpackc_import)
else()
list(APPEND MSGPACK_NAMES msgpackc msgpack)
endif()

View File

@ -38,6 +38,7 @@ function(get_compile_flags _compile_flags)
get_directory_property(include_directories_list
DIRECTORY "src/nvim"
INCLUDE_DIRECTORIES)
list(REMOVE_DUPLICATES include_directories_list)
foreach(include_directory ${include_directories_list})
set(include_directories "${include_directories} -I${include_directory}")
endforeach()

View File

@ -4,9 +4,8 @@
# Check if a module is available in Lua
function(check_lua_module LUA_PRG_PATH MODULE RESULT_VAR)
execute_process(COMMAND ${LUA_PRG_PATH} -e "require('${MODULE}')"
RESULT_VARIABLE module_missing
ERROR_QUIET)
execute_process(COMMAND ${LUA_PRG_PATH} -l "${MODULE}" -e ""
RESULT_VARIABLE module_missing)
if(module_missing)
set(${RESULT_VAR} False PARENT_SCOPE)
else()

View File

@ -24,12 +24,12 @@ if(BUSTED_OUTPUT_TYPE STREQUAL junit)
set(EXTRA_ARGS OUTPUT_FILE ${BUILD_DIR}/${TEST_TYPE}test-junit.xml)
endif()
if(DEFINED ENV{TEST_TAG})
if(DEFINED ENV{TEST_TAG} AND NOT "$ENV{TEST_TAG}" STREQUAL "")
set(TEST_TAG "--tags=$ENV{TEST_TAG}")
endif()
if(DEFINED ENV{TEST_FILTER})
set(TEST_TAG "--filter=$ENV{TEST_FILTER}")
if(DEFINED ENV{TEST_FILTER} AND NOT "$ENV{TEST_FILTER}" STREQUAL "")
set(TEST_FILTER "--filter=$ENV{TEST_FILTER}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${WORKING_DIR}/Xtest-tmpdir)
@ -38,7 +38,7 @@ set(ENV{SYSTEM_NAME} ${SYSTEM_NAME})
execute_process(
COMMAND ${BUSTED_PRG} ${TEST_TAG} ${TEST_FILTER} -v -o ${BUSTED_OUTPUT_TYPE}
--lua=${LUA_PRG} --lazy --helper=${TEST_DIR}/${TEST_TYPE}/preload.lua
--lpath=${BUILD_DIR}/?.lua ${TEST_PATH}
--lpath=${BUILD_DIR}/?.lua --lpath=?.lua ${TEST_PATH}
WORKING_DIRECTORY ${WORKING_DIR}
ERROR_VARIABLE err
RESULT_VARIABLE res

View File

@ -1,6 +1,6 @@
codecov:
notify:
require_ci_to_pass: yes
require_ci_to_pass: no
ci:
- appveyor
- travis

View File

@ -12,6 +12,11 @@ check_type_size("size_t" SIZEOF_SIZE_T)
check_type_size("long long" SIZEOF_LONG_LONG)
check_type_size("void *" SIZEOF_VOID_PTR)
if (CMAKE_HOST_SYSTEM_VERSION MATCHES ".*-Microsoft")
# Windows Subsystem for Linux
set(HAVE_WSL 1)
endif()
check_symbol_exists(_NSGetEnviron crt_externs.h HAVE__NSGETENVIRON)
# Headers

View File

@ -48,6 +48,7 @@
#cmakedefine HAVE_UTIME_H
#cmakedefine HAVE_UTIMES
#cmakedefine HAVE_WORKING_LIBINTL
#cmakedefine HAVE_WSL
#cmakedefine UNIX
#cmakedefine USE_FNAME_CASE
#cmakedefine HAVE_SYS_UIO_H
@ -62,6 +63,7 @@
#ifndef UNIT_TESTING
#cmakedefine HAVE_JEMALLOC
#cmakedefine LOG_LIST_ACTIONS
#endif
#cmakedefine HAVE_BE64TOH

View File

@ -1,3 +1,5 @@
// This is an open source non-commercial project. Dear PVS-Studio, please check
// it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
#include "${PROJECT_SOURCE_DIR}/src/nvim/vim.h"
char *default_vim_dir = "${CMAKE_INSTALL_FULL_DATAROOTDIR}/nvim";
char *default_vimruntime_dir = "";

View File

@ -36,7 +36,6 @@
# them.
#
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_BUSTED=OFF
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_DEPS=OFF
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_JEMALLOC=OFF
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LIBTERMKEY=OFF
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LIBUV=OFF
@ -45,6 +44,10 @@
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LUAROCKS=OFF
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_MSGPACK=OFF
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_UNIBILIUM=OFF
#
# Or disable all bundled dependencies at once.
#
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED=OFF
# By default, bundled libraries are statically linked to nvim.
# This has no effect for non-bundled deps, which are always dynamically linked.

View File

@ -1,4 +1,4 @@
.Dd January 28, 2016
.Dd December 17, 2017
.Dt NVIM 1
.Os
.Sh NAME
@ -25,7 +25,7 @@ To enter commands in
type a colon
.Pq Sq \&:
which is also used in this manual to denote commands.
For more information, consult the on-line help system with the
For more information, consult the online help with the
.Ic :help
command.
.Bl -tag -width Fl
@ -54,7 +54,7 @@ If
is a function name, the file containing that function is opened
with the cursor positioned at the start of the function.
See
.Ic :help tag-commands .
.Ic ":help tag-commands" .
.It Fl q Op Ar errorfile
QuickFix mode.
Display the first error in
@ -67,82 +67,70 @@ Further errors can be jumped to with the
.Ic :cnext
command.
See
.Ic :help quickfix .
.Ic ":help quickfix" .
.It There are a number of other options:
.It Fl -
Interpret all further arguments as files.
Can be used to edit files starting with a hyphen
.Pq Sq - .
.It Fl -literal
Interpret filenames literally, that is, do not expand wildcards.
Has no effect on Unix-like systems, where the shell expands wildcards.
.It Fl e
Ex mode.
Ex mode. Reads stdin as Ex commands.
See
.Ic :help Ex-mode .
.Ic ":help Ex-mode" .
.It Fl E
Improved Ex mode.
Ex mode. Reads stdin as text.
See
.Ic :help gQ .
.It Fl s
Silent mode.
Only takes effect if
.Fl e
or
.Fl E
is specified before it.
.It Fl es
Silent (batch) mode. Reads stdin as Ex commands.
.It Fl \&Es
Silent (batch) mode. Reads stdin as text.
.It Fl d
Diff mode.
Show the difference between two to four files, similar to
.Xr sdiff 1 .
See
.Ic :help diff .
.Ic ":help diff" .
.It Fl R
Read-only mode.
Sets the option 'readonly'.
Sets the 'readonly' option.
Implies
.Fl n .
Buffers can still be edited, but cannot be written to disk if already
associated with a file.
To overwrite a file, add an exclamation mark to the needed Ex command, such as
To overwrite a file, add an exclamation mark to the relevant Ex command, such as
.Ic :w! .
See
.Ic :help 'readonly' .
.Ic ":help 'readonly'" .
.It Fl Z
Restricted mode.
Disable commands that make use of an external shell.
.It Fl m
Disable file modifications.
Unsets the option 'write'.
Resets the 'write' option, to disable file modifications.
Writing to a file is disabled, but buffers can still be modified.
.It Fl M
Disable file and buffer modifications.
Unsets the options 'write' and 'modifiable'.
Note that these options can be set to re-enable making modifications.
Resets the 'write' and 'modifiable' options, to disable file and buffer
modifications.
.It Fl b
Binary mode.
See
.Ic :help edit-binary .
.Ic ":help edit-binary" .
.It Fl l
Lisp mode.
Sets the options 'lisp' and 'showmatch'.
Sets the 'lisp' and 'showmatch' options.
.It Fl A
Arabic mode.
Sets the option 'arabic'.
.It Fl F
Farsi mode.
Sets the options 'fkmap' and 'rightleft'.
Sets the 'arabic' option.
.It Fl H
Hebrew mode.
Sets the options 'hkmap' and 'rightleft'.
Sets the 'hkmap' and 'rightleft' options.
.It Fl V Ns Oo Ar N Oc Ns Op Ar file
Verbose mode.
Print messages about which files are being sourced and for reading and
writing a ShaDa file.
.Ar N
is the value for the 'verbose' option; defaults to
.Cm 10
if omitted.
is the 'verbose' level; defaults to
.Cm 10.
If
.Ar file
is specified, append messages to
@ -153,9 +141,9 @@ Debugging mode.
Started when executing the first command from a script.
.It Fl n
Disable the use of swap files.
Sets the option 'updatecount' to
Sets the 'updatecount' option to
.Cm 0 .
Can be useful for editing file(s) on a slow medium.
Can be useful for editing files on a slow medium.
.It Fl r Op Ar file
Recovery mode.
If
@ -169,20 +157,20 @@ The swap file has the same name as the file it's associated with, but with
.Sq .swp
appended.
See
.Ic :help recovery .
.Ic ":help recovery" .
.It Fl L Op Ar file
Alias for
.Fl r .
.It Fl u Ar vimrc
Use
.Ar vimrc
instead of the default of
instead of the default
.Pa ~/.config/nvim/init.vim .
If
.Ar vimrc
is
.Cm NORC ,
do not load any initialization files (excluding plugins),
do not load any initialization files (except plugins),
and do not attempt to parse environment variables.
If
.Ar vimrc
@ -190,11 +178,11 @@ is
.Cm NONE ,
loading plugins is also skipped.
See
.Ic :help initialization .
.Ic ":help initialization" .
.It Fl i Ar shada
Use
.Ar shada
instead of the default of
instead of the default
.Pa ~/.local/share/nvim/shada/main.shada .
If
.Ar shada
@ -202,7 +190,7 @@ is
.Cm NONE ,
do not read or write a ShaDa file.
See
.Ic :help shada .
.Ic ":help shada" .
.It Fl -noplugin
Skip loading plugins.
Implied by
@ -233,7 +221,6 @@ For the first file, position the cursor on line
If
.Ar linenum
is omitted, position the cursor on the last line of the file.
Note that
.Cm +5
and
.Cm -c 5
@ -246,8 +233,7 @@ For the first file, position the cursor on the first occurrence of
.Ar pattern .
If
.Ar pattern
is omitted, the most recently used search pattern is used (if there is one).
Note that
is omitted, the most recent search pattern is used (if any).
.Cm +/foo
and
.Cm -c /foo
@ -258,7 +244,7 @@ and
inside
.Nm .
See
.Ic :help search-pattern .
.Ic ":help search-pattern" .
.It Fl c Ar command
Execute
.Ar command
@ -268,10 +254,9 @@ Up to 10 instances of
or
.Cm +
can be used.
Note that
.Qq Cm +set si
.Qq Cm +foo
and
.Cm -c \(dqset si\(dq
.Cm -c \(dqfoo\(dq
are equivalent.
.It Fl -cmd Ar command
Like
@ -292,16 +277,16 @@ cannot start with a hyphen
.Pq Sq - .
If
.Ar session
is omitted, then
.Pa Session.vim ,
if found, is used.
is omitted then
.Pa Session.vim
is used, if found.
See
.Ic :help session-file .
.Ic ":help session-file" .
.It Fl s Ar scriptin
Read normal mode commands from
.Ar scriptin .
The same can be done with the command
.Ic :source! scriptin .
.Ic ":source! scriptin" .
If the end of the file is reached before
.Nm
exits, further characters are read from the keyboard.
@ -329,6 +314,8 @@ Implies
.Fl -headless .
.It Fl -headless
Do not start a user interface.
.It Fl -listen Ar address
Start RPC server on this pipe or TCP socket.
.It Fl h , -help
Print usage information and exit.
.It Fl v , -version
@ -336,27 +323,30 @@ Print version information and exit.
.El
.Sh ENVIRONMENT
.Bl -tag -width Fl
.It Ev NVIM_LOG_FILE
Low-level log file, usually found at ~/.local/share/nvim/log. See :help
$NVIM_LOG_FILE.
.It Ev VIM
Used to locate various user files, such as the user's init.vim.
Used to locate user files, such as init.vim.
System-dependent, see :help $VIM.
.It Ev VIMRUNTIME
Used to locate run time files, such as on-line documentation and
syntax highlighting definitions.
Used to locate runtime files (documentation, syntax highlighting, etc.).
.It Ev XDG_CONFIG_HOME
Path to use for the user-local configuration directory, see
Path to the user-local configuration directory, see
.Sx FILES .
Defaults to
.Pa ~/.config
if not set.
.Pa ~/.config .
See :help xdg.
.It Ev XDG_DATA_HOME
Like
.Ev XDG_CONFIG_HOME ,
but used to store data not generally edited by the user,
namely swap, backup, and ShaDa files.
Defaults to
.Pa ~/.local/share
if not set.
.Pa ~/.local/share .
See :help xdg.
.It Ev VIMINIT
A string of Ex commands to be executed at startup.
Ex commands to be executed at startup.
For example, the command to quit is
.Ic :q ,
so to have
@ -366,50 +356,43 @@ quit immediately after starting, set
to
.Cm q .
See
.Ic :help VIMINIT .
.Ic ":help VIMINIT" .
.It Ev SHELL
Used to set the 'shell' option, which determines the shell used by the
.Ic :terminal
command.
Used to initialize the 'shell' option, which decides the default shell used by
features like
.Ic :terminal ,
.Ic :! , and
.Ic system() .
.El
.Sh FILES
.Bl -tag -width "~/.config/nvim/init.vim"
.It Pa ~/.config/nvim/init.vim
The user-local
User-local
.Nm
configuration file.
See
.Ev XDG_CONFIG_HOME
above.
.It Pa ~/.config/nvim
The user-local
User-local
.Nm
configuration directory.
See
.Ev XDG_CONFIG_HOME
above.
See also
.Ev XDG_CONFIG_HOME .
.It Pa $VIM/sysinit.vim
The system-global
System-global
.Nm
configuration file.
.It Pa /usr/local/share/nvim
The system-global
System-global
.Nm
runtime directory.
.El
.Sh AUTHORS
.Nm
was started by
.An Thiago de Arruda ,
with a lot of help from others.
.Pp
Nvim was started by
.An Thiago de Arruda .
Most of Vim was written by
.An -nosplit
.An Bram Moolenaar ,
with a lot of help from others.
.An Bram Moolenaar .
See
.Ic :help credits .
.Pp
.Ic ":help credits" .
Vim is based on Stevie, worked on by
.An Tim Thompson ,
.An Tony Andrews ,

View File

@ -21,17 +21,13 @@ add_custom_command(OUTPUT ${GENERATED_SYN_VIM}
${FUNCS_DATA}
)
if(POLICY CMP0054)
cmake_policy(SET CMP0054 OLD)
endif()
file(GLOB PACKAGES ${PROJECT_SOURCE_DIR}/runtime/pack/dist/opt/*)
set(GENERATED_PACKAGE_TAGS)
foreach(PACKAGE ${PACKAGES})
get_filename_component(PACKNAME ${PACKAGE} NAME)
file(GLOB "${PACKNAME}_DOC_FILES" ${PACKAGE}/doc/*.txt)
if("${PACKNAME}_DOC_FILES")
if(${PACKNAME}_DOC_FILES)
file(MAKE_DIRECTORY ${GENERATED_PACKAGE_DIR}/${PACKNAME})
add_custom_target("${PACKNAME}-tags"
COMMAND ${CMAKE_COMMAND} -E copy_directory
@ -42,6 +38,7 @@ foreach(PACKAGE ${PACKAGES})
nvim
WORKING_DIRECTORY "${GENERATED_PACKAGE_DIR}/${PACKNAME}"
)
add_dependencies(${PACKNAME}-tags nvim_runtime_deps)
add_custom_command(OUTPUT "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags"
DEPENDS
@ -71,7 +68,7 @@ foreach(DF ${DOCFILES})
endforeach()
add_custom_target(helptags
COMMAND ${CMAKE_COMMAND} -E remove_directory ${GENERATED_RUNTIME_DIR}/doc
COMMAND ${CMAKE_COMMAND} -E remove ${GENERATED_RUNTIME_DIR}/doc/*
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/runtime/doc ${GENERATED_RUNTIME_DIR}/doc
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
@ -80,6 +77,7 @@ add_custom_target(helptags
nvim
WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}"
)
add_dependencies(helptags nvim_runtime_deps)
add_custom_command(OUTPUT ${GENERATED_HELP_TAGS}
DEPENDS
@ -137,7 +135,8 @@ endforeach()
file(GLOB_RECURSE RUNTIME_FILES
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
*.vim *.dict *.py *.rb *.ps *.tutor)
rgb.txt
*.vim *.lua *.dict *.py *.rb *.ps *.spl *.tutor *.tutor.json)
foreach(F ${RUNTIME_FILES})
get_filename_component(BASEDIR ${F} PATH)

741
runtime/autoload/dist/ft.vim vendored Normal file
View File

@ -0,0 +1,741 @@
" Vim functions for file type detection
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2017 Nov 11
" These functions are moved here from runtime/filetype.vim to make startup
" faster.
" Line continuation is used here, remove 'C' from 'cpoptions'
let s:cpo_save = &cpo
set cpo&vim
func dist#ft#Check_inp()
if getline(1) =~ '^\*'
setf abaqus
else
let n = 1
if line("$") > 500
let nmax = 500
else
let nmax = line("$")
endif
while n <= nmax
if getline(n) =~? "^header surface data"
setf trasys
break
endif
let n = n + 1
endwhile
endif
endfunc
" This function checks for the kind of assembly that is wanted by the user, or
" can be detected from the first five lines of the file.
func dist#ft#FTasm()
" make sure b:asmsyntax exists
if !exists("b:asmsyntax")
let b:asmsyntax = ""
endif
if b:asmsyntax == ""
call dist#ft#FTasmsyntax()
endif
" if b:asmsyntax still isn't set, default to asmsyntax or GNU
if b:asmsyntax == ""
if exists("g:asmsyntax")
let b:asmsyntax = g:asmsyntax
else
let b:asmsyntax = "asm"
endif
endif
exe "setf " . fnameescape(b:asmsyntax)
endfunc
func dist#ft#FTasmsyntax()
" see if file contains any asmsyntax=foo overrides. If so, change
" b:asmsyntax appropriately
let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
\" ".getline(5)." "
let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
if match != ''
let b:asmsyntax = match
elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
let b:asmsyntax = "vmasm"
endif
endfunc
" Check if one of the first five lines contains "VB_Name". In that case it is
" probably a Visual Basic file. Otherwise it's assumed to be "alt" filetype.
func dist#ft#FTVB(alt)
if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
setf vb
else
exe "setf " . a:alt
endif
endfunc
func dist#ft#FTbtm()
if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm
setf dosbatch
else
setf btm
endif
endfunc
func dist#ft#BindzoneCheck(default)
if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
setf bindzone
elseif a:default != ''
exe 'setf ' . a:default
endif
endfunc
func dist#ft#FTlpc()
if exists("g:lpc_syntax_for_c")
let lnum = 1
while lnum <= 12
if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)'
setf lpc
return
endif
let lnum = lnum + 1
endwhile
endif
setf c
endfunc
func dist#ft#FTheader()
if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
if exists("g:c_syntax_for_h")
setf objc
else
setf objcpp
endif
elseif exists("g:c_syntax_for_h")
setf c
elseif exists("g:ch_syntax_for_h")
setf ch
else
setf cpp
endif
endfunc
" This function checks if one of the first ten lines start with a '@'. In
" that case it is probably a change file.
" If the first line starts with # or ! it's probably a ch file.
" If a line has "main", "include", "//" ir "/*" it's probably ch.
" Otherwise CHILL is assumed.
func dist#ft#FTchange()
let lnum = 1
while lnum <= 10
if getline(lnum)[0] == '@'
setf change
return
endif
if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!')
setf ch
return
endif
if getline(lnum) =~ "MODULE"
setf chill
return
endif
if getline(lnum) =~ 'main\s*(\|#\s*include\|//'
setf ch
return
endif
let lnum = lnum + 1
endwhile
setf chill
endfunc
func dist#ft#FTent()
" This function checks for valid cl syntax in the first five lines.
" Look for either an opening comment, '#', or a block start, '{".
" If not found, assume SGML.
let lnum = 1
while lnum < 6
let line = getline(lnum)
if line =~ '^\s*[#{]'
setf cl
return
elseif line !~ '^\s*$'
" Not a blank line, not a comment, and not a block start,
" so doesn't look like valid cl code.
break
endif
let lnum = lnum + 1
endw
setf dtd
endfunc
func dist#ft#EuphoriaCheck()
if exists('g:filetype_euphoria')
exe 'setf ' . g:filetype_euphoria
else
setf euphoria3
endif
endfunc
func dist#ft#DtraceCheck()
let lines = getline(1, min([line("$"), 100]))
if match(lines, '^module\>\|^import\>') > -1
" D files often start with a module and/or import statement.
setf d
elseif match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
setf dtrace
else
setf d
endif
endfunc
func dist#ft#FTe()
if exists('g:filetype_euphoria')
exe 'setf ' . g:filetype_euphoria
else
let n = 1
while n < 100 && n < line("$")
if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
setf specman
return
endif
let n = n + 1
endwhile
setf eiffel
endif
endfunc
" Distinguish between HTML, XHTML and Django
func dist#ft#FThtml()
let n = 1
while n < 10 && n < line("$")
if getline(n) =~ '\<DTD\s\+XHTML\s'
setf xhtml
return
endif
if getline(n) =~ '{%\s*\(extends\|block\|load\)\>\|{#\s\+'
setf htmldjango
return
endif
let n = n + 1
endwhile
setf html
endfunc
" Distinguish between standard IDL and MS-IDL
func dist#ft#FTidl()
let n = 1
while n < 50 && n < line("$")
if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
setf msidl
return
endif
let n = n + 1
endwhile
setf idl
endfunc
" Distinguish between "default" and Cproto prototype file. */
func dist#ft#ProtoCheck(default)
" Cproto files have a comment in the first line and a function prototype in
" the second line, it always ends in ";". Indent files may also have
" comments, thus we can't match comments to see the difference.
" IDL files can have a single ';' in the second line, require at least one
" chacter before the ';'.
if getline(2) =~ '.;$'
setf cpp
else
exe 'setf ' . a:default
endif
endfunc
func dist#ft#FTm()
let n = 1
let saw_comment = 0 " Whether we've seen a multiline comment leader.
while n < 100
let line = getline(n)
if line =~ '^\s*/\*'
" /* ... */ is a comment in Objective C and Murphi, so we can't conclude
" it's either of them yet, but track this as a hint in case we don't see
" anything more definitive.
let saw_comment = 1
endif
if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|//\)'
setf objc
return
endif
if line =~ '^\s*%'
setf matlab
return
endif
if line =~ '^\s*(\*'
setf mma
return
endif
if line =~ '^\c\s*\(\(type\|var\)\>\|--\)'
setf murphi
return
endif
let n = n + 1
endwhile
if saw_comment
" We didn't see anything definitive, but this looks like either Objective C
" or Murphi based on the comment leader. Assume the former as it is more
" common.
setf objc
elseif exists("g:filetype_m")
" Use user specified default filetype for .m
exe "setf " . g:filetype_m
else
" Default is matlab
setf matlab
endif
endfunc
func dist#ft#FTmms()
let n = 1
while n < 10
let line = getline(n)
if line =~ '^\s*\(%\|//\)' || line =~ '^\*'
setf mmix
return
endif
if line =~ '^\s*#'
setf make
return
endif
let n = n + 1
endwhile
setf mmix
endfunc
" This function checks if one of the first five lines start with a dot. In
" that case it is probably an nroff file: 'filetype' is set and 1 is returned.
func dist#ft#FTnroff()
if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
setf nroff
return 1
endif
return 0
endfunc
func dist#ft#FTmm()
let n = 1
while n < 10
let line = getline(n)
if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\)'
setf objcpp
return
endif
let n = n + 1
endwhile
setf nroff
endfunc
func dist#ft#FTpl()
if exists("g:filetype_pl")
exe "setf " . g:filetype_pl
else
" recognize Prolog by specific text in the first non-empty line
" require a blank after the '%' because Perl uses "%list" and "%translate"
let l = getline(nextnonblank(1))
if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-'
setf prolog
else
setf perl
endif
endif
endfunc
func dist#ft#FTinc()
if exists("g:filetype_inc")
exe "setf " . g:filetype_inc
else
let lines = getline(1).getline(2).getline(3)
if lines =~? "perlscript"
setf aspperl
elseif lines =~ "<%"
setf aspvbs
elseif lines =~ "<?"
setf php
else
call dist#ft#FTasmsyntax()
if exists("b:asmsyntax")
exe "setf " . fnameescape(b:asmsyntax)
else
setf pov
endif
endif
endif
endfunc
func dist#ft#FTprogress_cweb()
if exists("g:filetype_w")
exe "setf " . g:filetype_w
return
endif
if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE'
setf progress
else
setf cweb
endif
endfunc
func dist#ft#FTprogress_asm()
if exists("g:filetype_i")
exe "setf " . g:filetype_i
return
endif
" This function checks for an assembly comment the first ten lines.
" If not found, assume Progress.
let lnum = 1
while lnum <= 10 && lnum < line('$')
let line = getline(lnum)
if line =~ '^\s*;' || line =~ '^\*'
call dist#ft#FTasm()
return
elseif line !~ '^\s*$' || line =~ '^/\*'
" Not an empty line: Doesn't look like valid assembly code.
" Or it looks like a Progress /* comment
break
endif
let lnum = lnum + 1
endw
setf progress
endfunc
func dist#ft#FTprogress_pascal()
if exists("g:filetype_p")
exe "setf " . g:filetype_p
return
endif
" This function checks for valid Pascal syntax in the first ten lines.
" Look for either an opening comment or a program start.
" If not found, assume Progress.
let lnum = 1
while lnum <= 10 && lnum < line('$')
let line = getline(lnum)
if line =~ '^\s*\(program\|unit\|procedure\|function\|const\|type\|var\)\>'
\ || line =~ '^\s*{' || line =~ '^\s*(\*'
setf pascal
return
elseif line !~ '^\s*$' || line =~ '^/\*'
" Not an empty line: Doesn't look like valid Pascal code.
" Or it looks like a Progress /* comment
break
endif
let lnum = lnum + 1
endw
setf progress
endfunc
func dist#ft#FTr()
let max = line("$") > 50 ? 50 : line("$")
for n in range(1, max)
" Rebol is easy to recognize, check for that first
if getline(n) =~? '\<REBOL\>'
setf rebol
return
endif
endfor
for n in range(1, max)
" R has # comments
if getline(n) =~ '^\s*#'
setf r
return
endif
" Rexx has /* comments */
if getline(n) =~ '^\s*/\*'
setf rexx
return
endif
endfor
" Nothing recognized, use user default or assume Rexx
if exists("g:filetype_r")
exe "setf " . g:filetype_r
else
" Rexx used to be the default, but R appears to be much more popular.
setf r
endif
endfunc
func dist#ft#McSetf()
" Rely on the file to start with a comment.
" MS message text files use ';', Sendmail files use '#' or 'dnl'
for lnum in range(1, min([line("$"), 20]))
let line = getline(lnum)
if line =~ '^\s*\(#\|dnl\)'
setf m4 " Sendmail .mc file
return
elseif line =~ '^\s*;'
setf msmessages " MS Message text file
return
endif
endfor
setf m4 " Default: Sendmail .mc file
endfunc
" Called from filetype.vim and scripts.vim.
func dist#ft#SetFileTypeSH(name)
if expand("<amatch>") =~ g:ft_ignore_pat
return
endif
if a:name =~ '\<csh\>'
" Some .sh scripts contain #!/bin/csh.
call dist#ft#SetFileTypeShell("csh")
return
elseif a:name =~ '\<tcsh\>'
" Some .sh scripts contain #!/bin/tcsh.
call dist#ft#SetFileTypeShell("tcsh")
return
elseif a:name =~ '\<zsh\>'
" Some .sh scripts contain #!/bin/zsh.
call dist#ft#SetFileTypeShell("zsh")
return
elseif a:name =~ '\<ksh\>'
let b:is_kornshell = 1
if exists("b:is_bash")
unlet b:is_bash
endif
if exists("b:is_sh")
unlet b:is_sh
endif
elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>'
let b:is_bash = 1
if exists("b:is_kornshell")
unlet b:is_kornshell
endif
if exists("b:is_sh")
unlet b:is_sh
endif
elseif a:name =~ '\<sh\>'
let b:is_sh = 1
if exists("b:is_kornshell")
unlet b:is_kornshell
endif
if exists("b:is_bash")
unlet b:is_bash
endif
endif
call dist#ft#SetFileTypeShell("sh")
endfunc
" For shell-like file types, check for an "exec" command hidden in a comment,
" as used for Tcl.
" Also called from scripts.vim, thus can't be local to this script.
func dist#ft#SetFileTypeShell(name)
if expand("<amatch>") =~ g:ft_ignore_pat
return
endif
let l = 2
while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)'
" Skip empty and comment lines.
let l = l + 1
endwhile
if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$'
" Found an "exec" line after a comment with continuation
let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '')
if n =~ '\<tclsh\|\<wish'
setf tcl
return
endif
endif
exe "setf " . a:name
endfunc
func dist#ft#CSH()
if exists("g:filetype_csh")
call dist#ft#SetFileTypeShell(g:filetype_csh)
elseif &shell =~ "tcsh"
call dist#ft#SetFileTypeShell("tcsh")
else
call dist#ft#SetFileTypeShell("csh")
endif
endfunc
let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
func dist#ft#FTRules()
let path = expand('<amatch>:p')
if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
setf udevrules
return
endif
if path =~ '^/etc/ufw/'
setf conf " Better than hog
return
endif
if path =~ '^/\(etc\|usr/share\)/polkit-1/rules\.d'
setf javascript
return
endif
try
let config_lines = readfile('/etc/udev/udev.conf')
catch /^Vim\%((\a\+)\)\=:E484/
setf hog
return
endtry
let dir = expand('<amatch>:p:h')
for line in config_lines
if line =~ s:ft_rules_udev_rules_pattern
let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "")
if dir == udev_rules
setf udevrules
endif
break
endif
endfor
setf hog
endfunc
func dist#ft#SQL()
if exists("g:filetype_sql")
exe "setf " . g:filetype_sql
else
setf sql
endif
endfunc
" If the file has an extension of 't' and is in a directory 't' or 'xt' then
" it is almost certainly a Perl test file.
" If the first line starts with '#' and contains 'perl' it's probably a Perl
" file.
" (Slow test) If a file contains a 'use' statement then it is almost certainly
" a Perl file.
func dist#ft#FTperl()
let dirname = expand("%:p:h:t")
if expand("%:e") == 't' && (dirname == 't' || dirname == 'xt')
setf perl
return 1
endif
if getline(1)[0] == '#' && getline(1) =~ 'perl'
setf perl
return 1
endif
if search('^use\s\s*\k', 'nc', 30)
setf perl
return 1
endif
return 0
endfunc
" Choose context, plaintex, or tex (LaTeX) based on these rules:
" 1. Check the first line of the file for "%&<format>".
" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc.
func dist#ft#FTtex()
let firstline = getline(1)
if firstline =~ '^%&\s*\a\+'
let format = tolower(matchstr(firstline, '\a\+'))
let format = substitute(format, 'pdf', '', '')
if format == 'tex'
let format = 'latex'
elseif format == 'plaintex'
let format = 'plain'
endif
elseif expand('%') =~ 'tex/context/.*/.*.tex'
let format = 'context'
else
" Default value, may be changed later:
let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain'
" Save position, go to the top of the file, find first non-comment line.
let save_cursor = getpos('.')
call cursor(1,1)
let firstNC = search('^\s*[^[:space:]%]', 'c', 1000)
if firstNC " Check the next thousand lines for a LaTeX or ConTeXt keyword.
let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>'
let cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>'
let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)',
\ 'cnp', firstNC + 1000)
if kwline == 1 " lpat matched
let format = 'latex'
elseif kwline == 2 " cpat matched
let format = 'context'
endif " If neither matched, keep default set above.
" let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000)
" let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000)
" if cline > 0
" let format = 'context'
" endif
" if lline > 0 && (cline == 0 || cline > lline)
" let format = 'tex'
" endif
endif " firstNC
call setpos('.', save_cursor)
endif " firstline =~ '^%&\s*\a\+'
" Translation from formats to file types. TODO: add AMSTeX, RevTex, others?
if format == 'plain'
setf plaintex
elseif format == 'context'
setf context
else " probably LaTeX
setf tex
endif
return
endfunc
func dist#ft#FTxml()
let n = 1
while n < 100 && n < line("$")
let line = getline(n)
" DocBook 4 or DocBook 5.
let is_docbook4 = line =~ '<!DOCTYPE.*DocBook'
let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"'
if is_docbook4 || is_docbook5
let b:docbk_type = "xml"
if is_docbook5
let b:docbk_ver = 5
else
let b:docbk_ver = 4
endif
setf docbk
return
endif
if line =~ 'xmlns:xbl="http://www.mozilla.org/xbl"'
setf xbl
return
endif
let n += 1
endwhile
setf xml
endfunc
func dist#ft#FTy()
let n = 1
while n < 100 && n < line("$")
let line = getline(n)
if line =~ '^\s*%'
setf yacc
return
endif
if getline(n) =~ '^\s*\(#\|class\>\)' && getline(n) !~ '^\s*#\s*include'
setf racc
return
endif
let n = n + 1
endwhile
setf yacc
endfunc
func dist#ft#Redif()
let lnum = 1
while lnum <= 5 && lnum < line('$')
if getline(lnum) =~ "^\ctemplate-type:"
setf redif
return
endif
let lnum = lnum + 1
endwhile
endfunc
" Restore 'cpoptions'
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@ -3,20 +3,20 @@ function! s:enhance_syntax() abort
syntax keyword healthError ERROR[:]
\ containedin=markdownCodeBlock,mkdListItemLine
highlight link healthError Error
highlight default link healthError Error
syntax keyword healthWarning WARNING[:]
\ containedin=markdownCodeBlock,mkdListItemLine
highlight link healthWarning WarningMsg
highlight default link healthWarning WarningMsg
syntax keyword healthSuccess OK[:]
\ containedin=markdownCodeBlock,mkdListItemLine
highlight healthSuccess guibg=#5fff00 guifg=#080808 ctermbg=82 ctermfg=232
highlight default healthSuccess guibg=#5fff00 guifg=#080808 ctermbg=82 ctermfg=232
syntax match healthHelp "|.\{-}|" contains=healthBar
\ containedin=markdownCodeBlock,mkdListItemLine
syntax match healthBar "|" contained conceal
highlight link healthHelp Identifier
highlight default link healthHelp Identifier
" We do not care about markdown syntax errors in :checkhealth output.
highlight! link markdownError Normal
@ -93,27 +93,27 @@ function! s:help_to_link(s) abort
return substitute(a:s, '\v:h%[elp] ([^|][^"\r\n ]+)', ':help |\1|', 'g')
endfunction
" Format a message for a specific report item
" Format a message for a specific report item.
" a:1: Optional advice (string or list)
function! s:format_report_message(status, msg, ...) abort " {{{
let output = ' - ' . a:status . ': ' . s:indent_after_line1(a:msg, 4)
let advice = []
" Optional parameters
if a:0 > 0
let advice = type(a:1) == type("") ? [a:1] : a:1
let advice = type(a:1) == type('') ? [a:1] : a:1
if type(advice) != type([])
throw "Expected String or List"
throw 'a:1: expected String or List'
endif
" Report each suggestion
if !empty(advice)
let output .= "\n - ADVICE:"
for suggestion in advice
let output .= "\n - " . s:indent_after_line1(suggestion, 10)
endfor
endif
endif
" Report each suggestion
if len(advice) > 0
let output .= "\n - ADVICE:"
endif
for suggestion in advice
let output .= "\n - " . s:indent_after_line1(suggestion, 10)
endfor
return s:help_to_link(output)
endfunction " }}}
@ -128,6 +128,7 @@ function! health#report_ok(msg) abort " {{{
endfunction " }}}
" Reports a health warning.
" a:1: Optional advice (string or list)
function! health#report_warn(msg, ...) abort " {{{
if a:0 > 0
echo s:format_report_message('WARNING', a:msg, a:1)
@ -137,6 +138,7 @@ function! health#report_warn(msg, ...) abort " {{{
endfunction " }}}
" Reports a failed healthcheck.
" a:1: Optional advice (string or list)
function! health#report_error(msg, ...) abort " {{{
if a:0 > 0
echo s:format_report_message('ERROR', a:msg, a:1)

View File

@ -7,12 +7,12 @@ function! s:check_config() abort
" If $VIM is empty we don't care. Else make sure it is valid.
if !empty($VIM) && !filereadable($VIM.'/runtime/doc/nvim.txt')
let ok = v:false
call health#report_error("$VIM is invalid: ".$VIM)
call health#report_error('$VIM is invalid: '.$VIM)
endif
if exists('$NVIM_TUI_ENABLE_CURSOR_SHAPE')
let ok = v:false
call health#report_warn("$NVIM_TUI_ENABLE_CURSOR_SHAPE is ignored in Nvim 0.2+",
call health#report_warn('$NVIM_TUI_ENABLE_CURSOR_SHAPE is ignored in Nvim 0.2+',
\ [ "Use the 'guicursor' option to configure cursor shape. :help 'guicursor'",
\ 'https://github.com/neovim/neovim/wiki/Following-HEAD#20170402' ])
endif
@ -58,7 +58,7 @@ function! s:check_rplugin_manifest() abort
let contents = join(readfile(script))
if contents =~# '\<\%(from\|import\)\s\+neovim\>'
if script =~# '[\/]__init__\.py$'
let script = fnamemodify(script, ':h')
let script = tr(fnamemodify(script, ':h'), '\', '/')
endif
if !has_key(existing_rplugins, script)
@ -100,8 +100,8 @@ function! s:check_performance() abort
else
call health#report_info(buildtype)
call health#report_warn(
\ "Non-optimized build-type. Nvim will be slower.",
\ ["Install a different Nvim package, or rebuild with `CMAKE_BUILD_TYPE=RelWithDebInfo`.",
\ 'Non-optimized build-type. Nvim will be slower.',
\ ['Install a different Nvim package, or rebuild with `CMAKE_BUILD_TYPE=RelWithDebInfo`.',
\ s:suggest_faq])
endif
endfunction
@ -174,7 +174,7 @@ function! s:check_terminal() abort
\ .(empty(kbs_entry) ? '? (not found)' : kdch1_entry))
endif
for env_var in ['XTERM_VERSION', 'VTE_VERSION', 'TERM_PROGRAM', 'COLORTERM', 'SSH_TTY']
if !exists('$'.env_var)
if exists('$'.env_var)
call health#report_info(printf("$%s='%s'", env_var, eval('$'.env_var)))
endif
endfor

View File

@ -13,6 +13,12 @@ function! s:normalize_path(s) abort
return substitute(substitute(a:s, '\', '/', 'g'), '/\./\|/\+', '/', 'g')
endfunction
" Returns TRUE if `cmd` exits with success, else FALSE.
function! s:cmd_ok(cmd) abort
call system(a:cmd)
return v:shell_error == 0
endfunction
" Simple version comparison.
function! s:version_cmp(a, b) abort
let a = split(a:a, '\.', 0)
@ -45,7 +51,7 @@ function! s:shellify(cmd) abort
return a:cmd
endif
return join(map(copy(a:cmd),
\'v:val =~# ''\m[\-.a-zA-Z_/]'' ? shellescape(v:val) : v:val'), ' ')
\'v:val =~# ''\m[^\-.a-zA-Z_/]'' ? shellescape(v:val) : v:val'), ' ')
endfunction
" Run a system command and timeout after 30 seconds.
@ -64,7 +70,8 @@ function! s:system(cmd, ...) abort
let jobid = jobstart(a:cmd, opts)
if jobid < 1
call health#report_error(printf('Command error (job=%d): %s', jobid, s:shellify(a:cmd)))
call health#report_error(printf('Command error (job=%d): `%s` (in %s)',
\ jobid, s:shellify(a:cmd), string(getcwd())))
let s:shell_error = 1
return opts.output
endif
@ -78,8 +85,8 @@ function! s:system(cmd, ...) abort
call health#report_error(printf('Command timed out: %s', s:shellify(a:cmd)))
call jobstop(jobid)
elseif s:shell_error != 0 && !ignore_error
call health#report_error(printf("Command error (job=%d): %s\nOutput: %s", jobid,
\ s:shellify(a:cmd), opts.output))
call health#report_error(printf("Command error (job=%d): `%s` (in %s)\nOutput: %s",
\ jobid, s:shellify(a:cmd), string(getcwd()), opts.output))
endif
return opts.output
@ -120,6 +127,13 @@ endfunction
function! s:check_clipboard() abort
call health#report_start('Clipboard (optional)')
if !empty($TMUX) && executable('tmux') && executable('pbpaste') && !s:cmd_ok('pbpaste')
let tmux_version = matchstr(system('tmux -V'), '\d\+\.\d\+')
call health#report_error('pbcopy does not work with tmux version: '.tmux_version,
\ ['Install tmux 2.6+. https://superuser.com/q/231130',
\ 'or use tmux with reattach-to-user-namespace. https://superuser.com/a/413233'])
endif
let clipboard_tool = provider#clipboard#Executable()
if exists('g:clipboard') && empty(clipboard_tool)
call health#report_error(
@ -172,7 +186,9 @@ function! s:version_info(python) abort
endif
let nvim_path = s:trim(s:system([
\ a:python, '-c', 'import neovim; print(neovim.__file__)']))
\ a:python, '-c',
\ 'import sys; sys.path.remove(""); ' .
\ 'import neovim; print(neovim.__file__)']))
if s:shell_error || empty(nvim_path)
return [python_version, 'unable to load neovim Python module', pypi_version,
\ nvim_path]
@ -247,20 +263,23 @@ function! s:check_python(version) abort
let python_multiple = []
if exists(loaded_var) && !exists('*provider#'.pyname.'#Call')
call health#report_info('Disabled. '.loaded_var.'='.eval(loaded_var))
return
call health#report_info('Disabled ('.loaded_var.'='.eval(loaded_var).'). This might be due to some previous error.')
endif
if !empty(pyenv)
if empty(pyenv_root)
call health#report_warn(
\ 'pyenv was found, but $PYENV_ROOT is not set.',
\ ['Did you follow the final install instructions?',
\ 'If you use a shell "framework" like Prezto or Oh My Zsh, try without.',
\ 'Try a different shell (bash).']
call health#report_info(
\ 'pyenv was found, but $PYENV_ROOT is not set. `pyenv root` will be used.'
\ .' If you run into problems, try setting $PYENV_ROOT explicitly.'
\ )
let pyenv_root = s:trim(s:system([pyenv, 'root']))
endif
if !isdirectory(pyenv_root)
call health#report_error('Invalid pyenv root: '.pyenv_root)
else
call health#report_ok(printf('pyenv found: "%s"', pyenv))
call health#report_info(printf('pyenv: %s', pyenv))
call health#report_info(printf('pyenv root: %s', pyenv_root))
endif
endif
@ -272,9 +291,6 @@ function! s:check_python(version) abort
if empty(pyname)
call health#report_warn('No Python interpreter was found with the neovim '
\ . 'module. Using the first available for diagnostics.')
if !empty(pythonx_errs)
call health#report_warn(pythonx_errs)
endif
endif
if !empty(pyname)
@ -332,8 +348,8 @@ function! s:check_python(version) abort
endif
endif
if !empty(python_bin)
if empty(venv) && !empty(pyenv) && !exists('g:'.host_prog_var)
if !empty(python_bin) && !exists('g:'.host_prog_var)
if empty(venv) && !empty(pyenv)
\ && !empty(pyenv_root) && resolve(python_bin) !~# '^'.pyenv_root.'/'
call health#report_warn('pyenv is not set up optimally.', [
\ printf('Create a virtualenv specifically '
@ -341,7 +357,7 @@ function! s:check_python(version) abort
\ . 'the need to install the Neovim Python module in each '
\ . 'version/virtualenv.', host_prog_var)
\ ])
elseif !empty(venv) && exists('g:'.host_prog_var)
elseif !empty(venv)
if !empty(pyenv_root)
let venv_root = pyenv_root
else
@ -366,27 +382,18 @@ function! s:check_python(version) abort
let python_bin = ''
endif
" Check if $VIRTUAL_ENV is active
let virtualenv_inactive = 0
if exists('$VIRTUAL_ENV')
if !empty(pyenv)
let pyenv_prefix = resolve(s:trim(s:system([pyenv, 'prefix'])))
if $VIRTUAL_ENV != pyenv_prefix
let virtualenv_inactive = 1
endif
elseif !empty(pyname) && exepath(pyname) !~# '^'.$VIRTUAL_ENV.'/'
let virtualenv_inactive = 1
" Check if $VIRTUAL_ENV is valid.
if exists('$VIRTUAL_ENV') && !empty(python_bin)
if $VIRTUAL_ENV ==# matchstr(python_bin, '^\V'.$VIRTUAL_ENV)
call health#report_info('$VIRTUAL_ENV matches executable')
else
call health#report_warn(
\ '$VIRTUAL_ENV exists but appears to be inactive. '
\ . 'This could lead to unexpected results.',
\ [ 'If you are using Zsh, see: http://vi.stackexchange.com/a/7654' ])
endif
endif
if virtualenv_inactive
call health#report_warn(
\ '$VIRTUAL_ENV exists but appears to be inactive. '
\ . 'This could lead to unexpected results.',
\ [ 'If you are using Zsh, see: http://vi.stackexchange.com/a/7654/5229' ])
endif
" Diagnostic output
call health#report_info('Executable: ' . (empty(python_bin) ? 'Not found' : python_bin))
if len(python_multiple)
@ -451,10 +458,11 @@ function! s:check_ruby() abort
let host = provider#ruby#Detect()
if empty(host)
call health#report_warn('Missing "neovim" gem.',
\ ['Run in shell: gem install neovim',
\ 'Is the gem bin directory in $PATH? Check `gem environment`.',
\ 'If you are using rvm/rbenv/chruby, try "rehashing".'])
call health#report_warn('`neovim-ruby-host` not found.',
\ ['Run `gem install neovim` to ensure the neovim RubyGem is installed.',
\ 'Run `gem environment` to ensure the gem bin directory is in $PATH.',
\ 'If you are using rvm/rbenv/chruby, try "rehashing".',
\ 'See :help g:ruby_host_prog for non-standard gem installations.'])
return
endif
call health#report_info('Host: '. host)
@ -487,9 +495,80 @@ function! s:check_ruby() abort
endif
endfunction
function! s:check_node() abort
call health#report_start('Node.js provider (optional)')
let loaded_var = 'g:loaded_node_provider'
if exists(loaded_var) && !exists('*provider#node#Call')
call health#report_info('Disabled. '.loaded_var.'='.eval(loaded_var))
return
endif
if !executable('node') || (!executable('npm') && !executable('yarn'))
call health#report_warn(
\ '`node` and `npm` (or `yarn`) must be in $PATH.',
\ ['Install Node.js and verify that `node` and `npm` (or `yarn`) commands work.'])
return
endif
let node_v = get(split(s:system('node -v'), "\n"), 0, '')
call health#report_info('Node.js: '. node_v)
if !s:shell_error && s:version_cmp(node_v[1:], '6.0.0') < 0
call health#report_warn('Neovim node.js host does not support '.node_v)
" Skip further checks, they are nonsense if nodejs is too old.
return
endif
if !provider#node#can_inspect()
call health#report_warn('node.js on this system does not support --inspect-brk so $NVIM_NODE_HOST_DEBUG is ignored.')
endif
let host = provider#node#Detect()
if empty(host)
call health#report_warn('Missing "neovim" npm (or yarn) package.',
\ ['Run in shell: npm install -g neovim',
\ 'Run in shell (if you use yarn): yarn global add neovim'])
return
endif
call health#report_info('Neovim node.js host: '. host)
let latest_npm_cmd = has('win32') ? 'cmd /c npm info neovim --json' : 'npm info neovim --json'
let latest_npm = s:system(split(latest_npm_cmd))
if s:shell_error || empty(latest_npm)
call health#report_error('Failed to run: '. latest_npm_cmd,
\ ["Make sure you're connected to the internet.",
\ 'Are you behind a firewall or proxy?'])
return
endif
if !empty(latest_npm)
try
let pkg_data = json_decode(latest_npm)
catch /E474/
return 'error: '.latest_npm
endtry
let latest_npm = get(get(pkg_data, 'dist-tags', {}), 'latest', 'unable to parse')
endif
let current_npm_cmd = ['node', host, '--version']
let current_npm = s:system(current_npm_cmd)
if s:shell_error
call health#report_error('Failed to run: '. string(current_npm_cmd),
\ ['Report this issue with the output of: ', string(current_npm_cmd)])
return
endif
if s:version_cmp(current_npm, latest_npm) == -1
call health#report_warn(
\ printf('Package "neovim" is out-of-date. Installed: %s, latest: %s',
\ current_npm, latest_npm),
\ ['Run in shell: npm install -g neovim'])
else
call health#report_ok('Latest "neovim" npm/yarn package is installed: '. current_npm)
endif
endfunction
function! health#provider#check() abort
call s:check_clipboard()
call s:check_python(2)
call s:check_python(3)
call s:check_ruby()
call s:check_node()
endfunction

View File

@ -19,7 +19,7 @@ function! s:init() abort
let s:find_arg = '-l'
endif
" Check for -l support.
call s:get_page(s:get_path('', 'man')[0:-2])
call s:get_page(s:get_path('', 'man'))
catch /E145:/
" Ignore the error in restricted mode
catch /command error .*/
@ -65,9 +65,9 @@ function! man#open_page(count, count1, mods, ...) abort
try
set eventignore+=BufReadCmd
if a:mods !~# 'tab' && s:find_man()
execute 'silent edit' fnameescape(bufname)
execute 'silent keepalt edit' fnameescape(bufname)
else
execute 'silent' a:mods 'split' fnameescape(bufname)
execute 'silent keepalt' a:mods 'split' fnameescape(bufname)
endif
finally
set eventignore-=BufReadCmd
@ -148,7 +148,8 @@ function! s:get_page(path) abort
let manwidth = empty($MANWIDTH) ? winwidth(0) : $MANWIDTH
" Force MANPAGER=cat to ensure Vim is not recursively invoked (by man-db).
" http://comments.gmane.org/gmane.editors.vim.devel/29085
let cmd = ['env', 'MANPAGER=cat', 'MANWIDTH='.manwidth, 'man']
" Set MAN_KEEP_FORMATTING so Debian man doesn't discard backspaces.
let cmd = ['env', 'MANPAGER=cat', 'MANWIDTH='.manwidth, 'MAN_KEEP_FORMATTING=1', 'man']
return s:system(cmd + (s:localfile_arg ? ['-l', a:path] : [a:path]))
endfunction
@ -157,11 +158,10 @@ function! s:put_page(page) abort
setlocal noreadonly
silent keepjumps %delete _
silent put =a:page
" Remove all backspaced/escape characters.
execute 'silent keeppatterns keepjumps %substitute,.\b\|\e\[\d\+m,,e'.(&gdefault?'':'g')
while getline(1) =~# '^\s*$'
silent keepjumps 1delete _
endwhile
lua require("man").highlight_man_page()
setlocal filetype=man
endfunction
@ -212,15 +212,17 @@ function! man#extract_sect_and_name_ref(ref) abort
endfunction
function! s:get_path(sect, name) abort
" Some man implementations (OpenBSD) return all available paths from the
" search command, so we get() the first one. #8341
if empty(a:sect)
return s:system(['man', s:find_arg, a:name])
return substitute(get(split(s:system(['man', s:find_arg, a:name])), 0, ''), '\n\+$', '', '')
endif
" '-s' flag handles:
" - tokens like 'printf(echo)'
" - sections starting with '-'
" - 3pcap section (found on macOS)
" - commas between sections (for section priority)
return s:system(['man', s:find_arg, s:section_arg, a:sect, a:name])
return substitute(get(split(s:system(['man', s:find_arg, s:section_arg, a:sect, a:name])), 0, ''), '\n\+$', '', '')
endfunction
function! s:verify_exists(sect, name) abort
@ -233,13 +235,10 @@ function! s:verify_exists(sect, name) abort
let path = s:get_path('', a:name)
endtry
endtry
" We need to extract the section from the path because sometimes
" the actual section of the manpage is more specific than the section
" we provided to `man`. Try ':Man 3 App::CLI'.
" Also on linux, it seems that the name is case insensitive. So if one does
" ':Man PRIntf', we still want the name of the buffer to be 'printf' or
" whatever the correct capitilization is.
let path = path[:len(path)-2]
" Extract the section from the path, because sometimes the actual section is
" more specific than what we provided to `man` (try `:Man 3 App::CLI`).
" Also on linux, name seems to be case-insensitive. So for `:Man PRIntf`, we
" still want the name of the buffer to be 'printf'.
return s:extract_sect_and_name_path(path) + [path]
endfunction
@ -299,6 +298,12 @@ endfunction
" see man#extract_sect_and_name_ref on why tolower(sect)
function! man#complete(arg_lead, cmd_line, cursor_pos) abort
let args = split(a:cmd_line)
let cmd_offset = index(args, 'Man')
if cmd_offset > 0
" Prune all arguments up to :Man itself. Otherwise modifier commands like
" :tab, :vertical, etc. would lead to a wrong length.
let args = args[cmd_offset:]
endif
let l = len(args)
if l > 3
return
@ -370,13 +375,12 @@ function! s:format_candidate(path, psect) abort
endfunction
function! man#init_pager() abort
" Remove all backspaced/escape characters.
execute 'silent keeppatterns keepjumps %substitute,.\b\|\e\[\d\+m,,e'.(&gdefault?'':'g')
if getline(1) =~# '^\s*$'
silent keepjumps 1delete _
else
keepjumps 1
endif
lua require("man").highlight_man_page()
" This is not perfect. See `man glDrawArraysInstanced`. Since the title is
" all caps it is impossible to tell what the original capitilization was.
let ref = substitute(matchstr(getline(1), '^[^)]\+)'), ' ', '_', 'g')

View File

@ -40,9 +40,10 @@ function s:msgpack_init_python() abort
return s:msgpack_python_type
endif
let s:msgpack_python_initialized = 1
for suf in ['', '3']
for suf in (has('win32') ? ['3'] : ['', '3'])
try
execute 'python' . suf
\. "\n"
\. "def shada_dict_strftime():\n"
\. " import datetime\n"
\. " import vim\n"
@ -60,12 +61,15 @@ function s:msgpack_init_python() abort
\. " fmt = vim.eval('a:format')\n"
\. " timestr = vim.eval('a:string')\n"
\. " timestamp = datetime.datetime.strptime(timestr, fmt)\n"
\. " timestamp = int(timestamp.timestamp())\n"
\. " try:\n"
\. " timestamp = int(timestamp.timestamp())\n"
\. " except:\n"
\. " timestamp = int(timestamp.strftime('%s'))\n"
\. " if timestamp > 2 ** 31:\n"
\. " tsabs = abs(timestamp)"
\. " tsabs = abs(timestamp)\n"
\. " return ('{\"_TYPE\": v:msgpack_types.integer,'\n"
\. " + '\"_VAL\": [{sign},{v1},{v2},{v3}]}').format(\n"
\. " sign=1 if timestamp >= 0 else -1,\n"
\. " sign=(1 if timestamp >= 0 else -1),\n"
\. " v1=((tsabs >> 62) & 0x3),\n"
\. " v2=((tsabs >> 31) & (2 ** 31 - 1)),\n"
\. " v3=(tsabs & (2 ** 31 - 1)))\n"

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
" netrwSettings.vim: makes netrw settings simpler
" Date: Nov 09, 2016
" Date: Dec 30, 2014
" Maintainer: Charles E Campbell <drchipNOSPAM at campbellfamily dot biz>
" Version: 16
" Version: 15
" Copyright: Copyright (C) 1999-2007 Charles E. Campbell {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
@ -19,7 +19,7 @@
if exists("g:loaded_netrwSettings") || &cp
finish
endif
let g:loaded_netrwSettings = "v16"
let g:loaded_netrwSettings = "v15"
if v:version < 700
echohl WarningMsg
echo "***warning*** this version of netrwSettings needs vim 7.0"
@ -154,13 +154,9 @@ fun! netrwSettings#NetrwSettings()
put = 'let g:netrw_list_hide = '.g:netrw_list_hide
put = 'let g:netrw_liststyle = '.g:netrw_liststyle
put = 'let g:netrw_localcopycmd = '.g:netrw_localcopycmd
put = 'let g:netrw_localcopycmdopt = '.g:netrw_localcopycmdopt
put = 'let g:netrw_localmkdir = '.g:netrw_localmkdir
put = 'let g:netrw_localmkdiropt = '.g:netrw_localmkdiropt
put = 'let g:netrw_localmovecmd = '.g:netrw_localmovecmd
put = 'let g:netrw_localmovecmdopt = '.g:netrw_localmovecmdopt
put = 'let g:netrw_localrmdir = '.g:netrw_localrmdir
put = 'let g:netrw_localrmdiropt = '.g:netrw_localrmdiropt
put = 'let g:netrw_maxfilenamelen = '.g:netrw_maxfilenamelen
put = 'let g:netrw_menu = '.g:netrw_menu
put = 'let g:netrw_mousemaps = '.g:netrw_mousemaps

View File

@ -1,20 +1,21 @@
" Common functionality for providers
" Common functions for providers
let s:stderr = {}
function! provider#stderr_collector(chan_id, data, event)
let stderr = get(s:stderr, a:chan_id, [''])
let stderr[-1] .= a:data[0]
call extend(stderr, a:data[1:])
let s:stderr[a:chan_id] = stderr
endfunction
function! provider#clear_stderr(chan_id)
if has_key(s:stderr, a:chan_id)
call remove(s:stderr, a:chan_id)
endif
endfunction
function! provider#get_stderr(chan_id)
return get(s:stderr, a:chan_id, [])
" Start the provider and perform a 'poll' request
"
" Returns a valid channel on success
function! provider#Poll(argv, orig_name, log_env) abort
let job = {'rpc': v:true, 'stderr_buffered': v:true}
try
let channel_id = jobstart(a:argv, job)
if channel_id > 0 && rpcrequest(channel_id, 'poll') ==# 'ok'
return channel_id
endif
catch
echomsg v:throwpoint
echomsg v:exception
for row in get(job, 'stderr', [])
echomsg row
endfor
endtry
throw remote#host#LoadErrorForHost(a:orig_name, a:log_env)
endfunction

View File

@ -7,7 +7,7 @@ let s:clipboard = {}
" When caching is enabled, store the jobid of the xclip/xsel process keeping
" ownership of the selection, so we know how long the cache is valid.
let s:selection = { 'owner': 0, 'data': [], 'on_stderr': function('provider#stderr_collector') }
let s:selection = { 'owner': 0, 'data': [], 'stderr_buffered': v:true }
function! s:selection.on_exit(jobid, data, event) abort
" At this point this nvim instance might already have launched
@ -16,19 +16,17 @@ function! s:selection.on_exit(jobid, data, event) abort
let self.owner = 0
endif
if a:data != 0
let stderr = provider#get_stderr(a:jobid)
echohl WarningMsg
echomsg 'clipboard: error invoking '.get(self.argv, 0, '?').': '.join(stderr)
echomsg 'clipboard: error invoking '.get(self.argv, 0, '?').': '.join(self.stderr)
echohl None
endif
call provider#clear_stderr(a:jobid)
endfunction
let s:selections = { '*': s:selection, '+': copy(s:selection) }
function! s:try_cmd(cmd, ...) abort
let argv = split(a:cmd, " ")
let out = a:0 ? systemlist(argv, a:1, 1) : systemlist(argv, [''], 1)
let out = systemlist(argv, (a:0 ? a:1 : ['']), 1)
if v:shell_error
if !exists('s:did_error_try_cmd')
echohl WarningMsg
@ -66,7 +64,7 @@ function! provider#clipboard#Executable() abort
let s:paste = get(g:clipboard, 'paste', { '+': v:null, '*': v:null })
let s:cache_enabled = get(g:clipboard, 'cache_enabled', 0)
return get(g:clipboard, 'name', 'g:clipboard')
elseif has('mac') && executable('pbcopy')
elseif has('mac') && executable('pbpaste') && s:cmd_ok('pbpaste')
let s:copy['+'] = 'pbcopy'
let s:paste['+'] = 'pbpaste'
let s:copy['*'] = s:copy['+']
@ -142,12 +140,13 @@ function! s:clipboard.set(lines, regtype, reg) abort
return 0
end
let selection = s:selections[a:reg]
if selection.owner > 0
if s:selections[a:reg].owner > 0
" The previous provider instance should exit when the new one takes
" ownership, but kill it to be sure we don't fill up the job table.
call jobstop(selection.owner)
call jobstop(s:selections[a:reg].owner)
end
let s:selections[a:reg] = copy(s:selection)
let selection = s:selections[a:reg]
let selection.data = [a:lines, a:regtype]
let argv = split(s:copy[a:reg], " ")
let selection.argv = argv

View File

@ -0,0 +1,123 @@
if exists('g:loaded_node_provider')
finish
endif
let g:loaded_node_provider = 1
function! s:is_minimum_version(version, min_major, min_minor) abort
if empty(a:version)
let nodejs_version = get(split(system(['node', '-v']), "\n"), 0, '')
if v:shell_error || nodejs_version[0] !=# 'v'
return 0
endif
else
let nodejs_version = a:version
endif
" Remove surrounding junk. Example: 'v4.12.0' => '4.12.0'
let nodejs_version = matchstr(nodejs_version, '\(\d\.\?\)\+')
" [major, minor, patch]
let v_list = split(nodejs_version, '\.')
return len(v_list) == 3
\ && ((str2nr(v_list[0]) > str2nr(a:min_major))
\ || (str2nr(v_list[0]) == str2nr(a:min_major)
\ && str2nr(v_list[1]) >= str2nr(a:min_minor)))
endfunction
function! s:find_node_client(package_manager) abort
if !executable(a:package_manager)
return ''
endif
let is_yarn = a:package_manager ==# 'yarn'
let cmd = is_yarn ? 'yarn global dir' : 'npm --loglevel silent root -g'
let global_modules_dir = get(split(system(cmd), "\n"), 0, '')
if v:shell_error || !isdirectory(global_modules_dir)
return ''
endif
" `yarn global dir` returns the parent of '/node_modules'.
let global_modules_dir = is_yarn ? global_modules_dir . '/node_modules' : global_modules_dir
if !isdirectory(global_modules_dir)
return ''
endif
let entry_point = global_modules_dir . '/neovim/bin/cli.js'
if !filereadable(entry_point)
return ''
endif
return entry_point
endfunction
" Support for --inspect-brk requires node 6.12+ or 7.6+ or 8+
" Return 1 if it is supported
" Return 0 otherwise
function! provider#node#can_inspect() abort
if !executable('node')
return 0
endif
let ver = get(split(system(['node', '-v']), "\n"), 0, '')
if v:shell_error || ver[0] !=# 'v'
return 0
endif
return (ver[1] ==# '6' && s:is_minimum_version(ver, 6, 12))
\ || s:is_minimum_version(ver, 7, 6)
endfunction
function! provider#node#Detect() abort
if exists('g:node_host_prog')
return g:node_host_prog
endif
if !s:is_minimum_version(v:null, 6, 0)
return ''
endif
let entry_point = s:find_node_client('npm')
let entry_point = !empty(entry_point) ? entry_point : s:find_node_client('yarn')
return entry_point
endfunction
function! provider#node#Prog() abort
return s:prog
endfunction
function! provider#node#Require(host) abort
if s:err != ''
echoerr s:err
return
endif
let args = ['node']
if !empty($NVIM_NODE_HOST_DEBUG) && provider#node#can_inspect()
call add(args, '--inspect-brk')
endif
call add(args, provider#node#Prog())
return provider#Poll(args, a:host.orig_name, '$NVIM_NODE_LOG_FILE')
endfunction
function! provider#node#Call(method, args) abort
if s:err != ''
echoerr s:err
return
endif
if !exists('s:host')
try
let s:host = remote#host#Require('node')
catch
let s:err = v:exception
echohl WarningMsg
echomsg v:exception
echohl None
return
endtry
endif
return call('rpcrequest', insert(insert(a:args, 'node_'.a:method), s:host))
endfunction
let s:err = ''
let s:prog = provider#node#Detect()
if empty(s:prog)
let s:err = 'Cannot find the "neovim" node package. Try :checkhealth'
endif
call remote#host#RegisterPlugin('node-provider', 'node', [])

View File

@ -11,11 +11,11 @@ let g:loaded_python_provider = 1
let [s:prog, s:err] = provider#pythonx#Detect(2)
function! provider#python#Prog()
function! provider#python#Prog() abort
return s:prog
endfunction
function! provider#python#Error()
function! provider#python#Error() abort
return s:err
endfunction
@ -29,7 +29,7 @@ endif
call remote#host#RegisterClone('legacy-python-provider', 'python')
call remote#host#RegisterPlugin('legacy-python-provider', 'script_host.py', [])
function! provider#python#Call(method, args)
function! provider#python#Call(method, args) abort
if s:err != ''
return
endif

View File

@ -11,11 +11,11 @@ let g:loaded_python3_provider = 1
let [s:prog, s:err] = provider#pythonx#Detect(3)
function! provider#python3#Prog()
function! provider#python3#Prog() abort
return s:prog
endfunction
function! provider#python3#Error()
function! provider#python3#Error() abort
return s:err
endfunction
@ -29,7 +29,7 @@ endif
call remote#host#RegisterClone('legacy-python3-provider', 'python3')
call remote#host#RegisterPlugin('legacy-python3-provider', 'script_host.py', [])
function! provider#python3#Call(method, args)
function! provider#python3#Call(method, args) abort
if s:err != ''
return
endif

View File

@ -5,8 +5,6 @@ endif
let s:loaded_pythonx_provider = 1
let s:job_opts = {'rpc': v:true, 'on_stderr': function('provider#stderr_collector')}
function! provider#pythonx#Require(host) abort
let ver = (a:host.orig_name ==# 'python') ? 2 : 3
@ -20,22 +18,7 @@ function! provider#pythonx#Require(host) abort
call add(args, plugin.path)
endfor
try
let channel_id = jobstart(args, s:job_opts)
if rpcrequest(channel_id, 'poll') ==# 'ok'
return channel_id
endif
catch
echomsg v:throwpoint
echomsg v:exception
for row in provider#get_stderr(channel_id)
echomsg row
endfor
finally
call provider#clear_stderr(channel_id)
endtry
throw remote#host#LoadErrorForHost(a:host.orig_name,
\ '$NVIM_PYTHON_LOG_FILE')
return provider#Poll(args, a:host.orig_name, '$NVIM_PYTHON_LOG_FILE')
endfunction
function! provider#pythonx#Detect(major_ver) abort

View File

@ -4,26 +4,15 @@ if exists('g:loaded_ruby_provider')
endif
let g:loaded_ruby_provider = 1
let s:stderr = {}
let s:job_opts = {'rpc': v:true}
function! s:job_opts.on_stderr(chan_id, data, event)
let stderr = get(s:stderr, a:chan_id, [''])
let last = remove(stderr, -1)
let a:data[0] = last.a:data[0]
call extend(stderr, a:data)
let s:stderr[a:chan_id] = stderr
endfunction
function! provider#ruby#Detect() abort
if exists("g:ruby_host_prog")
return g:ruby_host_prog
else
return exepath('neovim-ruby-host')
return has('win32') ? exepath('neovim-ruby-host.bat') : exepath('neovim-ruby-host')
end
endfunction
function! provider#ruby#Prog()
function! provider#ruby#Prog() abort
return s:prog
endfunction
@ -35,22 +24,10 @@ function! provider#ruby#Require(host) abort
let prog .= " " . shellescape(plugin.path)
endfor
try
let channel_id = jobstart(prog, s:job_opts)
if rpcrequest(channel_id, 'poll') ==# 'ok'
return channel_id
endif
catch
echomsg v:throwpoint
echomsg v:exception
for row in get(s:stderr, channel_id, [])
echomsg row
endfor
endtry
throw remote#host#LoadErrorForHost(a:host.orig_name, '$NVIM_RUBY_LOG_FILE')
return provider#Poll(prog, a:host.orig_name, '$NVIM_RUBY_LOG_FILE')
endfunction
function! provider#ruby#Call(method, args)
function! provider#ruby#Call(method, args) abort
if s:err != ''
echoerr s:err
return

View File

@ -199,3 +199,7 @@ call remote#host#Register('python3', '*',
" Ruby
call remote#host#Register('ruby', '*.rb',
\ function('provider#ruby#Require'))
" nodejs
call remote#host#Register('node', '*',
\ function('provider#node#Require'))

View File

@ -2,9 +2,6 @@
" Setup: {{{1
function! tutor#SetupVim()
if &columns < 90
set columns=90
endif
if !exists('g:did_load_ftplugin') || g:did_load_ftplugin != 1
filetype plugin on
endif

File diff suppressed because it is too large Load Diff

View File

@ -259,13 +259,14 @@ Name triggered by ~
|BufNew| just after creating a new buffer
|SwapExists| detected an existing swap file
|TermOpen| when a terminal buffer is starting
|TermClose| when a terminal buffer ends
|TermOpen| when a terminal job starts
|TermClose| when a terminal job ends
|ChanOpen| after a channel opened
|ChanInfo| after a channel has its state changed
Options
|FileType| when the 'filetype' option has been set
|Syntax| when the 'syntax' option has been set
|TermChanged| after the value of 'term' has changed
|OptionSet| after setting any option
Startup and exit
@ -273,10 +274,11 @@ Name triggered by ~
|GUIEnter| after starting the GUI successfully
|GUIFailed| after starting the GUI failed
|TermResponse| after the terminal response to |t_RV| is received
|QuitPre| when using `:quit`, before deciding whether to quit
|VimLeavePre| before exiting Vim, before writing the shada file
|VimLeave| before exiting Vim, after writing the shada file
|VimLeavePre| before exiting Nvim, before writing the shada file
|VimLeave| before exiting Nvim, after writing the shada file
|VimResume| after Nvim is resumed
|VimSuspend| before Nvim is suspended
Various
|DirChanged| after the |current-directory| was changed
@ -295,8 +297,8 @@ Name triggered by ~
|SourceCmd| before sourcing a Vim script |Cmd-event|
|VimResized| after the Vim window size changed
|FocusGained| Vim got input focus
|FocusLost| Vim lost input focus
|FocusGained| Nvim got focus
|FocusLost| Nvim lost focus
|CursorHold| the user doesn't press a key for a while
|CursorHoldI| the user doesn't press a key for a while in Insert mode
|CursorMoved| the cursor was moved in Normal mode
@ -310,6 +312,8 @@ Name triggered by ~
|TabNew| when creating a new tab page
|TabNewEntered| after entering a new tab page
|TabClosed| after closing a tab page
|CmdlineEnter| after entering cmdline mode
|CmdlineLeave| before leaving cmdline mode
|CmdwinEnter| after entering the command-line window
|CmdwinLeave| before leaving the command-line window
@ -323,6 +327,9 @@ Name triggered by ~
|TextChanged| after a change was made to the text in Normal mode
|TextChangedI| after a change was made to the text in Insert mode
when popup menu is not visible
|TextChangedP| after a change was made to the text in Insert mode
when popup menu visible
|ColorScheme| after loading a color scheme
@ -482,6 +489,19 @@ BufWriteCmd Before writing the whole buffer to a file.
*BufWritePost*
BufWritePost After writing the whole buffer to a file
(should undo the commands for BufWritePre).
*ChanInfo*
ChanInfo State of channel changed, for instance the
client of a RPC channel described itself.
Sets these |v:event| keys:
info
See |nvim_get_chan_info| for the format of the
info Dictionary.
*ChanOpen*
ChanOpen Just after a channel was opened.
Sets these |v:event| keys:
info
See |nvim_get_chan_info| for the format of the
info Dictionary.
*CmdUndefined*
CmdUndefined When a user command is used but it isn't
defined. Useful for defining a command only
@ -492,6 +512,28 @@ CmdUndefined When a user command is used but it isn't
command is defined. An alternative is to
always define the user command and have it
invoke an autoloaded function. See |autoload|.
*CmdlineEnter*
CmdlineEnter After moving the cursor to the command line,
where the user can type a command or search
string.
<afile> is set to a single character,
indicating the type of command-line.
|cmdline-char|
Sets these |v:event| keys:
cmdlevel
cmdtype
*CmdlineLeave*
CmdlineLeave Before leaving the command line.
<afile> is set to a single character,
indicating the type of command-line.
|cmdline-char|
Sets these |v:event| keys:
abort (mutable)
cmdlevel
cmdtype
Note: `abort` can only be changed from false
to true. An autocmd cannot execute an already
aborted cmdline by changing it to false.
*CmdwinEnter*
CmdwinEnter After entering the command-line window.
Useful for setting options specifically for
@ -693,14 +735,10 @@ FilterWritePre Before writing a file for a filter command or
filter command.
Not triggered when 'shelltemp' is off.
*FocusGained*
FocusGained When Vim got input focus. Only for the GUI
version and a few console versions where this
can be detected.
FocusGained Nvim got focus.
*FocusLost*
FocusLost When Vim lost input focus. Only for the GUI
version and a few console versions where this
can be detected. May also happen when a
dialog pops up.
FocusLost Nvim lost focus. Also (potentially) when
a GUI dialog pops up.
*FuncUndefined*
FuncUndefined When a user function is used but it isn't
defined. Useful for defining a function only
@ -862,14 +900,11 @@ SpellFileMissing When trying to load a spell checking file and
language, 'encoding' also matters. See
|spell-SpellFileMissing|.
*StdinReadPost*
StdinReadPost After reading from the stdin into the buffer,
before executing the modelines. Only used
when the "-" argument was used when Vim was
started |--|.
StdinReadPost During startup, after reading from stdin into
the buffer, before executing modelines. |--|
*StdinReadPre*
StdinReadPre Before reading from stdin into the buffer.
Only used when the "-" argument was used when
Vim was started |--|.
StdinReadPre During startup, before reading from stdin into
the buffer. |--|
*SwapExists*
SwapExists Detected an existing swap file when starting
to edit a file. Only when it is possible to
@ -909,26 +944,20 @@ TabEnter Just after entering a tab page. |tab-page|
TabLeave Just before leaving a tab page. |tab-page|
A WinLeave event will have been triggered
first.
{Nvim} *TabNew*
*TabNew*
TabNew When creating a new tab page. |tab-page|
After WinEnter and before TabEnter.
{Nvim} *TabNewEntered*
*TabNewEntered*
TabNewEntered After entering a new tab page. |tab-page|
After BufEnter.
{Nvim} *TabClosed*
*TabClosed*
TabClosed After closing a tab page. <afile> can be used
for the tab page number.
*TermChanged*
TermChanged After the value of 'term' has changed. Useful
for re-loading the syntax file to update the
colors, fonts and other terminal-dependent
settings. Executed for all loaded buffers.
{Nvim} *TermClose*
TermClose When a terminal buffer ends.
{Nvim} *TermOpen*
TermOpen When a terminal buffer is starting. This can
be used to configure the terminal emulator by
setting buffer variables. |terminal|
*TermClose*
TermClose When a |terminal| job ends.
*TermOpen*
TermOpen When a |terminal| job is starting. Can be
used to configure the terminal buffer.
*TermResponse*
TermResponse After the response to |t_RV| is received from
the terminal. The value of |v:termresponse|
@ -951,6 +980,11 @@ TextChangedI After a change was made to the text in the
current buffer in Insert mode.
Not triggered when the popup menu is visible.
Otherwise the same as TextChanged.
*TextChangedP*
TextChangedP After a change was made to the text in the
current buffer in Insert mode, only when the
popup menu is visible. Otherwise the same as
TextChanged.
*User*
User Never executed automatically. To be used for
autocommands that are only executed with
@ -992,6 +1026,10 @@ VimLeavePre Before exiting Vim, just before writing the
VimResized After the Vim window was resized, thus 'lines'
and/or 'columns' changed. Not when starting
up though.
*VimResume*
VimResume After Nvim resumes from |suspend| state.
*VimSuspend*
VimSuspend Before Nvim enters |suspend| state.
*WinEnter*
WinEnter After entering another window. Not done for
the first window, when Vim has just started.

170
runtime/doc/channel.txt Normal file
View File

@ -0,0 +1,170 @@
*channel.txt* Nvim
NVIM REFERENCE MANUAL by Thiago de Arruda
Nvim asynchronous IO *channel*
Type |gO| to see the table of contents.
==============================================================================
1. Introduction *channel-intro*
Channels are nvim's way of communicating with external processes.
There are several ways to open a channel:
1. Through stdin/stdout when `nvim` is started with `--headless`, and a startup
script or --cmd command opens the stdio channel using |stdioopen()|.
2. Through stdin, stdout and stderr of a process spawned by |jobstart()|.
3. Through the PTY master end of a PTY opened with
`jobstart(..., {'pty': v:true})` or |termopen()|.
4. By connecting to a TCP/IP socket or named pipe with |sockconnect()|.
5. By another process connecting to a socket listened to by nvim. This only
supports RPC channels, see |rpc-connecting|.
Channels support multiple modes or protocols. In the most basic
mode of operation, raw bytes are read and written to the channel.
The |rpc| protocol, based on the msgpack-rpc standard, enables nvim and the
process at the other end to send remote calls and events to each other.
Additionally, the builtin |terminal-emulator|, is implemented on top of PTY
channels.
==============================================================================
2. Reading and writing raw bytes *channel-bytes*
By default, channels opened by vimscript functions will operate with raw
bytes. Additionally, for a job channel using rpc, bytes can still be
read over its stderr. Similarily, only bytes can be written to nvim's own stderr.
*channel-callback* *buffered*
*E5210* *on_stdout* *on_stderr* *on_stdin* *on_data*
It is possible to register callback functions when a channel receives data by
passing the `on_stdout`, `on_stderr`, `on_stdin` options on creation. Sockets
may specify an `on_data` callback instead. Each callback function will be
invoked with data read from the channel. By default, the callback will be
invoked immediately when data is available, to facilitate interactive
communication. The same callback will then be invoked with empty data, to
indicate that the stream reached EOF. Alternatively the `stdout_buffered`,
`stderr_buffered`, `stdin_buffered`, `data_buffered` options can be set to
invoke the corresponding callback only when the underlying stream reaches EOF.
The callback will then be passed complete output. This is helpful when only
the complete output is useful, and not partial data. Futhermore if the stream
is set to be buffered, but the callback is not set, the data is saved in the
options dict, with the stream name as key. For this to work a new options dict
must be used for each opened channel. If a script uses a global `s:job_opts`
dict, it can be copied with |copy()| before supplying it to |jobstart()|. If a
dict is reused, so that the dict key already is occupied, error `E5210` will
be raised.
- The arguments passed to the callback function are:
0: The channel id
1: the raw data read from the channel, formatted as a |readfile()|-style
list. If EOF occured, a single empty string `['']` will be passed in.
Note that the items in this list do not directly correspond to actual
lines in the output. See |channel-lines|
2: Stream name as a string, like `"stdout"`. This is to allow multiple
stream handlers to be implemented by the same function. The available
events depend on how the channel was opened and in what mode/protocol.
*channel-lines*
Note:
stream event handlers may receive partial (incomplete) lines. For a given
invocation of on_stdout etc, `a:data` is not guaranteed to end
with a newline.
- `abcdefg` may arrive as `['abc']`, `['defg']`.
- `abc\nefg` may arrive as `['abc', '']`, `['efg']` or `['abc']`,
`['','efg']`, or even `['ab']`, `['c','efg']`.
If you only are interested in complete output when the process exits,
use buffered mode. Otherwise, an easy way to deal with this:
initialize a list as `['']`, then append to it as follows: >
let s:chunks = ['']
func! s:on_event(job_id, data, event) dict
let s:chunks[-1] .= a:data[0]
call extend(s:chunks, a:data[1:])
endf
<
Additionally, if the callbacks are Dictionary functions, |self| can be used to
refer to the options dictionary containing the callbacks. |Partial|s can also be
used as callbacks.
Data can be sent to the channel using the |chansend()| function. Here is a
simple example, echoing some data through a cat-process:
>
function! s:OnEvent(id, data, event) dict
let str = join(a:data, "\n")
echomsg str
endfunction
let id = jobstart(['cat'], {'on_stdout': function('s:OnEvent') } )
call chansend(id, "hello!")
<
Here is a example of setting a buffer to the result of grep, but only after
all data has been processed:
>
function! s:OnEvent(id, data, event) dict
call nvim_buf_set_lines(2, 0, -1, v:true, a:data)
endfunction
let id = jobstart(['grep', '^[0-9]'], { 'on_stdout': function('s:OnEvent'),
\ 'stdout_buffered':v:true } )
call chansend(id, "stuff\n10 PRINT \"NVIM\"\nxx")
" no output is received, buffer is empty
call chansend(id, "xx\n20 GOTO 10\nzz\n")
call chanclose(id, 'stdin')
" now buffer has result
<
For additional examples with jobs, see |job-control|.
*channel-pty*
Special case: PTY channels opened with `jobstart(..., {'pty': v:true})` do not
preprocess ANSI escape sequences, these will be sent raw to the callback.
However, change of PTY size can be signaled to the slave using |jobresize()|.
See also |terminal-emulator|.
Terminal characteristics (termios) for |:terminal| and PTY channels are copied
from the host TTY, or if Nvim is |--headless| it uses default values: >
:echo system('nvim --headless +"te stty -a" +"sleep 1" +"1,/^$/print" +q')
==============================================================================
3. Communicating using msgpack-rpc *channel-rpc*
When channels are opened with the `rpc` option set to true, the channel can be
used for remote method calls in both directions, see |msgpack-rpc|. Note that
rpc channels are implicitly trusted and the process at the other end can
invoke any |api| function!
==============================================================================
4. Standard IO channel *channel-stdio*
Nvim uses stdin/stdout to interact with the user over the terminal interface
(TUI). If Nvim is |--headless| the TUI is not started and stdin/stdout can be
used as a channel. See also |--embed|.
Call |stdioopen()| during |startup| to open the stdio channel as channel-id 1.
Nvim's stderr is always available as channel-id 2 (|v:stderr| to be explicit),
a write-only bytes channel.
Example: >
func! OnEvent(id, data, event)
if a:data == [""]
quit
end
call chansend(a:id, map(a:data, {i,v -> toupper(v)}))
endfunc
call stdioopen({'on_stdin': 'OnEvent'})
<
Put this in `uppercase.vim` and run: >
nvim --headless --cmd "source uppercase.vim"
==============================================================================
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@ -382,7 +382,7 @@ CTRL-N After using 'wildchar' which got multiple matches, go to next
<S-Tab> *c_CTRL-P* *c_<S-Tab>*
CTRL-P After using 'wildchar' which got multiple matches, go to
previous match. Otherwise recall older command-line from
history. <S-Tab> only works with the GUI.
history.
*c_CTRL-A*
CTRL-A All names that match the pattern in front of the cursor are
inserted.
@ -1088,7 +1088,7 @@ Another example: >
:au CmdwinEnter [/?] startinsert
This will make Vim start in Insert mode in the command-line window.
*cmdwin-char*
*cmdline-char* *cmdwin-char*
The character used for the pattern indicates the type of command-line:
: normal Ex command
> debug mode command |debug-mode|

View File

@ -12,16 +12,16 @@ updated.
==============================================================================
Normal commands ~
*]f*
*[f* Same as "gf".
Commands ~
*:rv*
*:rviminfo* Deprecated alias to |:rshada| command.
*:wv*
*:wviminfo* Deprecated alias to |:wshada| command.
Environment Variables ~
*$NVIM_LISTEN_ADDRESS* Deprecated in favor of |--listen|. If both are given,
$NVIM_LISTEN_ADDRESS is ignored.
Events ~
*EncodingChanged* Never fired; 'encoding' is always "utf-8".
*FileEncoding* Never fired; equivalent to |EncodingChanged|.
@ -37,6 +37,8 @@ Functions ~
*file_readable()* Obsolete name for |filereadable()|.
*highlight_exists()* Obsolete name for |hlexists()|.
*highlightID()* Obsolete name for |hlID()|.
*jobclose()* Obsolete name for |chanclose()|
*jobsend()* Obsolete name for |chansend()|
*last_buffer_nr()* Obsolete name for bufnr("$").
Modifiers ~
@ -45,11 +47,22 @@ Modifiers ~
*:map-<special>*
*:map-special* <> notation is always enabled. |cpo-<|
Normal commands ~
*]f*
*[f* Same as "gf".
Options ~
*'cscopeverbose'* Enabled by default. Use |:silent| instead.
'gd'
'gdefault' Enables the |:substitute| flag 'g' by default.
*'fe'* 'fenc'+'enc' before Vim 6.0; no longer used.
*'highlight'* *'hl'* Names of builtin |highlight-groups| cannot be changed.
*'highlight'* *'hl'* Names of builtin |highlight-groups| cannot be changed.
*'langnoremap'* Deprecated alias to 'nolangremap'.
*'vi'*
*'viminfo'* Deprecated alias to 'shada' option.
Variables~
*b:terminal_job_pid* PID of the top-level process in a |:terminal|.
Use `jobpid(&channel)` instead.
vim:noet:tw=78:ts=8:ft=help:norl:

View File

@ -203,7 +203,7 @@ DOCUMENTATION *dev-doc*
API *dev-api*
Use this pattern to name new API functions:
Use this template to name new API functions:
nvim_{thing}_{action}_{arbitrary-qualifiers}
If the function acts on an object then {thing} is the name of that object
@ -231,6 +231,11 @@ Example: `nvim_list_bufs` operates in a global context (first parameter is
_not_ a Buffer). The common {action} "list" indicates that it lists all
bufs (plural) in the global context.
Use this template to name new API events:
nvim_{thing}_{event}_event
Example: `nvim_buf_changedtick_event`.
API-CLIENT *dev-api-client*
@ -257,22 +262,22 @@ C project source, too. https://github.com/libmpack/libmpack/
EXTERNAL UI *dev-ui*
Compatibility ~
External UIs should be aware of the |api-contract|. In particular, future
versions of Nvim may add new items to existing events. The API is strongly
backwards-compatible, but clients must not break if new fields are added to
existing events.
backwards-compatible, but clients must not break if new (optional) fields are
added to existing events.
Common Features ~
External UIs are expected to implement these common features:
- Cursor style (shape, color) should respond to the 'guicursor' properties
- Cursor style (shape, color) should conform to the 'guicursor' properties
delivered with the mode_info_set UI event.
- Send the ALT/META ("Option" on macOS) key as a |<M-| chord.
- Send the "super" key (Windows key, Apple key) as a |<D-| chord.
Implementation ~
- Options can be monitored for changes by the |OptionSet| autocmd. E.g. if the
user sets the 'guifont' option, this autocmd notifies channel 42: >
autocmd OptionSet guifont call rpcnotify(42, 'option-changed', 'guifont', &guifont)
- Avoid mappings that conflict with the Nvim keymap-space; GUIs have many new
chords (<C-,> <C-Enter> <C-S-x> <D-x>) and patterns ("shift shift") that do
not potentially conflict with Nvim defaults, plugins, etc.
- Consider the "option_set" |ui-global| event as a hint for other GUI
behaviors. UI-related options ('guifont', 'ambiwidth', …) are published in
this event.
vim:tw=78:ts=8:ft=help:norl:

View File

@ -165,7 +165,7 @@ loaded. Since Vim doesn't allow having two buffers for the same file, you
need another buffer. This command is useful: >
command DiffOrig vert new | set buftype=nofile | read ++edit # | 0d_
\ | diffthis | wincmd p | diffthis
(this is in |vimrc_example.vim|). Use ":DiffOrig" to see the differences
Use ":DiffOrig" to see the differences
between the current buffer and the file it was loaded from.
A buffer that is unloaded cannot be used for the diff. But it does work for

View File

@ -562,16 +562,16 @@ list of the current window.
buffer.
Also see |++opt| and |+cmd|.
:[count]arge[dit][!] [++opt] [+cmd] {name} *:arge* *:argedit*
Add {name} to the argument list and edit it.
:[count]arge[dit][!] [++opt] [+cmd] {name} .. *:arge* *:argedit*
Add {name}s to the argument list and edit it.
When {name} already exists in the argument list, this
entry is edited.
This is like using |:argadd| and then |:edit|.
Note that only one file name is allowed, and spaces
inside the file name are allowed, like with |:edit|.
Spaces in filenames have to be escaped with "\".
[count] is used like with |:argadd|.
[!] is required if the current file cannot be
|abandon|ed.
If the current file cannot be |abandon|ed {name}s will
still be added to the argument list, but won't be
edited. No check for duplicates is done.
Also see |++opt| and |+cmd|.
:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*

File diff suppressed because it is too large Load Diff

View File

@ -24,10 +24,8 @@ Each time a new or existing file is edited, Vim will try to recognize the type
of the file and set the 'filetype' option. This will trigger the FileType
event, which can be used to set the syntax highlighting, set options, etc.
Detail: The ":filetype on" command will load one of these files:
Mac $VIMRUNTIME/filetype.vim
MS-DOS $VIMRUNTIME\filetype.vim
Unix $VIMRUNTIME/filetype.vim
Detail: The ":filetype on" command will load this file:
$VIMRUNTIME/filetype.vim
This file is a Vim script that defines autocommands for the
BufNewFile and BufRead events. If the file type is not found by the
name, the file $VIMRUNTIME/scripts.vim is used to detect it from the

View File

@ -4,42 +4,19 @@
VIM REFERENCE MANUAL by Andy Kahn
*cscope* *Cscope*
This document explains how to use Vim's cscope interface.
Cscope is a "code intelligence" tool that helps you navigate C programs. It
can also perform some refactoring tasks, such as renaming a global variable in
all source files. Think of it as "ctags on steroids".
Cscope is a tool like ctags, but think of it as ctags on steroids since it
does a lot more than what ctags provides. In Vim, jumping to a result from
a cscope query is just like jumping to any tag; it is saved on the tag stack
so that with the right keyboard mappings, you can jump back and forth between
functions as you normally would with |tags|.
See |cscope-usage| for a quickstart.
Type |gO| to see the table of contents.
==============================================================================
1. Cscope introduction *cscope-intro*
Cscope introduction *cscope-intro*
The following text is taken from a version of the cscope man page:
-----
Cscope is an interactive screen-oriented tool that helps you:
Learn how a C program works without endless flipping through a thick
listing.
Locate the section of code to change to fix a bug without having to
learn the entire program.
Examine the effect of a proposed change such as adding a value to an
enum variable.
Verify that a change has been made in all source files such as adding
an argument to an existing function.
Rename a global variable in all source files.
Change a constant to a preprocessor symbol in selected lines of files.
It is designed to answer questions like:
Cscope is designed to answer questions like:
Where is this symbol used?
Where is it defined?
Where did this variable get its value?
@ -51,35 +28,17 @@ The following text is taken from a version of the cscope man page:
Where is this source file in the directory structure?
What files include this header file?
Cscope answers these questions from a symbol database that it builds the
first time it is used on the source files. On a subsequent call, cscope
rebuilds the database only if a source file has changed or the list of
source files is different. When the database is rebuilt the data for the
unchanged files is copied from the old database, which makes rebuilding
much faster than the initial build.
-----
When cscope is normally invoked, you will get a full-screen selection
screen allowing you to make a query for one of the above questions.
However, once a match is found to your query and you have entered your
text editor to edit the source file containing match, you cannot simply
jump from tag to tag as you normally would with vi's Ctrl-] or :tag
command.
Vim's cscope interface is done by invoking cscope with its line-oriented
interface, and then parsing the output returned from a query. The end
result is that cscope query results become just like regular tags, so
you can jump to them just like you do with normal tags (Ctrl-] or :tag)
and then go back by popping off the tagstack with Ctrl-T. (Please note
however, that you don't actually jump to a cscope tag simply by doing
Ctrl-] or :tag without remapping these commands or setting an option.
See the remaining sections on how the cscope interface works and for
suggested use.)
Cscope answers these questions from a symbol database that it builds the first
time it is used on the source files. On a subsequent call, cscope rebuilds
the database only if a source file has changed or the list of source files is
different. When the database is rebuilt the data for the unchanged files is
copied from the old database, which makes rebuilding much faster than the
initial build.
See |cscope-usage| to get started.
==============================================================================
2. Cscope related commands *cscope-commands*
Cscope commands *cscope-commands*
*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
All cscope commands are accessed through suboptions to the cscope commands.
@ -232,7 +191,7 @@ through your tags file(s).
==============================================================================
3. Cscope options *cscope-options*
Cscope options *cscope-options*
Use the |:set| command to set all cscope options. Ideally, you would do
this in one of your startup files (e.g., vimrc). Some cscope related
@ -245,7 +204,6 @@ started will have no effect!
:set csprg=/usr/local/bin/cscope
<
*cscopequickfix* *csqf* *E469*
{not available when compiled without the |+quickfix| feature}
'cscopequickfix' specifies whether to use quickfix window to show cscope
results. This is a list of comma-separated values. Each item consists of
|cscope-find| command (s, g, d, c, t, e, f, i or a) and flag (+, - or 0).
@ -260,81 +218,56 @@ seems to be useful: >
If 'cscopetag' is set, the commands ":tag" and CTRL-] as well as "vim -t"
will always use |:cstag| instead of the default :tag behavior. Effectively,
by setting 'cst', you will always search your cscope databases as well as
your tag files. The default is off. Examples: >
:set cst
:set nocst
<
your tag files. The default is off.
*cscoperelative* *csre*
If 'cscoperelative' is set, then in absence of a prefix given to cscope
(prefix is the argument of -P option of cscope), basename of cscope.out
location (usually the project root directory) will be used as the prefix
to construct an absolute path. The default is off. Note: This option is
only effective when cscope (cscopeprg) is initialized without a prefix
path (-P). Examples: >
:set csre
:set nocsre
<
path (-P).
*cscopetagorder* *csto*
The value of 'csto' determines the order in which |:cstag| performs a search.
If 'csto' is set to zero, cscope database(s) are searched first, followed
by tag file(s) if cscope did not return any matches. If 'csto' is set to
one, tag file(s) are searched before cscope database(s). The default is zero.
Examples: >
:set csto=0
:set csto=1
<
*cscopeverbose* *csverb*
If 'cscopeverbose' is not set (the default), messages will not be printed
indicating success or failure when adding a cscope database. Ideally, you
should reset this option in your |init.vim| before adding any cscope
databases, and after adding them, set it. From then on, when you add more
databases within Vim, you will get a (hopefully) useful message should the
database fail to be added. Examples: >
:set csverb
:set nocsverb
<
*cscopepathcomp* *cspc*
The value of 'cspc' determines how many components of a file's path to
display. With the default value of zero the entire path will be displayed.
'cscopepathcomp' determines how many components of a file's path to display.
With the default value of zero the entire path will be displayed.
The value one will display only the filename with no path. Other values
display that many components. For example: >
:set cspc=3
:set cscopepathcomp=3
will display the last 3 components of the file's path, including the file
name itself.
==============================================================================
4. How to use cscope in Vim *cscope-howtouse*
Using cscope in Nvim *cscope-usage* *cscope-howtouse*
The first thing you need to do is to build a cscope database for your
source files. For the most basic case, simply do "cscope -b". Please
refer to the cscope man page for more details.
To get started, build the cscope database in your project root directory: >
cscope -bcqR
Assuming you have a cscope database, you need to "add" the database to Vim.
This establishes a cscope "connection" and makes it available for Vim to use.
You can do this in your vimrc file, or you can do it manually after starting
vim. For example, to add the cscope database "cscope.out", you would do:
See the cscope manpage for details: >
:Man cscope
:cs add cscope.out
By default the cscope database file is named "cscope.out". After building the
database, connect to it from Nvim: >
:cscope add cscope.out
You can double-check the result of this by executing ":cs show". This will
produce output which looks like this:
That establishes a cscope connection for Nvim to use. You can check the
result with ":cs show". It will show something like:
# pid database name prepend path
0 28806 cscope.out <none>
Note:
Because of the Microsoft RTL limitations, Win32 version shows 0 instead
of the real pid.
Once a cscope connection is established, you can make queries to cscope and
the results will be printed to you. Queries are made using the command
":cs find". For example:
the results will be printed. Queries are made using the command ":cs find".
For example: >
:cs find g ALIGN_SIZE
This can get a little cumbersome since one ends up doing a significant
amount of typing. Fortunately, there are ways around this by mapping
shortcut keys. See |cscope-suggestions| for suggested usage.
To make this easier you can configure mappings, see |cscope-suggestions|.
If the results return only one match, you will automatically be taken to it.
If there is more than one match, you will be given a selection screen to pick
@ -343,39 +276,28 @@ simply hit Ctrl-T to get back to the previous one.
==============================================================================
5. Limitations *cscope-limitations*
Cscope support for Vim is only available on systems that support these four
system calls: fork(), pipe(), execl(), waitpid(). This means it is mostly
limited to Unix systems.
Additionally Cscope support works for Win32. For more information and a
cscope version for Win32 see:
http://iamphet.nm.ru/cscope/index.html
Limitations *cscope-limitations*
Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files
is not configurable (e.g., you can't do a tselect instead).
==============================================================================
6. Suggested usage *cscope-suggestions*
Put these entries in your vimrc (adjust the pathname accordingly to your
setup): >
==============================================================================
Sample config *cscope-suggestions*
Copy this into your init.vim (adjust paths for your system): >
if has("cscope")
set csprg=/usr/local/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
silent cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
silent cs add $CSCOPE_DB
endif
set csverb
endif
By setting 'cscopetag', we have effectively replaced all instances of the :tag
@ -447,47 +369,6 @@ Cscope Home Page (http://cscope.sourceforge.net/): >
\:vert scs find d <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space><C-Space>a
\:vert scs find a <C-R>=expand("<cword>")<CR><CR>
==============================================================================
7. Cscope availability and information *cscope-info*
If you do not already have cscope (it did not come with your compiler
license or OS distribution), then you can download it for free from:
http://cscope.sourceforge.net/
This is released by SCO under the BSD license.
If you want a newer version of cscope, you will probably have to buy it.
According to the (old) nvi documentation:
You can buy version 13.3 source with an unrestricted license
for $400 from AT&T Software Solutions by calling +1-800-462-8146.
Also you can download cscope 13.x and mlcscope 14.x (multi-lingual cscope
which supports C, C++, Java, lex, yacc, breakpoint listing, Ingres, and SDL)
from World-Wide Exptools Open Source packages page:
http://www.bell-labs.com/project/wwexptools/packages.html
In Solaris 2.x, if you have the C compiler license, you will also have
cscope. Both are usually located under /opt/SUNWspro/bin
SGI developers can also get it. Search for Cscope on this page:
http://freeware.sgi.com/index-by-alpha.html
https://toolbox.sgi.com/toolbox/utilities/cscope/
The second one is for those who have a password for the SGI toolbox.
There is source to an older version of a cscope clone (called "cs") available
on the net. Due to various reasons, this is not supported with Vim.
The cscope interface/support for Vim was originally written by
Andy Kahn <ackahn@netapp.com>. The original structure (as well as a tiny
bit of code) was adapted from the cscope interface in nvi. Please report
any problems, suggestions, patches, et al., you have for the usage of
cscope within Vim to him.
*cscope-win32*
For a cscope version for Win32 see:
http://code.google.com/p/cscope-win32/
Win32 support was added by Sergey Khorev <sergey.khorev@gmail.com>. Contact
him if you have Win32-specific issues.
<
vim:tw=78:ts=8:ft=help:norl:

View File

@ -310,14 +310,22 @@ semantically equivalent in Lua to:
return chunk(arg) -- return typval
end
Note that "_A" receives the argument to "luaeval". Lua nils, numbers, strings,
tables and booleans are converted to their respective VimL types. An error is
thrown if conversion of any of the remaining Lua types is attempted.
Lua nils, numbers, strings, tables and booleans are converted to their
respective VimL types. An error is thrown if conversion of any other Lua types
is attempted.
Note 2: lua tables are used as both dictionaries and lists, thus making it
impossible to determine whether empty table is meant to be empty list or empty
dictionary. Additionally lua does not have integer numbers. To distinguish
between these cases there is the following agreement:
The magic global "_A" contains the second argument to luaeval().
Example: >
:echo luaeval('_A[1] + _A[2]', [40, 2])
42
:echo luaeval('string.match(_A, "[a-z]+")', 'XYXfoo123')
foo
Lua tables are used as both dictionaries and lists, so it is impossible to
determine whether empty table is meant to be empty list or empty dictionary.
Additionally lua does not have integer numbers. To distinguish between these
cases there is the following agreement:
0. Empty table is empty list.
1. Table with N incrementally growing integral numbers, starting from 1 and

View File

@ -320,6 +320,21 @@ The examples below assume a 'shiftwidth' of 4.
{ {
void function(); void function();
} }
<
*cino-E*
EN Indent inside C++ linkage specifications (extern "C" or
extern "C++") N characters extra compared to a normal block.
(default 0).
cino= cino=E-s >
extern "C" { extern "C" {
void function(); void function();
} }
extern "C" extern "C"
{ {
void function(); void function();
} }
<
*cino-p*
pN Parameter declarations for K&R-style function declarations will
@ -550,7 +565,7 @@ The examples below assume a 'shiftwidth' of 4.
The defaults, spelled out in full, are:
cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,E0,ps,ts,is,+s,
c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
Vim puts a line in column 1 if:

View File

@ -40,10 +40,11 @@ char action ~
*i_CTRL-[* *i_<Esc>*
<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish
abbreviation.
Note: If your <Esc> key is hard to hit on your keyboard, train
yourself to use CTRL-[.
If Esc doesn't work and you are using a Mac, try CTRL-Esc.
Or disable Listening under Accessibility preferences.
Note: If your <Esc> key is hard to hit, try CTRL-[ instead.
*i_META* *i_ALT*
ALT (|META|) acts like <Esc> if the chord is not mapped.
For example <A-x> acts like <Esc>x if <A-x> does not have an
insert-mode mapping.
*i_CTRL-C*
CTRL-C Quit insert mode, go back to Normal mode. Do not check for
abbreviations. Does not trigger the |InsertLeave| autocommand
@ -1077,6 +1078,8 @@ items:
item with the same word is already present.
empty when non-zero this match will be added even when it is
an empty string
user_data custom data which is associated with the item and
available in |v:completed_item|
All of these except "icase", "dup" and "empty" must be a string. If an item
does not meet these requirements then an error message is given and further
@ -1170,6 +1173,8 @@ The menu is used when:
The 'pumheight' option can be used to set a maximum height. The default is to
use all space available.
The 'pumwidth' option can be used to set a minimum width. The default is 15
characters.
There are three states:
1. A complete match has been inserted, e.g., after using CTRL-N or CTRL-P.

View File

@ -642,28 +642,12 @@ The command CTRL-\ CTRL-G or <C-\><C-G> can be used to go to Insert mode when
make sure Vim is in the mode indicated by 'insertmode', without knowing in
what mode Vim currently is.
*Q* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
Q Switch to "Ex" mode. This is a bit like typing ":"
commands one after another, except:
*gQ* *Q* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
Q or gQ Switch to Ex mode. This is like typing ":" commands
one after another, except:
- You don't have to keep pressing ":".
- The screen doesn't get updated after each command.
- There is no normal command-line editing.
- Mappings and abbreviations are not used.
In fact, you are editing the lines with the "standard"
line-input editing commands (<Del> or <BS> to erase,
CTRL-U to kill the whole line).
Vim will enter this mode by default if it's invoked as
"ex" on the command-line.
Use the ":vi" command |:visual| to exit "Ex" mode.
Note: In older versions of Vim "Q" formatted text,
that is now done with |gq|. But if you use the
|vimrc_example.vim| script "Q" works like "gq".
*gQ*
gQ Switch to "Ex" mode like with "Q", but really behave
like typing ":" commands after another. All command
line editing, completion etc. is available.
Use the ":vi" command |:visual| to exit "Ex" mode.
Use the ":vi" command |:visual| to exit this mode.
==============================================================================
7. The window contents *window-contents*

View File

@ -20,6 +20,8 @@ When a job starts it is assigned a number, unique for the life of the current
Nvim session. Functions like |jobstart()| return job ids. Functions like
|jobsend()|, |jobstop()|, |rpcnotify()|, and |rpcrequest()| take job ids.
The job's stdio streams are represented as a |channel|. It is possible to send
and recieve raw bytes, or use |msgpack-rpc|.
==============================================================================
Usage *job-control-usage*
@ -28,7 +30,7 @@ To control jobs, use the "job…" family of functions: |jobstart()|,
Example: >
function! s:JobHandler(job_id, data, event) dict
function! s:OnEvent(job_id, data, event) dict
if a:event == 'stdout'
let str = self.shell.' stdout: '.join(a:data)
elseif a:event == 'stderr'
@ -40,9 +42,9 @@ Example: >
call append(line('$'), str)
endfunction
let s:callbacks = {
\ 'on_stdout': function('s:JobHandler'),
\ 'on_stderr': function('s:JobHandler'),
\ 'on_exit': function('s:JobHandler')
\ 'on_stdout': function('s:OnEvent'),
\ 'on_stderr': function('s:OnEvent'),
\ 'on_exit': function('s:OnEvent')
\ }
let job1 = jobstart(['bash'], extend({'shell': 'shell 1'}, s:callbacks))
let job2 = jobstart(['bash', '-c', 'for i in {1..10}; do echo hello $i!; sleep 1; done'], extend({'shell': 'shell 2'}, s:callbacks))
@ -56,29 +58,17 @@ Description of what happens:
- The first shell is idle, waiting to read commands from its stdin.
- The second shell is started with -c which executes the command (a for-loop
printing 0 through 9) and then exits.
- `JobHandler()` callback is passed to |jobstart()| to handle various job
- `OnEvent()` callback is passed to |jobstart()| to handle various job
events. It displays stdout/stderr data received from the shells.
*on_stdout*
Arguments passed to on_stdout callback:
0: |job-id|
1: List of lines read from the stream. If the last item is not "" (empty
string), then it is an incomplete line that might be continued at the
next on_stdout invocation. See Note 2 below.
2: Event type: "stdout"
*on_stderr*
Arguments passed to on_stderr callback:
0: |job-id|
1: List of lines read from the stream. If the last item is not "" (empty
string), then it is an incomplete line that might be continued at the
next on_stderr invocation. See Note 2 below.
2: Event type: "stderr"
For |on_stdout| and |on_stderr| see |channel-callback|.
*on_exit*
Arguments passed to on_exit callback:
0: |job-id|
1: Exit-code of the process.
2: Event type: "exit"
Note: Buffered stdout/stderr data which has not been flushed by the sender
will not trigger the on_stdout/on_stderr callback (but if the process
ends, the on_exit callback will be invoked).
@ -137,13 +127,19 @@ The above example could be written in this "object-oriented" style: >
let instance = Shell.new('bomb',
\ 'for i in $(seq 9 -1 1); do echo $i 1>&$((i % 2 + 1)); sleep 1; done')
<
To send data to the job's stdin, use |jobsend()|: >
:call jobsend(job1, "ls\n")
:call jobsend(job1, "invalid-command\n")
:call jobsend(job1, "exit\n")
To send data to the job's stdin, use |chansend()|: >
:call chansend(job1, "ls\n")
:call chansend(job1, "invalid-command\n")
:call chansend(job1, "exit\n")
<
A job may be killed with |jobstop()|: >
:call jobstop(job1)
<
A job may be killed at any time with the |jobstop()| function:
>
:call jobstop(job1)
<
Individual streams can be closed without killing the job, see |chanclose()|.
==============================================================================
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@ -232,8 +232,9 @@ For this reason the following is blocked:
- Editing another buffer.
- The |:normal| command.
- Moving the cursor is allowed, but it is restored afterwards.
- If the cmdline is changed, the old text and cursor position are restored.
If you want the mapping to do any of these let the returned characters do
that.
that. Or use a |<Cmd>| mapping (which doesn't have these restrictions).
You can use getchar(), it consumes typeahead if there is any. E.g., if you
have these mappings: >
@ -272,6 +273,30 @@ again for using <expr>. This does work: >
Using 0x80 as a single byte before other text does not work, it will be seen
as a special key.
*<Cmd>* *:map-cmd*
The <Cmd> pseudokey may be used to define a "command mapping", which executes
the command directly (without changing modes, etc.). Where you might use
":...<CR>" in the {lhs} of a mapping, you can instead use "<Cmd>...<CR>".
Example: >
noremap x <Cmd>echo mode(1)<cr>
<
This is more flexible than `:<C-U>` in visual and operator-pending mode, or
`<C-O>:` in insert-mode, because the commands are executed directly in the
current mode (instead of always going to normal-mode). Visual-mode is
preserved, so tricks with |gv| are not needed. Commands can be invoked
directly in cmdline-mode (which otherwise would require timer hacks).
Unlike <expr> mappings, there are no special restrictions on the <Cmd>
command: it is executed as if an (unrestricted) |autocmd| was invoked or an
async event event was processed.
In select-mode, |:map| and |:vmap| command mappings are executed in
visual-mode. Use |:smap| to handle select-mode.
*E5520*
<Cmd> commands must terminate, that is, they must be followed by <CR> in the
{lhs} of the mapping definition. |Command-line| mode is never entered.
1.3 MAPPING AND MODES *:map-modes*
*mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o* *mapmode-t*
@ -386,7 +411,8 @@ state for Insert mode is also used when typing a character as an argument to
command like "f" or "t".
Language mappings will never be applied to already mapped characters. They
are only used for typed characters. This assumes that the language mapping
was already done when typing the mapping.
was already done when typing the mapping. Correspondingly, language mappings
are applied when recording macros, rather than when applying them.
1.4 LISTING MAPPINGS *map-listing*

View File

@ -834,7 +834,7 @@ keyboards and encodings.
The actual mappings are in the lines below "loadkeymap". In the example "a"
is mapped to "A" and "b" to "B". Thus the first item is mapped to the second
item. This is done for each line, until the end of the file.
These items are exactly the same as what can be used in a |:lnoremap| command,
These items are exactly the same as what can be used in a |:lmap| command,
using "<buffer>" to make the mappings local to the buffer.
You can check the result with this command: >
:lmap
@ -849,8 +849,9 @@ Since Vim doesn't know if the next character after a quote is really an "a",
it will wait for the next character. To be able to insert a single quote,
also add this line: >
'' '
Since the mapping is defined with |:lnoremap| the resulting quote will not be
used for the start of another character.
Since the mapping is defined with |:lmap| the resulting quote will not be
used for the start of another character defined in the 'keymap'.
It can be used in a standard |:imap| mapping.
The "accents" keymap uses this. *keymap-accents*
The first column can also be in |<>| form:
@ -1058,8 +1059,7 @@ widespread as file format.
A composing or combining character is used to change the meaning of the
character before it. The combining characters are drawn on top of the
preceding character.
Up to two combining characters can be used by default. This can be changed
with the 'maxcombine' option.
Up to six combining characters can be displayed.
When editing text a composing character is mostly considered part of the
preceding character. For example "x" will delete a character and its
following composing characters by default.

View File

@ -761,9 +761,8 @@ g'{mark} g`{mark}
Jump to the {mark}, but don't change the jumplist when
jumping within the current buffer. Example: >
g`"
< jumps to the last known position in a file. See
$VIMRUNTIME/vimrc_example.vim.
Also see |:keepjumps|.
< jumps to the last known position in a file.
See also |:keepjumps|.
*:marks*
:marks List all the current marks (not a motion command).

View File

@ -1,4 +1,3 @@
*msgpack_rpc.txt* Nvim
NVIM REFERENCE MANUAL by Thiago de Arruda
@ -61,24 +60,23 @@ To get a formatted dump of the API using python (requires the `pyyaml` and
==============================================================================
3. Connecting *rpc-connecting*
There are several ways to open a msgpack-rpc channel to an Nvim instance:
See |channel-intro|, for various ways to open a channel. Most of the channel
opening functions take an `rpc` key in the options dictionary, to enable rpc.
1. Through stdin/stdout when `nvim` is started with `--embed`. This is how
applications can embed Nvim.
Additionally, rpc channels can be opened by other processes connecting to
TCP/IP sockets or named pipes listened to by nvim.
2. Through stdin/stdout of some other process spawned by |jobstart()|.
Set the "rpc" key to |v:true| in the options dict to use the job's stdin
and stdout as a single msgpack channel that is processed directly by
Nvim. Then it is not possible to process raw data to or from the
process's stdin and stdout. stderr can still be used, though.
An rpc socket is automatically created with each instance. The socket
location is stored in |v:servername|. By default this is a named pipe
with an automatically generated address. See |XXX|.
3. Through the socket automatically created with each instance. The socket
location is stored in |v:servername|.
To make Nvim listen on a TCP/IP socket instead, specify |--listen|: >
nvim --listen 127.0.0.1:6666
<Also, more sockets and named pipes can be listened on using |serverstart()|.
Note that localhost TCP sockets are generally less secure than named pipes,
and can lead to vunerabilities like remote code execution.
4. Through a TCP/IP socket. To make Nvim listen on a TCP/IP socket, set the
|$NVIM_LISTEN_ADDRESS| environment variable before starting Nvim: >
NVIM_LISTEN_ADDRESS=127.0.0.1:6666 nvim
<
Connecting to the socket is the easiest way a programmer can test the API,
which can be done through any msgpack-rpc client library or full-featured
|api-client|. Here's a Ruby script that prints 'hello world!' in the current
@ -192,10 +190,10 @@ prefix is stripped off.
5. Types *rpc-types*
The Nvim C API uses custom types for all functions. |api-types|
At the RPC layer, the types can be split into two groups:
At the RPC layer, types form two groups:
- Basic types that map natively to msgpack (and probably have a default
representation in msgpack-supported programming languages)
- Basic types that map natively to msgpack (and have a default
representation in most msgpack-supported programming languages)
- Special Nvim types that map to msgpack EXT with custom type codes.
Basic types ~
@ -208,6 +206,8 @@ Basic types ~
Array -> msgpack array
Dictionary -> msgpack map
Note: in function calls, empty Array is accepted for Dictionary parameter.
Special types (msgpack EXT) ~
Buffer -> enum value kObjectTypeBuffer
@ -243,4 +243,4 @@ Even for statically compiled clients it is good practice to avoid hardcoding
the type codes, because a client may be built against one Nvim version but
connect to another with different type codes.
vim:tw=78:ts=8:ft=help:norl:

View File

@ -20,15 +20,24 @@ differences from Vim.
==============================================================================
Transitioning from Vim *nvim-from-vim*
To start the transition, create ~/.config/nvim/init.vim with these contents:
To start the transition, create init.vim in the correct directory for your
platform.
For Linux, macOS and other Unixes, create the file at ~/.config/nvim/init.vim.
For Windows, create the file at %LOCALAPPDATA%\nvim\init.vim. `%LOCALAPPDATA%`
usually expands to `C:\Users\<username>\AppData\Local`.
Note: If your system sets `$XDG_CONFIG_HOME`, use that instead of `~/.config`
or `%LOCALAPPDATA%` in the paths above. Nvim follows the XDG |base-directories|
convention.
Next, add these contents to the file:
>
set runtimepath^=~/.vim runtimepath+=~/.vim/after
let &packpath = &runtimepath
source ~/.vimrc
<
Note: If your system sets `$XDG_CONFIG_HOME`, use that instead of `~/.config`
in the code above. Nvim follows the XDG |base-directories| convention.
See |provider-python| and |provider-clipboard| for additional software you
might need to use some features.

View File

@ -96,7 +96,6 @@ global configuration.
- 'list' is disabled
- 'wrap' is disabled
- 'relativenumber' is disabled in |Terminal-mode| (and cannot be enabled)
You can change the defaults with a TermOpen autocommand: >
au TermOpen * setlocal list
@ -117,10 +116,8 @@ variables:
- *b:term_title* The settable title of the terminal, typically displayed in
the window title or tab title of a graphical terminal emulator. Programs
running in the terminal can set this title via an escape sequence.
- *b:terminal_job_id* The nvim job ID of the job running in the terminal. See
|job-control| for more information.
- *b:terminal_job_pid* The PID of the top-level process running in the
terminal.
- |'channel'| The nvim channel ID for the underlying PTY.
|chansend()| can be used to send input to the terminal.
These variables are initialized before TermOpen, so you can use them in
a local 'statusline'. Example: >

View File

@ -1213,6 +1213,12 @@ A jump table for the options with a short description can be found at |Q_op|.
< |Nvi| also has this option, but it only uses the first character.
See |cmdwin|.
*'channel'*
'channel' number (default: 0)
local to buffer
|Channel| connected to the buffer. Currently only used by
|terminal-emulator|. Is 0 if no terminal is open. Cannot be changed.
*'charconvert'* *'ccv'* *E202* *E214* *E513*
'charconvert' 'ccv' string (default "")
global
@ -1319,27 +1325,6 @@ A jump table for the options with a short description can be found at |Q_op|.
will additionally copy the text into register
'*'. See |clipboard|.
*clipboard-autoselect*
autoselect Works like the 'a' flag in 'guioptions': If present,
then whenever Visual mode is started, or the Visual
area extended, Vim tries to become the owner of the
windowing system's global selection or put the
selected text on the clipboard used by the selection
register "*. See |guioptions_a| and |quotestar| for
details. When the GUI is active, the 'a' flag in
'guioptions' is used, when the GUI is not active, this
"autoselect" flag is used.
Also applies to the modeless selection.
*clipboard-autoselectplus*
autoselectplus Like "autoselect" but using the + register instead of
the * register. Compare to the 'P' flag in
'guioptions'.
*clipboard-autoselectml*
autoselectml Like "autoselect", but for the modeless selection
only. Compare to the 'A' flag in 'guioptions'.
*'cmdheight'* *'ch'*
'cmdheight' 'ch' number (default 1)
global
@ -1822,12 +1807,6 @@ A jump table for the options with a short description can be found at |Q_op|.
Determines the order in which ":cstag" performs a search. See
|cscopetagorder|.
*'cscopeverbose'* *'csverb'*
*'nocscopeverbose'* *'nocsverb'*
'cscopeverbose' 'csverb' boolean (default off)
global
Give messages when adding a cscope database. See |cscopeverbose|.
*'cursorbind'* *'crb'* *'nocursorbind'* *'nocrb'*
'cursorbind' 'crb' boolean (default off)
local to window
@ -2045,7 +2024,7 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons.
*'display'* *'dy'*
'display' 'dy' string (default "lastline", Vi default: "")
'display' 'dy' string (default "lastline,msgsep", Vi default: "")
global
Change the way text is displayed. This is comma separated list of
flags:
@ -2057,6 +2036,10 @@ A jump table for the options with a short description can be found at |Q_op|.
column of the last screen line. Overrules "lastline".
uhex Show unprintable characters hexadecimal as <xx>
instead of using ^C and ~C.
msgsep When showing messages longer than 'cmdheight', only
scroll the message lines, not the entire screen. The
separator line is decorated by |MsgSeparator| and the
"msgsep" flag of 'fillchars'.
When neither "lastline" nor "truncate" is included, a last line that
doesn't fit is replaced with "@" lines.
@ -2079,13 +2062,11 @@ A jump table for the options with a short description can be found at |Q_op|.
*'encoding'* *'enc'* *E543*
'encoding' 'enc' Removed. |vim-differences| {Nvim}
Nvim always uses UTF-8 internally. RPC communication
(remote plugins/GUIs) must use UTF-8 strings.
'encoding' 'enc'
String-encoding used internally and for |RPC| communication.
Always UTF-8.
The character encoding of files can be different than UTF-8.
This is specified with 'fileencoding'. The conversion is done with
iconv() or as specified with 'charconvert'.
See 'fileencoding' to control file-content encoding.
*'endofline'* *'eol'* *'noendofline'* *'noeol'*
'endofline' 'eol' boolean (default on)
@ -2201,16 +2182,16 @@ A jump table for the options with a short description can be found at |Q_op|.
*'fileencoding'* *'fenc'* *E213*
'fileencoding' 'fenc' string (default: "")
local to buffer
{only available when compiled with the |+multi_byte|
feature}
Sets the character encoding for the file of this buffer.
File-content encoding for the current buffer. Conversion is done with
iconv() or as specified with 'charconvert'.
When 'fileencoding' is different from "utf-8", conversion will be
done when writing the file. For reading see below.
When 'fileencoding' is empty, the file will be saved with utf-8
encoding. (no conversion when reading or writing a file).
WARNING: Conversion to a non-Unicode encoding can cause loss of
information!
When 'fileencoding' is not UTF-8, conversion will be done when
writing the file. For reading see below.
When 'fileencoding' is empty, the file will be saved with UTF-8
encoding (no conversion when reading or writing a file).
WARNING: Conversion to a non-Unicode encoding can cause loss of
information!
See |encoding-names| for the possible values. Additionally, values may be
specified that can be handled by the converter, see
@ -2237,7 +2218,7 @@ A jump table for the options with a short description can be found at |Q_op|.
written. If you do set 'fenc' in a modeline, you might want to set
'nomodified' to avoid not being able to ":q".
This option can not be changed when 'modifiable' is off.
This option cannot be changed when 'modifiable' is off.
*'fileencodings'* *'fencs'*
'fileencodings' 'fencs' string (default: "ucs-bom,utf-8,default,latin1")
@ -2310,7 +2291,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'fileformats' is not empty and 'binary' is off.
When this option is set, after starting to edit a file, the 'modified'
option is set, because the file would be different when written.
This option can not be changed when 'modifiable' is off.
This option cannot be changed when 'modifiable' is off.
*'fileformats'* *'ffs'*
'fileformats' 'ffs' string (default:
@ -2398,7 +2379,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Only normal file name characters can be used, "/\*?[|<>" are illegal.
*'fillchars'* *'fcs'*
'fillchars' 'fcs' string (default "vert:|,fold:-")
'fillchars' 'fcs' string (default "")
global
{not available when compiled without the |+windows|
and |+folding| features}
@ -2408,16 +2389,21 @@ A jump table for the options with a short description can be found at |Q_op|.
item default Used for ~
stl:c ' ' or '^' statusline of the current window
stlnc:c ' ' or '=' statusline of the non-current windows
vert:c '|' vertical separators |:vsplit|
fold:c '-' filling 'foldtext'
vert:c '│' or '|' vertical separators |:vsplit|
fold:c '·' or '-' filling 'foldtext'
diff:c '-' deleted lines of the 'diff' option
msgsep:c ' ' message separator 'display'
eob:c '~' empty lines at the end of a buffer
Any one that is omitted will fall back to the default. For "stl" and
"stlnc" the space will be used when there is highlighting, '^' or '='
otherwise.
If 'ambiwidth' is "double" then "vert" and "fold" default to
single-byte alternatives.
Example: >
:set fillchars=stl:^,stlnc:=,vert:\|,fold:-,diff:-
:set fillchars=stl:^,stlnc:=,vert:,fold:·,diff:-
< This is similar to the default, except that these characters will also
be used when there is highlighting.
@ -2430,6 +2416,7 @@ A jump table for the options with a short description can be found at |Q_op|.
vert:c VertSplit |hl-VertSplit|
fold:c Folded |hl-Folded|
diff:c DiffDelete |hl-DiffDelete|
eob:c EndOfBuffer |hl-EndOfBuffer|
*'fixendofline'* *'fixeol'* *'nofixendofline'* *'nofixeol'*
'fixendofline' 'fixeol' boolean (default on)
@ -2702,17 +2689,19 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons.
*'fsync'* *'fs'*
'fsync' 'fs' boolean (default on)
'fsync' 'fs' boolean (default off)
global
When on, the library function fsync() will be called after writing a
file. This will flush a file to disk, ensuring that it is safely
written even on filesystems which do metadata-only journaling. This
will force the harddrive to spin up on Linux systems running in laptop
mode, so it may be undesirable in some situations. Be warned that
turning this off increases the chances of data loss after a crash.
When on, the OS function fsync() will be called after saving a file
(|:write|, |writefile()|, …), |swap-file| and |shada-file|. This
flushes the file to disk, ensuring that it is safely written.
Slow on some systems: writing buffers, quitting Nvim, and other
operations may sometimes take a few seconds.
Currently applies only to writing the buffer with e.g. |:w| and
|writefile()|.
Files are ALWAYS flushed ('fsync' is ignored) when:
- |CursorHold| event is triggered
- |:preserve| is called
- system signals low battery life
- Nvim exits abnormally
*'gdefault'* *'gd'* *'nogdefault'* *'nogd'*
'gdefault' 'gd' boolean (default off)
@ -2727,6 +2716,10 @@ A jump table for the options with a short description can be found at |Q_op|.
:s///g subst. one subst. all
:s///gg subst. all subst. one
DEPRECATED: Setting this option may break plugins that are not aware
of this option. Also, many users get confused that adding the /g flag
has the opposite effect of that it normally does.
*'grepformat'* *'gfm'*
'grepformat' 'gfm' string (default "%f:%l:%m,%f:%l%m,%f %l%m")
global
@ -3316,7 +3309,17 @@ A jump table for the options with a short description can be found at |Q_op|.
pattern and/or a lot of text the match may not be found. This is to
avoid that Vim hangs while you are typing the pattern.
The |hl-IncSearch| highlight group determines the highlighting.
See also: 'hlsearch'.
When 'hlsearch' is on, all matched strings are highlighted too while typing
a search command. See also: 'hlsearch'.
If you don't want turn 'hlsearch' on, but want to highlight all matches
while searching, you can turn on and off 'hlsearch' with autocmd.
Example: >
augroup vimrc-incsearch-highlight
autocmd!
autocmd CmdlineEnter /,\? :set hlsearch
autocmd CmdlineLeave /,\? :set nohlsearch
augroup END
<
CTRL-L can be used to add one character from after the current match
to the command line. If 'ignorecase' and 'smartcase' are set and the
command line has no uppercase characters, the added character is
@ -3687,7 +3690,7 @@ A jump table for the options with a short description can be found at |Q_op|.
< Minimum value is 2, maximum value is 1000.
*'linespace'* *'lsp'*
'linespace' 'lsp' number (default 0, 1 for Win32 GUI)
'linespace' 'lsp' number (default 0)
global
{only in the GUI}
Number of pixel lines inserted between characters. Useful if the font
@ -3824,6 +3827,23 @@ A jump table for the options with a short description can be found at |Q_op|.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
*'makeencoding'* *'menc'*
'makeencoding' 'menc' string (default "")
global or local to buffer |global-local|
{only available when compiled with the |+multi_byte|
feature}
{not in Vi}
Encoding used for reading the output of external commands. When empty,
encoding is not converted.
This is used for `:make`, `:lmake`, `:grep`, `:lgrep`, `:grepadd`,
`:lgrepadd`, `:cfile`, `:cgetfile`, `:caddfile`, `:lfile`, `:lgetfile`,
and `:laddfile`.
This would be mostly useful when you use MS-Windows. If |+iconv| is
enabled and GNU libiconv is used, setting 'makeencoding' to "char" has
the same effect as setting to the system locale encoding. Example: >
:set makeencoding=char " system locale is used
<
*'makeprg'* *'mp'*
'makeprg' 'mp' string (default "make")
global or local to buffer |global-local|
@ -3870,16 +3890,10 @@ A jump table for the options with a short description can be found at |Q_op|.
set a time. This is to be compatible with Nvi.
*'maxcombine'* *'mco'*
'maxcombine' 'mco' number (default 2)
global
{only available when compiled with the |+multi_byte|
feature}
The maximum number of combining characters supported for displaying.
The default is OK for most languages. Hebrew may require 4.
Maximum value is 6.
Even when this option is set to 2 you can still edit text with more
combining characters, you just can't see them. Use |g8| or |ga|.
See |mbyte-combining|.
'maxcombine' 'mco' Removed. |vim-differences| {Nvim}
Nvim always displays up to 6 combining characters. You can still edit
text with more than 6 combining characters, you just can't see them.
Use |g8| or |ga|. See |mbyte-combining|.
*'maxfuncdepth'* *'mfd'*
'maxfuncdepth' 'mfd' number (default 100)
@ -3903,16 +3917,6 @@ A jump table for the options with a short description can be found at |Q_op|.
because the 'w' is used before the next mapping is done. See also
|key-mapping|.
*'maxmem'* *'mm'*
'maxmem' 'mm' number (default between 256 to 5120 (system
dependent) or half the amount of memory
available)
global
Maximum amount of memory (in Kbyte) to use for one buffer. When this
limit is reached allocating extra memory for a buffer will cause
other memory to be freed. The maximum usable value is about 2000000.
Use this to work without a limit. Also see 'maxmemtot'.
*'maxmempattern'* *'mmp'*
'maxmempattern' 'mmp' number (default 1000)
global
@ -3926,20 +3930,6 @@ A jump table for the options with a short description can be found at |Q_op|.
"\(.\)*" on a very long line. ".*" works much better.
Vim may run out of memory before hitting the 'maxmempattern' limit.
*'maxmemtot'* *'mmt'*
'maxmemtot' 'mmt' number (default between 2048 and 10240 (system
dependent) or half the amount of memory
available)
global
Maximum amount of memory in Kbyte to use for all buffers together.
The maximum usable value is about 2000000 (2 Gbyte). Use this to work
without a limit.
On 64 bit machines higher values might work. But hey, do you really
need more than 2 Gbyte for text editing? Keep in mind that text is
stored in the swap file, one can edit files > 2 Gbyte anyway. We do
need the memory to store undo info.
Also see 'maxmem'.
*'menuitems'* *'mis'*
'menuitems' 'mis' number (default 25)
global
@ -4810,7 +4800,7 @@ A jump table for the options with a short description can be found at |Q_op|.
height with ":set scroll=0".
*'scrollback'* *'scbk'*
'scrollback' 'scbk' number (default: 1000
'scrollback' 'scbk' number (default: 10000
in normal buffers: -1)
local to buffer
Maximum number of lines kept beyond the visible screen. Lines at the
@ -5142,15 +5132,19 @@ A jump table for the options with a short description can be found at |Q_op|.
to escape quote: 'a\"b"' is the same as "a\b".
Note that such processing is done after |:set| did its own round of
unescaping, so to keep yourself sane use |:let-&| like shown above.
*shell-powershell*
To use powershell (on Windows): >
set shell=powershell shellquote=( shellpipe=\| shellredir=> shellxquote=
set shellcmdflag=-NoLogo\ -NoProfile\ -ExecutionPolicy\ RemoteSigned\ -Command
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.
*'shellcmdflag'* *'shcf'*
'shellcmdflag' 'shcf' string (default: "-c"; Windows: "/c")
'shellcmdflag' 'shcf' string (default: "-c"; Windows: "/s /c")
global
Flag passed to the shell to execute "!" and ":!" commands; e.g.,
"bash.exe -c ls" or "cmd.exe /c dir". For Windows
`bash.exe -c ls` or `cmd.exe /s /c "dir"`. For Windows
systems, the default is set according to the value of 'shell', to
reduce the need to set this option by the user.
On Unix it can have more than one flag. Each white space separated
@ -5271,7 +5265,7 @@ A jump table for the options with a short description can be found at |Q_op|.
to execute most external commands with cmd.exe.
*'shellxquote'* *'sxq'*
'shellxquote' 'sxq' string (default: "")
'shellxquote' 'sxq' string (default: "", Windows: "\"")
global
Quoting character(s), put around the command passed to the shell, for
the "!" and ":!" commands. Includes the redirection. See
@ -5299,7 +5293,7 @@ A jump table for the options with a short description can be found at |Q_op|.
function to get the effective shiftwidth value.
*'shortmess'* *'shm'*
'shortmess' 'shm' string (Vim default "filnxtToO", Vi default: "")
'shortmess' 'shm' string (Vim default "filnxtToOF", Vi default: "")
global
This option helps to avoid all the |hit-enter| prompts caused by file
messages, for example with CTRL-G, and to avoid some other messages.
@ -5435,14 +5429,13 @@ A jump table for the options with a short description can be found at |Q_op|.
See |tab-page| for more information about tab pages.
*'sidescroll'* *'ss'*
'sidescroll' 'ss' number (default 0)
'sidescroll' 'ss' number (default 1)
global
The minimal number of columns to scroll horizontally. Used only when
the 'wrap' option is off and the cursor is moved off of the screen.
When it is zero the cursor will be put in the middle of the screen.
When using a slow terminal set it to a large number or 0. When using
a fast terminal use a small number or 1. Not used for "zh" and "zl"
commands.
When using a slow terminal set it to a large number or 0. Not used
for "zh" and "zl" commands.
*'sidescrolloff'* *'siso'*
'sidescrolloff' 'siso' number (default 0)
@ -6207,7 +6200,6 @@ A jump table for the options with a short description can be found at |Q_op|.
When on, uses |highlight-guifg| and |highlight-guibg| attributes in
the terminal (thus using 24-bit color). Requires a ISO-8613-3
compatible terminal.
Must be set at startup (in your |init.vim| or |--cmd|).
*'terse'* *'noterse'*
'terse' boolean (default off)
@ -6273,15 +6265,14 @@ A jump table for the options with a short description can be found at |Q_op|.
*'timeoutlen'* *'tm'*
'timeoutlen' 'tm' number (default 1000)
global
The time in milliseconds that is waited for a mapped sequence to
complete.
Time in milliseconds to wait for a mapped sequence to complete.
*'ttimeoutlen'* *'ttm'*
'ttimeoutlen' 'ttm' number (default 50)
global
The time in milliseconds that is waited for a key code
sequence to complete. Also used for CTRL-\ CTRL-N and CTRL-\ CTRL-G
when part of a command has been typed.
Time in milliseconds to wait for a key code sequence to complete. Also
used for CTRL-\ CTRL-N and CTRL-\ CTRL-G when part of a command has
been typed.
*'title'* *'notitle'*
'title' boolean (default off)
@ -6439,6 +6430,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Currently, these messages are given:
>= 1 When the shada file is read or written.
>= 2 When a file is ":source"'ed.
>= 3 UI info, terminal capabilities
>= 5 Every searched tags file and include file.
>= 8 Files for which a group of autocommands is executed.
>= 9 Every executed autocommand.
@ -6474,7 +6466,7 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons.
*'viewoptions'* *'vop'*
'viewoptions' 'vop' string (default: "folds,options,cursor")
'viewoptions' 'vop' string (default: "folds,options,cursor,curdir")
global
{not available when compiled without the |+mksession|
feature}
@ -6482,6 +6474,7 @@ A jump table for the options with a short description can be found at |Q_op|.
list of words. Each word enables saving and restoring something:
word save and restore ~
cursor cursor position in file and in window
curdir local current directory, if set with |:lcd|
folds manually created folds, opened/closed folds and local
fold options
options options and mappings local to a window or buffer (not
@ -6909,7 +6902,8 @@ A jump table for the options with a short description can be found at |Q_op|.
'writedelay' 'wd' number (default 0)
global
The number of milliseconds to wait for each character sent to the
screen. When non-zero, characters are sent to the terminal one by
one. For debugging purposes.
screen. When positive, characters are sent to the UI one by one.
When negative, all redrawn characters cause a delay, even if the
character already was displayed by the UI. For debugging purposes.
vim:tw=78:ts=8:ft=help:noet:norl:

View File

@ -1071,25 +1071,27 @@ x A single character, with no special meaning, matches itself
- A character class expression is evaluated to the set of characters
belonging to that character class. The following character classes
are supported:
Name Contents ~
*[:alnum:]* [:alnum:] ASCII letters and digits
*[:alpha:]* [:alpha:] ASCII letters
*[:blank:]* [:blank:] space and tab characters
*[:cntrl:]* [:cntrl:] control characters
*[:digit:]* [:digit:] decimal digits
*[:graph:]* [:graph:] printable characters excluding space
*[:lower:]* [:lower:] lowercase letters (all letters when
Name Func Contents ~
*[:alnum:]* [:alnum:] isalnum ASCII letters and digits
*[:alpha:]* [:alpha:] isalpha ASCII letters
*[:blank:]* [:blank:] space and tab
*[:cntrl:]* [:cntrl:] iscntrl ASCII control characters
*[:digit:]* [:digit:] decimal digits '0' to '9'
*[:graph:]* [:graph:] isgraph ASCII printable characters excluding
space
*[:lower:]* [:lower:] (1) lowercase letters (all letters when
'ignorecase' is used)
*[:print:]* [:print:] printable characters including space
*[:punct:]* [:punct:] ASCII punctuation characters
*[:space:]* [:space:] whitespace characters
*[:upper:]* [:upper:] uppercase letters (all letters when
*[:print:]* [:print:] (2) printable characters including space
*[:punct:]* [:punct:] ispunct ASCII punctuation characters
*[:space:]* [:space:] whitespace characters: space, tab, CR,
NL, vertical tab, form feed
*[:upper:]* [:upper:] (3) uppercase letters (all letters when
'ignorecase' is used)
*[:xdigit:]* [:xdigit:] hexadecimal digits
*[:return:]* [:return:] the <CR> character
*[:tab:]* [:tab:] the <Tab> character
*[:escape:]* [:escape:] the <Esc> character
*[:backspace:]* [:backspace:] the <BS> character
*[:xdigit:]* [:xdigit:] hexadecimal digits: 0-9, a-f, A-F
*[:return:]* [:return:] the <CR> character
*[:tab:]* [:tab:] the <Tab> character
*[:escape:]* [:escape:] the <Esc> character
*[:backspace:]* [:backspace:] the <BS> character
The brackets in character class expressions are additional to the
brackets delimiting a collection. For example, the following is a
plausible pattern for a Unix filename: "[-./[:alnum:]_~]\+" That is,
@ -1100,6 +1102,13 @@ x A single character, with no special meaning, matches itself
regexp engine. See |two-engines|. In the future these items may
work for multi-byte characters. For now, to get all "alpha"
characters you can use: [[:lower:][:upper:]].
The "Func" column shows what library function is used. The
implementation depends on the system. Otherwise:
(1) Uses islower() for ASCII and Vim builtin rules for other
characters when built with the |+multi_byte| feature.
(2) Uses Vim builtin rules
(3) As with (1) but using isupper()
*/[[=* *[==]*
- An equivalence class. This means that characters are matched that
have almost the same meaning, e.g., when ignoring accents. This

View File

@ -23,11 +23,11 @@ Commands *health-commands*
*:checkhealth* *:CheckHealth*
:checkhealth Run all healthchecks.
*E5009*
Nvim depends on the |$VIMRUNTIME| environment variable
to find the standard "runtime files" for syntax
highlighting, filetype-specific behavior, and standard
plugins such as :checkhealth. If $VIMRUNTIME is invalid
then those features will not work.
Nvim depends on |$VIMRUNTIME| and 'runtimepath' to find
the standard "runtime files" for syntax highlighting,
filetype-specific behavior, and standard plugins
(including :checkhealth). If the runtime files cannot
be found then those features will not work.
:checkhealth {plugins}
Run healthcheck(s) for one or more plugins. E.g. to run

View File

@ -6,7 +6,7 @@
Author: Charles E. Campbell <NdrOchip@ScampbellPfamily.AbizM>
(remove NOSPAM from Campbell's email first)
Copyright: Copyright (C) 2017 Charles E Campbell *netrw-copyright*
Copyright: Copyright (C) 2016 Charles E Campbell *netrw-copyright*
The VIM LICENSE applies to the files in this package, including
netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and
syntax/netrw.vim. Like anything else that's free, netrw.vim and its
@ -17,6 +17,7 @@ Copyright: Copyright (C) 2017 Charles E Campbell *netrw-copyright*
holder be liable for any damages resulting from the use of this
software. Use at your own risk!
*netrw*
*dav* *ftp* *netrw-file* *rcp* *scp*
*davs* *http* *netrw.vim* *rsync* *sftp*
@ -72,7 +73,7 @@ Copyright: Copyright (C) 2017 Charles E Campbell *netrw-copyright*
Improving Browsing..................................|netrw-ssh-hack|
Listing Bookmarks And History.......................|netrw-qb|
Making A New Directory..............................|netrw-d|
Making The Browsing Directory The Current Directory.|netrw-cd|
Making The Browsing Directory The Current Directory.|netrw-c|
Marking Files.......................................|netrw-mf|
Unmarking Files.....................................|netrw-mF|
Marking Files By Location List......................|netrw-qL|
@ -82,7 +83,6 @@ Copyright: Copyright (C) 2017 Charles E Campbell *netrw-copyright*
Marked Files: Arbitrary Shell Command, En Bloc......|netrw-mX|
Marked Files: Arbitrary Vim Command.................|netrw-mv|
Marked Files: Argument List.........................|netrw-ma| |netrw-mA|
Marked Files: Buffer List...........................|netrw-cb| |netrw-cB|
Marked Files: Compression And Decompression.........|netrw-mz|
Marked Files: Copying...............................|netrw-mc|
Marked Files: Diff..................................|netrw-md|
@ -153,7 +153,7 @@ Windows' ftp doesn't support .netrc; however, one may have in one's .vimrc: >
let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\MyUserName\MACHINE'
<
Netrw will substitute the host's machine name for "MACHINE" from the URL it is
Netrw will substitute the host's machine name for "MACHINE" from the url it is
attempting to open, and so one may specify >
userid
password
@ -210,7 +210,7 @@ EXTERNAL APPLICATIONS AND PROTOCOLS *netrw-externapp* {{{2
http: g:netrw_http_cmd = "fetch" elseif fetch is available
http: *g:netrw_http_put_cmd* = "curl -T"
rcp: *g:netrw_rcp_cmd* = "rcp"
rsync: *g:netrw_rsync_cmd* = "rsync" (see |g:netrw_rsync_sep|)
rsync: *g:netrw_rsync_cmd* = "rsync -a"
scp: *g:netrw_scp_cmd* = "scp -q"
sftp: *g:netrw_sftp_cmd* = "sftp"
file: *g:netrw_file_cmd* = "elinks" or "links"
@ -221,7 +221,7 @@ EXTERNAL APPLICATIONS AND PROTOCOLS *netrw-externapp* {{{2
elinks : "-source >"
links : "-dump >"
curl : "-L -o"
curl : "-o"
wget : "-q -O"
fetch : "-o"
<
@ -236,7 +236,7 @@ EXTERNAL APPLICATIONS AND PROTOCOLS *netrw-externapp* {{{2
READING *netrw-read* *netrw-nread* {{{2
Generally, one may just use the URL notation with a normal editing
Generally, one may just use the url notation with a normal editing
command, such as >
:e ftp://[user@]machine/path
@ -258,7 +258,7 @@ READING *netrw-read* *netrw-nread* {{{2
WRITING *netrw-write* *netrw-nwrite* {{{2
One may just use the URL notation with a normal file writing
One may just use the url notation with a normal file writing
command, such as >
:w ftp://[user@]machine/path
@ -279,7 +279,7 @@ WRITING *netrw-write* *netrw-nwrite* {{{2
SOURCING *netrw-source* {{{2
One may just use the URL notation with the normal file sourcing
One may just use the url notation with the normal file sourcing
command, such as >
:so ftp://[user@]machine/path
@ -477,7 +477,7 @@ file using root-relative paths, use the full path:
==============================================================================
4. Network-Oriented File Transfer *netrw-xfer* {{{1
Network-oriented file transfer under Vim is implemented by a vim script
Network-oriented file transfer under Vim is implemented by a VimL-based script
(<netrw.vim>) using plugin techniques. It currently supports both reading and
writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
dav/cadaver, rsync, or sftp.
@ -530,7 +530,7 @@ variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
<
(note: it has been reported that windows 7 with putty v0.6's "-batch" option
doesn't work, so its best to leave it off for that system)
doesn't work, so it's best to leave it off for that system)
See |netrw-p8| for more about putty, pscp, psftp, etc.
@ -732,11 +732,11 @@ such as netrw.
The usual read/write commands are supported. There are also a few
additional commands available. Often you won't need to use Nwrite or
Nread as shown in |netrw-transparent| (ie. simply use >
:e URL
:r URL
:w URL
:e url
:r url
:w url
instead, as appropriate) -- see |netrw-urls|. In the explanations
below, a {netfile} is a URL to a remote file.
below, a {netfile} is an url to a remote file.
*:Nwrite* *:Nw*
:[range]Nw[rite] Write the specified lines to the current
@ -866,11 +866,9 @@ variables listed below, and may be modified by the user.
g:netrw_http_cmd var ="fetch -o" if fetch is available
g:netrw_http_cmd var ="wget -O" else if wget is available
g:netrw_http_put_cmd var ="curl -T"
|g:netrw_list_cmd| var ="ssh USEPORT HOSTNAME ls -Fa"
|g:netrw_list_cmd| var ="ssh USEPORT HOSTNAME ls -Fa"
g:netrw_rcp_cmd var ="rcp"
g:netrw_rsync_cmd var ="rsync"
*g:netrw_rsync_sep* var ="/" used to separate the hostname
from the file spec
g:netrw_rsync_cmd var ="rsync -a"
g:netrw_scp_cmd var ="scp -q"
g:netrw_sftp_cmd var ="sftp" >
-------------------------------------------------------------------------
@ -1007,7 +1005,7 @@ where [protocol] is typically scp or ftp. As an example, try: >
vim ftp://ftp.home.vim.org/pub/vim/
<
For local directories, the trailing slash is not required. Again, because it's
easy to miss: to browse remote directories, the URL must terminate with a
easy to miss: to browse remote directories, the url must terminate with a
slash!
If you'd like to avoid entering the password repeatedly for remote directory
@ -1077,9 +1075,9 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
<c-r> Browse using a gvim server |netrw-ctrl-r|
<c-tab> Shrink/expand a netrw/explore window |netrw-c-tab|
- Makes Netrw go up one directory |netrw--|
a Cycles between normal display, |netrw-a|
a Toggles between normal display, |netrw-a|
hiding (suppress display of files matching g:netrw_list_hide)
and showing (display only files which match g:netrw_list_hide)
showing (display only files which match g:netrw_list_hide)
c Make browsing directory the current directory |netrw-c|
C Setting the editing window |netrw-C|
d Make a directory |netrw-d|
@ -1090,7 +1088,6 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
gh Quick hide/unhide of dot-files |netrw-gh|
gn Make top of tree the directory below the cursor |netrw-gn|
i Cycle between thin, long, wide, and tree listings |netrw-i|
I Toggle the displaying of the banner |netrw-I|
mb Bookmark current directory |netrw-mb|
mc Copy marked files to marked-file target directory |netrw-mc|
md Apply diff to marked files (up to 3) |netrw-md|
@ -1170,26 +1167,25 @@ QUICK REFERENCE: COMMANDS *netrw-explore-cmds* *netrw-browse-cmds* {{{2
BANNER DISPLAY *netrw-I*
One may toggle the displaying of the banner by pressing "I".
One may toggle the banner display on and off by pressing "I".
Also See: |g:netrw_banner|
BOOKMARKING A DIRECTORY *netrw-mb* *netrw-bookmark* *netrw-bookmarks* {{{2
BOOKMARKING A DIRECTORY *netrw-mb* *netrw-bookmark* *netrw-bookmarks* {{{2
One may easily "bookmark" the currently browsed directory by using >
mb
<
*.netrwbook*
Bookmarks are retained in between sessions of vim in a file called .netrwbook
as a |List|, which is typically stored in the first directory on the user's
'|runtimepath|'; entries are kept in sorted order.
Bookmarks are retained in between sessions in a $HOME/.netrwbook file, and are
kept in sorted order.
If there are marked files and/or directories, mb will add them to the bookmark
list.
*netrw-:NetrwMB*
*netrw-:NetrwMB*
Addtionally, one may use :NetrwMB to bookmark files or directories. >
:NetrwMB[!] [files/directories]
@ -1208,7 +1204,7 @@ The :NetrwMB command is available outside of netrw buffers (once netrw has been
invoked in the session).
The file ".netrwbook" holds bookmarks when netrw (and vim) is not active. By
default, its stored on the first directory on the user's |'runtimepath'|.
default, it's stored on the first directory on the user's |'runtimepath'|.
Related Topics:
|netrw-gb| how to return (go) to a bookmark
@ -1420,20 +1416,20 @@ Related Topics:
CHANGING TO A PREDECESSOR DIRECTORY *netrw-u* *netrw-updir* {{{2
Every time you change to a new directory (new for the current session), netrw
will save the directory in a recently-visited directory history list (unless
|g:netrw_dirhistmax| is zero; by default, it holds ten entries). With the "u"
map, one can change to an earlier directory (predecessor). To do the
opposite, see |netrw-U|.
Every time you change to a new directory (new for the current session),
netrw will save the directory in a recently-visited directory history
list (unless |g:netrw_dirhistmax| is zero; by default, it's ten). With the
"u" map, one can change to an earlier directory (predecessor). To do
the opposite, see |netrw-U|.
The "u" map also accepts counts to go back in the history several slots. For
your convenience, qb (see |netrw-qb|) lists the history number which may be
used in that count.
The "u" map also accepts counts to go back in the history several slots.
For your convenience, qb (see |netrw-qb|) lists the history number which may
be used in that count.
*.netrwhist*
See |g:netrw_dirhistmax| for how to control the quantity of history stack
slots. The file ".netrwhist" holds history when netrw (and vim) is not
active. By default, its stored on the first directory on the user's
active. By default, it's stored on the first directory on the user's
|'runtimepath'|.
Related Topics:
@ -1469,10 +1465,10 @@ changing the top of the tree listing.
NETRW CLEAN *netrw-clean* *:NetrwClean* {{{2
With :NetrwClean one may easily remove netrw from one's home directory;
With NetrwClean one may easily remove netrw from one's home directory;
more precisely, from the first directory on your |'runtimepath'|.
With :NetrwClean!, netrw will attempt to remove netrw from all directories on
With NetrwClean!, netrw will attempt to remove netrw from all directories on
your |'runtimepath'|. Of course, you have to have write/delete permissions
correct to do this.
@ -1504,7 +1500,7 @@ Netrw determines which special handler by the following method:
If g:netrw_browsex_viewer == '-', then netrwFileHandlers#Invoke() will be
used instead (see |netrw_filehandler|).
* for Windows 32 or 64, the URL and FileProtocolHandler dlls are used.
* for Windows 32 or 64, the url and FileProtocolHandler dlls are used.
* for Gnome (with gnome-open): gnome-open is used.
* for KDE (with kfmclient) : kfmclient is used
* for Mac OS X : open is used.
@ -1520,10 +1516,9 @@ will apply a special handler to it (like "x" works when in a netrw buffer).
One may also use visual mode (see |visual-start|) to select the text that the
special handler will use. Normally gx uses expand("<cfile>") to pick up the
text under the cursor; one may change what |expand()| uses via the
|g:netrw_gx| variable (options include "<cword>", "<cWORD>"). Note that
expand("<cfile>") depends on the |'isfname'| setting. Alternatively, one may
select the text to be used by gx by making a visual selection (see
|visual-block|) and then pressing gx.
|g:netrw_gx| variable. Alternatively, one may select the text to be used by
gx via first making a visual selection (see |visual-block|) or by changing
the |'isfname'| option (which is global, so netrw doesn't modify it).
Associated setting variables:
|g:netrw_gx| control how gx picks up the text under the cursor
@ -1615,11 +1610,6 @@ A further approach is to delete files which match a pattern.
This will cause the matching files to be marked. Then,
press "D".
If your vim has 7.4 with patch#1107, then |g:netrw_localrmdir| no longer
is used to remove directories; instead, vim's |delete()| is used with
the "d" option. Please note that only empty directories may be deleted
with the "D" mapping. Regular files are deleted with |delete()|, too.
The |g:netrw_rm_cmd|, |g:netrw_rmf_cmd|, and |g:netrw_rmdir_cmd| variables are
used to control the attempts to remove remote files and directories. The
g:netrw_rm_cmd is used with files, and its default value is:
@ -1683,18 +1673,17 @@ DIRECTORY EXPLORATION COMMANDS {{{2
The [N] specifies a |g:netrw_winsize| just for the new :Lexplore
window.
Those who like this method often also like tree style displays;
Those who like this method often also often like tree style displays;
see |g:netrw_liststyle|.
:[N]Lexplore! [dir] is similar to :Lexplore, except that the full-height
Explorer window will open on the right hand side and an
uninitialized |g:netrw_chgwin| will be set to 1 (eg. edits will
preferentially occur in the leftmost window).
Also see: |netrw-C| |g:netrw_browse_split| |g:netrw_wiw|
|netrw-p| |netrw-P| |g:netrw_chgwin|
|netrw-c-tab| |g:netrw_winsize|
:[N]Lexplore! is like :Lexplore, except that the full-height Explorer window
will open on the right hand side and an uninitialized |g:netrw_chgwin|
will be set to 1.
*netrw-:Sexplore*
:[N]Sexplore will always split the window before invoking the local-directory
browser. As with Explore, the splitting is normally done
@ -1856,11 +1845,9 @@ EXECUTING FILE UNDER CURSOR VIA SYSTEM() *netrw-X* {{{2
Pressing X while the cursor is atop an executable file will yield a prompt
using the filename asking for any arguments. Upon pressing a [return], netrw
will then call |system()| with that command and arguments. The result will be
displayed by |:echomsg|, and so |:messages| will repeat display of the result.
Ansi escape sequences will be stripped out.
See |cmdline-window| for directions for more on how to edit the arguments.
will then call |system()| with that command and arguments. The result will
be displayed by |:echomsg|, and so |:messages| will repeat display of the
result. Ansi escape sequences will be stripped out.
FORCING TREATMENT AS A FILE OR DIRECTORY *netrw-gd* *netrw-gf* {{{2
@ -2083,7 +2070,7 @@ Associated setting variables: |g:netrw_localmkdir| |g:netrw_mkdir_cmd|
|g:netrw_remote_mkdir| |netrw-%|
MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY *netrw-cd* {{{2
MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY *netrw-c* {{{2
By default, |g:netrw_keepdir| is 1. This setting means that the current
directory will not track the browsing directory. (done for backwards
@ -2098,9 +2085,6 @@ the two directories the same, use the "c" map (just type c). That map will
set Vim's notion of the current directory to netrw's current browsing
directory.
*netrw-c* : This map's name has been changed from "c" to cd (see |netrw-cd|).
This change was done to allow for |netrw-cb| and |netrw-cB| maps.
Associated setting variable: |g:netrw_keepdir|
MARKING FILES *netrw-:MF* *netrw-mf* {{{2
@ -2145,7 +2129,6 @@ The following netrw maps make use of marked files:
|netrw-mg| Apply vimgrep to marked files
|netrw-mm| Move marked files to target
|netrw-mp| Print marked files
|netrw-ms| Netrw will source marked files
|netrw-mt| Set target for |netrw-mm| and |netrw-mc|
|netrw-mT| Generate tags using marked files
|netrw-mv| Apply vim command to marked files
@ -2220,9 +2203,6 @@ converts "*" into ".*" (see |regexp|) and marks files based on that. In the
future I may make it possible to use |regexp|s instead of glob()-style
expressions (yet-another-option).
See |cmdline-window| for directions on more on how to edit the regular
expression.
MARKED FILES, ARBITRARY VIM COMMAND *netrw-mv* {{{2
(See |netrw-mf| and |netrw-mr| for how to mark files)
@ -2236,9 +2216,8 @@ the local marked file list, individually:
* run vim command
* sil! keepalt wq!
A prompt, "Enter vim command: ", will be issued to elicit the vim command you
wish used. See |cmdline-window| for directions for more on how to edit the
command.
A prompt, "Enter vim command: ", will be issued to elicit the vim command
you wish used.
MARKED FILES, ARBITRARY SHELL COMMAND *netrw-mx* {{{2
@ -2289,17 +2268,7 @@ MARKED FILES: ARGUMENT LIST *netrw-ma* *netrw-mA*
Using ma, one moves filenames from the marked file list to the argument list.
Using mA, one moves filenames from the argument list to the marked file list.
See Also: |netrw-cb| |netrw-cB| |netrw-qF| |argument-list| |:args|
MARKED FILES: BUFFER LIST *netrw-cb* *netrw-cB*
(See |netrw-mf| and |netrw-mr| for how to mark files)
(uses the global marked-file list)
Using cb, one moves filenames from the marked file list to the buffer list.
Using cB, one copies filenames from the buffer list to the marked file list.
See Also: |netrw-ma| |netrw-mA| |netrw-qF| |buffer-list| |:buffers|
See Also: |netrw-qF| |argument-list| |:args|
MARKED FILES: COMPRESSION AND DECOMPRESSION *netrw-mz* {{{2
@ -2335,8 +2304,8 @@ One may also copy directories and their contents (local only) to a target
directory.
Associated setting variables:
|g:netrw_localcopycmd| |g:netrw_localcopycmdopt|
|g:netrw_localcopydircmd| |g:netrw_localcopydircmdopt|
|g:netrw_localcopycmd|
|g:netrw_localcopydircmd|
|g:netrw_ssh_cmd|
MARKED FILES: DIFF *netrw-md* {{{2
@ -2481,8 +2450,8 @@ When a remote set of files are tagged, the resulting tags file is "obtained";
ie. a copy is transferred to the local system's directory. The now local tags
file is then modified so that one may use it through the network. The
modification made concerns the names of the files in the tags; each filename is
preceded by the netrw-compatible URL used to obtain it. When one subsequently
uses one of the go to tag actions (|tags|), the URL will be used by netrw to
preceded by the netrw-compatible url used to obtain it. When one subsequently
uses one of the go to tag actions (|tags|), the url will be used by netrw to
edit the desired file and go to the tag.
Associated setting variables: |g:netrw_ctags| |g:netrw_ssh_cmd|
@ -2584,8 +2553,8 @@ your browsing preferences. (see also: |netrw-settings|)
editing. It will also use the specified tab
and window numbers to perform editing
(see |clientserver|, |netrw-ctrl-r|)
This option does not affect the production of
|:Lexplore| windows.
This option does not affect |:Lexplore|
windows.
Related topics:
|g:netrw_alto| |g:netrw_altv|
@ -2744,7 +2713,6 @@ your browsing preferences. (see also: |netrw-settings|)
*g:netrw_home* The home directory for where bookmarks and
history are saved (as .netrwbook and
.netrwhist).
Netrw uses |expand()|on the string.
default: the first directory on the
|'runtimepath'|
@ -2765,7 +2733,7 @@ your browsing preferences. (see also: |netrw-settings|)
default: (if ssh is executable)
"ssh HOSTNAME ls -FLa"
*g:netrw_list_cmd_options* If this variable exists, then its contents are
*g:netrw_list_cmd_options* If this variable exists, then its contents are
appended to the g:netrw_list_cmd. For
example, use "2>/dev/null" to get rid of banner
messages on unix systems.
@ -2791,52 +2759,26 @@ your browsing preferences. (see also: |netrw-settings|)
let g:netrw_list_hide= netrw_gitignore#Hide().'.*\.swp$'
default: ""
*g:netrw_localcopycmd* ="cp" Linux/Unix/MacOS/Cygwin
=expand("$COMSPEC") Windows
*g:netrw_localcopycmd* ="cp" Linux/Unix/MacOS/Cygwin
="copy" Windows
Copies marked files (|netrw-mf|) to target
directory (|netrw-mt|, |netrw-mc|)
*g:netrw_localcopycmdopt* ='' Linux/Unix/MacOS/Cygwin
=' \c copy' Windows
Options for the |g:netrw_localcopycmd|
*g:netrw_localcopydircmd* ="cp" Linux/Unix/MacOS/Cygwin
=expand("$COMSPEC") Windows
*g:netrw_localcopydircmd* ="cp -R" Linux/Unix/MacOS/Cygwin
="xcopy /e /c /h/ /i /k" Windows
Copies directories to target directory.
(|netrw-mc|, |netrw-mt|)
*g:netrw_localcopydircmdopt* =" -R" Linux/Unix/MacOS/Cygwin
=" /c xcopy /e /c /h/ /i /k" Windows
Options for |g:netrw_localcopydircmd|
*g:netrw_localmkdir* command for making a local directory
default: "mkdir"
*g:netrw_localmkdir* ="mkdir" Linux/Unix/MacOS/Cygwin
=expand("$COMSPEC") Windows
command for making a local directory
*g:netrw_localmkdiropt* ="" Linux/Unix/MacOS/Cygwin
=" /c mkdir" Windows
Options for |g:netrw_localmkdir|
*g:netrw_localmovecmd* ="mv" Linux/Unix/MacOS/Cygwin
=expand("$COMSPEC") Windows
*g:netrw_localmovecmd* ="mv" Linux/Unix/MacOS/Cygwin
="move" Windows
Moves marked files (|netrw-mf|) to target
directory (|netrw-mt|, |netrw-mm|)
*g:netrw_localmovecmdopt* ="" Linux/Unix/MacOS/Cygwin
=" /c move" Windows
Options for |g:netrw_localmovecmd|
*g:netrw_localrmdir* ="rmdir" Linux/Unix/MacOS/Cygwin
=expand("$COMSPEC") Windows
Remove directory command (rmdir)
This variable is only used if your vim is
earlier than 7.4 or if your vim doesn't
have patch#1107. Otherwise, |delete()|
is used with the "d" option.
*g:netrw_localrmdiropt* ="" Linux/Unix/MacOS/Cygwin
=" /c rmdir" Windows
Options for |g:netrw_localrmdir|
*g:netrw_localrmdir* remove directory command (rmdir)
default: "rmdir"
*g:netrw_maxfilenamelen* =32 by default, selected so as to make long
listings fit on 80 column displays.
@ -2949,23 +2891,17 @@ your browsing preferences. (see also: |netrw-settings|)
netrwTilde : *
netrwTmp : tmp* *tmp
In addition, those groups mentioned in
|'suffixes'| are also added to the special
file highlighting group.
These syntax highlighting groups are linked
to netrwGray or Folded by default
(see |hl-Folded|), but one may put lines like >
These syntax highlighting groups are linked
to Folded or DiffChange by default
(see |hl-Folded| and |hl-DiffChange|), but
one may put lines like >
hi link netrwCompress Visual
< into one's <.vimrc> to use one's own
preferences. Alternatively, one may
put such specifications into >
.vim/after/syntax/netrw.vim.
< The netrwGray highlighting is set up by
netrw when >
* netrwGray has not been previously
defined
* the gui is running
< As an example, I myself use a dark-background
put such specifications into
.vim/after/syntax/netrw.vim.
As an example, I myself use a dark-background
colorscheme with the following in
.vim/after/syntax/netrw.vim: >
@ -3200,8 +3136,8 @@ If there are no marked files: (see |netrw-mf|)
Renaming files and directories involves moving the cursor to the
file/directory to be moved (renamed) and pressing "R". You will then be
queried for what you want the file/directory to be renamed to. You may
select a range of lines with the "V" command (visual selection), and then
queried for what you want the file/directory to be renamed to You may select
a range of lines with the "V" command (visual selection), and then
press "R"; you will be queried for each file as to what you want it
renamed to.
@ -3233,20 +3169,16 @@ If there are marked files: (see |netrw-mf|)
Note that moving files is a dangerous operation; copies are safer. That's
because a "move" for remote files is actually a copy + delete -- and if
the copy fails and the delete succeeds you may lose the file.
the copy fails and the delete does not, you may lose the file.
Use at your own risk.
The *g:netrw_rename_cmd* variable is used to implement remote renaming. By
default its value is: >
The g:netrw_rename_cmd variable is used to implement remote renaming. By
default its value is:
ssh HOSTNAME mv
<
One may rename a block of files and directories by selecting them with
V (|linewise-visual|) when using thin style.
See |cmdline-editing| for more on how to edit the command line; in particular,
you'll find <ctrl-f> (initiates cmdline window editing) and <ctrl-c> (uses the
command line under the cursor) useful in conjunction with the R command.
One may rename a block of files and directories by selecting them with
V (|linewise-visual|) when using thin style
SELECTING SORTING STYLE *netrw-s* *netrw-sort* {{{2
@ -3267,8 +3199,8 @@ number. Subsequent selection of a file to edit (|netrw-cr|) will use that
window.
* C : by itself, will select the current window holding a netrw buffer
for subsequent editing via |netrw-cr|. The C mapping is only available
while in netrw buffers.
for editing via |netrw-cr|. The C mapping is only available while in
netrw buffers.
* [count]C : the count will be used as the window number to be used
for subsequent editing via |netrw-cr|.
@ -3281,7 +3213,7 @@ window.
Using >
let g:netrw_chgwin= -1
will restore the default editing behavior
(ie. subsequent editing will use the current window).
(ie. editing will use the current window).
Related topics: |netrw-cr| |g:netrw_browse_split|
Associated setting variables: |g:netrw_chgwin|
@ -3302,9 +3234,9 @@ only if your terminal supports differentiating <c-tab> from a plain
* Else bring up a |:Lexplore| window
If |g:netrw_usetab| exists and is zero, or if there is a pre-existing mapping
If |g:netrw_usetab| exists or is zero, or if there is a pre-existing mapping
for <c-tab>, then the <c-tab> will not be mapped. One may map something other
than a <c-tab>, too: (but you'll still need to have had |g:netrw_usetab| set). >
than a <c-tab>, too: (but you'll still need to have had g:netrw_usetab set) >
nmap <unique> (whatever) <Plug>NetrwShrink
<
@ -3337,10 +3269,9 @@ The user function is passed one argument; it resembles >
fun! ExampleUserMapFunc(islocal)
<
where a:islocal is 1 if its a local-directory system call or 0 when
where a:islocal is 1 if it's a local-directory system call or 0 when
remote-directory system call.
*netrw-call* *netrw-expose* *netrw-modify*
Use netrw#Expose("varname") to access netrw-internal (script-local)
variables.
Use netrw#Modify("varname",newvalue) to change netrw-internal variables.
@ -3662,7 +3593,7 @@ Example: Clear netrw's marked file list via a mapping on gu >
*netrw-p16*
P16. When editing remote files (ex. :e ftp://hostname/path/file),
under Windows I get an |E303| message complaining that its unable
under Windows I get an |E303| message complaining that it's unable
to open a swap file.
(romainl) It looks like you are starting Vim from a protected
@ -3716,7 +3647,7 @@ Example: Clear netrw's marked file list via a mapping on gu >
P21. I've made a directory (or file) with an accented character, but
netrw isn't letting me enter that directory/read that file:
Its likely that the shell or o/s is using a different encoding
It's likely that the shell or o/s is using a different encoding
than you have vim (netrw) using. A patch to vim supporting
"systemencoding" may address this issue in the future; for
now, just have netrw use the proper encoding. For example: >
@ -3832,102 +3763,6 @@ netrw:
==============================================================================
12. History *netrw-history* {{{1
v162: Sep 19, 2016 * (haya14busa) pointed out two syntax errors
with a patch; these are now fixed.
Oct 26, 2016 * I started using mate-terminal and found that
x and gx (|netrw-x| and |netrw-gx|) were no
longer working. Fixed (using atril when
$DESKTOP_SESSION is "mate").
Nov 04, 2016 * (Martin Vuille) pointed out that @+ was
being restored with keepregstar rather than
keepregplus.
Nov 09, 2016 * Broke apart the command from the options,
mostly for Windows. Introduced new netrw
settings: |g:netrw_localcopycmdopt|
|g:netrw_localcopydircmdopt| |g:netrw_localmkdiropt|
|g:netrw_localmovecmdopt| |g:netrw_localrmdiropt|
Nov 21, 2016 * (mattn) provided a patch for preview; swapped
winwidth() with winheight()
Nov 22, 2016 * (glacambre) reported that files containing
spaces weren't being obtained properly via
scp. Fix: apparently using single quotes
such as with 'file name' wasn't enough; the
spaces inside the quotes also had to be
escaped (ie. 'file\ name').
* Also fixed obtain (|netrw-O|) to be able to
obtain files with spaces in their names
Dec 20, 2016 * (xc1427) Reported that using "I" (|netrw-I|)
when atop "Hiding" in the banner also caused
the active-banner hiding control to occur
Jan 03, 2017 * (Enno Nagel) reported that attempting to
apply netrw to a directory that was without
read permission caused a syntax error.
Jan 13, 2017 * (Ingo Karkat) provided a patch which makes
using netrw#Call() better. Now returns
value of internal routines return, for example.
Jan 13, 2017 * (Ingo Karkat) changed netrw#FileUrlRead to
use |:edit| instead of |:read|. I also
changed the routine name to netrw#FileUrlEdit.
Jan 16, 2017 * (Sayem) reported a problem where :Lexplore
could generate a new listing buffer and
window instead of toggling the netrw display.
Unfortunately, the directions for eliciting
the problem weren't complete, so I may or
may not have fixed that issue.
Feb 06, 2017 * Implemented cb and cB. Changed "c" to "cd".
(see |netrw-cb|, |netrw-cB|, and |netrw-cd|)
Mar 21, 2017 * previously, netrw would specify (safe) settings
even when the setting was already safe for
netrw. Netrw now attempts to leave such
already-netrw-safe settings alone.
(affects s:NetrwOptionRestore() and
s:NetrwSafeOptions(); also introduced
s:NetrwRestoreSetting())
Jun 26, 2017 * (Christian Brabandt) provided a patch to
allow curl to follow redirects (ie. -L
option)
Jun 26, 2017 * (Callum Howard) reported a problem with
:Lexpore not removing the Lexplore window
after a change-directory
Aug 30, 2017 * (Ingo Karkat) one cannot switch to the
previously edited file (e.g. with CTRL-^)
after editing a file:// URL. Patch to
have a "keepalt" included.
Oct 17, 2017 * (Adam Faryna) reported that gn (|netrw-gn|)
did not work on directories in the current
tree
v157: Apr 20, 2016 * (Nicola) had set up a "nmap <expr> ..." with
a function that returned a 0 while silently
invoking a shell command. The shell command
activated a ShellCmdPost event which in turn
called s:LocalBrowseRefresh(). That looks
over all netrw buffers for changes needing
refreshes. However, inside a |:map-<expr>|,
tab and window changes are disallowed. Fixed.
(affects netrw's s:LocalBrowseRefresh())
* |g:netrw_localrmdir| not used any more, but
the relevant patch that causes |delete()| to
take over was #1107 (not #1109).
* |expand()| is now used on |g:netrw_home|;
consequently, g:netrw_home may now use
environment variables
* s:NetrwLeftmouse and s:NetrwCLeftmouse will
return without doing anything if invoked
when inside a non-netrw window
Jun 15, 2016 * gx now calls netrw#GX() which returns
the word under the cursor. The new
wrinkle: if one is in a netrw buffer,
then netrw's s:NetrwGetWord().
Jun 22, 2016 * Netrw was executing all its associated
Filetype commands silently; I'm going
to try doing that "noisily" and see if
folks have a problem with that.
Aug 12, 2016 * Changed order of tool selection for
handling http://... viewing.
(Nikolay Aleksandrovich Pavlov)
Aug 21, 2016 * Included hiding/showing/all for tree
listings
* Fixed refresh (^L) for tree listings
v156: Feb 18, 2016 * Changed =~ to =~# where appropriate
Feb 23, 2016 * s:ComposePath(base,subdir) now uses
fnameescape() on the base portion
@ -3959,9 +3794,9 @@ netrw:
tell me how they're useful and should be
retained?
Nov 20, 2015 * Added |netrw-ma| and |netrw-mA| support
Nov 20, 2015 * gx (|netrw-gx|) on a URL downloaded the
Nov 20, 2015 * gx (|netrw-gx|) on an url downloaded the
file in addition to simply bringing up the
URL in a browser. Fixed.
url in a browser. Fixed.
Nov 23, 2015 * Added |g:netrw_sizestyle| support
Nov 27, 2015 * Inserted a lot of <c-u>s into various netrw
maps.

View File

@ -13,40 +13,36 @@ Nvim delegates some features to dynamic "providers".
==============================================================================
Python integration *provider-python*
Nvim supports the Vim legacy |python-vim| and |python3| interfaces via
external Python interpreters connected via |RPC|.
Nvim supports Python |remote-plugin|s and the Vim legacy |python-vim| and
|python3| interfaces (which are implemented as remote-plugins).
Note: Only the Vim 7.3 API is supported; bindeval (Vim 7.4) is not.
PYTHON QUICKSTART ~
If you used a package manager to install Nvim, you might already have the
required `neovim` Python package. Run |:checkhealth| to see if your system is
up-to-date.
required "neovim" Python package. Run |:checkhealth| to verify.
Following are steps to install the package with Python's `pip` tool.
To install the package with "pip":
Note: Depending on your system, `pip` might refer to Python 2 or Python 3,
which is why the following instructions mention `pip2` or `pip3`
explicitly. If one of these is not available, try `pip`.
To use Vim Python 2/3 plugins with Nvim:
- For Python 2 plugins, make sure an interpreter for Python 2.6 or 2.7 is
available in your `$PATH`, then install the `neovim` Python package systemwide: >
$ sudo pip2 install --upgrade neovim
- For Python 2 plugins, make sure Python 2.7 is available in your $PATH, then
install the "neovim" Python package systemwide: >
sudo pip2 install --upgrade neovim
<
or for the current user: >
$ pip2 install --user --upgrade neovim
pip2 install --user --upgrade neovim
<
- For Python 3 plugins, make sure an interpreter for Python 3.3 or above is
available in your `$PATH`, then install the `neovim` Python package systemwide: >
$ sudo pip3 install --upgrade neovim
- For Python 3 plugins, make sure Python 3.4+ is available in your $PATH, then
install the "neovim" Python package systemwide: >
sudo pip3 install --upgrade neovim
<
or for the current user: >
$ pip3 install --user --upgrade neovim
pip3 install --user --upgrade neovim
<
Note: "pip" may refer to Python 2 or Python 3, so the steps above mention
"pip2" and "pip3" explicitly. If one is missing, try "pip".
Note: The `--upgrade` flag ensures you have the latest version even if
a previous version was already installed.
a previous version was already installed.
PYTHON PROVIDER CONFIGURATION ~
*g:python_host_prog*
@ -85,15 +81,15 @@ https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim
==============================================================================
Ruby integration *provider-ruby*
Nvim supports the Vim legacy |ruby-vim| interface via external Ruby
interpreters connected via |RPC|.
Nvim supports Ruby |remote-plugin|s and the Vim legacy |ruby-vim| interface
(which is itself implemented as a Nvim remote-plugin).
Run |:checkhealth| to see if your system is up-to-date.
RUBY QUICKSTART ~
To use Vim Ruby plugins with Nvim, just install the latest `neovim` RubyGem: >
$ gem install neovim
To use Ruby plugins with Nvim, install the latest "neovim" RubyGem: >
gem install neovim
RUBY PROVIDER CONFIGURATION ~
*g:loaded_ruby_provider*
@ -101,9 +97,9 @@ To disable Ruby support: >
let g:loaded_ruby_provider = 1
<
*g:ruby_host_prog*
Command to start the Ruby host. By default this is `neovim-ruby-host`. For users
who use per-project Ruby versions with tools like RVM or rbenv, setting this can
prevent the need to install the `neovim` gem in every project.
Command to start the Ruby host. By default this is "neovim-ruby-host". With
project-local Ruby versions (via tools like RVM or rbenv) setting this can
avoid the need to install the "neovim" gem in every project.
To use an absolute path (e.g. to an rbenv installation): >
let g:ruby_host_prog = '~/.rbenv/versions/2.4.1/bin/neovim-ruby-host'
@ -112,7 +108,31 @@ To use an absolute path (e.g. to an rbenv installation): >
To use the RVM "system" Ruby installation: >
let g:ruby_host_prog = 'rvm system do neovim-ruby-host'
<
==============================================================================
Node.js integration *provider-nodejs*
Nvim supports Node.js |remote-plugin|s.
https://github.com/neovim/node-client/
NODEJS QUICKSTART~
To use javascript remote-plugins with Nvim, install the "neovim" npm package: >
npm install -g neovim
Run |:checkhealth| to see if your system is up-to-date.
NODEJS PROVIDER CONFIGURATION~
*g:loaded_node_provider*
To disable Node.js support: >
:let g:loaded_node_provider = 1
<
*g:node_host_prog*
Command to start the Node.js host. Setting this makes startup faster.
By default, Nvim searches for "neovim-node-host" using "npm root -g", which
can be slow. To avoid this, set g:node_host_prog to an absolute path: >
let g:node_host_prog = '/usr/local/bin/neovim-node-host'
<
==============================================================================
Clipboard integration *provider-clipboard* *clipboard*
@ -122,9 +142,8 @@ system clipboard or any other clipboard "backend".
To ALWAYS use the clipboard for ALL operations (instead of interacting with
the '+' and/or '*' registers explicitly): >
set clipboard+=unnamedplus
<
See 'clipboard' for details and options.
*clipboard-tool*

View File

@ -165,6 +165,9 @@ processing a quickfix or location list command, it will be aborted.
keep Vim running while compiling. If you give the
name of the errorfile, the 'errorfile' option will
be set to [errorfile]. See |:cc| for [!].
If the encoding of the error file differs from the
'encoding' option, you can use the 'makeencoding'
option to specify the encoding.
*:lf* *:lfile*
:lf[ile][!] [errorfile] Same as ":cfile", except the location list for the
@ -176,6 +179,9 @@ processing a quickfix or location list command, it will be aborted.
:cg[etfile] [errorfile] *:cg* *:cgetfile*
Read the error file. Just like ":cfile" but don't
jump to the first error.
If the encoding of the error file differs from the
'encoding' option, you can use the 'makeencoding'
option to specify the encoding.
:lg[etfile] [errorfile] *:lg* *:lgetfile*
@ -186,6 +192,9 @@ processing a quickfix or location list command, it will be aborted.
:caddf[ile] [errorfile] Read the error file and add the errors from the
errorfile to the current quickfix list. If a quickfix
list is not present, then a new list is created.
If the encoding of the error file differs from the
'encoding' option, you can use the 'makeencoding'
option to specify the encoding.
*:laddf* *:laddfile*
:laddf[ile] [errorfile] Same as ":caddfile", except the location list for the
@ -322,6 +331,7 @@ use this code: >
endfunction
au QuickfixCmdPost make call QfMakeConv()
Another option is using 'makeencoding'.
EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
*:cdo*
@ -460,7 +470,11 @@ keep its height, ignoring 'winheight' and 'equalalways'. You can change the
height manually (e.g., by dragging the status line above it with the mouse).
In the quickfix window, each line is one error. The line number is equal to
the error number. You can use ":.cc" to jump to the error under the cursor.
the error number. The current entry is highlighted with the QuickFixLine
highlighting. You can change it to your liking, e.g.: >
:hi QuickFixLine ctermbg=Yellow guibg=Yellow
You can use ":.cc" to jump to the error under the cursor.
Hitting the <Enter> key or double-clicking the mouse on a line has the same
effect. The file containing the error is opened in the window above the
quickfix window. If there already is a window for that file, it is used
@ -586,6 +600,9 @@ lists, use ":cnewer 99" first.
like |:cnext| and |:cprevious|, see above.
This command does not accept a comment, any "
characters are considered part of the arguments.
If the encoding of the program output differs from the
'encoding' option, you can use the 'makeencoding'
option to specify the encoding.
*:lmak* *:lmake*
:lmak[e][!] [arguments]
@ -645,6 +662,7 @@ read the error messages: >
au QuickfixCmdPost make call QfMakeConv()
(Example by Faque Cheng)
Another option is using 'makeencoding'.
==============================================================================
5. Using :vimgrep and :grep *grep* *lid*
@ -759,6 +777,9 @@ id-utils) in a similar way to its compiler integration (see |:make| above).
When 'grepprg' is "internal" this works like
|:vimgrep|. Note that the pattern needs to be
enclosed in separator characters then.
If the encoding of the program output differs from the
'encoding' option, you can use the 'makeencoding'
option to specify the encoding.
*:lgr* *:lgrep*
:lgr[ep][!] [arguments] Same as ":grep", except the location list for the
@ -783,6 +804,10 @@ id-utils) in a similar way to its compiler integration (see |:make| above).
\ | catch /E480:/
\ | endtry"
<
If the encoding of the program output differs from the
'encoding' option, you can use the 'makeencoding'
option to specify the encoding.
*:lgrepa* *:lgrepadd*
:lgrepa[dd][!] [arguments]
Same as ":grepadd", except the location list for the

View File

@ -655,7 +655,6 @@ Short explanation of each option: *option-list*
'cscoperelative' 'csre' Use cscope.out path basename as prefix
'cscopetag' 'cst' use cscope for tag commands
'cscopetagorder' 'csto' determines ":cstag" search order
'cscopeverbose' 'csverb' give messages when adding a cscope database
'cursorbind' 'crb' move cursor in window as it moves in other windows
'cursorcolumn' 'cuc' highlight the screen column of the cursor
'cursorline' 'cul' highlight the screen line of the cursor
@ -762,15 +761,14 @@ Short explanation of each option: *option-list*
'loadplugins' 'lpl' load plugin scripts when starting up
'magic' changes special characters in search patterns
'makeef' 'mef' name of the errorfile for ":make"
'makeencoding' 'menc' encoding of external make/grep commands
'makeprg' 'mp' program to use for the ":make" command
'matchpairs' 'mps' pairs of characters that "%" can match
'matchtime' 'mat' tenths of a second to show matching paren
'maxcombine' 'mco' maximum nr of combining characters displayed
'maxfuncdepth' 'mfd' maximum recursive depth for user functions
'maxmapdepth' 'mmd' maximum recursive depth for mapping
'maxmem' 'mm' maximum memory (in Kbyte) used for one buffer
'maxmempattern' 'mmp' maximum memory (in Kbyte) used for pattern search
'maxmemtot' 'mmt' maximum memory (in Kbyte) used for all buffers
'menuitems' 'mis' maximum number of items in a menu
'mkspellmem' 'msm' memory used before |:mkspell| compresses the tree
'modeline' 'ml' recognize modelines at start or end of file

View File

@ -63,10 +63,8 @@ following ones in your vimrc:
This is also very handy when editing files on floppy. Of course you will have
to create that "tmp" directory for this to work!
For read-only files, a swap file is not used. Unless the file is big, causing
the amount of memory used to be higher than given with 'maxmem' or
'maxmemtot'. And when making a change to a read-only file, the swap file is
created anyway.
For read-only files, a swap file is not used right away. The swap file is
created only when making changes.
The 'swapfile' option can be reset to avoid creating a swapfile. And the
|:noswapfile| modifier can be used to not create a swapfile for a new buffer.

View File

@ -37,7 +37,7 @@ of area is used, see |visual-repeat|.
==============================================================================
2. Multiple repeats *multi-repeat*
*:g* *:global* *E147* *E148*
*:g* *:global* *E148*
:[range]g[lobal]/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} matches.
@ -70,8 +70,15 @@ The default for [range] is the whole buffer (1,$). Use "CTRL-C" to interrupt
the command. If an error message is given for a line, the command for that
line is aborted and the global command continues with the next marked or
unmarked line.
*E147*
When the command is used recursively, it only works on one line. Giving a
range is then not allowed. This is useful to find all lines that match a
pattern and do not match another pattern: >
:g/found/v/notfound/{cmd}
This first finds all lines containing "found", but only executes {cmd} when
there is no match for "notfound".
To repeat a non-Ex command, you can use the ":normal" command: >
To execute a non-Ex command, you can use the `:normal` command: >
:g/pat/normal {commands}
Make sure that {commands} ends with a whole command, otherwise Vim will wait
for you to type the rest of the command for each match. The screen will not

View File

@ -22,8 +22,7 @@ More generally, Vim is started with:
Option arguments and file name arguments can be mixed, and any number of them
can be given. However, watch out for options that take an argument.
Exactly one out of the following five items may be used to choose how to
start editing:
The following items may be used to choose how to start editing:
*-file* *---*
filename One or more file names. The first one will be the current
@ -34,26 +33,25 @@ filename One or more file names. The first one will be the current
nvim -- -filename
< All arguments after the "--" will be interpreted as file names,
no other options or "+command" argument can follow.
For behavior of quotes on MS-Windows, see |win32-quotes|.
*--*
- This argument can mean two things, depending on whether Ex
mode is to be used.
Starting in Normal mode: >
nvim -
< Start editing a new buffer, which is filled with text
that is read from stdin. The commands that would normally be
read from stdin will now be read from stderr. Example: >
find . -name "*.c" -print | nvim -
- Alias for stdin (standard input).
Example: >
echo text | nvim - file
< "text" is read into buffer 1, "file" is opened as buffer 2.
In most cases (except -s, -es, |--embed|, --headless) if stdin
is not a TTY then it is read as text, so "-" is implied: >
echo text | nvim file
< The buffer will be marked modified, because it contains text
that needs to be saved. Except when in readonly mode, then
the buffer is not marked modified. Example: >
ls | nvim -R -
< Starting in Ex mode: >
nvim -e -
nvim -E
< Start editing in |silent-mode|.
that needs to be saved (except for readonly |-R| mode).
To read stdin as Normal commands use |-s| with "-": >
echo "ifoo" | nvim -s -
< To read stdin as Ex commands use |-es| or |-e|: >
echo "echo getpid()" | nvim -e - -V1
< To open a file literally named "-", put it after "--": >
echo foo | nvim -- -
< To read stdin as text with |--headless| use "-".
*-t* *-tag*
-t {tag} A tag. "tag" is looked up in the tags file, the associated
@ -104,13 +102,6 @@ argument.
(Only available when compiled with the |+startuptime|
feature).
*--literal*
--literal Take file names literally, don't expand wildcards. Not needed
for Unix, because Vim always takes file names literally (the
shell expands wildcards).
Applies to all the names, also the ones that come before this
argument.
*-+*
+[num] The cursor will be positioned on line "num" for the first
file being edited. If "num" is missing, the cursor will be
@ -194,34 +185,36 @@ argument.
delete(), rename(), mkdir(), writefile(), libcall(),
jobstart(), etc.
*-e*
-e Start Vim in Ex mode |Q|.
-e *-e* *-E*
-E Start Nvim in Ex mode |gQ|.
*-E*
-E Start Vim in improved Ex mode |gQ|.
If stdin is not a TTY:
-e reads stdin as Ex commands.
-E reads stdin as text (into buffer 1).
*-s-ex* *silent-mode*
-s Silent or batch mode. Only when "-s" is preceded by the "-e"
argument. Otherwise see |-s|, which does take an argument
while this use of "-s" doesn't. To be used when Vim is used
to execute Ex commands from a file instead of a terminal.
Switches off most prompts and informative messages. Also
warnings and error messages. The output of these commands is
displayed (to stdout):
*-es* *-Es*
-es *-s-ex* *silent-mode*
-Es Silent or batch mode: execute Ex commands from a file instead
of a terminal. Special case of |-s| (which takes an argument
while "-es" doesn't). Disables most prompts, messages,
warnings and errors.
Output of these commands is displayed (to stdout):
:print
:list
:number
:set to display option values.
When 'verbose' is non-zero messages are printed (for
debugging, to stderr).
When 'verbose' is set messages are printed to stderr, e.g.: >
echo foo | nvim -V1 -es
<
User |init.vim| is skipped (unless given with |-u|).
|$TERM| is not used.
If Vim appears to be stuck try typing "qa!<Enter>". You don't
get a prompt thus you can't see Vim is waiting for you to type
something.
Initializations are skipped (except the ones given with the
"-u" argument).
If stdin is not a TTY:
-es reads stdin as Ex commands.
-Es reads stdin as text (into buffer 1).
Example: >
vim -es < thefilter thefile
printf "put ='foo'\n%%print\n" | nvim -es
<
*-b*
-b Binary mode. File I/O will only recognize <NL> to separate
@ -249,14 +242,14 @@ argument.
for reading or writing a ShaDa file. Can be used to find
out what is happening upon startup and exit.
Example: >
vim -V8 foobar
nvim -V8
-V[N]{filename}
Like -V and set 'verbosefile' to {filename}. The result is
that messages are not displayed but written to the file
{filename}. {filename} must not start with a digit.
Like -V and set 'verbosefile' to {filename}. Messages are not
displayed; instead they are written to the file {filename}.
{filename} must not start with a digit.
Example: >
vim -V20vimlog foobar
nvim -V20vimlog
<
*-D*
-D Debugging. Go to debugging mode when executing the first
@ -324,12 +317,15 @@ argument.
":rsh" or ":wsh" are used. See also |shada-file|.
*-s*
-s {scriptin} The script file "scriptin" is read. The characters in the
file are interpreted as if you had typed them. The same can
be done with the command ":source! {scriptin}". If the end
of the file is reached before the editor exits, further
characters are read from the keyboard. Only works when not
started in Ex mode, see |-s-ex|. See also |complex-repeat|.
-s {scriptin} Read script file {scriptin}, interpreting characters as
Normal-mode input. The same can be done with ":source!": >
:source! {scriptin}
< Reads from stdin if {scriptin} is "-": >
echo "ifoo" | nvim -s -
< If the end of the file is reached before Nvim exits, further
characters are read from the keyboard.
Does not work with |-es|. See also |complex-repeat|.
*-w_nr*
-w {number}
@ -349,9 +345,34 @@ argument.
*--api-info*
--api-info Print msgpack-encoded |api-metadata| and exit.
*--embed*
--embed Use stdin/stdout as a msgpack-RPC channel, so applications can
embed and control Nvim via the |rpc-api|. Implies |--headless|.
Equivalent to: >
nvim --headless --cmd "call stdioopen({'rpc': v:true})"
<
See also |channel-stdio|.
*--headless*
--headless Do not start the built-in UI.
See also |silent-mode|, which does start a (limited) UI.
--headless Do not start the default UI, so stdio can be used as an
arbitrary communication channel. |channel-stdio|
Also useful for scripting (tests) to see messages that would
not be printed by |-es|.
To detect if a UI is available, check if |nvim_list_uis()| is
empty after |VimEnter|.
To read stdin as text, "-" must be given explicitly:
--headless cannot assume that stdin is just text. >
echo foo | nvim --headless +"%print" +"q!" -
<
See also |--embed|.
See also |-es|, which also disables most messages.
--listen {addr} *--listen*
Start |RPC| server on pipe or TCP address {addr}. Sets the
primary listen address |v:servername| to {addr}. |serverstart()|
==============================================================================
2. Initialization *initialization* *startup*
@ -437,15 +458,14 @@ accordingly. Vim proceeds in this order:
:runtime! filetype.vim
:runtime! ftplugin.vim
:runtime! indent.vim
< This step is skipped if ":filetype ..." was called before now or if
the "-u NONE" command line argument was given.
< Skipped if ":filetype … off" was called or if the "-u NONE" command
line argument was given.
5. Enable syntax highlighting.
This does the same as the command: >
:runtime! syntax/syntax.vim
< Note: This enables filetype detection even if ":filetype off" was
called before now.
This step is skipped if the "-u NONE" command line argument was given.
< Skipped if ":syntax off" was called or if the "-u NONE" command
line argument was given.
6. Load the plugin scripts. *load-plugins*
This does the same as the command: >
@ -608,27 +628,15 @@ there is not enough room, you will see only part of it).
To avoid the intro message on startup, add the 'I' flag to 'shortmess'.
*info-message*
The |--help| and |--version| arguments cause Vim to print a message and then
The |--help| and |--version| arguments cause Nvim to print a message and then
exit. Normally the message is sent to stdout, thus can be redirected to a
file with: >
vim --help >file
nvim --help >file
From inside Vim: >
From inside Nvim: >
:read !vim --help
When using gvim, it detects that it might have been started from the desktop,
without a terminal to show messages on. This is detected when both stdout and
stderr are not a tty. This breaks the ":read" command, as used in the example
above. To make it work again, set 'shellredir' to ">" instead of the default
">&": >
:set shellredir=>
:read !gvim --help
This still won't work for systems where gvim does not use stdout at all
though.
:read !nvim --help
==============================================================================
3. $VIM and $VIMRUNTIME
@ -682,25 +690,17 @@ CTRL-Z Suspend Vim, like ":stop".
Command-line mode, the CTRL-Z is inserted as a normal
character. In Visual mode Vim goes back to Normal
mode.
Note: if CTRL-Z undoes a change see |mswin.vim|.
:sus[pend][!] or *:sus* *:suspend* *:st* *:stop*
:st[op][!] Suspend Vim.
:st[op][!] Suspend Vim. Vim will continue if you make it the
foreground job again.
If the '!' is not given and 'autowrite' is set, every
buffer with changes and a file name is written out.
If the '!' is given or 'autowrite' is not set, changed
buffers are not written, don't forget to bring Vim
back to the foreground later!
In the GUI, suspending is implemented as iconising gvim. In Windows 95/NT,
gvim is minimized.
On many Unix systems, it is possible to suspend Vim with CTRL-Z. This is only
possible in Normal and Visual mode (see next chapter, |vim-modes|). Vim will
continue if you make it the foreground job again. On other systems, CTRL-Z
will start a new shell. This is the same as the ":sh" command. Vim will
continue if you exit from the shell.
In the GUI, suspending is implementation-defined.
In X-windows the selection is disowned when Vim suspends. this means you
can't paste it in another application (since Vim is going to sleep an attempt
@ -885,7 +885,7 @@ The output of ":mkview" contains these items:
5. The scroll position and the cursor position in the file. Doesn't work very
well when there are closed folds.
6. The local current directory, if it is different from the global current
directory.
directory and 'viewoptions' contains "curdir".
Note that Views and Sessions are not perfect:
- They don't restore everything. For example, defined functions, autocommands
@ -1356,12 +1356,12 @@ file when reading and include:
complete MessagePack object.
==============================================================================
9. Standard Paths
9. Standard Paths *standard-path*
Nvim stores configuration and data in standard locations. Plugins are strongly
encouraged to follow this pattern also.
*base-directories* *xdg*
*base-directories* *xdg*
The "base" (root) directories conform to the XDG Base Directory Specification.
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
The $XDG_CONFIG_HOME and $XDG_DATA_HOME environment variables are used if they
@ -1370,24 +1370,21 @@ exist, otherwise default values (listed below) are used.
Note: Throughout the user manual these defaults are used as placeholders, e.g.
"~/.config" is understood to mean "$XDG_CONFIG_HOME or ~/.config".
CONFIG DIRECTORY *$XDG_CONFIG_HOME*
CONFIG DIRECTORY *$XDG_CONFIG_HOME*
Base Nvim ~
Unix: ~/.config ~/.config/nvim
Windows: ~/AppData/Local ~/AppData/Local/nvim
DATA DIRECTORY *$XDG_DATA_HOME*
DATA DIRECTORY *$XDG_DATA_HOME*
Base Nvim ~
Unix: ~/.local/share ~/.local/share/nvim
Windows: ~/AppData/Local ~/AppData/Local/nvim-data
STANDARD PATHS *standard-path*
*$NVIM_LOG_FILE*
Besides 'debug' and 'verbose', Nvim has a low-level "log of last resort" that
is written directly to the filesystem. This log may also be used by plugins or
RPC clients for debugging. $NVIM_LOG_FILE contains the log file path: >
LOG FILE *$NVIM_LOG_FILE*
Besides 'debug' and 'verbose', Nvim keeps a general log file for internal
debugging, plugins and RPC clients. >
:echo $NVIM_LOG_FILE
Usually the file is ~/.local/share/nvim/log unless that path is inaccessible
or if $NVIM_LOG_FILE was set before |startup|.
vim:tw=78:ts=8:ft=help:norl:
vim:noet:tw=78:ts=8:ft=help:norl:

View File

@ -1727,7 +1727,7 @@ Functions and variable names are the same color by default, because VIM
doesn't specify different colors for Functions and Identifiers. To change
this (which is recommended if you want function names to be recognizable in a
different color) you need to add the following line to your vimrc: >
:hi Function term=underline cterm=bold ctermfg=LightGray
:hi Function cterm=bold ctermfg=LightGray
Of course, the ctermfg can be a different color if you choose.
@ -2183,9 +2183,8 @@ with the correct typesetting of your file, is to define an eye-catching
highlighting definition for the syntax groups "nroffDefinition" and
"nroffDefSpecial" in your configuration files. For example: >
hi def nroffDefinition term=italic cterm=italic gui=reverse
hi def nroffDefSpecial term=italic,bold cterm=italic,bold
\ gui=reverse,bold
hi def nroffDefinition cterm=italic gui=reverse
hi def nroffDefSpecial cterm=italic,bold gui=reverse,bold
If you want to navigate preprocessor entries in your source file as easily as
with section markers, you can activate the following option in your vimrc
@ -4628,37 +4627,36 @@ a file with ":highlight" commands such as this: >
Note that all settings that are not included remain the same, only the
specified field is used, and settings are merged with previous ones. So, the
result is like this single command has been used: >
:hi Comment term=bold ctermfg=Cyan guifg=#80a0ff gui=bold
:hi Comment ctermfg=Cyan guifg=#80a0ff gui=bold
<
*:highlight-verbose*
When listing a highlight group and 'verbose' is non-zero, the listing will
also tell where it was last set. Example: >
:verbose hi Comment
< Comment xxx term=bold ctermfg=4 guifg=Blue ~
< Comment xxx ctermfg=4 guifg=Blue ~
Last set from /home/mool/vim/vim7/runtime/syntax/syncolor.vim ~
When ":hi clear" is used then the script where this command is used will be
mentioned for the default values. See |:verbose-cmd| for more information.
*highlight-args* *E416* *E417* *E423*
There are three types of terminals for highlighting:
term a normal terminal (vt100, xterm)
cterm a color terminal (Windows console, color-xterm)
gui the GUI
There are two types of UIs for highlighting:
cterm terminal UI (|TUI|)
gui GUI or RGB-capable TUI ('termguicolors')
For each type the highlighting can be given. This makes it possible to use
the same syntax file on all terminals, and use the optimal highlighting.
the same syntax file on all UIs.
1. highlight arguments for normal terminals
1. TUI highlight arguments
*bold* *underline* *undercurl*
*inverse* *italic* *standout*
term={attr-list} *attr-list* *highlight-term* *E418*
cterm={attr-list} *attr-list* *highlight-cterm* *E418*
attr-list is a comma separated list (without spaces) of the
following items (in any order):
bold
underline
undercurl a curly underline
undercurl curly underline
reverse
inverse same as reverse
italic
@ -4689,17 +4687,6 @@ stop={term-list} *term-list* *highlight-stop*
like "<Esc>" and "<Space>". Example:
start=<Esc>[27h;<Esc>[<Space>r;
2. highlight arguments for color terminals
cterm={attr-list} *highlight-cterm*
See above for the description of {attr-list} |attr-list|.
The "cterm" argument is likely to be different from "term", when
colors are used. For example, in a normal terminal comments could
be underlined, in a color terminal they can be made Blue.
Note: Many terminals (e.g., DOS console) can't mix these attributes
with coloring. Use only one of "cterm=" OR "ctermfg=" OR "ctermbg=".
ctermfg={color-nr} *highlight-ctermfg* *E421*
ctermbg={color-nr} *highlight-ctermbg*
The {color-nr} argument is a color number. Its range is zero to
@ -4709,17 +4696,7 @@ ctermbg={color-nr} *highlight-ctermbg*
"cterm". For example, on some systems "cterm=bold ctermfg=3" gives
another color, on others you just get color 3.
For an xterm this depends on your resources, and is a bit
unpredictable. See your xterm documentation for the defaults. The
colors for a color-xterm can be changed from the .Xdefaults file.
Unfortunately this means that it's not possible to get the same colors
for each user.
The MSDOS standard colors are fixed (in a console window), so these
have been used for the names. But the meaning of color names in X11
are fixed, so these color settings have been used, to make the
highlighting settings portable (complicated, isn't it?). The
following names are recognized, with the color number used:
The following (case-insensitive) names are recognized:
*cterm-colors*
NR-16 NR-8 COLOR NAME ~
@ -4750,7 +4727,6 @@ ctermbg={color-nr} *highlight-ctermbg*
"cterm=" argument AFTER the "ctermfg=" or "ctermbg=" argument. Or use
a number instead of a color name.
The case of the color names is ignored.
Note that for 16 color ansi style terminals (including xterms), the
numbers in the NR-8 column is used. Here '*' means 'add 8' so that Blue
is 12, DarkGray is 8 etc.
@ -4789,7 +4765,7 @@ ctermbg={color-nr} *highlight-ctermbg*
"fg" and "bg" colors will not be adjusted.
3. highlight arguments for the GUI
2. GUI highlight arguments
gui={attr-list} *highlight-gui*
These give the attributes to use in the GUI mode.
@ -4865,15 +4841,14 @@ ColorColumn used for the columns set with 'colorcolumn'
Conceal placeholder characters substituted for concealed
text (see 'conceallevel')
*hl-Cursor*
Cursor the character under the cursor
Cursor character under the cursor
*hl-CursorIM*
CursorIM like Cursor, but used when in IME mode |CursorIM|
*hl-CursorColumn*
CursorColumn the screen column that the cursor is in when 'cursorcolumn' is
set
CursorColumn Screen-column at the cursor, when 'cursorcolumn' is set.
*hl-CursorLine*
CursorLine the screen line that the cursor is in when 'cursorline' is
set
CursorLine Screen-line at the cursor, when 'cursorline' is set.
Low-priority if foreground (ctermfg OR guifg) is not set.
*hl-Directory*
Directory directory names (and other special names in listings)
*hl-DiffAdd*
@ -4919,6 +4894,8 @@ MatchParen The character under the cursor or just before it, if it
*hl-ModeMsg*
ModeMsg 'showmode' message (e.g., "-- INSERT --")
*hl-MsgSeparator*
MsgSeparator Separator for scrolled messages, `msgsep` flag of 'display'
*hl-MoreMsg*
MoreMsg |more-prompt|
*hl-NonText*
@ -4929,7 +4906,7 @@ NonText '@' at the end of the window, characters from 'showbreak'
*hl-Normal*
Normal normal text
*hl-NormalNC*
NormalNC normal text in non-current window
NormalNC normal text in non-current windows
*hl-Pmenu*
Pmenu Popup menu: normal item.
*hl-PmenuSel*

View File

@ -4,7 +4,7 @@
NVIM REFERENCE MANUAL
Terminal UI *tui*
Terminal UI *TUI* *tui*
Nvim (except in |--headless| mode) uses information about the terminal you are
using to present a built-in UI. If that information is not correct, the
@ -38,13 +38,13 @@ Otherwise Nvim cannot know what sequences your terminal expects, and weird
or sub-optimal behavior will result (scrolling quirks, wrong colors, etc.).
$TERM is also important because it is mirrored by SSH to the remote session,
unlike other common client-end environment variables ($COLORTERM,
$XTERM_VERSION, $VTE_VERSION, $KONSOLE_PROFILE_NAME, $TERM_PROGRAM, ...).
unlike most other environment variables.
For this terminal Set $TERM to |builtin-terms|
-------------------------------------------------------------------------
iTerm (original) iterm, iTerm.app N
iTerm2 (new capabilities) iterm2, iTerm2.app Y
Konsole konsole-256color N
anything libvte-based vte, vte-256color Y
(e.g. GNOME Terminal) (aliases: gnome, gnome-256color)
tmux tmux, tmux-256color Y
@ -232,11 +232,6 @@ correct values. See |:mode|.
Slow and fast terminals *slow-fast-terminal*
*slow-terminal*
If you have a fast terminal you may like to set the 'ruler' option. The
cursor position is shown in the status line. If you are using horizontal
scrolling ('wrap' option off) consider setting 'sidescroll' to a small
number.
If you have a slow terminal you may want to reset the 'showcmd' and 'ruler'
options. The command characters and cursor positions will not be shown in the
status line (which involves a lot of cursor motions and attribute changes for

View File

@ -9,7 +9,7 @@ Nvim UI protocol *ui*
Type |gO| to see the table of contents.
==============================================================================
Introduction *ui-intro*
UI Events *ui-events*
GUIs can be implemented as external processes communicating with Nvim over the
RPC API. The UI model consists of a terminal-like grid with a single,
@ -30,26 +30,35 @@ a dictionary with these (optional) keys:
`ext_cmdline` Externalize the cmdline. |ui-cmdline|
`ext_wildmenu` Externalize the wildmenu. |ui-ext-wildmenu|
Nvim will then send msgpack-rpc notifications, with the method name "redraw"
and a single argument, an array of screen update events.
Update events are tuples whose first element is the event name and remaining
elements the event parameters.
Specifying a non-existent option is an error. UIs can check the |api-metadata|
`ui_options` key for supported options. Additionally Nvim (currently) requires
that all connected UIs use the same set of widgets. Therefore the active
widgets will be the intersection of the requested widget sets of all connected
UIs. The "option_set" event announces which widgets actually are active.
Events must be handled in order. The user should only see the updated screen
Nvim sends msgpack-rpc notifications to all attached UIs, with method name
"redraw" and a single argument: an array (batch) of screen "update events".
Each update event is itself an array whose first element is the event name and
remaining elements are event-parameter tuples. This allows multiple events of
the same kind to be sent in a row without the event name being repeated. This
batching is mostly used for "put", because each "put" event puts contents in
one screen cell, but clients must be prepared for multiple argument sets being
batched for all event kinds.
Events must be handled in-order. The user should only see the updated screen
state after all events in the same "redraw" batch are processed (not any
intermediate state after processing only part of the array).
Nvim sends |ui-global| and |ui-grid| events unconditionally; these suffice to
implement a terminal-like interface.
implement a terminal-like layout.
Nvim optionally sends screen elements "semantically" as structured events
instead of raw grid-lines. Then the UI must decide how to present those
elements itself; Nvim will not draw those elements on the grid. This is
controlled by the |ui-ext-options|.
instead of raw grid-lines, controlled by |ui-ext-options|. The UI must present
those elements itself; Nvim will not draw those elements on the |ui-grid|.
Future versions of Nvim may add new update kinds and may append new parameters
to existing update kinds. Clients must be prepared to ignore such extensions
to be forward-compatible. |api-contract|
to existing update kinds. Clients must be prepared to ignore such extensions,
for forward-compatibility. |api-contract|
==============================================================================
Global Events *ui-global*
@ -80,6 +89,31 @@ Global Events *ui-global*
Some keys are missing in some modes.
["option_set", name, value]
UI-related option changed, where `name` is one of:
'arabicshape'
'ambiwidth'
'emoji'
'guifont'
'guifontset'
'guifontwide'
'linespace'
'showtabline'
'termguicolors'
"ext_*" (all |ui-ext-options|)
Triggered when the UI first connects to Nvim, and whenever an option
is changed by the user or a plugin.
Options are not represented here if their effects are communicated in
other UI events. For example, instead of forwarding the 'mouse' option
value, the "mouse_on" and "mouse_off" UI events directly indicate if
mouse support is active. Some options like 'ambiwidth' have already
taken effect on the grid, where appropriate empty cells are added,
however a UI might still use such options when rendering raw text
sent from Nvim, like for |ui-ext-cmdline|.
["mode_change", mode, mode_idx]
The mode changed. The first parameter `mode` is a string representing
the current mode. `mode_idx` is an index into the array received in

View File

@ -57,12 +57,11 @@ make them visible with: >
==============================================================================
*01.2* Vim installed *setup-vimrc_example*
It's not required for this tutorial, but we provide an example vimrc you may
use:
To create an empty vimrc: >
:!cp -i $VIMRUNTIME/vimrc_example.vim ~/.config/nvim/init.vim
If the file already exists you probably want to keep it.
:call mkdir(stdpath('config'),'p')
:exe 'edit' stdpath('config').'/init.vim'
:write
For more info see |vimrc|.

View File

@ -58,10 +58,9 @@ to write a Vim script file: |usr_41.txt|.
==============================================================================
*05.2* The example vimrc file explained *vimrc_example.vim*
In the first chapter was explained how the example vimrc file can be used.
The file can be found here:
In the first chapter was explained how to create a vimrc file. >
$VIMRUNTIME/vimrc_example.vim ~
:exe 'edit' stdpath('config').'/init.vim'
In this section we will explain the various commands used in this file. This
will give you hints about how to set up your own preferences. Not everything

View File

@ -294,8 +294,6 @@ If you really don't want to see this message, you can add the 'A' flag to the
disk.
'updatetime' Timeout after which the swap file is flushed to disk.
'directory' List of directory names where to store the swap file.
'maxmem' Limit for memory usage before writing text to the swap file.
'maxmemtot' Same, but for all files in total.
==============================================================================

View File

@ -207,21 +207,18 @@ g8 Print the hex values of the bytes used in the
:sh[ell] Removed. |vim-differences| {Nvim}
*:terminal* *:te*
:te[rminal][!] [{cmd}] Execute {cmd} with 'shell' in a new |terminal| buffer.
Equivalent to: >
:enew
:call termopen('{cmd}')
<
See |termopen()|.
:te[rminal][!] [{cmd}] Execute {cmd} with 'shell' in a new |terminal-emulator|
buffer. Without {cmd}, start an interactive 'shell'.
Without {cmd}, start an interactive shell.
Type |i| to enter |Terminal-mode|, then keys are sent to
the job running in the terminal. Type <C-\><C-N> to
leave Terminal-mode. |CTRL-\_CTRL-N|
Creating the terminal buffer fails when changes have been
made to the current buffer, unless 'hidden' is set.
Fails if changes have been made to the current buffer,
unless 'hidden' is set.
To enter |Terminal-mode| automatically: >
autocmd BufEnter term://* startinsert
autocmd BufLeave term://* stopinsert
autocmd TermOpen * startinsert
<
*:!cmd* *:!* *E34*
:!{cmd} Execute {cmd} with 'shell'. See also |:terminal|.
@ -256,8 +253,6 @@ g8 Print the hex values of the bytes used in the
to a pipe (not a terminal). Use |:terminal| to run an
interactive shell connected to a terminal.
For Win32 also see |:!start|.
After the command has been executed, the timestamp and
size of the current file is checked |timestamp|.
@ -274,21 +269,6 @@ g8 Print the hex values of the bytes used in the
< The screen is not redrawn then, thus you have to use
CTRL-L or ":redraw!" if the command did display
something.
*:!start*
:!start {cmd} (Windows only). Special-case of |:!| which works
asynchronously, for running a program that does not
affect the files you are editing.
Optional arguments (can only use one at a time):
/min window will be minimized
/b no console window will be opened
Note: If the process requires input, /b will get an
EOF error because its input stream (stdin) would be
redirected to \\.\NUL (stdout and stderr too).
Programs begun with :!start do not get passed Vim's
open file handles, which means they do not have to be
closed before Vim. To avoid this special treatment,
use ":! start".
*:!!*
:!! Repeat last ":!{cmd}".

View File

@ -38,18 +38,6 @@ Information for undo and text in registers is kept in memory, thus when making
undo levels and the text that can be kept in registers. Other things are also
kept in memory: Command-line history, error messages for Quickfix mode, etc.
Memory usage limits
-------------------
The option 'maxmem' ('mm') is used to set the maximum memory used for one
buffer (in kilobytes). 'maxmemtot' is used to set the maximum memory used for
all buffers (in kilobytes). The defaults depend on the system used.
These are not hard limits, but tell Vim when to move text into a swap file.
If you don't like Vim to swap to a file, set 'maxmem' and 'maxmemtot' to a
very large value. The swap file will then only be used for recovery. If you
don't want a swap file at all, set 'updatecount' to 0, or use the "-n"
argument when starting Vim.
==============================================================================
2. The most interesting additions *vim-additions*

View File

@ -14,11 +14,10 @@ a complete and centralized reference of those differences.
==============================================================================
1. Configuration *nvim-configuration*
- Use `$XDG_CONFIG_HOME/nvim/init.vim` instead of `.vimrc` for storing
configuration.
- Use `$XDG_CONFIG_HOME/nvim/init.vim` instead of `.vimrc` for configuration.
- Use `$XDG_CONFIG_HOME/nvim` instead of `.vim` to store configuration files.
- Use `$XDG_DATA_HOME/nvim/shada/main.shada` instead of `.viminfo` for persistent
session information.
session information. |shada|
==============================================================================
2. Defaults *nvim-defaults*
@ -32,8 +31,12 @@ a complete and centralized reference of those differences.
- 'backupdir' defaults to .,~/.local/share/nvim/backup (|xdg|)
- 'belloff' defaults to "all"
- 'complete' doesn't include "i"
- 'cscopeverbose' is enabled
- 'directory' defaults to ~/.local/share/nvim/swap// (|xdg|), auto-created
- 'display' defaults to "lastline"
- 'display' defaults to "lastline,msgsep"
- 'encoding' is UTF-8 (cf. 'fileencoding' for file-content encoding)
- 'fillchars' defaults (in effect) to "vert:│,fold:·"
- 'fsync' is disabled
- 'formatoptions' defaults to "tcqj"
- 'history' defaults to 10000 (the maximum)
- 'hlsearch' is set by default
@ -46,7 +49,9 @@ a complete and centralized reference of those differences.
- 'nrformats' defaults to "bin,hex"
- 'ruler' is set by default
- 'sessionoptions' doesn't include "options"
- 'shortmess' sets "F" flag
- 'showcmd' is set by default
- 'sidescroll' defaults to 1
- 'smarttab' is set by default
- 'tabpagemax' defaults to 50
- 'tags' defaults to "./tags;,tags"
@ -66,10 +71,12 @@ Job control |job-control|
Remote plugins |remote-plugin|
Providers
Clipboard |provider-clipboard|
Node.js plugins |provider-nodejs|
Python plugins |provider-python|
Ruby plugins |provider-ruby|
Shared data |shada|
Embedded terminal |terminal|
VimL parser |nvim_parse_expression()|
XDG base directories |xdg|
USER EXPERIENCE ~
@ -113,20 +120,69 @@ by Nvim developers.
FEATURES ~
"Outline": Type |gO| in |:Man| and |:help| pages to see a document outline.
Command-line highlighting:
The expression prompt (|@=|, |c_CTRL-R_=|, |i_CTRL-R_=|) is highlighted
using a built-in VimL expression parser. |expr-highlight|
*E5408* *E5409*
|input()|, |inputdialog()| support custom highlighting. |input()-highlight|
*g:Nvim_color_cmdline*
(Experimental) Command-line (|:|) is colored by callback defined in
`g:Nvim_color_cmdline` (this callback is for testing only, and will be
removed in the future).
|META| (ALT) chords are recognized, even in the terminal. Any |<M-| mapping
will work. Some examples: <M-1>, <M-2>, <M-BS>, <M-Del>, <M-Ins>, <M-/>,
<M-\>, <M-Space>, <M-Enter>, <M-=>, <M-->, <M-?>, <M-$>, ...
META chords are case-sensitive: <M-a> and <M-A> are two different keycodes.
Commands:
|:checkhealth|
|:cquit| can use [count] to set the exit code
|:drop| is always available
|:Man| is available by default, with many improvements such as completion
|:tchdir| tab-local |current-directory|
Some `CTRL-SHIFT-...` key chords are distinguished from `CTRL-...` variants
(even in the terminal). Specifically, the following are known to work:
<C-Tab>, <C-S-Tab>, <C-BS>, <C-S-BS>, <C-Enter>, <C-S-Enter>
Events:
|DirChanged|
|TabNewEntered|
|TermClose|
|TermOpen|
|TextYankPost|
|VimResume|
|VimSuspend|
Functions:
|dictwatcheradd()| notifies a callback whenever a |Dict| is modified
|dictwatcherdel()|
|menu_get()|
|msgpackdump()|, |msgpackparse()| provide msgpack de/serialization
|stdpath()|
|system()|, |systemlist()| can run {cmd} directly (without 'shell')
Highlight groups:
|expr-highlight| highlight groups (prefixed with "Nvim")
|hl-NormalNC| highlights non-current windows
|hl-MsgSeparator| highlights separator for scrolled messages
|hl-QuickFixLine|
|hl-Substitute|
|hl-TermCursor|
|hl-TermCursorNC|
|hl-Whitespace| highlights 'listchars' whitespace
Input:
ALT (|META|) chords always work (even in the |TUI|). Map |<M-| with any key:
<M-1>, <M-BS>, <M-Del>, <M-Ins>, <M-/>, <M-\>, <M-Space>, <M-Enter>, etc.
Case-sensitive: <M-a> and <M-A> are two different keycodes.
ALT in insert-mode behaves like <Esc> if not mapped. |i_ALT|
Mappings:
|<Cmd>| pseudokey
Normal commands:
"Outline": Type |gO| in |:Man| and |:help| pages to see a document outline.
Options:
'cpoptions' flags: |cpo-_|
'display' flag `msgsep` to minimize scrolling when showing messages
'guicursor' works in the terminal
'fillchars' flags: `msgsep` (see 'display' above)
and `eob` for |EndOfBuffer| marker
'inccommand' shows interactive results for |:substitute|-like commands
'scrollback'
'statusline' supports unlimited alignment sections
@ -139,65 +195,20 @@ Variables:
|v:progpath| is always absolute ("full")
|v:windowid| is always available (for use by external UIs)
Commands:
|:checkhealth|
|:drop| is available on all platforms
|:Man| is available by default, with many improvements such as completion
|:tchdir| tab-local |current-directory|
Functions:
|dictwatcheradd()| notifies a callback whenever a |Dict| is modified
|dictwatcherdel()|
|menu_get()|
|msgpackdump()|, |msgpackparse()| provide msgpack de/serialization
Events:
|DirChanged|
|TabNewEntered|
|TermClose|
|TermOpen|
|TextYankPost|
Highlight groups:
|hl-QuickFixLine|
|hl-Substitute|
|hl-TermCursor|
|hl-TermCursorNC|
|hl-Whitespace| highlights 'listchars' whitespace
UI:
*E5408* *E5409* *g:Nvim_color_expr* *g:Nvim_color_cmdline*
Command-line coloring is supported. Only |input()| and |inputdialog()| may
be colored. For testing purposes expressions (e.g. |i_CTRL-R_=|) and regular
command-line (|:|) are colored by callbacks defined in `g:Nvim_color_expr`
and `g:Nvim_color_cmdline` respectively (these callbacks are for testing
only, and will be removed in a future version).
==============================================================================
4. Changed features *nvim-features-changed*
Nvim always builds with all features, in contrast to Vim which may have
certain features removed/added at compile-time. This is like if Vim's "HUGE"
build was the only Vim release type (except Nvim is smaller than Vim's "HUGE"
build).
certain features removed/added at compile-time. |feature-compile|
If a Python interpreter is available on your `$PATH`, |:python| and |:python3|
are always available and may be used simultaneously in separate plugins. The
`neovim` pip package must be installed to use Python plugins in Nvim (see
|provider-python|).
Because of general |256-color| usage whereever possible, Nvim will even use
256-colour capability on Linux virtual terminals. Vim uses only 8 colours
plus bright foreground on Linux VTs.
Vim combines what is in its |builtin-terms| with what it reads from termcap,
and has a |ttybuiltin| setting to control how that combination works. Nvim
uses either one or the other of an external |terminfo| entry or the built-in
one. It does not attempt to mix data from the two.
are always available and may be used simultaneously. See |provider-python|.
|:!| does not support "interactive" commands. Use |:terminal| instead.
(GUI Vim has a similar limitation, see ":help gui-pty" in Vim.)
:!start is not special-cased on Windows.
|system()| does not support writing/reading "backgrounded" commands. |E5677|
|:redir| nested in |execute()| works.
@ -214,8 +225,6 @@ makes things faster. |:terminal| output is never throttled.
'p')) mkdir() will silently exit. In Vim this was an error.
3. mkdir() error messages now include strerror() text when mkdir fails.
'encoding' is always "utf-8".
|string()| and |:echo| behaviour changed:
1. No maximum recursion depth limit is applied to nested container
structures.
@ -297,6 +306,52 @@ other arguments if used).
Highlight groups:
|hl-ColorColumn|, |hl-CursorColumn| are lower priority than most other
groups
|hl-CursorLine| is low-priority unless foreground color is set
Macro/|recording| behavior
Replay of a macro recorded during :lmap produces the same actions as when it
was recorded. In Vim if a macro is recorded while using :lmap'ped keys then
the behaviour during record and replay differs.
'keymap' is implemented via :lmap instead of :lnoremap so that you can use
macros and 'keymap' at the same time. This also means you can use |:imap| on
the results of keys from 'keymap'.
Normal commands:
|Q| is the same as |gQ|
Options:
'ttimeout', 'ttimeoutlen' behavior was simplified
Startup:
|-e| and |-es| invoke the same "improved Ex mode" as -E and -Es.
|-E| and |-Es| reads stdin as text (into buffer 1).
|-s| reads Normal commands from stdin if the script name is "-".
Reading text (instead of commands) from stdin |--|:
- works by default: "-" file is optional
- works in more cases: |-Es|, file args
TUI:
*:set-termcap*
Start Nvim with 'verbose' level 3 to show terminal capabilities: >
nvim -V3
<
*'term'* *E529* *E530* *E531*
'term' reflects the terminal type derived from |$TERM| and other environment
checks. For debugging only; not reliable during startup. >
:echo &term
< "builtin_x" means one of the |builtin-terms| was chosen, because the expected
terminfo file was not found on the system.
Nvim will use 256-colour capability on Linux virtual terminals. Vim uses
only 8 colours plus bright foreground on Linux VTs.
Vim combines what is in its |builtin-terms| with what it reads from terminfo,
and has a |ttybuiltin| setting to control how that combination works. Nvim
uses one or the other, it does not attempt to merge the two.
VimL (Vim script) compatibility:
`count` does not alias to |v:count|
==============================================================================
5. Missing legacy features *nvim-features-missing*
@ -304,7 +359,7 @@ Highlight groups:
Some legacy Vim features are not implemented:
- |if_py|: vim.bindeval() and vim.Function() are not supported
- |if_lua|: the `vim` object is missing most legacy methods
- |if_lua|: the `vim` object is missing some legacy methods
- *if_perl*
- *if_mzscheme*
- *if_tcl*
@ -314,65 +369,43 @@ Some legacy Vim features are not implemented:
These Vim features were intentionally removed from Nvim.
*'cp'* *'nocompatible'* *'nocp'* *'compatible'*
Nvim is always "non-compatible" with Vi.
":set nocompatible" is ignored
":set compatible" is an error
Aliases:
ex (alias for "nvim -e")
exim (alias for "nvim -E")
gex (GUI)
gview (GUI)
gvim (GUI)
gvimdiff (GUI)
rgview (GUI)
rgvim (GUI)
rview (alias for "nvim -RZ")
rvim (alias for "nvim -Z")
view (alias for "nvim -R")
vimdiff (alias for "nvim -d" |diff-mode|)
*'ed'* *'edcompatible'* *'noed'* *'noedcompatible'*
Ed-compatible mode:
":set noedcompatible" is ignored
":set edcompatible" is an error
Commands:
:fixdel
:helpfind
:mode (no longer accepts an argument)
:open
:Print
:shell
:smile
:tearoff
*t_xx* *:set-termcap* *termcap-options* *t_AB* *t_Sb* *t_vb* *t_SI*
Nvim does not have special `t_XX` options nor <t_XX> keycodes to configure
terminal capabilities. Instead Nvim treats the terminal as any other UI. For
example, 'guicursor' sets the terminal cursor style if possible.
Compile-time features:
EBCDIC
Emacs tags support
X11 integration (see |x11-selection|)
*'term'* *E529* *E530* *E531*
The 'term' option has a fixed value, present only for script compatibility and
intentionally not the same as any known terminal type name. It should be a
rare case in Nvim where one needs |term-dependent-settings|.
*termcap*
Nvim never uses the termcap database, only |terminfo| and |builtin-terms|.
*xterm-8bit* *xterm-8-bit*
Xterm can be run in a mode where it uses true 8-bit CSI. Supporting this
requires autodetection of whether the terminal is in UTF-8 mode or non-UTF-8
mode, as the 8-bit CSI character has to be written differently in each case.
Vim issues a "request version" sequence to the terminal at startup and looks
at how the terminal is sending CSI. Nvim does not issue such a sequence and
always uses 7-bit control sequences.
'ttyfast':
":set ttyfast" is ignored
":set nottyfast" is an error
Encryption support:
*'cryptmethod'* *'cm'*
*'key'*
MS-DOS support:
'bioskey'
'conskey'
Test functions:
test_alloc_fail()
test_autochdir()
test_disable_char_avail()
test_garbagecollect_now()
test_null_channel()
test_null_dict()
test_null_job()
test_null_list()
test_null_partial()
test_null_string()
test_settime()
Other options:
Options:
'antialias'
'cpoptions' (g j k H w < * - and all POSIX flags were removed)
'bioskey' (MS-DOS)
'conskey' (MS-DOS)
*'cp'* *'nocompatible'* *'nocp'* *'compatible'* (Nvim is always "nocompatible".)
'cpoptions' (gjkHw<*- and all POSIX flags were removed)
*'cryptmethod'* *'cm'* *'key'* (Vim encryption implementation)
*'ed'* *'edcompatible'* *'noed'* *'noedcompatible'*
'encoding' ("utf-8" is always used)
'esckeys'
'guioptions' "t" flag was removed
@ -382,6 +415,9 @@ Other options:
*'imactivatekey'* *'imak'*
*'imstatusfunc'* *'imsf'*
*'macatsui'*
'maxmem' Nvim delegates memory-management to the OS.
'maxmemtot' Nvim delegates memory-management to the OS.
'maxcombine' (6 is always used)
*'restorescreen'* *'rs'* *'norestorescreen'* *'nors'*
'shelltype'
*'shortname'* *'sn'* *'noshortname'* *'nosn'*
@ -395,38 +431,45 @@ Other options:
*'ttymouse'* *'ttym'*
*'ttyscroll'* *'tsl'*
*'ttytype'* *'tty'*
'ttyfast'
'weirdinvert'
Other commands:
:Print
:fixdel
:helpfind
:mode (no longer accepts an argument)
:open
:shell
:smile
:tearoff
Startup:
--literal (file args are always literal; to expand wildcards on Windows, use
|:n| e.g. `nvim +"n *"`)
Easy mode: eview, evim, nvim -y
Vi mode: nvim -v
Other compile-time features:
EBCDIC
Emacs tags support
X11 integration (see |x11-selection|)
Test functions:
test_alloc_fail()
test_autochdir()
test_disable_char_avail()
test_garbagecollect_now()
test_null_channel()
test_null_dict()
test_null_job()
test_null_list()
test_null_partial()
test_null_string()
test_override()
test_settime()
Nvim does not have a built-in GUI and hence the following aliases have been
removed: gvim, gex, gview, rgvim, rgview
TUI:
*t_xx* *termcap-options* *t_AB* *t_Sb* *t_vb* *t_SI*
Nvim does not have special `t_XX` options nor <t_XX> keycodes to configure
terminal capabilities. Instead Nvim treats the terminal as any other UI,
e.g. 'guicursor' sets the terminal cursor style if possible.
"Easy mode" (eview, evim, nvim -y)
"(g)vimdiff" (alias for "(g)nvim -d" |diff-mode|)
"Vi mode" (nvim -v)
*termcap*
Nvim never uses the termcap database, only |terminfo| and |builtin-terms|.
The ability to start nvim via the following aliases has been removed in favor
of just using their command line arguments:
ex nvim -e
exim nvim -E
view nvim -R
rvim nvim -Z
rview nvim -RZ
*xterm-8bit* *xterm-8-bit*
Xterm can be run in a mode where it uses true 8-bit CSI. Supporting this
requires autodetection of whether the terminal is in UTF-8 mode or non-UTF-8
mode, as the 8-bit CSI character has to be written differently in each case.
Vim issues a "request version" sequence to the terminal at startup and looks
at how the terminal is sending CSI. Nvim does not issue such a sequence and
always uses 7-bit control sequences.
==============================================================================
vim:tw=78:ts=8:noet:ft=help:norl:
vim:tw=78:ts=8:sw=2:noet:ft=help:norl:

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@ if exists('b:did_ftplugin') || &filetype !=# 'man'
endif
let b:did_ftplugin = 1
let s:pager = !exists('b:man_sect')
let s:pager = get(s:, 'pager', 0) || !exists('b:man_sect')
if s:pager
call man#init_pager()
@ -35,7 +35,7 @@ if !exists('g:no_plugin_maps') && !exists('g:no_man_maps')
nnoremap <silent> <buffer> <C-]> :Man<CR>
nnoremap <silent> <buffer> K :Man<CR>
nnoremap <silent> <buffer> <C-T> :call man#pop_tag()<CR>
if s:pager
if 1 == bufnr('%') || s:pager
nnoremap <silent> <buffer> <nowait> q :lclose<CR>:q<CR>
else
nnoremap <silent> <buffer> <nowait> q :lclose<CR><C-W>c

168
runtime/lua/man.lua Normal file
View File

@ -0,0 +1,168 @@
local buf_hls = {}
local function highlight_line(line, linenr)
local chars = {}
local prev_char = ''
local overstrike, escape = false, false
local hls = {} -- Store highlight groups as { attr, start, final }
local NONE, BOLD, UNDERLINE, ITALIC = 0, 1, 2, 3
local hl_groups = {[BOLD]="manBold", [UNDERLINE]="manUnderline", [ITALIC]="manItalic"}
local attr = NONE
local byte = 0 -- byte offset
local function end_attr_hl(attr)
for i, hl in ipairs(hls) do
if hl.attr == attr and hl.final == -1 then
hl.final = byte
hls[i] = hl
end
end
end
local function add_attr_hl(code)
local continue_hl = true
if code == 0 then
attr = NONE
continue_hl = false
elseif code == 1 then
attr = BOLD
elseif code == 22 then
attr = BOLD
continue_hl = false
elseif code == 3 then
attr = ITALIC
elseif code == 23 then
attr = ITALIC
continue_hl = false
elseif code == 4 then
attr = UNDERLINE
elseif code == 24 then
attr = UNDERLINE
continue_hl = false
else
attr = NONE
return
end
if continue_hl then
hls[#hls + 1] = {attr=attr, start=byte, final=-1}
else
if attr == NONE then
for a, _ in pairs(hl_groups) do
end_attr_hl(a)
end
else
end_attr_hl(attr)
end
end
end
-- Break input into UTF8 code points. ASCII code points (from 0x00 to 0x7f)
-- can be represented in one byte. Any code point above that is represented by
-- a leading byte (0xc0 and above) and continuation bytes (0x80 to 0xbf, or
-- decimal 128 to 191).
for char in line:gmatch("[^\128-\191][\128-\191]*") do
if overstrike then
local last_hl = hls[#hls]
if char == prev_char then
if char == '_' and attr == UNDERLINE and last_hl and last_hl.final == byte then
-- This underscore is in the middle of an underlined word
attr = UNDERLINE
else
attr = BOLD
end
elseif prev_char == '_' then
-- char is underlined
attr = UNDERLINE
elseif prev_char == '+' and char == 'o' then
-- bullet (overstrike text '+^Ho')
attr = BOLD
char = '·'
elseif prev_char == '·' and char == 'o' then
-- bullet (additional handling for '+^H+^Ho^Ho')
attr = BOLD
char = '·'
else
-- use plain char
attr = NONE
end
-- Grow the previous highlight group if possible
if last_hl and last_hl.attr == attr and last_hl.final == byte then
last_hl.final = byte + #char
else
hls[#hls + 1] = {attr=attr, start=byte, final=byte + #char}
end
overstrike = false
prev_char = ''
byte = byte + #char
chars[#chars + 1] = char
elseif escape then
-- Use prev_char to store the escape sequence
prev_char = prev_char .. char
-- We only want to match against SGR sequences, which consist of ESC
-- followed by '[', then a series of parameter and intermediate bytes in
-- the range 0x20 - 0x3f, then 'm'. (See ECMA-48, sections 5.4 & 8.3.117)
local sgr = prev_char:match("^%[([\032-\063]*)m$")
if sgr then
local match = ''
while sgr and #sgr > 0 do
-- Match against SGR parameters, which may be separated by ';'
match, sgr = sgr:match("^(%d*);?(.*)")
add_attr_hl(match + 0) -- coerce to number
end
escape = false
elseif not prev_char:match("^%[[\032-\063]*$") then
-- Stop looking if this isn't a partial CSI sequence
escape = false
end
elseif char == "\027" then
escape = true
prev_char = ''
elseif char == "\b" then
overstrike = true
prev_char = chars[#chars]
byte = byte - #prev_char
chars[#chars] = nil
else
byte = byte + #char
chars[#chars + 1] = char
end
end
for _, hl in ipairs(hls) do
if hl.attr ~= NONE then
buf_hls[#buf_hls + 1] = {
0,
-1,
hl_groups[hl.attr],
linenr - 1,
hl.start,
hl.final
}
end
end
return table.concat(chars, '')
end
local function highlight_man_page()
local mod = vim.api.nvim_buf_get_option(0, "modifiable")
vim.api.nvim_buf_set_option(0, "modifiable", true)
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
for i, line in ipairs(lines) do
lines[i] = highlight_line(line, i)
end
vim.api.nvim_buf_set_lines(0, 0, -1, false, lines)
for _, args in ipairs(buf_hls) do
vim.api.nvim_buf_add_highlight(unpack(args))
end
buf_hls = {}
vim.api.nvim_buf_set_option(0, "modifiable", mod)
end
return { highlight_man_page = highlight_man_page }

View File

@ -1,7 +1,7 @@
" Set options and add mapping such that Vim behaves a lot like MS-Windows
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last change: 2012 Jul 25
" Last change: 2017 Oct 28
" bail out if this isn't wanted (mrsvim.vim uses this).
if exists("g:skip_loading_mswin") && g:skip_loading_mswin
@ -23,20 +23,22 @@ set backspace=indent,eol,start whichwrap+=<,>,[,]
" backspace in Visual mode deletes selection
vnoremap <BS> d
" CTRL-X and SHIFT-Del are Cut
vnoremap <C-X> "+x
vnoremap <S-Del> "+x
if has("clipboard")
" CTRL-X and SHIFT-Del are Cut
vnoremap <C-X> "+x
vnoremap <S-Del> "+x
" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y
vnoremap <C-Insert> "+y
" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y
vnoremap <C-Insert> "+y
" CTRL-V and SHIFT-Insert are Paste
map <C-V> "+gP
map <S-Insert> "+gP
" CTRL-V and SHIFT-Insert are Paste
map <C-V> "+gP
map <S-Insert> "+gP
cmap <C-V> <C-R>+
cmap <S-Insert> <C-R>+
cmap <C-V> <C-R>+
cmap <S-Insert> <C-R>+
endif
" Pasting blockwise and linewise selections is not possible in Insert and
" Visual mode without the +virtualedit feature. They are pasted as if they
@ -44,8 +46,10 @@ cmap <S-Insert> <C-R>+
" Uses the paste.vim autoload script.
" Use CTRL-G u to have CTRL-Z only undo the paste.
exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
if 1
exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
endif
imap <S-Insert> <C-V>
vmap <S-Insert> <C-V>
@ -99,6 +103,19 @@ inoremap <C-F4> <C-O><C-W>c
cnoremap <C-F4> <C-C><C-W>c
onoremap <C-F4> <C-C><C-W>c
if has("gui")
" CTRL-F is the search dialog
noremap <expr> <C-F> has("gui_running") ? ":promptfind\<CR>" : "/"
inoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-O>:promptfind\<CR>" : "\<C-\>\<C-O>/"
cnoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-C>:promptfind\<CR>" : "\<C-\>\<C-O>/"
" CTRL-H is the replace dialog,
" but in console, it might be backspace, so don't map it there
nnoremap <expr> <C-H> has("gui_running") ? ":promptrepl\<CR>" : "\<C-H>"
inoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-O>:promptrepl\<CR>" : "\<C-H>"
cnoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-C>:promptrepl\<CR>" : "\<C-H>"
endif
" restore 'cpoptions'
set cpo&
if 1

View File

@ -996,10 +996,6 @@ call append("$", "updatecount\tnumber of characters typed to cause a swap file u
call append("$", " \tset uc=" . &uc)
call append("$", "updatetime\ttime in msec after which the swap file will be updated")
call append("$", " \tset ut=" . &ut)
call append("$", "maxmem\tmaximum amount of memory in Kbyte used for one buffer")
call append("$", " \tset mm=" . &mm)
call append("$", "maxmemtot\tmaximum amount of memory in Kbyte used for all buffers")
call append("$", " \tset mmt=" . &mmt)
call <SID>Header("command line editing")
@ -1087,6 +1083,9 @@ if has("quickfix")
call <SID>OptionG("gp", &gp)
call append("$", "grepformat\tlist of formats for output of 'grepprg'")
call <SID>OptionG("gfm", &gfm)
call append("$", "makeencoding\tencoding of the \":make\" and \":grep\" output")
call append("$", "\t(global or local to buffer)")
call <SID>OptionG("menc", &menc)
endif

View File

@ -1,81 +0,0 @@
" A Neovim plugin that implements GUI helper commands
if !has('win32') || !has('nvim') || exists('g:GuiLoaded')
finish
endif
let g:GuiLoaded = 1
" Close the GUI
function! GuiClose() abort
call rpcnotify(0, 'Gui', 'Close')
endfunction
" Notify the GUI when exiting Neovim
autocmd VimLeave * call GuiClose()
" A replacement for foreground()
function! GuiForeground() abort
call rpcnotify(0, 'Gui', 'Foreground')
endfunction
" Set maximized state for GUI window (1 is enabled, 0 disabled)
function! GuiWindowMaximized(enabled) abort
call rpcnotify(0, 'Gui', 'WindowMaximized', a:enabled)
endfunction
" Set fullscreen state for GUI window (1 is enabled, 0 disabled)
function! GuiWindowFullScreen(enabled) abort
call rpcnotify(0, 'Gui', 'WindowFullScreen', a:enabled)
endfunction
" Set GUI font
function! GuiFont(fname, ...) abort
let force = get(a:000, 0, 0)
call rpcnotify(0, 'Gui', 'Font', a:fname, force)
endfunction
" Set additional linespace
function! GuiLinespace(height) abort
call rpcnotify(0, 'Gui', 'Linespace', a:height)
endfunction
" Configure mouse hide behaviour (1 is enabled, 0 disabled)
function! GuiMousehide(enabled) abort
call rpcnotify(0, 'Gui', 'Mousehide', a:enabled)
endfunction
" The GuiFont command. For compatibility there is also Guifont
function s:GuiFontCommand(fname, bang) abort
if a:fname ==# ''
if exists('g:GuiFont')
echo g:GuiFont
else
echo 'No GuiFont is set'
endif
else
call GuiFont(a:fname, a:bang ==# '!')
endif
endfunction
command! -nargs=? -bang Guifont call s:GuiFontCommand("<args>", "<bang>")
command! -nargs=? -bang GuiFont call s:GuiFontCommand("<args>", "<bang>")
function s:GuiLinespaceCommand(height) abort
if a:height ==# ''
if exists('g:GuiLinespace')
echo g:GuiLinespace
else
echo 'No GuiLinespace is set'
endif
else
call GuiLinespace(a:height)
endif
endfunction
command! -nargs=? GuiLinespace call s:GuiLinespaceCommand("<args>")
" GuiDrop('file1', 'file2', ...) is similar to :drop file1 file2 ...
" but it calls fnameescape() over all arguments
function GuiDrop(...)
let l:fnames = deepcopy(a:000)
let l:args = map(l:fnames, 'fnameescape(v:val)')
exec 'drop '.join(l:args, ' ')
doautocmd BufEnter
endfunction

View File

@ -1,8 +1 @@
function! s:complete(lead, _line, _pos) abort
return sort(filter(map(globpath(&runtimepath, 'autoload/health/*', 1, 1),
\ 'fnamemodify(v:val, ":t:r")'),
\ 'empty(a:lead) || v:val[:strlen(a:lead)-1] ==# a:lead'))
endfunction
command! -nargs=* -complete=customlist,s:complete CheckHealth
\ call health#check([<f-args>])
autocmd CmdUndefined CheckHealth checkhealth

View File

@ -20,7 +20,7 @@
if &cp || exists("g:loaded_netrwPlugin")
finish
endif
let g:loaded_netrwPlugin = "v162"
let g:loaded_netrwPlugin = "v156"
let s:keepcpo = &cpo
set cpo&vim
"DechoRemOn
@ -42,8 +42,8 @@ augroup END
" Network Browsing Reading Writing: {{{2
augroup Network
au!
au BufReadCmd file://* call netrw#FileUrlEdit(expand("<amatch>"))
au BufReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
au BufReadCmd file://* call netrw#FileUrlRead(expand("<amatch>"))
au BufReadCmd ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
au FileReadCmd ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>"))
au BufWriteCmd ftp://*,rcp://*,scp://*,http://*,file://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
au FileWriteCmd ftp://*,rcp://*,scp://*,http://*,file://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
@ -59,7 +59,7 @@ com! -count=1 -nargs=* Nread let s:svpos= winsaveview()<bar>call netrw#NetRead(
com! -range=% -nargs=* Nwrite let s:svpos= winsaveview()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call winrestview(s:svpos)
com! -nargs=* NetUserPass call NetUserPass(<f-args>)
com! -nargs=* Nsource let s:svpos= winsaveview()<bar>call netrw#NetSource(<f-args>)<bar>call winrestview(s:svpos)
com! -nargs=? Ntree call netrw#SetTreetop(1,<q-args>)
com! -nargs=? Ntree call netrw#SetTreetop(<q-args>)
" Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{2
com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
@ -81,7 +81,7 @@ if !exists("g:netrw_nogx")
if !hasmapto('<Plug>NetrwBrowseX')
nmap <unique> gx <Plug>NetrwBrowseX
endif
nno <silent> <Plug>NetrwBrowseX :call netrw#BrowseX(netrw#GX(),netrw#CheckIfRemote(netrw#GX()))<cr>
nno <silent> <Plug>NetrwBrowseX :call netrw#BrowseX(expand((exists("g:netrw_gx")? g:netrw_gx : '<cfile>')),netrw#CheckIfRemote())<cr>
endif
if maparg('gx','v') == ""
if !hasmapto('<Plug>NetrwBrowseXVis')
@ -129,15 +129,19 @@ fun! s:LocalBrowse(dirname)
elseif isdirectory(a:dirname)
" call Decho("(LocalBrowse) dirname<".a:dirname."> ft=".&ft." (isdirectory, not amiga)")
" call Dredir("LocalBrowse ft last set: ","verbose set ft")
" call Decho("(s:LocalBrowse) COMBAK#23: buf#".bufnr("%")." file<".expand("%")."> line#".line(".")." col#".col("."))
sil! call netrw#LocalBrowseCheck(a:dirname)
" call Decho("(s:LocalBrowse) COMBAK#24: buf#".bufnr("%")." file<".expand("%")."> line#".line(".")." col#".col("."))
if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt
exe w:netrw_bannercnt
" call Decho("(s:LocalBrowse) COMBAK#25: buf#".bufnr("%")." file<".expand("%")."> line#".line(".")." col#".col("."))
endif
else
" not a directory, ignore it
" call Decho("(LocalBrowse) dirname<".a:dirname."> not a directory, ignoring...")
endif
" call Decho("(s:LocalBrowse) COMBAK#26: buf#".bufnr("%")." file<".expand("%")."> line#".line(".")." col#".col("."))
" call Dret("s:LocalBrowse")
endfun

View File

@ -56,6 +56,6 @@ function! s:LoadRemotePlugins() abort
endif
endfunction
command! UpdateRemotePlugins call remote#host#UpdateRemotePlugins()
command! -bar UpdateRemotePlugins call remote#host#UpdateRemotePlugins()
call s:LoadRemotePlugins()

View File

@ -1,11 +1,15 @@
" Vim support file to detect file types in scripts
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last change: 2017 Aug 27
" Last change: 2017 Nov 11
" This file is called by an autocommand for every file that has just been
" loaded into a buffer. It checks if the type of file can be recognized by
" the file contents. The autocommand is in $VIMRUNTIME/filetype.vim.
"
" Note that the pattern matches are done with =~# to avoid the value of the
" 'ignorecase' option making a difference. Where case is to be ignored use
" =~? instead. Do not use =~ anywhere.
" Only do the rest when the FileType autocommand has not been triggered yet.
@ -28,12 +32,12 @@ set cpo&vim
let s:line1 = getline(1)
if s:line1 =~ "^#!"
if s:line1 =~# "^#!"
" A script that starts with "#!".
" Check for a line like "#!/usr/bin/env VAR=val bash". Turn it into
" "#!/usr/bin/bash" to make matching easier.
if s:line1 =~ '^#!\s*\S*\<env\s'
if s:line1 =~# '^#!\s*\S*\<env\s'
let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
endif
@ -44,11 +48,11 @@ if s:line1 =~ "^#!"
" "#!/usr/bin/env perl [path/args]"
" If there is no path use the first word: "#!perl [path/args]".
" Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
if s:line1 =~ '^#!\s*\a:[/\\]'
if s:line1 =~# '^#!\s*\a:[/\\]'
let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
elseif s:line1 =~ '^#!.*\<env\>'
elseif s:line1 =~# '^#!.*\<env\>'
let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
elseif s:line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
elseif s:line1 =~# '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
else
let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
@ -56,116 +60,116 @@ if s:line1 =~ "^#!"
" tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
" third line. Suggested by Steven Atkinson.
if getline(3) =~ '^exec wish'
if getline(3) =~# '^exec wish'
let s:name = 'wish'
endif
" Bourne-like shell scripts: bash bash2 ksh ksh93 sh
if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
call SetFileTypeSH(s:line1) " defined in filetype.vim
if s:name =~# '^\(bash\d*\|\|ksh\d*\|sh\)\>'
call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
" csh scripts
elseif s:name =~ '^csh\>'
elseif s:name =~# '^csh\>'
if exists("g:filetype_csh")
call SetFileTypeShell(g:filetype_csh)
call dist#ft#SetFileTypeShell(g:filetype_csh)
else
call SetFileTypeShell("csh")
call dist#ft#SetFileTypeShell("csh")
endif
" tcsh scripts
elseif s:name =~ '^tcsh\>'
call SetFileTypeShell("tcsh")
elseif s:name =~# '^tcsh\>'
call dist#ft#SetFileTypeShell("tcsh")
" Z shell scripts
elseif s:name =~ '^zsh\>'
elseif s:name =~# '^zsh\>'
set ft=zsh
" TCL scripts
elseif s:name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
elseif s:name =~# '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
set ft=tcl
" Expect scripts
elseif s:name =~ '^expect\>'
elseif s:name =~# '^expect\>'
set ft=expect
" Gnuplot scripts
elseif s:name =~ '^gnuplot\>'
elseif s:name =~# '^gnuplot\>'
set ft=gnuplot
" Makefiles
elseif s:name =~ 'make\>'
elseif s:name =~# 'make\>'
set ft=make
" Lua
elseif s:name =~ 'lua'
elseif s:name =~# 'lua'
set ft=lua
" Perl 6
elseif s:name =~ 'perl6'
elseif s:name =~# 'perl6'
set ft=perl6
" Perl
elseif s:name =~ 'perl'
elseif s:name =~# 'perl'
set ft=perl
" PHP
elseif s:name =~ 'php'
elseif s:name =~# 'php'
set ft=php
" Python
elseif s:name =~ 'python'
elseif s:name =~# 'python'
set ft=python
" Groovy
elseif s:name =~ '^groovy\>'
elseif s:name =~# '^groovy\>'
set ft=groovy
" Ruby
elseif s:name =~ 'ruby'
elseif s:name =~# 'ruby'
set ft=ruby
" JavaScript
elseif s:name =~ 'node\(js\)\=\>' || s:name =~ 'rhino\>'
elseif s:name =~# 'node\(js\)\=\>' || s:name =~# 'rhino\>'
set ft=javascript
" BC calculator
elseif s:name =~ '^bc\>'
elseif s:name =~# '^bc\>'
set ft=bc
" sed
elseif s:name =~ 'sed\>'
elseif s:name =~# 'sed\>'
set ft=sed
" OCaml-scripts
elseif s:name =~ 'ocaml'
elseif s:name =~# 'ocaml'
set ft=ocaml
" Awk scripts
elseif s:name =~ 'awk\>'
elseif s:name =~# 'awk\>'
set ft=awk
" Website MetaLanguage
elseif s:name =~ 'wml'
elseif s:name =~# 'wml'
set ft=wml
" Scheme scripts
elseif s:name =~ 'scheme'
elseif s:name =~# 'scheme'
set ft=scheme
" CFEngine scripts
elseif s:name =~ 'cfengine'
elseif s:name =~# 'cfengine'
set ft=cfengine
" Erlang scripts
elseif s:name =~ 'escript'
elseif s:name =~# 'escript'
set ft=erlang
" Haskell
elseif s:name =~ 'haskell'
elseif s:name =~# 'haskell'
set ft=haskell
" Scala
elseif s:name =~ 'scala\>'
elseif s:name =~# 'scala\>'
set ft=scala
endif
@ -180,28 +184,28 @@ else
let s:line5 = getline(5)
" Bourne-like shell scripts: sh ksh bash bash2
if s:line1 =~ '^:$'
call SetFileTypeSH(s:line1) " defined in filetype.vim
if s:line1 =~# '^:$'
call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
" Z shell scripts
elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>' ||
\ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' ||
\ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~# '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
set ft=zsh
" ELM Mail files
elseif s:line1 =~ '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
set ft=mail
" Mason
elseif s:line1 =~ '^<[%&].*>'
elseif s:line1 =~# '^<[%&].*>'
set ft=mason
" Vim scripts (must have '" vim' as the first line to trigger this)
elseif s:line1 =~ '^" *[vV]im$'
elseif s:line1 =~# '^" *[vV]im$'
set ft=vim
" MOO
elseif s:line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
set ft=moo
" Diff file:
@ -215,40 +219,45 @@ else
" - "=== ", "--- ", "+++ " (bzr diff, common case)
" - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
" - "# HG changeset patch" in first line (Mercurial export format)
elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
\ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
\ || (s:line1 =~ '^=== ' && ((s:line2 =~ '^=\{66\}' && s:line3 =~ '^--- ' && s:line4 =~ '^+++') || (s:line2 =~ '^--- ' && s:line3 =~ '^+++ ')))
\ || (s:line1 =~ '^=== \(removed\|added\|renamed\|modified\)')
elseif s:line1 =~# '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
\ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ')
\ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ')
\ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ')
\ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ ')))
\ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)')
set ft=diff
" PostScript Files (must have %!PS as the first line, like a2ps output)
elseif s:line1 =~ '^%![ \t]*PS'
elseif s:line1 =~# '^%![ \t]*PS'
set ft=postscr
" M4 scripts: Guess there is a line that starts with "dnl".
elseif s:line1 =~ '^\s*dnl\>'
\ || s:line2 =~ '^\s*dnl\>'
\ || s:line3 =~ '^\s*dnl\>'
\ || s:line4 =~ '^\s*dnl\>'
\ || s:line5 =~ '^\s*dnl\>'
elseif s:line1 =~# '^\s*dnl\>'
\ || s:line2 =~# '^\s*dnl\>'
\ || s:line3 =~# '^\s*dnl\>'
\ || s:line4 =~# '^\s*dnl\>'
\ || s:line5 =~# '^\s*dnl\>'
set ft=m4
" AmigaDos scripts
elseif $TERM == "amiga"
\ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra')
set ft=amiga
" SiCAD scripts (must have procn or procd as the first line to trigger this)
elseif s:line1 =~? '^ *proc[nd] *$'
set ft=sicad
" Purify log files start with "**** Purify"
elseif s:line1 =~ '^\*\*\*\* Purify'
elseif s:line1 =~# '^\*\*\*\* Purify'
set ft=purifylog
" XML
elseif s:line1 =~ '<?\s*xml.*?>'
elseif s:line1 =~# '<?\s*xml.*?>'
set ft=xml
" XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
elseif s:line1 =~ '\<DTD\s\+XHTML\s'
elseif s:line1 =~# '\<DTD\s\+XHTML\s'
set ft=xhtml
" HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
@ -257,43 +266,43 @@ else
set ft=html
" PDF
elseif s:line1 =~ '^%PDF-'
elseif s:line1 =~# '^%PDF-'
set ft=pdf
" XXD output
elseif s:line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
set ft=xxd
" RCS/CVS log output
elseif s:line1 =~ '^RCS file:' || s:line2 =~ '^RCS file:'
elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:'
set ft=rcslog
" CVS commit
elseif s:line2 =~ '^CVS:' || getline("$") =~ '^CVS: '
elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: '
set ft=cvs
" Prescribe
elseif s:line1 =~ '^!R!'
elseif s:line1 =~# '^!R!'
set ft=prescribe
" Send-pr
elseif s:line1 =~ '^SEND-PR:'
elseif s:line1 =~# '^SEND-PR:'
set ft=sendpr
" SNNS files
elseif s:line1 =~ '^SNNS network definition file'
elseif s:line1 =~# '^SNNS network definition file'
set ft=snnsnet
elseif s:line1 =~ '^SNNS pattern definition file'
elseif s:line1 =~# '^SNNS pattern definition file'
set ft=snnspat
elseif s:line1 =~ '^SNNS result file'
elseif s:line1 =~# '^SNNS result file'
set ft=snnsres
" Virata
elseif s:line1 =~ '^%.\{-}[Vv]irata'
\ || s:line2 =~ '^%.\{-}[Vv]irata'
\ || s:line3 =~ '^%.\{-}[Vv]irata'
\ || s:line4 =~ '^%.\{-}[Vv]irata'
\ || s:line5 =~ '^%.\{-}[Vv]irata'
elseif s:line1 =~# '^%.\{-}[Vv]irata'
\ || s:line2 =~# '^%.\{-}[Vv]irata'
\ || s:line3 =~# '^%.\{-}[Vv]irata'
\ || s:line4 =~# '^%.\{-}[Vv]irata'
\ || s:line5 =~# '^%.\{-}[Vv]irata'
set ft=virata
" Strace
@ -301,17 +310,17 @@ else
set ft=strace
" VSE JCL
elseif s:line1 =~ '^\* $$ JOB\>' || s:line1 =~ '^// *JOB\>'
elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>'
set ft=vsejcl
" TAK and SINDA
elseif s:line4 =~ 'K & K Associates' || s:line2 =~ 'TAK 2000'
elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000'
set ft=takout
elseif s:line3 =~ 'S Y S T E M S I M P R O V E D '
elseif s:line3 =~# 'S Y S T E M S I M P R O V E D '
set ft=sindaout
elseif getline(6) =~ 'Run Date: '
elseif getline(6) =~# 'Run Date: '
set ft=takcmp
elseif getline(9) =~ 'Node File 1'
elseif getline(9) =~# 'Node File 1'
set ft=sindacmp
" DNS zone files
@ -319,34 +328,34 @@ else
set ft=bindzone
" BAAN
elseif s:line1 =~ '|\*\{1,80}' && s:line2 =~ 'VRC '
\ || s:line2 =~ '|\*\{1,80}' && s:line3 =~ 'VRC '
elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC '
\ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC '
set ft=baan
" Valgrind
elseif s:line1 =~ '^==\d\+== valgrind' || s:line3 =~ '^==\d\+== Using valgrind'
elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind'
set ft=valgrind
" Go docs
elseif s:line1 =~ '^PACKAGE DOCUMENTATION$'
elseif s:line1 =~# '^PACKAGE DOCUMENTATION$'
set ft=godoc
" Renderman Interface Bytestream
elseif s:line1 =~ '^##RenderMan'
elseif s:line1 =~# '^##RenderMan'
set ft=rib
" Scheme scripts
elseif s:line1 =~ 'exec\s\+\S*scheme' || s:line2 =~ 'exec\s\+\S*scheme'
elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme'
set ft=scheme
" Git output
elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
set ft=git
" Gprof (gnu profiler)
elseif s:line1 == 'Flat profile:'
\ && s:line2 == ''
\ && s:line3 =~ '^Each sample counts as .* seconds.$'
\ && s:line3 =~# '^Each sample counts as .* seconds.$'
set ft=gprof
" Erlang terms
@ -357,18 +366,18 @@ else
" CVS diff
else
let s:lnum = 1
while getline(s:lnum) =~ "^? " && s:lnum < line("$")
while getline(s:lnum) =~# "^? " && s:lnum < line("$")
let s:lnum += 1
endwhile
if getline(s:lnum) =~ '^Index:\s\+\f\+$'
if getline(s:lnum) =~# '^Index:\s\+\f\+$'
set ft=diff
" locale input files: Formal Definitions of Cultural Conventions
" filename must be like en_US, fr_FR@euro or en_US.UTF-8
elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
let s:lnum = 1
while s:lnum < 100 && s:lnum < line("$")
if getline(s:lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
setf fdcc
break
endif

Some files were not shown because too many files have changed in this diff Show More