Compare commits

...

1667 Commits

Author SHA1 Message Date
Justin M. Keyes
52727d98d7 NVIM v0.2.0
FEATURES:
    bc4a2e1576 help, man.vim: "outline" (TOC) feature #5169
    58422f17d8 'guicursor' works in the TUI (and sends info to UIs) #6423
    129f107c0c api: nvim_get_mode() #6247
    0b59f988f4 api/ui: externalize tabline #6583
    bc6d868d00 'listchars': `Whitespace` highlight group #6367
    6afa7d66cd writefile() obeys 'fsync' option #6427
    c60e409471 eval.c refactor (also improves some error messages) #5119
    9d200cd0a3 getcompletion("cmdline") #6376
    2ea7bfc627 terminal: Support extra arguments in 'shell'. #4504
    bf5110266c DirChanged autocmd #5928 #6262
    1743df82f9 'cpoptions': "_" flag to toggle `cw` behaviour #6235
    22337b1c01 CTRL-R omits trailing ^M when pasting to cmdline #6137
    0e44916fff :edit allows unescaped spaces in filename #6119
    abdbfd26bc eval: Add id() function and make printf("%p") useful #6095
    bdfa1479d2 findfile(), :find, gf work in :terminal. #6009
    2f38ed11c9 providers: Disable if `g:loaded_*` exists.
    b5560a69b1 setpos() can set lowercase marks in other buffers #5753
    7c513d646d Throttle :! output, pulse "..." message. #5396
    d2e8c76dc2 v:exiting #5651

    :terminal improvements #6185 #6142
      - cursor keeps position after leaving insert-mode.
      - 4ceec30cd0 Follows output only if cursor is at end of buffer.
      - e7bbd35c81 new option: 'scrollback'
      - fedb8443d5 quasi-support for undo and 'modifiable'
      - b45ddf731b disables 'list' by default
      - disables 'relativenumber' by default

    :help now contains full API documentation at `:help api`.

    man.vim saw numerous improvements.

    Windows support:
      - Windows is no longer "experimental", it is fully supported.
      - Windows package includes a GUI, curl.exe and other utilities.

    "Vim 8" features: partials, lambdas.

SECURITY FIXES:
    CVE-2017-5953 CVE-2017-6349 CVE-2017-6350 #6485

CHANGES:
    NVIM_TUI_ENABLE_CURSOR_SHAPE was removed. Use 'guicursor' instead.
        See https://github.com/neovim/neovim/wiki/Following-HEAD#20170402

    81525dc5c3 'mouse=a' is no longer the default. (This will probably
                 change again after it is improved.) #6022

    0c1f783164 defaults: 'showcmd', 'belloff', 'ruler' #6087
    eb0e94f71b api: {get,set}_option update local options as appropriate #6405
    bdcb2a38b3 "Reading from stdin..." message was removed. #6298

FIXES:
    12fc1defd6 ops: fix i<c-r> with multi-byte text #6524
    dd391bfca1 Windows: system() and friends #6497
    13352c00f1 Windows: os_get_hostname() #6413
    16babc6687 tui: Less-noisy mouse seqs #6411
    3a9dd13f9e (vim bug) folding edge-cases  #6207
    f6946c68ae job-control: set CLOEXEC on pty processes. #5986
    d1afd434f3 rplugin: Call s:LoadRemotePlugins() on startup.
    1215084676 backtick-expansion works with `shell=fish` #6224
    e32ec03d67 tui: Improved behavior after resize. #6202
    86c2adc074 edit.c: CTRL-SPC: Insert previously-inserted text. #6090
    c318d8e672 b:changedtick now follows VimL rules #6112
    34e24cb2f7 terminal: Initialize colors in reverse order #6160
    e8899178ec undo: Don't set b_u_curhead in ex_undojoin() #5869
    d25649fa01 undo: :earlier, g-: Set b_u_seq_cur correctly. (#6016)
    043d8ba422 'Visual-mode put from @. register' #5782
    42c922b32c open_buffer(): Do `BufEnter` for directories.
    50d0d89129 inccommand: Preview :sub commands only after delimiter #5932
    1420e10474 CheckHealth improvements #5519
    c8d5e9230e jobstart(): Return -1 if cmd is not executable. #5671
2017-05-01 22:13:23 +02:00
Justin M. Keyes
9a1b144054 scripts/release.sh 2017-05-01 22:13:23 +02:00
Justin M. Keyes
62ab040fa4 doc: api 2017-05-01 18:52:56 +02:00
Justin M. Keyes
efea8a66b1 Merge #6632 from justinmk/doc 2017-05-01 18:37:14 +02:00
Justin M. Keyes
45ef3d9d0c doc: Replace hardcoded TOCs with <M-]> advice. 2017-05-01 17:48:06 +02:00
Tommy Allen
bc4a2e1576 help, man.vim: "outline" (TOC) feature #5169 2017-05-01 17:45:54 +02:00
Justin M. Keyes
cd190db8b3 Merge #6627 from ZyX-I/travis-folds 2017-05-01 17:23:45 +02:00
Justin M. Keyes
1483800cdf coverity/161682: FP: Dereference after null check (#6630) 2017-05-01 17:04:56 +02:00
ZyX
e4d0fa6e8d Do not trace in check_runtime_files 2017-05-01 17:38:21 +03:00
ZyX
1109ca7198 ci: Use \{1,\} in place of \+ 2017-05-01 17:36:45 +03:00
Daniel Hahler
cc29827bc2 doc/eval.txt: remove references to E706 (#6629)
Removed in Vim in 7.4.1578 (975b5271) and 7.4.1546 (f6f32c38b).
2017-05-01 15:37:24 +02:00
ZyX
48fa42153a ci: Fold output in travis web interface 2017-05-01 16:36:24 +03:00
Justin M. Keyes
a2c2fa68c1 Merge #6625 from justinmk/vim-runtime 2017-05-01 15:18:34 +02:00
Justin M. Keyes
fa1ee0ac73 doc: bracketed-paste-mode 2017-05-01 14:55:26 +02:00
Justin M. Keyes
deccd843ed vim-patch:3df0173fa6d0
Updated runtime files.

3df0173fa6
2017-05-01 13:32:51 +02:00
Justin M. Keyes
ac107f7fdd vim-patch:690afe1fef87
Update runtime files.

690afe1fef
2017-05-01 13:23:12 +02:00
Justin M. Keyes
eb7ea6e122 vim-patch:369b6f57c426
Update runtime files.

369b6f57c4
2017-05-01 13:19:34 +02:00
Justin M. Keyes
44ea50cee4 vim-patch:68563937f58e
Updated runtime files.

68563937f5
2017-05-01 13:13:51 +02:00
Justin M. Keyes
4fbcfab127 vim-patch:bc2eada5424b
Updated runtime files.

bc2eada542

NA patches:
vim-patch:294740d2ac42
vim-patch:a4ce25bd987a
vim-patch:7034a8374345
vim-patch:14a612fa2e57
vim-patch:aaeabfbca571
2017-05-01 12:30:54 +02:00
Justin M. Keyes
940f35f664 vim-patch:cf49790443ee
Updated runtime files.

cf49790443

NA patches:
vim-patch:99c5eb4fd755
2017-04-30 22:16:30 +02:00
Justin M. Keyes
e5b640fdb8 vim-patch:c0514bf4777a
Updated runtime files.

c0514bf477
2017-04-30 22:10:21 +02:00
James McCoy
5d73a6e5df Merge pull request #6621 from jamessan/vim-7.4.2231
vim-patch:7.4.2231,7.4.2239,7.4.2244,7.4.2245,7.4.2246,7.4.2263,8.0.0150
2017-04-30 09:46:41 -04:00
Justin M. Keyes
4afc93b926 Merge #6588 from justinmk/guicursor 2017-04-30 14:36:40 +02:00
Justin M. Keyes
26a479ae41 Merge #6622 'api: Deprecate nvim_buf_get_number' 2017-04-30 14:27:21 +02:00
Justin M. Keyes
c1d3bcc184 'guicursor': TMUX_WRAP iTerm seqs. Do color seq before shape seq. 2017-04-30 13:44:31 +02:00
Justin M. Keyes
d349f610ac 'guicursor': No color/blink by default
Closes #6577
2017-04-30 13:44:31 +02:00
Björn Linse
97126bfa02 api: deprecate obsolete nvim_buf_get_number function 2017-04-30 11:04:10 +02:00
James McCoy
35d817e68c oldfiles_spec: Add tests for ":filter ... oldfiles" 2017-04-29 23:58:03 -04:00
James McCoy
4488bfcfb3 oldfiles_spec: Set the shada file in the session 2017-04-29 23:48:28 -04:00
James McCoy
2b191ac5b9 lint 2017-04-29 23:48:28 -04:00
James McCoy
b6e36558d1 vim-patch:8.0.0150
Problem:    When the pattern of :filter does not have a separator then
            completion of the command fails.
Solution:   Skip over the pattern. (Ozaki Kiichi, clodes vim/vim#1299)

7069bf18e1
2017-04-29 23:48:28 -04:00
James McCoy
f219657453 vim-patch:7.4.2263
Problem:    :filter does not work for many commands.  Can only get matching
            messages.
Solution:   Make :filter work for :command, :map, :list, :number and :print.
            Make ":filter!" show non-matching lines.

d29459baa6
2017-04-29 23:48:27 -04:00
James McCoy
ab50c1fdb7 vim-patch:7.4.2246
Problem:    Oldfiles test fails.
Solution:   Include missing changes.

d6f2ee32dc
2017-04-29 23:48:27 -04:00
James McCoy
f477c23c62 vim-patch:7.4.2245
Problem:    Filter test fails.
Solution:   Include missing changes.

77401add71
2017-04-29 23:48:27 -04:00
James McCoy
7bd97127b4 vim-patch:7.4.2244
Problem:    Adding pattern to ":oldfiles" is not a generic solution.
Solution:   Add the ":filter /pat/ cmd" command modifier.  Only works for some
            commands right now.

7b668e83d0
2017-04-29 23:48:27 -04:00
James McCoy
059c3fc2f9 vim-patch:7.4.2239
Problem:    Warning for missing declaration of skip_vimgrep_pat(). (John
            Marriott)
Solution:   Move it to another file.

9baf297c99
2017-04-29 21:46:12 -04:00
James McCoy
dbdc2d40bb vim-patch:7.4.2231
Problem:    ":oldfiles" output is a very long list.
Solution:   Add a pattern argument. (Coot, closes vim/vim#575)

e11d61a3b1
2017-04-29 21:46:12 -04:00
Justin M. Keyes
0df1b6655b doc: Removed t_XX options/keycodes. (#6616)
Closes #4482

TODO: revisit find_key_option_len()
2017-04-29 16:56:40 +02:00
Justin M. Keyes
5a304b7864 Merge #6615 from justinmk/vim-patches 2017-04-29 14:59:10 +02:00
Justin M. Keyes
51a2d8dc36 win: health.vim/check_ruby(): find gem.cmd #6608
gem.cmd is not found by system(['gem', ...]), pass it to cmd.exe.
2017-04-29 01:57:09 +02:00
Justin M. Keyes
024ff6b808 vim-patch:25de4c232d58
Updated runtime files.

25de4c232d
2017-04-29 01:53:42 +02:00
Justin M. Keyes
789c46934b vim-patch:b4ada79aa7d0
Runtime file updates.

b4ada79aa7

Closes #5055
2017-04-29 01:51:56 +02:00
Justin M. Keyes
1e7806bd41 vim-patch:6d5ad4c4118c
Updated runtime files.

6d5ad4c411
2017-04-29 01:49:36 +02:00
Justin M. Keyes
8d3f8f639b vim-patch:46fceaaa8d14
Updated runtime files.

46fceaaa8d
2017-04-29 01:47:36 +02:00
Justin M. Keyes
9f6d693e26 Merge #6613 from justinmk/vim-patches 2017-04-29 01:41:29 +02:00
Justin M. Keyes
5341967315 vim-patch:4575876dc865
Updated runtime files.

4575876dc8
2017-04-29 01:03:42 +02:00
Justin M. Keyes
60e68f3096 vim-patch:dc08328821a2
Updated runtime files.

dc08328821

NA patches:
vim-patch:8.0.0028
vim-patch:8.0.0029
vim-patch:8.0.0030
2017-04-29 01:01:51 +02:00
Justin M. Keyes
460d5971f6 vim-patch:2ec618c9feac
Updated runtime files.

2ec618c9fe
2017-04-28 23:49:16 +02:00
Justin M. Keyes
40fb96c76a vim-patch:3e496b0ea319
Updated runtime files.

3e496b0ea3

NA patches:
vim-patch:8.0.0015
vim-patch:8.0.0016
vim-patch:177778575148
2017-04-28 23:39:24 +02:00
Justin M. Keyes
a5e9974ed7 vim-patch:50ba526fbf3e
Updated runtime files.

50ba526fbf

vim-patch:20eeb6129d12
2017-04-28 23:26:55 +02:00
Daniel Hahler
59be0b4280 health.vim: syntax/style fixes (#6614) 2017-04-28 23:18:10 +02:00
Justin M. Keyes
2e64752250 vim-patch:64d8e25bf6ef
Updated runtime files.

64d8e25bf6

Closes #6611
2017-04-28 23:14:36 +02:00
Justin M. Keyes
06879e2e89 vim-patch:d07969093a9b
Updated runtime files.

d07969093a
2017-04-28 22:51:30 +02:00
Justin M. Keyes
becde1745a vim-patch:8.0.0002
Problem:    The netrw plugin does not work.
Solution:   Make it accept version 8.0.

9e1e7afc1f

vim-patch:b56e7ff0dbbf

Update translations for intro page.

b56e7ff0db
2017-04-28 22:41:07 +02:00
Justin M. Keyes
00bdf9ae83 vim-patch:8.0.0000
bb76f24af2

vim-patch:8.0.0001

Problem:    Intro screen still mentions version7. (Paul)
Solution:   Change it to version8.

6401024869
2017-04-28 22:34:16 +02:00
Justin M. Keyes
0d565d62ae vim-patch:220adb1e9f9e
A few more runtime updates.

220adb1e9f
2017-04-28 21:41:10 +02:00
Justin M. Keyes
9f7e1cec05 vim-patch:7e1479b86c59
Updated runtime files, Japanese translations.

7e1479b86c
2017-04-28 21:39:48 +02:00
Justin M. Keyes
2648c3579a vim-patch:abd468ed0fbc
Updated runtime files

abd468ed0f
2017-04-28 21:38:07 +02:00
Justin M. Keyes
86b596dc7a vim-patch:f37506f60f87
Updated runtime files.  Remove HiLink commands.

f37506f60f
2017-04-28 21:25:15 +02:00
Justin M. Keyes
a53409b564 vim-patch:89bcfda6834a
Updated runtime files.  Remove version checks for Vim older than 6.0.

89bcfda683
2017-04-28 21:13:55 +02:00
Justin M. Keyes
f09651ea78 vim-patch:36f44c21da2e
Updated runtime files.

36f44c21da
2017-04-28 21:06:07 +02:00
Justin M. Keyes
409e56b139 vim-patch:818078ddfbb8
Updated runtime files and translations.

818078ddfb
2017-04-28 21:01:25 +02:00
Justin M. Keyes
129f107c0c Merge #6247 'api: nvim_get_mode()' 2017-04-28 20:37:52 +02:00
Justin M. Keyes
8f59d14839 event: Remove "priority" concept.
It was replaced by the "child queue" concept (MultiQueue).
2017-04-28 19:20:09 +02:00
Justin M. Keyes
f17a818519 api/nvim_get_mode: Use child-queue instead of "priority". 2017-04-28 19:20:09 +02:00
Justin M. Keyes
acfd2a2a29 input.c: Process only safe events before blocking.
Introduce multiqueue_process_priority() to process only events at or
above a certain priority.
2017-04-28 19:19:51 +02:00
Justin M. Keyes
3ea1007753 api: nvim_get_mode()
Asynchronous API functions are served immediately, which means pending
input could change the state of Nvim shortly after an async API function
result is returned.

nvim_get_mode() is different:
  - If RPCs are known to be blocked, it responds immediately (without
    flushing the input/event queue)
  - else it is handled just-in-time before waiting for input, after
    pending input was processed. This makes the result more reliable
    (but not perfect).

Internally this is handled as a special case, but _semantically_ nothing
has changed: API users never know when input flushes, so this internal
special-case doesn't violate that. As far as API users are concerned,
nvim_get_mode() is just another asynchronous API function.

In all cases nvim_get_mode() never blocks for more than the time it
takes to flush the input/event queue (~µs).

Note: This doesn't address #6166; nvim_get_mode() will provoke #6166 if
e.g. `d` is operator-pending.

Closes #6159
2017-04-28 19:14:34 +02:00
Justin M. Keyes
7044aa6e82 api/ext_tabline: curtab should be a Tabpage handle. 2017-04-28 15:59:20 +02:00
Justin M. Keyes
b90a59333f Merge #6606 from justinmk/build_stl 2017-04-28 15:41:24 +02:00
Justin M. Keyes
0ddebbc354 lint 2017-04-28 05:33:11 +02:00
Justin M. Keyes
2b6a3819e5 build_stl_str_hl: Array name should be plural. 2017-04-28 04:11:29 +02:00
relnod
56911050e0 refactor/single-include (#6604) 2017-04-27 21:43:27 +02:00
James McCoy
ce245c2c61 Merge pull request #6600 from jamessan/post-sourcing-filetype
Test handling of "filetype ... off"/"syntax off" after startup scripts
2017-04-27 11:10:57 -04:00
James McCoy
e20691ccb4 defaults_spec: Test changing :filetype/:syntax in -c, after defaults 2017-04-27 09:20:03 -04:00
Justin M. Keyes
6755262194 test: inccommand_spec: Avoid indeterminism. (#6592) 2017-04-26 14:51:21 +02:00
Justin M. Keyes
0b59f988f4 Merge #6583 from justinmk/ui-tabline 2017-04-26 11:59:59 +02:00
Justin M. Keyes
6944abad2f api/ext_tabline: List of Dicts. 2017-04-26 03:41:24 +02:00
Justin M. Keyes
c8e1af93de api: nvim_ui_attach(): Flatten ext_* options. 2017-04-26 03:41:24 +02:00
Justin M. Keyes
00843902d3 api/ui: externalize tabline
- Work with a bool[] array parallel to the UIWidget enum.
- Rename some functions.
- Documentation.
2017-04-26 03:41:24 +02:00
Dongdong Zhou
88023d5123 api/ui: externalize tabline 2017-04-26 02:15:31 +02:00
James McCoy
7e571bca5d tui: Only set cursor color if the highlight group is valid (#6585)
Closes #6584
2017-04-25 21:05:33 +02:00
relnod
22932d8ac2 refactor/single-include (#6586) 2017-04-25 20:45:59 +02:00
Drew Neil
a0acb2e195 doc: Revise nvim-from-vim advice (#6505) 2017-04-25 11:04:32 +02:00
Justin M. Keyes
e4dcf756ae Merge #6581 from ZyX-I/really-kill-single-includes
ci: When using restarting tests kill make with the shell
2017-04-25 00:18:14 +02:00
Justin M. Keyes
8f346a322b test/fs: sanity check for literal "~" directory (#6579)
If the CWD contains a directory with the literal name "~" then the tests
will have bogus failures.
2017-04-24 22:45:03 +02:00
ZyX
ee4daa6572 ci: Remove x from test x 2017-04-24 23:11:13 +03:00
ZyX
74d5705ca9 ci: Source ci/common/test.sh in run_test_wd subshell 2017-04-24 22:37:36 +03:00
ZyX
85903cb0e6 ci: Make scripts in common be dash-compatible
`ulimit` may still be not present: dash and busybox support it, but posh does
not.
2017-04-24 22:37:36 +03:00
ZyX
4ccef05829 ci: Make $cmd failure fail the build without -o pipefail 2017-04-24 21:44:17 +03:00
ZyX
fc16d02c3d ci: Do not use pipefail 2017-04-24 19:30:28 +03:00
ZyX
3a0117c850 ci: Do not accidentally kill something unneeded 2017-04-24 18:34:47 +03:00
ZyX
26fad863ba ci: When using restarting tests kill make with the shell 2017-04-24 18:28:46 +03:00
Patrick Jackson
8dc3eca49b api/dispatch: Mark generated functions table readonly (#6576) 2017-04-24 12:39:48 +02:00
Justin M. Keyes
7f6d3d3052 Merge #6569 from justinmk/apierror
api: Do not truncate errors <1 MB
2017-04-24 02:14:14 +02:00
Justin M. Keyes
086c354a0a api: Do not translate error messages.
Also re-word some error messages:
- "Key does not exist: %s"
- "Invalid channel: %<PRIu64>"
- "Request array size must be 4 (request) or 3 (notification)"
- "String cannot contain newlines"

References #6150
2017-04-24 00:11:27 +02:00
Justin M. Keyes
e2936ed397 tui/input.c: Use default 'ttimeoutlen' if option get fails.
Should never happen, but better to be explicit.

Helped-by: oni-link <knil.ino@gmail.com>
2017-04-23 23:44:59 +02:00
Justin M. Keyes
3fbc660d57 api_set_error(): rename 2017-04-23 23:44:57 +02:00
Justin M. Keyes
2ed91f222f api/internal: Remove set field from Error type. 2017-04-23 23:44:32 +02:00
Justin M. Keyes
62c3f436a9 api_clear_error: Skip if error was not set. 2017-04-23 23:44:32 +02:00
Justin M. Keyes
2a49163103 api_clear_error() 2017-04-23 23:44:32 +02:00
Sander Bosma
5c9860a0a2 api: Do not truncate errors <1 MB. #6237
Closes #5984
2017-04-23 23:44:29 +02:00
Justin M. Keyes
4524053874 test: api: Do not truncate errors <1 MB. 2017-04-23 23:24:16 +02:00
Patrick Jackson
1fe8945748 refactor: Remove unused MAP_IMPL. (#6573) 2017-04-23 02:32:56 +02:00
Justin M. Keyes
a9d37c928e Merge #6513 from ZyX-I/lazier-arg_errmsg-gettext 2017-04-23 01:02:39 +02:00
Justin M. Keyes
77b6de0968 Merge #6572 from justinmk/guicursor 2017-04-23 00:37:13 +02:00
Justin M. Keyes
719095d7d3 os_term_is_nice: Return true for rxvt and iTerm. 2017-04-22 22:57:35 +02:00
Justin M. Keyes
c703d0529b 'guicursor': iTerm: Set cursor color.
iTerm uses proprietary escape codes to set cursor color.
https://www.iterm2.com/documentation-escape-codes.html
2017-04-22 22:57:29 +02:00
relnod
1e83add288 refactor/single-include: ui.h, ui_bridge.h, ugrid.h (#6571) 2017-04-22 16:55:28 +02:00
Othon Briganó
e41c044b53 refactor/single-include (#6563) 2017-04-22 15:44:58 +02:00
relnod
654c50b227 refactor/single-include: window.h, version.h (#6570) 2017-04-22 15:43:35 +02:00
Justin M. Keyes
10f119ab87 Merge #6539 'More cursor shape modes' 2017-04-21 19:09:50 +02:00
sander2
f50e03f2e3 ex_cmds.c: Fix bug in ex_z (#6557)
vim-patch:8.0.0571
2017-04-21 15:45:51 +02:00
Othon Briganó
a396874da0 refactor/single-include: getchar.h (#6560) 2017-04-21 15:21:02 +02:00
Björn Linse
48f0542ad6 tests: detect invalid helpers.sleep 2017-04-21 14:21:26 +02:00
Björn Linse
9cc9789681 ui: document new mode index and add note about forward-compatibility 2017-04-21 12:32:38 +02:00
Björn Linse
7ea5c78687 ui: use an array for mode styles 2017-04-21 12:32:38 +02:00
Björn Linse
2c5751b9b2 ui: add tests for new cursor shape modes 2017-04-21 12:32:38 +02:00
Björn Linse
9cdbbd4982 ui: support more cursor shape modes
throttle unneccessary cursor shape events
2017-04-21 12:32:38 +02:00
ZyX
d463c9e03a Merge branch 'master' into lazier-arg_errmsg-gettext 2017-04-21 00:33:12 +03:00
TJ DeVries
19646a2985 health.vim: 'guicursor' advice #6506
Also:
- Mark provider sections as "(optional)".
- Fix help-link substitution to support single-quoted tags.
2017-04-20 22:44:51 +02:00
Justin M. Keyes
15af803cce Merge #6550 from ZyX-I/pvs-check-comment 2017-04-20 22:00:03 +02:00
Justin M. Keyes
3a606ee58d Merge #6552 from justinmk/loadview 2017-04-20 14:47:01 +02:00
Justin M. Keyes
d55fd9588f doc: Recommend :silent! for :loadview.
ex_loadview() was changed in 9b1c939370 to check the file open result.

If user doesn't care about failure to open, using :silent! instead of
:silent is a reasonable, conventional approach.

Closes #3196
2017-04-20 13:13:39 +02:00
Justin M. Keyes
17052946c7 'scrollback': Allow :setlocal -1 on normal buffers
Avoids a spurious :loadview error.
2017-04-20 13:13:39 +02:00
James McCoy
a6f50c1120 version.c: Mark 7.4.{2165,2173,2179} applied 2017-04-19 23:22:27 -04:00
James McCoy
2fb46adc5e Merge pull request #6531 from justinmk/vim-dc1f1645cb49
vim-patch: runtime updates
2017-04-19 23:16:36 -04:00
James McCoy
462c53eb3e Merge pull request #6547 from jamessan/vim-7.4.2152
vim-patch:7.4.2152,7.4.2165,7.4.2173,7.4.2179,7.4.2209
2017-04-19 23:15:45 -04:00
James McCoy
cb02137dfa vim-patch:7.4.2209
Problem:    Cannot map <M-">. (Stephen Riehm)
Solution:   Solve the memory access problem in another way. (Dominique Pelle)
            Allow for using <M-\"> in a string.

35a4cfa200
2017-04-19 22:26:30 -04:00
James McCoy
ac05c8585c Mark patches applied in 6baa669
vim-patch:7.4.2165
vim-patch:7.4.2173
vim-patch:7.4.2179
2017-04-19 22:25:18 -04:00
James McCoy
c5d7eaf664 vim-patch:7.4.2152
Problem:    No proper translation of messages with a count.
Solution:   Use ngettext(). (Sergey Alyoshin)

ee695f787a
2017-04-19 22:24:58 -04:00
Justin M. Keyes
b25fa94eb5 scripts/vim-patch.sh: word-boundaries in preprocess regex 2017-04-19 21:26:17 +02:00
Justin M. Keyes
d194380de9 vim-patch:e4a3bcf28d92
Updated runtime files.  Add Scala files.

e4a3bcf28d
2017-04-19 21:26:17 +02:00
Justin M. Keyes
c1edb4c39a vim-patch:7571d55f7dcc
Updated runtime files.

7571d55f7d
2017-04-19 21:26:16 +02:00
Justin M. Keyes
5da8bb92fc vim-patch:dc1f1645cb49
Updated runtime files.

dc1f1645cb
2017-04-19 21:26:16 +02:00
ZyX
c2f3e361c5 *: Add comment to all C files 2017-04-19 19:11:50 +03:00
ZyX
3351016dcd scripts: Add newline after the comment 2017-04-19 19:11:37 +03:00
ZyX
4555bf9e7f scripts: Allow patching only build files 2017-04-19 19:10:53 +03:00
ZyX
9fd048d901 scripts: Do not patch already patched sources in patch mode
Also do not patch header files, that is not needed.
2017-04-19 19:04:00 +03:00
ZyX
38b2bc9a88 scripts: Make pvs do not patch separate directory, add patch mode 2017-04-19 18:55:32 +03:00
Justin M. Keyes
f0c12012d9 Merge #6546 from justinmk/doc 2017-04-19 15:03:02 +02:00
Justin M. Keyes
6bc6d94ec8 doc: api-contract, CONTRIBUTING.md 2017-04-19 13:48:12 +02:00
Nikolai Aleksandrovich Pavlov
29ab8c1ae2 doc/CONTRIBUTING.md: Recommend merge-based workflow.
References #6435
2017-04-19 04:03:09 +02:00
Justin M. Keyes
440133e0d5 health.vim: Set 'iskeyword' to that of ft=help. 2017-04-19 04:03:08 +02:00
Shlomi Fish
14b1becb54 doc: fix typo (#6504) 2017-04-19 02:20:05 +02:00
Justin M. Keyes
ce7cba6d7f Merge #6533 'Fix PVS-studio warnings' 2017-04-17 22:02:46 +02:00
Justin M. Keyes
7debba9d42 Merge #6537 from justinmk/hlcursor
Cursor highlight after `:highlight clear|syntax reset`
2017-04-18 11:17:06 +02:00
Justin M. Keyes
45aa465fba test: Cursor after :hi clear|syntax reset
Also enable tests on Windows.
2017-04-17 21:15:51 +02:00
Matthieu Coudron
3345382cc2 highlight: default Cursor to guibg=fg, guifg=bg
Closes #6508
2017-04-17 05:47:43 +02:00
Matthew Malcomson
263849b2dd fold: foldMoveRange(): fix :move bug #6534
Closes #6540

In #6221 there was a mistake in calculating which folds need to be
re-ordered. When there are no folds after those that have been adjusted,
then `move_end` remains 0. This results in reverse_fold_order()
swapping folds that have been adjusted with uninitialised folds in the
remainder of the grow array.

Add a check in foldMoveRange() to account for this case.
2017-04-17 04:45:55 +02:00
ZyX
2eb9150a4f buffer: Adjust where do_buffer call is located
It is located there in Vim, but in dd7657c160 
position was for some reason swapped.
2017-04-16 23:58:32 +03:00
ZyX
58300d70d2 *: Fix linter errors 2017-04-16 22:20:19 +03:00
ZyX
9d302c60f0 regexp_nfa: Remove octal constant 2017-04-16 21:43:27 +03:00
ZyX
372b6af8ea regexp_nfa: Remove another has_mbyte/…-checking code 2017-04-16 21:43:27 +03:00
ZyX
30561afe41 regexp: Silence octal constant warning 2017-04-16 21:43:26 +03:00
ZyX
b7118a008a regexp: Remove another has_mbyte/…-checking stuff 2017-04-16 21:43:26 +03:00
ZyX
69ebfb8d8e regexp: Fix warning about octal constant 2017-04-16 21:43:26 +03:00
ZyX
76783963eb tag: Fix “initialized twice successively” false positive 2017-04-16 21:43:25 +03:00
ZyX
316789e14c tag: Silence “buffer underflow” warning 2017-04-16 21:43:25 +03:00
ZyX
c0cbc50720 screen: Remove another portion of has_mbyte/friends-checking stuff 2017-04-16 21:43:25 +03:00
ZyX
e131194db7 screen: Remove unneeded condition
Already checked in outer if()
2017-04-16 21:43:23 +03:00
ZyX
48ad8e0ff1 screen: Silence NULL dereference false positive
Based on the loop condition when shl_flag is true cur != NULL.
2017-04-16 21:43:23 +03:00
ZyX
7cf4b0ac06 screen: Silence “buffer underflow” warning 2017-04-16 21:18:00 +03:00
ZyX
a65867542d screen: Remove unneeded check 2017-04-16 21:17:08 +03:00
ZyX
b396a3f72e quicfix: Avoid possible NULL dereference 2017-04-16 21:13:49 +03:00
ZyX
4e7150ee94 quicfix: Remove duplicate condition 2017-04-16 21:13:25 +03:00
ZyX
be9d98cb45 quickfix: Remove unneeded condition
fmt_ptr was checked for being NULL in if() condition earlier.
2017-04-16 21:13:24 +03:00
ZyX
aa3b1f695f normal: Add figure braces so that code is clearer 2017-04-16 21:13:24 +03:00
ZyX
b5db7cde36 normal: Clarify the code
Current variant works only because of PUT_FIXINDENT being equal to true.
2017-04-16 21:13:24 +03:00
ZyX
54bd78b8a8 normal: Remove unneeded assignment 2017-04-16 21:06:22 +03:00
ZyX
cdbfff077b ops: Silence “counter not used in loop” false positive 2017-04-16 21:05:50 +03:00
ZyX
84aa457ccd os/env: Fix “invalid pointer to local” false positive 2017-04-16 21:02:43 +03:00
ZyX
dc523eed8e fileio: Silence “!= identical subexpressions” warning 2017-04-16 20:59:58 +03:00
ZyX
0718d0e6d4 message: Some more has_mbyte/enc_utf8 removal 2017-04-16 20:58:19 +03:00
ZyX
083792e137 message: Remove some enc_utf8/… checks 2017-04-16 20:56:30 +03:00
ZyX
10ce00efa8 memline: Fix “NULL pointer dereference” warning
It was actually a false positive indicating always-true condition, not real 
dereference.
2017-04-16 20:55:29 +03:00
ZyX
2394c9f2b7 memline: Silence “buffer underflow” warning, looks like false positive 2017-04-16 20:47:06 +03:00
ZyX
0f7c260cd8 fileio: Simlify help files encoding detection
Most of code is dead when enc_utf8 is always true. Given that `c` is being 
reused for other purposes I left it set to 1 just in case.
2017-04-16 20:39:57 +03:00
ZyX
e3de83a829 hardcopy: Remove unneeded prt_do_conv assignment 2017-04-16 20:32:10 +03:00
ZyX
d88ae748b5 getchar: Fix if block indentation 2017-04-16 20:29:19 +03:00
ZyX
fe01e9c947 ex_docmd: Remove unneeded if() 2017-04-16 20:27:47 +03:00
ZyX
87e107d921 ex_docmd: Remove :Ni! easter egg 2017-04-16 20:27:20 +03:00
ZyX
a894c82def ex_docmd: Remove excessive assignment 2017-04-16 20:25:00 +03:00
ZyX
d766607dc9 farsi: Simplify condition 2017-04-16 20:24:30 +03:00
ZyX
c5010c98ae eval: Fix position of buf declaration 2017-04-16 20:22:58 +03:00
ZyX
1bc0800787 eval: Remove unneeded !eap->skip check
Already checked in the outer if().
2017-04-16 20:22:12 +03:00
ZyX
9dd1926df0 eval: Remove unneeded varp check 2017-04-16 20:20:53 +03:00
ZyX
9b1dd08425 eval: Remove unneeded varp check 2017-04-16 20:20:38 +03:00
ZyX
787d71a3af eval: Fix condition in f_serverstop 2017-04-16 20:19:10 +03:00
ZyX
fbdef2e6f2 eval: Refactor nr2char()
Adds error messages, checks type and ignores the second argument.

Currently utf_char2bytes is able to handle any 31-bit character, not
limited by a unicode range. So checking for INT_MAX and not for
something else: function yet uses `int`.
2017-04-16 20:16:55 +03:00
ZyX
3c5f4b382f eval: Silence octal constant warning 2017-04-16 20:08:56 +03:00
ZyX
31190879cc eval: Fix useless NULL check
partial_name() as it is written now really cannot return NULL
2017-04-16 20:07:54 +03:00
ZyX
7c9e3d6cad eval: Refactor f_char2nr
With has_mbyte equal to 1 and &encoding always UTF-8 second argument is no 
longer useful: utf_ptr2char is the same as mb_ptr2char.

Also changes function behaviour a bit: now if second argument is not a number it 
immediately returns with error, without bothering to get a character.
2017-04-16 20:02:06 +03:00
ZyX
97a1ccf8e7 eval: Fix V547: d == NULL was already checked at line 2986 2017-04-16 19:56:55 +03:00
ZyX
05c1829a8c eval: Silence eap->skip false positives
`lnum` starts at `eap->line2` in case of skipping, so cycle is always run at 
least once.
2017-04-16 19:55:49 +03:00
ZyX
d70a0f6895 eval/typval_encode: Silence then/else equivalence warning 2017-04-16 19:51:35 +03:00
ZyX
dd5b0cc17a edit: Copy assert to before the warning 2017-04-16 19:50:23 +03:00
ZyX
fb4754104b macros: Fix excessive check 2017-04-16 19:39:55 +03:00
ZyX
9e9ba14e0e edit: Fix strange code
Based on the flow it looks like ptr could not be NULL here: if ptr_arg is NULL 
ptr is compl_leader, if compl_leader is NULL function exits. This also applies 
to Vim as far as I see.
2017-04-16 19:38:16 +03:00
ZyX
4f0fc1f06a digraph: Fix errors due to has_mbyte and friends being fixed 2017-04-16 19:32:38 +03:00
ZyX
2901921a1b digraph: Ignore false positive
Reversed order is intentional, digraphs allow swapping characters.
2017-04-16 19:30:18 +03:00
ZyX
a096766ee3 diff: Silence -V519
Not exactly a false positive, but previous assignment is a part of the pattern 
“change global, run code which uses it, change global back”.
2017-04-16 19:27:17 +03:00
ZyX
33952a7661 *: Silence some false positives 2017-04-16 19:18:54 +03:00
Justin M. Keyes
77a4f8f235 Merge #6219 from jbradaric/vim-7.4.2170
vim-patch:7.4.{2170,2180,2240,2241,2242}
2017-04-16 16:49:14 +02:00
Nikolai Aleksandrovich Pavlov
d4c7f74ed1 Merge pull request #6493 from ZyX-I/pvs-script
[RFC] scripts: Create script which checks Neovim with PVS-studio
2017-04-16 03:03:38 +03:00
Justin M. Keyes
5c805f4566 Merge #6528 from ZyX-I/revise-malloc-attr
Revise places where FUNC_ATTR_MALLOC is present

Closes #6521
2017-04-15 22:12:31 +02:00
Jurica Bradaric
ec0fabd4d5 eval.c: Code style fixes 2017-04-15 18:48:06 +02:00
ZyX
d76a13bb65 os/shell: Remove FUNC_ATTR_MALLOC from shell_build_argv
Returns an array of allocated strings.
2017-04-15 19:39:53 +03:00
ZyX
ac47e64eca ops: Remove FUNC_ATTR_MALLOC from copy_register
Returned storage has a pointer to a newly allocated array.
2017-04-15 19:25:00 +03:00
ZyX
d191ba1db3 option: Remove FUNC_ATTR_MALLOC from get_winbuf_options
Same as tv_dict_alloc() and additionally it saves some strings inside 
a dictionary.
2017-04-15 19:23:00 +03:00
ZyX
82ba2891ae eval/typval: Remove FUNC_ATTR_MALLOC from tv_list_alloc_ret
Same as tv_list_alloc, but additionally ret_tv receives pointer to the newly 
allocated list.
2017-04-15 19:19:22 +03:00
ZyX
af3579d5f7 eval/typval: Remove FUNC_ATTR_MALLOC from tv_dict_alloc
Allocated dict points to previously allocated dict.
Queue in allocated dict points to itself.
Hashtab in allocated dict points to inside itself.
Allocated dict is saved to gc_first_dict.
2017-04-15 19:18:25 +03:00
ZyX
b9004d7448 eval/typval: Remove FUNC_ATTR_MALLOC from tv_dict_item_copy
Allocated storage may receive pointer to the list after tv_copy().
2017-04-15 19:16:40 +03:00
ZyX
b08b71c728 eval/typval: Remove FUNC_ATTR_MALLOC from tv_list_alloc
Allocated list points to previously allocated list.
Allocated list is saved to gc_first_list.
2017-04-15 19:16:00 +03:00
ZyX
0dddd8a27c os/fileio: Remove FUNC_ATTR_MALLOC for file_open_new
fp contains pointer to rbuffer
2017-04-15 19:13:43 +03:00
Björn Linse
c70ab1a2e2 test: make locale dependent oldtest more reliable (#6526) 2017-04-15 15:06:50 +02:00
James McCoy
a8f7872f44 test_timers.vim: Adjust timing to handle difference in implementation 2017-04-15 08:50:43 -04:00
Björn Linse
12fc1defd6 ops: fix i<c-r> with multi-byte text (#6524) 2017-04-15 11:19:40 +02:00
ZyX
c289986c89 eval/encode: Do translate “… argument” strings, but only in conv_error 2017-04-15 00:08:50 +03:00
ZyX
31fd6d4bbf eval/typval: Do not translate tv_clear argument, this is useless 2017-04-15 00:00:22 +03:00
ZyX
b54e5c220f unittests: Add a test for TV_CSTRING
Not using enum{} because SIZE_MAX exceeds integer and I do not really like how
enum definition is described in C99:

1. Even though all values must fit into the chosen type (6.7.2.2, p 4) the type
   to choose is still implementation-defined.
2. 6.4.4.3 explicitly states that “an identifier declared as an enumeration
   constant has type `int`”. So it looks like “no matter what type was chosen
   for enumeration, constants will be integers”. Yet the following simple
   program:

        #include <stdint.h>
        #include <stdio.h>
        #include <stddef.h>

        enum { X=SIZE_MAX };

        int main(int argc, char **argv)
        {
          printf("x:%zu m:%zu t:%zu v:%zu",
                 sizeof(X), sizeof(SIZE_MAX), sizeof(size_t), (size_t)X);
        }

    yields one of the following using different compilers:

    - clang/gcc/pathcc: `x:8 m:8 t:8 v:18446744073709551615`
    - pcc/tcc: `x:4 m:8 t:8 v:1844674407370955161`

    If I remove the cast of X to size_t then pcc/tcc both yield `x:4 m:8 t:8
    v:4294967295`, other compilers’ output does not change.

    All compilers were called with `$compiler -std=c99 -xc -` (feeding program
    from echo), except for `tcc` which has missing `-std=c99`. `pcc` seems to
    ignore the argument though: it is perfectly fine with `-std=c1000`.
2017-04-14 23:58:47 +03:00
ZyX
276ee1f7fb eval: Add comment regarding why special values are needed 2017-04-14 23:58:46 +03:00
ZyX
b2942d1e72 eval: Change the point at which arg_errmsg and its length are changed
Ref #6437
2017-04-14 23:58:46 +03:00
Justin M. Keyes
58d2ce9bdb test: check_cores(): Escape $TMPDIR path. (#6520)
Lua string:match() considers hyphen to be a special char, we want the
path to be a literal match. Also remove "./", etc.

References #6483
2017-04-14 20:34:54 +02:00
Justin M. Keyes
45b5ebea9d perf: tv_clear(): Cache gettext() result. (#6519)
Closes #6437
2017-04-14 17:41:59 +02:00
Justin M. Keyes
dd391bfca1 Merge #6497 from justinmk/win-quot
win: system('...'): special-case cmd.exe
2017-04-12 03:21:21 +02:00
Justin M. Keyes
7c4e5dfd27 win: os_shell_is_cmdexe() + tests 2017-04-12 02:28:43 +02:00
Rui Abreu Ferreira
d31d177a0c win: default shellxescape, shellxquote to empty
Calling cmd.exe in Windows follows a very different pattern from Vim.
The primary difference is that Vim does a nested call to cmd.exe, e.g.
the following call in Vim

    system('echo a 2>&1')

spawns the following processes

    "C:\Program Files (x86)\Vim\vim80\vimrun" -s C:\Windows\system32\cmd.exe /c (echo a 2^>^&1
        ^>C:\Users\dummy\AppData\Local\Temp\VIoC169.tmp 2^>^&1)
    C:\Windows\system32\cmd.exe /c C:\Windows\system32\cmd.exe /c (echo a 2^>^&1
        ^>C:\Users\dummy\AppData\Local\Temp\VIo3C6C.tmp 2^>^&1)
    C:\Windows\system32\cmd.exe  /c (echo a 2>&1
        >C:\Users\dummy\AppData\Local\Temp\VIo3C6C.tmp 2>&1)

The escaping with ^ is needed because cmd.exe calls itself and needs to
preserve the special metacharacters for the last call. However in nvim
no nested call is made, system('') spawns a single cmd.exe process.
Setting shellxescape to "" disables escaping with ^.

The previous default for shellxquote=( wrapped any command in
parenthesis, in Vim this is more meaningful due to the use of tempfiles
to store the output and redirection (also see &shellquote). There is
a slight benefit in having the default be empty because some expressions
that run in console will not run within parens e.g. due to unbalanced
double quotes

    system('echo "a b')
2017-04-12 02:10:34 +02:00
Rui Abreu Ferreira
f3cc843755 win: libuv_process_spawn(): special-case cmd.exe
Disable CommandLineToArgvW-standard quoting for cmd.exe.

libuv assumes spawned processes follow the convention expected by
CommandLineToArgvW(). But cmd.exe is non-conformant, so for cmd.exe:
- With system([]), the caller has full control (and responsibility) to
  quote arguments correctly.
- With system(''), shell* options are used.

libuv quoting is disabled if argv[0] is:
- cmd.exe
- cmd
- $COMSPEC resolving to a path with filename cmd.exe

Closes #6329
References #6387
2017-04-12 02:10:34 +02:00
Rui Abreu Ferreira
799443c994 win/test: Enable more system() tests 2017-04-12 02:10:33 +02:00
Justin M. Keyes
f7611d74e7 win: vim_strsave_shellescape: Handle 'shellslash'.
From Vim, misc2.c:vim_strsave_shellescape
2017-04-12 02:10:33 +02:00
Justin M. Keyes
d6e5f94ae9 win: defaults: 'shellredir', 'shellxquote', 'shellxescape' 2017-04-12 01:35:49 +02:00
Felipe Oliveira Carvalho
2d72d85b23 refactor: pos_T macros to functions (#6496) 2017-04-11 22:44:48 +02:00
Björn Linse
1b94852ccb Merge pull request #6495 from bfredl/localefix
run Turkish locale tests on travis and make the tests more reliable
2017-04-11 12:38:58 +02:00
Björn Linse
69775f603f ci: install Turkish locale and make locale tests more reliable 2017-04-11 10:24:19 +02:00
Justin M. Keyes
337299c808 Merge #6490 from justinmk/test
Closes #6487
2017-04-11 03:14:10 +02:00
Justin M. Keyes
de378477cc ci/appveyor: fix cache pattern 2017-04-11 02:37:39 +02:00
Justin M. Keyes
119f0ca854 test: helpers.execute() => helpers.feed_command() 2017-04-11 02:37:39 +02:00
Justin M. Keyes
dab3f86d09 win/test: Enable recover_spec.lua 2017-04-11 02:37:39 +02:00
erw7
4a63d9e5f8 win: mch_open_rw: specify S_IWRITE #6487
On Windows, `mch_open_rw` is not actually doing what it claims. This
manifests as "E301: Oops, lost the swap file !!!" when filename is
changed with :file {name}.

Steps to reproduce (covered by test/functional/ex_cmds/file_spec.lua):
    nvim -u NONE
    :edit test
    :file test2
    E301 Oops, lost the swap file!!!

From libuv/src/win/fs.c:
    void fs__open(uv_fs_t* req) {
      ...
      attributes |= FILE_ATTRIBUTE_NORMAL;
      if (flags & _O_CREAT) {
        if (!((req->fs.info.mode & ~current_umask) & _S_IWRITE)) {
          attributes |= FILE_ATTRIBUTE_READONLY;
        }
      }
2017-04-11 00:39:12 +02:00
Justin M. Keyes
2d29638744 test: :file {name} 2017-04-11 00:39:12 +02:00
Justin M. Keyes
6cbf290d56 test/rmdir(): fallback to Nvim delete()
Lua has too many pitfalls here:
- os.execute() requires shell-escaping
- os.execute() has breaking changes between Lua 5.1 and 5.2
- No native way in Lua to handle "readonly" etc. on Windows
2017-04-11 00:39:12 +02:00
Justin M. Keyes
0ce9618918 test/rmdir(): Remove readonly attr on Windows. 2017-04-10 22:59:30 +02:00
Justin M. Keyes
9aface8c4d Merge #6489 from ZyX-I/own-output-handler 2017-04-10 15:53:40 +02:00
Justin M. Keyes
fec53f0bdf Merge #6479 from bfredl/tolower
remove vim_tolower/etc functions with broken locale-dependent behavior
2017-04-10 15:23:44 +02:00
ZyX
60ee50ce4b appveyor: Widen .deps cache dependency 2017-04-10 16:17:02 +03:00
ZyX
2a8055a8d9 ci: Make appveyor use new output handler as well 2017-04-10 15:11:41 +03:00
Justin M. Keyes
dd7f41e5a0 Merge #6488 from ZyX-I/coverity-fixes 2017-04-10 14:04:19 +02:00
ZyX
55292685d3 pvscheck: Add --recheck argument 2017-04-10 14:07:26 +03:00
ZyX
2b13c87fa2 pvscheck: Do not use --depth 2017-04-10 13:47:31 +03:00
ZyX
d7086f44f4 pvscheck: Do not trace help 2017-04-10 13:45:33 +03:00
ZyX
3bd11f2911 pvsscript: Use git clone and not git worktree 2017-04-10 13:42:31 +03:00
ZyX
59f0cbc282 pvscheck: Add help 2017-04-10 13:41:09 +03:00
ZyX
ebfcf2fa38 scripts: Create script which checks Neovim with PVS-studio 2017-04-10 13:24:31 +03:00
Björn Linse
c1cf033981 lint: fix clint errors around mb_tolower calls 2017-04-10 12:02:26 +02:00
Björn Linse
acc06b0b7b vim-patch:8.0.0552
Problem:    Toupper and tolower don't work properly for Turkish when 'casemap'
            is empty. (Bjorn Linse)
Solution:   Check the 'casemap' options when deciding how to upper/lower case.

3317d5ebbe

vim-patch:8.0.0553

Problem:    Toupper/tolower test with Turkish locale fails on Mac.
Solution:   Skip the test on Mac.

9f4de1f543

vim-patch:8.0.0554

Problem:    Toupper and tolower don't work properly for Turkish when 'casemap'
            contains "keepascii". (Bjorn Linse)
Solution:   When 'casemap' contains "keepascii" use ASCII toupper/tolower.

1cc482069a

vim-patch:8.0.0555

Problem:    Toupper/tolower test fails on OSX without Darwin.
Solution:   Skip that part of the test also for OSX. (Kazunobu Kuriyama)

d2381a2cad
2017-04-10 12:02:26 +02:00
Björn Linse
4c857dae11 vim-patch:8.0.0243
Problem:    When making a character lower case with tolower() changes the byte
            cound, it is not made lower case.
Solution:   Add strlow_save(). (Dominique Pelle, closes vim/vim#1406)

cc5b22b3bf

Join almost identical strup_save and strlow_save functions to one
Function.
2017-04-10 12:02:26 +02:00
Björn Linse
a3a06d0248 test: add tests for gu/gU behavior in Turkish locale 2017-04-10 12:02:25 +02:00
Björn Linse
db9ef6263e mbyte: replace vim_tolower with mb_tolower handling locale correctly 2017-04-10 12:01:40 +02:00
Nikolai Aleksandrovich Pavlov
3b88e37b83 Merge pull request #6492 from ZyX-I/fix-clint-incremental-build
cmake: Do not forget to actually create a touch file for errors.tar.gz
2017-04-10 11:26:33 +03:00
ZyX
6f5e87e4aa tests: Rename neovim output handler to nvim 2017-04-10 03:51:51 +03:00
ZyX
40dee97442 third-party: Update busted version 2017-04-10 03:51:50 +03:00
ZyX
accc7a0b6c tests: Skip dumping elapsed times when not available
Should provide some compatibility with old busted. And also removes duplicate 
parts from successString and skippedString, making them more like failureString 
and errorString which do not have times for technical reasons (busted for some 
reason did not yet compute duration before running the relevant handlers).
2017-04-10 03:51:50 +03:00
ZyX
1b66ed890b cmake: Do not forget to actually create a touch file for errors.tar.gz 2017-04-10 03:50:05 +03:00
ZyX
bc61058dd8 tests: Print description also at the end of the suite 2017-04-10 02:51:27 +03:00
ZyX
d909724d70 tests: Use our own output handler on travis
Reasoning:

1. gtest is better then something like utfTerminal, yet it is way too verbose.
2. gtest cannot be configured to show colors always.
3. Actually I am going to add a CMake target which will allow running tests 
   (especially, functional tests) in parallel, but this is not going to work 
   well with any of the default output handlers. Build in this case must be more 
   or less silent, yet debuggable. New handler does not support this in this 
   commit though.
2017-04-10 02:32:09 +03:00
Justin M. Keyes
d7fb7de70a Merge #6481 from ZyX-I/rename-execute
Rename execute() function to feed_command()
2017-04-09 22:51:59 +02:00
ZyX
ebe5051977 spellfile: Fix SAL sections reading 2017-04-09 23:46:38 +03:00
ZyX
fa7ace446e coverity/56795: Fix NULL dereference in :syn keyword non-printable
Bug was introduced 3 years earlier, in 13848aa: NULL keyword_copy was 
incorrectly treated as an indicator of OOM.
2017-04-09 23:38:05 +03:00
ZyX
eb3663eb10 spellfile: Fix clint errors 2017-04-09 22:39:23 +03:00
ZyX
aa857f9e48 spellfile: Fix memory leak 2017-04-09 22:33:45 +03:00
ZyX
35584594f5 coverity/13689: Check file header with memcmp
Not that it is actually useful (would fail in any case), but should fix coverity 
report.
2017-04-09 22:30:48 +03:00
ZyX
8f75b67c07 coverity/13688: Check for NUL bytes in salfrom 2017-04-09 22:16:26 +03:00
ZyX
ecce981dba coverity/13687: Do not allow NUL byte in region names 2017-04-09 22:02:51 +03:00
ZyX
5b4f07ee86 spellfile: Use old error
This makes first test not actually show any change in behaviour.
2017-04-09 22:02:51 +03:00
ZyX
8d982ab522 coverity/13686: Do not allow NUL byte in precondition regex
Before this commit it emitted e_spell_trunc in the first case and
treated file as completely valid on the second. While first is fine
(both errors are actually valid, though old error is probably better),
second results in incorrect regex used.
2017-04-09 22:02:36 +03:00
James McCoy
dbdd69e418 Merge pull request #6485 from jamessan/vim-8.0.0377
vim-patch:8.0.0377,8.0.0378,8.0.0322,8.0.0376
2017-04-09 13:25:15 -04:00
ZyX
dbe67868b5 Merge branch 'master' into rename-execute 2017-04-09 19:14:20 +03:00
Justin M. Keyes
26bf6e6f6f test/check_cores(): Skip workspace-local temp dir. (#6483)
Avoids this error:
    ./test/helpers.lua:27: cannot open ./Xtest-tmpdir/nvimfqH9dL: No such file or directory
    stack traceback:
        ./test/helpers.lua:27: in function 'glob'
        ./test/helpers.lua:195: in function 'check_cores'
        ./test/functional/helpers.lua:628: in function <./test/functional/helpers.lua:626>
2017-04-09 15:49:31 +02:00
James McCoy
06a96df510 lint 2017-04-09 01:17:15 -04:00
James McCoy
4af6c60826 vim-patch:8.0.0376
Problem:    Size computations in spell file reading are not exactly right.
Solution:   Make "len" a "long" and check with LONG_MAX.

6d3c8586fc
2017-04-09 00:49:53 -04:00
James McCoy
b338bb9d6c vim-patch:8.0.0322
Problem:    Possible overflow with spell file where the tree length is
            corrupted.
Solution:   Check for an invalid length (suggested by shqking)

399c297aa9

CVE-2017-5953
2017-04-09 00:49:32 -04:00
James McCoy
ad66826abe vim-patch:8.0.0378
Problem:    Another possible overflow when reading corrupted undo file.
Solution:   Check if allocated size is not too big. (King)

0c8485f0e4

CVE-2017-6350
2017-04-09 00:49:32 -04:00
James McCoy
fb66a7c69e vim-patch:8.0.0377
Problem:    Possible overflow when reading corrupted undo file.
Solution:   Check if allocated size is not too big. (King)

3eb1637b1b

CVE-2017-6349
2017-04-09 00:49:26 -04:00
ZyX
b99cac2778 cmake: Do not use ExternalProject
Necessary argument (EXCLUDE_FROM_ALL) only appears in 3.1.0.
2017-04-09 06:17:02 +03:00
ZyX
c8243ad071 cmake: Do not build clint-error-files by default 2017-04-09 05:18:09 +03:00
Justin M. Keyes
699e8406b5 Merge #6439 from ZyX-I/fix-gc-failures
unittests: Force GC, fix GC failures in typval_spec
2017-04-09 04:05:07 +02:00
Justin M. Keyes
cc8f640fb1 Merge #6478 from ZyX-I/conv-fixes
Remove conversions which are not needed when &encoding is UTF-8
2017-04-09 03:59:55 +02:00
Nikolai Aleksandrovich Pavlov
3a6b8c28c8 cmake: Use archive instead of downloading *.json files (#6482) 2017-04-09 03:28:48 +02:00
ZyX
967fa96eb2 unittests: Fix linter error 2017-04-09 03:39:37 +03:00
ZyX
8e519a22dd vim.h: Remove strange comments 2017-04-09 03:36:18 +03:00
ZyX
0f4b4c7529 headers: Remove useless HAVE_CONFIG_H macros
We do not have non-cmake build options, cmake always does configure_file.
2017-04-09 03:36:18 +03:00
ZyX
8990490b50 unittests: Move allocating vimconv_T to a function 2017-04-09 03:36:18 +03:00
ZyX
233e71419e unittests: Do not GC typval_T which is owned by a di 2017-04-09 03:36:18 +03:00
ZyX
bac870433b unittests: Do not unref partial which is owned by Callback structure 2017-04-09 03:36:17 +03:00
ZyX
44cd4e63f5 unittests: Use Neovim memory allocation for vimconv_T
Not sure whether this is going to fix things though, but core dump does not 
contain Neovim functions in stack in this case.
2017-04-09 03:36:17 +03:00
ZyX
94c1af7c41 unittests: Do not gc what is already freed 2017-04-09 03:36:17 +03:00
ZyX
7c9c4d9da9 ci: Increase check-single-includes wait time to 10s 2017-04-09 03:36:17 +03:00
ZyX
3321232c81 ci: Allow check-single-includes to hang 2017-04-09 03:36:16 +03:00
ZyX
f5be643205 functests: Fix linter errors 2017-04-09 03:31:13 +03:00
ZyX
0ac2afdec7 functests: Fix some ui/*_spec tests 2017-04-09 03:24:26 +03:00
ZyX
ddaa41dee4 functests: Fix ui/bufhl_spec 2017-04-09 03:24:26 +03:00
ZyX
88ea362c70 functests: Fix ui/screen_basic_spec 2017-04-09 03:24:23 +03:00
ZyX
ba7d8bf0c2 functests: Fix terminal/highlight_spec 2017-04-09 03:24:22 +03:00
ZyX
e0560a0f3f functests: Fix terminal/cursor_spec
It looks like Neovim has a bug: if `startinsert` is called using `command()` 
then `-- TERMINAL --` gets replaced with `-- --` (and also a cursor appears).
2017-04-09 03:24:21 +03:00
ZyX
444cab3731 functests: Fix legacy/wordcount_spec
Another test where bug was hidden by execute().
2017-04-09 03:24:21 +03:00
ZyX
bd84bf8c81 functests: Fix legacy/eval_spec 2017-04-09 03:24:20 +03:00
ZyX
e170186a8d functests: Fix legacy/close_count_spec 2017-04-09 03:24:20 +03:00
ZyX
bc98c37532 functests: Fix legacy/autocmd_option_spec 2017-04-09 03:24:19 +03:00
ZyX
a3b0146fb7 functests: Fix legacy/arglist_spec 2017-04-09 03:24:19 +03:00
ZyX
2824eb7774 functests: Fix legacy/107_adjust_window_and_contents_spec 2017-04-09 03:24:18 +03:00
ZyX
5fd8f637af functests: Fix legacy/097_glob_path_spec 2017-04-09 03:24:18 +03:00
ZyX
9a0c921909 functests: Fix legacy/096_location_list_spec 2017-04-09 03:24:17 +03:00
ZyX
d53fae5f54 functests: Fix legacy/067_augroup_exists_spec 2017-04-09 03:24:15 +03:00
ZyX
69d1003bf7 functests: Fix some tests which are failing locally for unrelated reasons 2017-04-09 03:24:14 +03:00
ZyX
c35bd4d074 functests: Fix legacy/074_global_var_in_viminfo_spec 2017-04-09 03:24:13 +03:00
ZyX
4da4d5cfd9 functests: Fix legacy/065_float_and_logic_operators_spec 2017-04-09 03:24:12 +03:00
ZyX
cb57644cb4 functests: Fix legacy/063_match_and_matchadd_spec 2017-04-09 03:24:10 +03:00
ZyX
b3b31e1065 functests: Fix legacy/062_tab_pages_spec 2017-04-09 03:24:10 +03:00
ZyX
ed0ad7ce3e functests: Fix legacy/051_highlight_spec test 2017-04-09 03:24:09 +03:00
ZyX
a1b81f7eca functests: Fix legacy/030_fileformats_spec test
For some reason it had a number of not working bwipeout! commands. execute() 
successfully hid the failures, command() is not that permissive.
2017-04-09 03:24:09 +03:00
ZyX
65fb622000 functests: Replace execute with either command or feed_command
Hope this will make people using feed_command less likely: this hides bugs.
Already found at least two:

1. msgpackparse() will show internal error: hash_add() in case of duplicate
   keys, though it will still work correctly. Currently silenced.
2. ttimeoutlen was spelled incorrectly, resulting in option not being set when
   expected. Test was still functioning somehow though. Currently fixed.
2017-04-09 03:24:08 +03:00
Justin M. Keyes
a34408ef7f test: retry(): Report number of retries. (#6475)
tui_spec.lua: Retry the terminal-mode test.
2017-04-09 02:11:08 +02:00
ZyX
9158cc171f functests: Refactor options/pastetoggle
Note: typo, ttimeoutlen not set ever.

Mention @hardenedapple
2017-04-08 23:48:22 +03:00
ZyX
dd93733e52 functests: Refactor legacy/054_buffer_local_autocommands_spec 2017-04-08 22:33:02 +03:00
ZyX
cca029bc8d functests: Refactor legacy/003_cindent_spec and legacy/increment_spec 2017-04-08 22:17:39 +03:00
ZyX
7766b24f3c functests: Refactor legacy/018_unset_smart_indenting_spec 2017-04-08 22:02:44 +03:00
ZyX
e31aab8b61 functests: Refactor legacy/029_join test 2017-04-08 22:00:50 +03:00
ZyX
47b451c52b functests: Refactor legacy/012_directory_spec 2017-04-08 21:58:13 +03:00
ZyX
b0731290e8 functests: Move test from legacy/009 to autocmd/autocmd 2017-04-08 21:50:14 +03:00
ZyX
1ef98b34b3 functests: Refactor 009_bufleave_autocommand_spec
It was not testing anything actually: the `e yy` command simply failed because 
of unsaved changes, BufLeave never run thus.
2017-04-08 21:46:30 +03:00
ZyX
7701014b65 *: Remove useless asserts 2017-04-08 20:22:46 +03:00
ZyX
467a02f88d doc: Update documentation 2017-04-08 19:34:01 +03:00
dedmass
cd0a436622 refactor/single-include
Closes #6463
refactor/single-include: file_search.h
Closes #6455
refactor/single-include: hardcopy.h
Closes #6457
refactor/single-include: if_cscope.h
Closes #6458
refactor/single-include: mark.h
Closes #6461
refactor/single-include: mbyte.h
Closes #6462
refactor/single-include: memline.h
Closes #6464
refactor/single-include: menu.h
Closes #6468
refactor/single-include: ops.h
Closes #6470
2017-04-08 18:26:33 +02:00
ZyX
ab19fa1552 *: Fix linter errors
Drops comments `// for …` that do not pass linter for them being unmaintainable 
and fast to becoming incomplete or even incorrect.

Mention @dedmass
2017-04-08 19:20:42 +03:00
ZyX
dc9722326e unittests: Do not alter p_enc in decode unit test 2017-04-08 19:20:41 +03:00
ZyX
e814695223 eval/*code,shada: Drop support for converting UTF-8 from/to p_enc
Not needed any longer since p_enc is always utf-8.
2017-04-08 19:20:41 +03:00
ZyX
6006cb74ef eval/decode: Omit calling convert_setup for each string
Uses the same trick eval/encode does.
2017-04-08 19:00:05 +03:00
ZyX
b3587a456b shada: Initialize vimconv_T 2017-04-08 19:00:05 +03:00
ZyX
e586047a53 eval/decode,shada: Do not forget to clean up converters 2017-04-08 19:00:04 +03:00
dedmass
3fd9b70c48 refactor/single-include: fold.h #6456 2017-04-08 04:53:17 +02:00
dedmass
fd69c3f561 refactor/single-include: ex_getln.h #6454 2017-04-08 04:49:32 +02:00
dedmass
89deb6ff22 refactor/single-include: memline_defs.h #6465 2017-04-08 04:20:37 +02:00
dedmass
b47e1029a5 refactor/single-include: move.h #6469 2017-04-08 04:18:12 +02:00
dedmass
3d4a2ee9c7 refactor/single-include: ex_cmds.h #6453 2017-04-08 04:16:29 +02:00
dedmass
f4e97fe499 refactor/single-include: digraph.h #6444 2017-04-08 04:14:05 +02:00
dedmass
fd8f18bce2 refactor/single-include: cursor_shape.h #6442 2017-04-08 04:09:32 +02:00
Justin M. Keyes
fd4b34af47 Merge #6473 from jamessan/vim-8.0.0499
vim-patch:8.0.0499,8.0.0550
2017-04-08 17:01:16 +02:00
ZyX
a83511d1a1 unittests: Move checking cores to check_child_err 2017-04-08 04:48:58 +03:00
James McCoy
123931e65e lint 2017-04-07 16:38:06 -04:00
James McCoy
98dd9b8012 vim-patch:8.0.0550
Problem:    Some etags format tags file use 0x01, breaking the parsing.
Solution:   Use 0x02 for TAG_SEP. (James McCoy, closes vim/vim#1614)

9585a1655b
2017-04-07 16:32:22 -04:00
James McCoy
20dc04470e vim-patch:8.0.0499
Problem:    taglist() does not prioritize tags for a buffer.
Solution:   Add an optional buffer argument. (Duncan McDougall, closes vim/vim#1194)

c6aafbaf3e
2017-04-07 16:18:04 -04:00
Justin M. Keyes
13352c00f1 win: os_get_hostname() #5416 (#6413) 2017-04-07 19:46:33 +02:00
Nicolas Hillegeer
1813076c44 eval: delimit string with NUL byte (#6467)
A recent refactor left cpy without a NUL terminator, simplify the code
instead of patching over it.

Instead of plain memcpy, it'd be better to employ harder to misuse string
functions made for this purpose like xstrlcpy(), but path_tail() takes
char_u arguments and returns them, leading to a lot of ugly casting.

Fixes #6431.
2017-04-07 12:29:17 +02:00
ZyX
654dd15bb8 unittests: Fix testlint failure 2017-04-07 00:46:52 +03:00
ZyX
c1416e0665 ci: Really continue tests on failure, print global summary 2017-04-07 00:46:52 +03:00
Justin M. Keyes
30e1cda8ac completion: fix segfault with ignorecase+infercase (#6452)
Helped-by: Matthew Malcomson <hardenedapple@gmail.com>

Closes #6451
2017-04-06 21:35:03 +02:00
James McCoy
071f2da66b vim-patch:7.4.2359
Problem:    Memory leak in timer_start().
Solution:   Check the right field to be NULL.

26fe0d5691
2017-04-06 08:58:47 -04:00
James McCoy
9edbeec077 vim-patch:7.4.2332
Problem:    Crash when stop_timer() is called in a callback of a callback.
            Vim hangs when the timer callback uses too much time.
Solution:   Set tr_id to -1 when a timer is to be deleted. Don't keep calling
            callbacks forever. (Ozaki Kiichi)

75537a93e9
2017-04-06 08:57:22 -04:00
James McCoy
0f99645b8f vim-patch:7.4.2304
Problem:    In a timer callback the timer itself can't be found or stopped.
            (Thinca)
Solution:   Do not remove the timer from the list, remember whether it was
            freed.

417ccd7138
2017-04-06 08:56:35 -04:00
James McCoy
6a6bbbc6d8 vim-patch:7.4.2281
Problem:    Timer test fails sometimes.
Solution:   Reduce minimum time by 1 msec.

0426bae2ab
2017-04-06 08:55:37 -04:00
Carlo Abelli
c501d7c432 refactor/single-include: diff.h (#6443) 2017-04-06 14:48:42 +02:00
ZyX
271df03fa4 unittests: Force GC, fix GC failures in typval_spec 2017-04-06 07:29:15 +03:00
James McCoy
bb54d921aa Merge remote-tracking branch 'origin/master' into vim-7.4.2170 2017-04-05 22:39:40 -04:00
James McCoy
210b013ce7 vim-patch: Update regex for included_patches array (#6449)
28dafe3ff const-ified the array without updating the regex.

[ci skip]
2017-04-06 02:10:20 +02:00
Justin M. Keyes
cde51dd6f4 Merge #6440 'test: Remove "tickle" hack' 2017-04-06 01:07:22 +02:00
Justin M. Keyes
8863af28b8 test: retry() works with asserts; error() not required. 2017-04-06 01:06:40 +02:00
Björn Linse
3b558e5d7b tests: short form screen:except(func) expects condition only. #6440
- Use this to properly test cursor shape events.
- tests: update screen_basic_spec to use `screen:expect` short form.
  Clearer than using `screen:wait` directy.
2017-04-06 01:06:39 +02:00
Justin M. Keyes
4566f7c7cd Merge #6432 from justinmk/guicursor 2017-04-04 15:26:32 +02:00
Justin M. Keyes
a7f34e1991 options: remove 'guiheadroom' 2017-04-04 14:19:26 +02:00
Justin M. Keyes
e348e256f3 'guicursor': Disable by default for unknown terminals.
User can still set guicursor explicitly in init.vim.

Closes #5990
Closes #6403
2017-04-04 14:19:26 +02:00
Justin M. Keyes
3ccd59ee82 'guicursor': enabled=false if 'guicursor' is empty
Closes #6429
Closes #6430
2017-04-04 14:19:26 +02:00
Justin M. Keyes
9d560d5c6b Merge #6436 from ZyX-I/restart-includes-cleanup
Clean-up before restarting single-includes test
2017-04-04 14:16:14 +02:00
ZyX
017f64b970 ci: Also fail if last restart hang up 2017-04-04 04:59:30 +03:00
ZyX
dcad882256 ci: Do not fail csi_clean if there are no files to remove 2017-04-04 04:17:40 +03:00
ZyX
d59378a5ca ci: Force make output coloring 2017-04-04 04:03:50 +03:00
ZyX
644db2165e ci: Clean up when restarting single includes test 2017-04-04 03:58:10 +03:00
Yichao Zhou
bc6d868d00 'listchars': Whitespace highlight group #6367 2017-04-03 14:10:40 +02:00
Justin M. Keyes
6afa7d66cd Merge #6427 from ZyX-I/writefile-allow-omitting-fsync
eval: Make writefile() able to disable fsync()
2017-04-03 03:54:34 +02:00
ZyX
ae7d8d8ffb ci: Do not mark test as failed if it is previous one which failed 2017-04-03 03:47:42 +03:00
ZyX
ac87c7e5ae fileio: Fix most linter errors
One error is still kept: buf_write function is too large.
2017-04-03 03:46:44 +03:00
ZyX
dc75766081 tests: Fix testlint errors 2017-04-03 03:07:01 +03:00
ZyX
9912043103 functests: Test some :write errors 2017-04-03 03:04:10 +03:00
ZyX
2dbd49f73c fileio: Save details about E212 error 2017-04-03 03:02:17 +03:00
ZyX
97a7f4745d eval: Add s flag, use p_fs by default, error out on unknown flag 2017-04-03 02:11:27 +03:00
ZyX
5dcf280445 fileio: Refactor msg_add_fname to something which needs no comments 2017-04-03 02:03:05 +03:00
ZyX
1c41b9c775 fileio: Clean up IObuff-manipulation mess 2017-04-03 01:39:09 +03:00
ZyX
8eb598c08e fixup! 2017-04-03 00:44:49 +03:00
ZyX
8dd9c6edd8 message: Do not use IObuff in emsgf 2017-04-03 00:40:48 +03:00
ZyX
364709bedb fileio: Refactor errmsg handling
Adds os_strerror() result to a number of places. Also since I could not track 
where err\* variables are NULL and where they are not, using macros to make sure 
that all three variables are set at once.

Removes #ifdef UNIX around the use of os_fsync, makes it use os_close in place 
of close in some places.
2017-04-03 00:35:29 +03:00
ZyX
b10880dadc eval: Make writefile() able to disable fsync() 2017-04-02 22:11:35 +03:00
Nikolai Aleksandrovich Pavlov
ddfa0359c6 unittests: Make it easier to determine on which _spec line it crashed (#6424)
Benchmarks:

Before change: 17.78s user 3.48s system  94% cpu 22.525 total
After change:  25.38s user 4.46s system 101% cpu 29.317 total
2017-04-02 13:25:47 +02:00
Justin M. Keyes
58422f17d8 Merge #6423 from justinmk/guicursor 2017-04-02 02:32:36 +02:00
James McCoy
a7569b50b7 Merge pull request #6338 from jamessan/llvm-update
Bump LLVM to 3.9
2017-04-01 20:09:26 -04:00
Justin M. Keyes
1ad5644006 Merge #6409 from ZyX-I/separate-clint
cmake: Add `clint` target to build Makefile
2017-04-02 01:20:16 +02:00
James McCoy
16babc6687 tui: Only enable/disable mouse when there's something to do (#6411)
If we get a mouse_on/mouse_off event, but the mouse is already in the
corresponding state, there's no need to send the event up to the
terminal.

Closes #4394
2017-04-02 00:00:42 +02:00
Justin M. Keyes
3a69dbfca6 api/cursor_style_set: mode descriptions 2017-04-01 23:29:10 +02:00
Justin M. Keyes
c2826a7830 'guicursor': Empty means "block cursor in all modes".
Also: update default 'guicursor' to match the documentation.
2017-04-01 23:14:05 +02:00
Matthieu Coudron
54bab0019b tui: 'guicursor' color
For now only supports valid hex colors (does not check for the validity
the hex color) when termguicolors is set, otherwise it won't attempt to
change the cursor color.
2017-04-01 23:14:05 +02:00
Matthieu Coudron
dd4a5fcbb6 tui: 'guicursor' shape #6044
Closes #2583
2017-04-01 23:14:05 +02:00
Justin M. Keyes
518f28f537 Merge #6422 from ZyX-I/fix-6420
eval,fileio: Omit additional fsync() call
2017-04-01 22:38:20 +02:00
Matthew Malcomson
337b6179df 'pastetoggle': support value >1 char (#6421)
If we `set pastetoggle=abcde`, and manually type it, then `vgetorpeek()`
sees part of the option before it has all been inserted into the
typebuffer.
To signify this it sets `keylen = KEYLEN_PART_KEY`, but the condition
about whether to return the current key from `vgetorpeek()` only checks
for `keylen = KEYLEN_PART_MAP`.
Add a check for `KEYLEN_PART_KEY` to account for the `'pastetoggle'`
option.
2017-04-01 21:50:29 +02:00
ZyX
19690d4a25 eval: Do not allocate FileDescriptor 2017-04-01 22:26:50 +03:00
Justin M. Keyes
0f6608d039 Merge #6418 from ZyX-I/better-unittests 2017-04-01 20:48:03 +02:00
ZyX
cc4523013f eval,fileio: Omit additional fsync() call
Fixes #6420
2017-04-01 21:15:13 +03:00
ZyX
ac22238b6a unittests: Replace two environment variables with one TRACE_LEVEL 2017-04-01 20:57:23 +03:00
Justin M. Keyes
33ff29fc74 Merge #6344 'vim-patch:7.4.2236,7.4.2306' 2017-04-01 17:42:15 +02:00
lonerover
45a13c4bbc vim-patch:7.4.2306
Problem:    Default value for 'langremap' is wrong.
Solution:   Set the right value. (Jürgen Krämer)  Add a test.

da9ce2cde1
2017-04-01 22:46:27 +08:00
lonerover
53da57d27a vim-patch:7.4.2236
Problem:    The 'langnoremap' option leads to double negatives.  And it does
            not work for the last character of a mapping.
Solution:   Add 'langremap' with the opposite value.  Keep 'langnoremap' for
            backwards compatibility.  Make it work for the last character of a
            mapping.  Make the test work.

920694c1b6
2017-04-01 22:45:36 +08:00
ZyX
2d158dde02 unittests: Fix linter error 2017-04-01 13:17:25 +03:00
ZyX
708a55ee15 unittests: Disable non-C-calls
Some benchmarks:

TRACE_EVERYTHING: 79.45s user 12.68s system 124% cpu 1:13.94  total

(default):        30.26s user  5.30s system  89% cpu   39.663 total
2017-04-01 13:16:25 +03:00
ZyX
9dd0d4f8b9 unittests: Add trace description right to the error message 2017-04-01 12:52:28 +03:00
ZyX
046d6a8dfe unittests: Collect traces
Some benchmarks:

MAIN_CDEFS + NO_TRACE:  3.81s user  1.65s system  33% cpu   16.140 total

MAIN_CDEFS:            73.61s user 10.98s system 154% cpu   54.690 total

NO_TRACE:              18.49s user  4.30s system  73% cpu   30.804 total

(default):             77.11s user 14.74s system 126% cpu 1:12.79  total
2017-04-01 12:25:10 +03:00
ZyX
8f7a48f46a unittests: Split itp implementation into multiple functions 2017-04-01 11:19:41 +03:00
ZyX
933d60bc23 unittests: Do not hang when error message is too long 2017-04-01 11:07:08 +03:00
Justin M. Keyes
8de53157b6 build: avoid cmake warning (#6417) 2017-04-01 03:22:56 +02:00
ZyX
6ddaace7ac ci: Do not shift if there are not enough arguments 2017-03-31 20:52:05 +03:00
ZyX
86f5b1276b ci: Add test watchdog and tracing for lint tests 2017-03-31 19:42:18 +03:00
ZyX
929c398aab ci: Enable tracing 2017-03-31 19:09:18 +03:00
ZyX
d9069b9fe4 ci: Check for exact value of CI_TARGET, not its emptyness 2017-03-31 17:39:18 +03:00
James McCoy
4bae3f48fe ci: Bump clang version to 3.9 2017-03-31 10:03:43 -04:00
James McCoy
1b276be6e5 ci: Use LLVM's trusty repo to match Travis' Ubuntu version 2017-03-31 10:03:43 -04:00
ZyX
4c20733f6b ci: Add ${NL} variable 2017-03-31 16:19:47 +03:00
ZyX
2da3caef1b ci: Do not quote MAKE_CMD 2017-03-31 16:17:38 +03:00
ZyX
1e87061294 makefile: Make lint target depend on clint 2017-03-31 16:08:02 +03:00
ZyX
2bf9d36ccd ci: Refactor CI scripts
1. CI_TARGET now determines which run_${CI_TARGET}.sh script to use. Defaults to
   `tests`.
2. Build no longer halts on the first failing suit: e.g. if functional tests
   failed it will continue with unit tests, etc.
3. All ${MAKE_CMD} occurrences moved to `top_make` function, added `build_make`
   as an alias to `make -C build` (`"${MAKE_CMD}" -C "${BUILD_DIR}"`) which is
   too verbose.

`suite.sh` was copied from powerline (tests/common.sh file), assumes running
with POSIX shells (and actually uses dash in powerline). Then some convenience
functions were added (run_test and below).
2017-03-31 16:06:17 +03:00
ZyX
4d0f90f94d cmake: Also depend on LINT_PRG 2017-03-31 16:04:18 +03:00
ZyX
4fc2be490c clint: Do not report zero errors 2017-03-31 16:04:18 +03:00
ZyX
c61858a997 cmake: Replace RunLint.cmake with code in src/nvim/CMakeLists.txt
This also removes LINT_FILE environment variable, other then that functionality 
is kept. It is expected that developers needing partial linting will use `make 
lint`, touching interesting file before (if not done already by writing to 
them).
2017-03-31 16:04:18 +03:00
ZyX
24fd125893 cmake: Allow failing to download small suppress files 2017-03-31 16:04:18 +03:00
ZyX
8204eaea7f cmake: Make Download.cmake check for errors
Copying from third-party/cmake/DownloadAndExtractFile.cmake.
2017-03-31 16:04:17 +03:00
ZyX
0b528fc4b5 cmake: Use file-specific supprresses
`make -C build clint` time is now

    make -j5 clint  95.29s user 1.86s system 409% cpu 23.751 total

*without* downloading anything (much worse if something was not cached, still 
a bit better then top-level `make clint`). But since without neovim/bot-ci#95 it 
is downloading each file one-by-one total time with download (download also 
parallel!) is

    make -j5 -B clint  99.29s user 2.98s system 258% cpu 39.634 total

Top-level makefile still gives

    make -j5 clint  59.33s user 0.28s system 95% cpu 1:02.41 total
2017-03-31 16:04:17 +03:00
ZyX
030c0588a0 cmake: Add clint target to build Makefile
Allows linting only modified files and linting multiple files in
parallel. In the current state is rather slow because errors.json is
a 6 MiB file and needs to be reparsed each time.

Results on my system (6-core):

    # In build dir, actually parallel
    make -j5 clint  241.24s user 8.39s system 334% cpu 1:14.74 total
    # In root, one process
    make -j5 clint  60.69s user 0.37s system 93% cpu 1:05.19 total

In both cases download time included.

That is not well for travis (though I would keep travis as-is because
new variant will fail before checking all files), but already good
enough for regular development: total times are nearly identical and
this is the *full* build, further `make -C build clint` will check only
modified files.
2017-03-31 16:04:17 +03:00
Nikolai Aleksandrovich Pavlov
a1c928e70c ci: Do not hide ci directory (#6410) 2017-03-31 14:32:58 +02:00
James McCoy
77539eef9b Merge pull request #6397 from jamessan/coverity
Fix latest Coverity issues
2017-03-31 07:52:45 -04:00
James McCoy
1097ba53f8 Merge pull request #6406 from jamessan/msgpack-c-2.1.x-compat
Add handling for MSGPACK_OBJECT_FLOAT{32,64}
2017-03-31 07:51:38 -04:00
James McCoy
338da727cd coverity/161216: Ensure buf is valid for lifetime of defstr
Depending on the type of argument for input()/inputdialog()'s {text}
argument, defstr may point to buf.  Therefore it needs to be in scope
for the lifetime of defstr.

Also, use a different buffer for the handling of the 3rd argument to
input()/inputdialog().  Although the buffer defstr points to is used
immediately, it avoids potential mishaps if the code changes.
2017-03-30 22:30:02 -04:00
James McCoy
193aa4c140 third-party: Avoid building msgpack-c examples 2017-03-30 21:35:37 -04:00
James McCoy
f4a3a96b68 Add handling for MSGPACK_OBJECT_FLOAT{32,64}
msgpack-c previously only had MSGPACK_OBJECT_FLOAT, which was a 64-bit
value.  Now, 32-bit and 64-bit floats are supported as distinct types,
but we'll simply continue to treat everything as 64-bit types.
2017-03-30 21:35:36 -04:00
James McCoy
af2ee9c5d1 cmake: Detect whether msgpack-c has MSGPACK_OBJECT_FLOAT{32,64} types 2017-03-30 21:35:36 -04:00
James McCoy
d92add8a4b third-party: Bump msgpack-c to 2.1.1 2017-03-30 21:35:29 -04:00
Matthew Malcomson
3a9dd13f9e fold.c: more edge-cases when updating (#6207)
When foldUpdateIEMSRecurse() re-uses an existing fold, it misses the
case where the existing fold spans from before startlnum to after
firstlnum, the new fold does not span this range, and there is no
"forced start" of a fold. We add a case for this in.

Ensure that if there was no forced break in folds, we merge folds that
now touch each other.

Include testing for a tricky foldmethod=expr case that has never been a
bug. This case works at the moment because of some effects that are not
obvious when reading the code.
A test for this could be useful to ensure a regression doesn't happen.

vim-patch:8.0.0408
2017-03-31 01:21:26 +02:00
Michael Ennen
831eb2a9bf vim-patch:7.4.2104 (#6332)
Problem:    Code duplication when unreferencing a function.
Solution:   De-duplicate.

97baee80f0
2017-03-31 01:07:39 +02:00
Jakob Schnitzer
eb0e94f71b api: {get,set}_option should {get,set} global value of local options (#6405)
- nvim_get_option should return the global default of a local option.
- nvim_set_option should set the global default of a local option.
2017-03-30 22:03:52 +02:00
Matthew Malcomson
66b336d89b test: set 'nomore' by default (#6360)
Escaping from a '-- More --' prompt in tests is awkward as it doesn't
take keys from the typebuffer, requiring a call to `feed()` in lua at
the correct time. Moreover, it's rarer that a test will want the
'-- More --' prompt to be activated than not.
2017-03-30 19:00:34 +02:00
James McCoy
75b98f7c3f Remove PVS-Studio cruft
[ci skip]
2017-03-30 10:09:33 -04:00
Justin M. Keyes
8d13955328 Merge #6395 'test: Use workspace-local temp directory.' 2017-03-30 03:50:17 +02:00
James McCoy
1222c82799 coverity/16127: Verify lang is non-NULL before calling strlen 2017-03-29 21:34:04 -04:00
James McCoy
91dfebf050 ci: Update Coverity model for typval refactoring
[ci skip]
2017-03-29 21:16:58 -04:00
James McCoy
1c6ae58fd1 coverity/161194: Restore check for 'keywordprg' being ":help"
998d0ffc09 removed the explicit check for
":help", relying instead on whether the user was in a help buffer.
However, this breaks escaping the identifier for use in the lookup
command.

2f54d6927c tried to fix this by removing
"!kp_ex" in "if (cmdchar == 'K' && !kp_ex)", but that causes shell
escaping to be used instead of escaping for tag lookup.
2017-03-29 21:16:58 -04:00
James McCoy
3116f870ba coverity/161195: Increase scope of exe_name
Since exe_name is a stack allocated array, we need it to be in scope for
the lifetime that vim_path points to it.
2017-03-29 21:16:50 -04:00
Justin M. Keyes
1ea9ebf112 test: Use workspace-local temp directory.
Closes #6291
2017-03-30 02:55:00 +02:00
Justin M. Keyes
1f478cebeb win: tempname(): Use $TMPDIR if defined. 2017-03-30 02:55:00 +02:00
relnod
6964b67c00 refactor/single-include: buffer.h (#6396) 2017-03-30 00:50:11 +02:00
Justin M. Keyes
c60e409471 Merge #5119 from ZyX-I/split-eval 2017-03-29 23:15:07 +02:00
Justin M. Keyes
c35420558b Merge #6394 'ci: check-single-includes only in "lint" build' 2017-03-29 18:44:43 +02:00
Justin M. Keyes
afacda046d ci: Run check-single-includes in "lint" build only 2017-03-29 18:02:09 +02:00
Justin M. Keyes
05b74399aa build: remove unused get_preproc_output() call
ref https://github.com/neovim/neovim/pull/6375#discussion_r108573471
2017-03-29 17:39:06 +02:00
lonerover
2846d508b2 vim-patch:7.4.2276 (#6393)
* vim-patch:7.4.2276

Problem:    Command line test fails on Windows when run twice.
Solution:   Wipe the buffer so that the directory can be deleted.

1773ddfdcd

* version.c: mark vim-patch 7.4.2269 as included (#5659)
2017-03-29 16:48:50 +02:00
ZyX
46efe14473 functests: Try sleeping a bit more 2017-03-29 10:08:46 +03:00
ZyX
b9603218be eval/executor: Fix check-single-includes 2017-03-29 10:08:46 +03:00
ZyX
a1d590a08b *: Use const char * in set_one_cmd_context
Also renames functions added in master and renamed here.
2017-03-29 10:08:46 +03:00
ZyX
114eaa15f0 eval/typval,api/buffer: Fix review comments 2017-03-29 10:08:46 +03:00
ZyX
58e34e8d99 eval/typval: Allow NULL dict as tv_dict_get_callback() argument
Also removes NULL key input: tv_dict_find() does not allow this.
2017-03-29 10:08:46 +03:00
ZyX
f4256243db eval: Fix -Werror=unitialized from QB 2017-03-29 10:08:46 +03:00
ZyX
29bad04f9e eval: Do not supply S_LEN to strncmp
It may be a macro as well.
2017-03-29 10:08:46 +03:00
ZyX
8daf756fb6 unittests: Fix linter errors 2017-03-29 10:08:46 +03:00
ZyX
7826ee1c03 unittests: Add tv_get_string* tests 2017-03-29 10:08:46 +03:00
ZyX
e08b27ba4a unittests: Add tv_get number tests 2017-03-29 10:08:46 +03:00
ZyX
4536c064e4 unittests: Move tv_dict_add* tests to a proper describe() block 2017-03-29 10:08:46 +03:00
ZyX
49195063fd unittests: Add tv_check… tests 2017-03-29 10:08:46 +03:00
ZyX
389274bef7 unittests: Add tv_equal() tests 2017-03-29 10:08:46 +03:00
ZyX
630ff33dc1 unittests: Test locks section 2017-03-29 10:08:46 +03:00
ZyX
ed4948a933 unittests: Test tv_copy() 2017-03-29 10:08:46 +03:00
ZyX
f0bbd1e825 unittests: Add tests for tv_clear() 2017-03-29 10:08:46 +03:00
ZyX
e43de6bb3e unittests: Add test for tv_dict_set_keys_readonly 2017-03-29 10:08:45 +03:00
ZyX
368a61c525 unittests: Add tv_dict_copy tests 2017-03-29 10:08:45 +03:00
ZyX
218fa1d806 charset: Remove useless condition from vim_iswordc_tab 2017-03-29 10:08:45 +03:00
ZyX
8b9a1fbf7a unittests: Add tests for tv_dict_extend 2017-03-29 10:08:45 +03:00
ZyX
fa852e7cdc eval: Fix extend() behaviour with NULL lists and dictionaries
Ref #4615
Ref vim/vim#768
2017-03-29 10:08:45 +03:00
ZyX
4987850cac unittests: Add tv_dict_clear tests 2017-03-29 10:08:45 +03:00
ZyX
43e9fad1c8 eval: Use tv_is_func in place of ==VAR_FUNC||==VAR_PARTIAL
Also fixes same error as in vim/vim#1557
2017-03-29 10:08:45 +03:00
ZyX
270a3889af unittests: Add tv_dict_add* unit tests
Also fixes incorrect location of `tv_dict_add` function and three bugs in other 
functions:

1. `tv_dict_add_list` may free list it does not own (vim/vim#1555).
2. `tv_dict_add_dict` may free dictionary it does not own (vim/vim#1555).
3. `tv_dict_add_dict` ignores `key_len` argument.
2017-03-29 10:08:45 +03:00
ZyX
bc87d23c28 unittests: Add tests for dictionary indexing 2017-03-29 10:08:45 +03:00
ZyX
b222453c95 eval/typval: Refactor errors a bit: use emsgf always 2017-03-29 10:08:45 +03:00
ZyX
5ce6243241 unittests: Enable tv_list_join tests back
Unable to reproduce the problem on Mac OS X Sierra VPS, need to check whether it 
is reproducible on travis.
2017-03-29 10:08:45 +03:00
ZyX
52e226ff74 unittests: Disable tv_list_join test on Mac OS only 2017-03-29 10:08:45 +03:00
ZyX
f830243ff7 mbyte: Include os_defs.h in mbyte.h 2017-03-29 10:08:45 +03:00
ZyX
3bf87a5a6b eval: Do not use S_LEN as snprintf argument 2017-03-29 10:08:45 +03:00
ZyX
38dd81c136 eval/typval: Fix SEGV in test_alot.vim test 2017-03-29 10:08:45 +03:00
ZyX
faddd83db8 eval: Fix SEGV in test49 2017-03-29 10:08:45 +03:00
ZyX
6c622ed08b unittests: Add tv_dict_item_{add,remove} tests 2017-03-29 10:08:45 +03:00
ZyX
ffaf7c7521 unittests: Add tv_dict_item_{alloc,free} tests 2017-03-29 10:08:45 +03:00
ZyX
cdb1aa3e47 eval: Fix len argument to xstrlcat 2017-03-29 10:08:45 +03:00
ZyX
2c8ad27652 ascii: Readd DEL_STR define 2017-03-29 10:08:45 +03:00
ZyX
c6c48e8672 syntax: Fix linter error 2017-03-29 10:08:45 +03:00
ZyX
78a0de2c1b eval/typval: Fix -Werror=return-type 2017-03-29 10:08:45 +03:00
ZyX
4c3be98db9 unittests: Add tv_dict_watcher_{add,remove} tests 2017-03-29 10:08:45 +03:00
ZyX
140174669e unittests: Run tv_list_join tests in case it stopped failing 2017-03-29 10:08:45 +03:00
ZyX
6aa6e50075 eval: Fix linter errors 2017-03-29 10:08:45 +03:00
ZyX
506b938947 *: Make some more things const and with length 2017-03-29 10:08:44 +03:00
ZyX
3025431c81 eval: Make sure that v:_null_dict does not crash dictwatcher*()
Ref #4615
2017-03-29 10:08:44 +03:00
ZyX
a56f2d27e3 eval: Make dictionary watchers work with empty keys
Looks like dict_notifications_spec test used to depend on some state which
should not be preserved. Changed all `setup()` calls to `before_each()` and
added necessary state in addition to changes required to test empty keys.

Note: unit tests for tv_dict_watcher* are still needed.
2017-03-29 10:08:44 +03:00
ZyX
1e3e302dc2 eval: Move part of dictwatcher* functions to eval/typval 2017-03-29 10:08:44 +03:00
ZyX
5239616297 functests: Fix buf_functions test on Windows 2017-03-29 10:08:44 +03:00
ZyX
4bcee96347 *: Fix some Windows-specific warnings
Also fixed an error in path_fnamecmp().
2017-03-29 10:08:42 +03:00
ZyX
9ed9af7e11 eval/typval: More const qualifiers in tv_dict* function signatures 2017-03-29 10:08:06 +03:00
ZyX
56e51033ab unittests: Add tests for tv_list_idx_of_item 2017-03-29 10:08:06 +03:00
ZyX
e5edf07ec4 unittests: Add tests for tv_list_find*() functions
Additional modifications:

- More `const` qualifiers in tested functions.
- `tv_list_find_str()` second argument is more in-line with other
  `tv_list_find*()` functions.
2017-03-29 10:08:06 +03:00
ZyX
b3672ae2fc eval/typval: Add tv_list_equal() tests, compare NULL lists equal 2017-03-29 10:08:06 +03:00
ZyX
4f9e784427 unittests: Test tv_list_join() 2017-03-29 10:08:06 +03:00
ZyX
cf45c7bb05 unittests: Fix tests crash
Tests crash at some point without
- `after_each(collectgarbage)` right before “typval.c list copy() copies list
  correctly and converts items” test.
- Commenting out that test.
- Adding `collectgarbage()` after the test (what actually this commit does).

Adding `collectgarbage()` to top-level `after_each` block right after
`restore_allocators` makes running this file crash even if it is run alone.
2017-03-29 10:08:06 +03:00
ZyX
7ceebacb3f eval/typval,tests: Fix extending list with itself, add tests
Adds unit test for tv_list_extend and regression test for extend() VimL
function.
2017-03-29 10:08:06 +03:00
ZyX
56e4c2f67e unittests: Test tv_list_concat() 2017-03-29 10:08:06 +03:00
ZyX
f80a00469f eval/typval: Make tv_list_concat handle NULL lists correctly
Fixes some FIXMEs in eval/null_spec.lua.
2017-03-29 10:08:06 +03:00
ZyX
82e6cac5f9 functests: Add null_spec.lua from #4615
For now it is full of FIXMEs and tests for incorrect behaviour. Sorted out to
have FIXMEs in one place, commented crashing tests in other and correctly
working tests in the third one.
2017-03-29 10:08:06 +03:00
ZyX
9898f36aa3 unittests: Test tv_list_copy
Also found some bugs:

1. var_item_copy() always fails to copy v:_null_list and v:_null_dict. Fixing
   this should mean fixing `deepcopy(v:_null_list)` which should’ve been, but
   was not listed in #4615. This also fixes `deepcopy(v:_null_dict)`.
2. var_item_copy() crashes when trying to copy NULL string with `conv != NULL`.
3. `conv` argument is ignored when copying list unless `deep` is true, but it
   was not reflected in documentation.
4. `tv_dict_item_alloc_len()` allocated more memory then needed.
5. typvalt2lua was not able to handle self-referencing containers.
2017-03-29 10:08:06 +03:00
ZyX
9b8beaff02 unittests: Add tests for tv_list_insert*()/…append*() functions 2017-03-29 10:08:06 +03:00
ZyX
be360d8841 unittests: Add tests for tv_list_insert() 2017-03-29 10:08:06 +03:00
ZyX
d2639e1e1d unittests: Add tests for list watchers and list alloc/free/unref 2017-03-29 10:08:06 +03:00
ZyX
a394167177 unittests: Test tv_list_item_\* functions
To check that memory is free()d correctly.
2017-03-29 10:08:06 +03:00
ZyX
a32db8ed19 eval/typval: Add missing includes, also add a script to find them
Contains unfinished attempt to integrate IWYU (ref #549). To finish it different
job should be done, specifically:

- Instead of feeding IWYU with modified file a mirror source tree should be
  created with the help of CMake which will contain modified sources. This
  solves the problem with IWYU thinking that `*.generated.h` headers should be
  included in place of `*` headers.
- Build IWYU as all other third-party utilities.
- Make modified sources avoid problems with `nvim/func_attr.h` includes and
  various related tricks.

Current script may only be used for manual checks like this:

    ./scripts/check-includes.py \
        --generated-includes-dir build/include \
        --generated-includes-dir build/src/nvim/auto \
        --file src/nvim/eval/typval.c \
        -- -Isrc -Ibuild/include -Ibuild/src/nvim/auto \
           -DINCLUDE_GENERATED_DECLARATIONS

(it is also somewhat fine with `--file src/nvim/eval/typval.h`). I have no idea
why (I mean, why developer think that these lines are needed, why they are
suggested is pretty obvious: because there is typedef which mentions them before
structs are defined), but for typval.h it reports, among other things, that it
should add lines

    struct dictvar_S;
    struct listitem_S;
    struct listvar_S;
    struct listwatch_S;
2017-03-29 10:08:06 +03:00
ZyX
2ad4fba46d eval: Move copy_tv to eval/typval 2017-03-29 10:08:06 +03:00
ZyX
8b0fa64ed3 message: Remove incorrect assertion
It was there only to prove that *now* `len` argument is not used to forbid 
putting message into history (i.e. that Neovim behaviour did not change). After 
this commit it should be possible to use msg_puts_attr_len with len>=0 to put 
message into history should new code need this.
2017-03-29 10:08:06 +03:00
ZyX
40feac6efc message: Revise maxlen argument in msg_puts_attr_len
`attr` argument is enough to forbid putting message in history. Also forbid 
strings with NUL before `len` just in case (it appears that this does not ever 
happen).
2017-03-29 10:08:06 +03:00
ZyX
3a3816c990 cmake: Use CMAKE_CURRENT_LIST_DIR and remove vars used only once 2017-03-29 10:08:06 +03:00
ZyX
86fc4580b8 eval: Fix max_min functions
Found two bugs:

1. Multiple unneeded error messages, vim/vim#1039.
2. Unformatted error string, vim/vim#1040.
2017-03-29 10:08:06 +03:00
ZyX
c4fe656fef typval.h: Allow non-var expressions in TV_DICT_ITER first argument 2017-03-29 10:08:06 +03:00
ZyX
6cc3d59ec8 misc1: Refactor ask_yesno() 2017-03-29 10:08:06 +03:00
ZyX
31a3158d0b eval: Make sort always stable
Should fix test failures on QB:

    20:00:51,837 INFO  - not ok 420 - sort() sorts “wrong” values between -0.0001 and 0.0001, preserving order
    20:00:51,837 INFO  - # test/functional/eval/sort_spec.lua @ 21
    20:00:51,837 INFO  - # Failure message: test/functional/eval/sort_spec.lua:39: Expected objects to be the same.
    20:00:51,837 INFO  - # Passed in:
    20:00:51,837 INFO  - # (string) '[-1.0e-4, v:true, v:false, v:null, function('tr'), {'a': 42}, 'check', [], 1.0e-4]'
    20:00:51,837 INFO  - # Expected:
    20:00:51,837 INFO  - # (string) '[-1.0e-4, function('tr'), v:true, v:false, v:null, [], {'a': 42}, 'check', 1.0e-4]'
    20:00:51,837 INFO  - # stack traceback:
    20:00:51,837 INFO  - #     test/functional/eval/sort_spec.lua:39: in function <test/functional/eval/sort_spec.lua:22>
    20:00:51,837 INFO  - #
2017-03-29 10:08:06 +03:00
ZyX
5df35297f8 eval: Remove eval_expr() completely 2017-03-29 10:08:05 +03:00
ZyX
c8e63a8db8 eval: Move remaining get_tv_string* functions to eval/typval.c 2017-03-29 10:08:05 +03:00
ZyX
50ebd1dff5 eval: Move free_tv to eval/typval.h, remove most of its usages 2017-03-29 10:08:05 +03:00
ZyX
233b0c93bb eval: Move get_tv_number[_chk] to eval/typval.c 2017-03-29 10:08:05 +03:00
ZyX
1b3e13da5b eval: Refactor get_tv_lnum_buf 2017-03-29 10:08:05 +03:00
ZyX
7ee5cc7429 eval: Move get_tv_lnum and get_tv_float to eval/typval.h
Additionally

- Rename former tv_get_float to tv_get_float_chk due to name conflict (former
  get_tv_float is better suited for being tv_get_float).
- Add E907 error to get_tv_float() and test that it is being raised when
  appropriate.
2017-03-29 10:08:05 +03:00
ZyX
949f09bdbb eval: Move get_tv_string_buf() to eval/typval.c 2017-03-29 10:08:05 +03:00
ZyX
28dafe3ff0 eval,*: Move get_tv_string to typval.c
Function was renamed and changed to return `const char *`.
2017-03-29 10:08:05 +03:00
ZyX
5cdf7177ec eval: Move get_float_arg to typval.h
Assuming `inline` is there for a reason, so it is kept and function was moved to
typval.h and not to typval.c which does not have problems with #including
message.h.
2017-03-29 10:07:43 +03:00
ZyX
2dcfc439b2 eval: Split and move dict_add_nr_str to typval.c
Function was split into tv_dict_add_nr() and tv_dict_add_str().
2017-03-29 10:07:43 +03:00
ZyX
210342d795 eval: Move dict_add_list and dict_add_dict to typval.c 2017-03-29 10:07:43 +03:00
ZyX
983a5532ca eval: Move dict_set_keys_readonly to typval.c 2017-03-29 10:07:43 +03:00
ZyX
ecff8387f4 eval: Move get_dict_callback to typval.c 2017-03-29 10:07:43 +03:00
ZyX
54bd2e8b73 eval: Make setmatches() return -1 in case of some failures 2017-03-29 10:07:43 +03:00
ZyX
e18a578308 *: Move some dictionary functions to typval.h and use char*
Also fixes buffer reusage in setmatches() and complete().
2017-03-29 10:07:42 +03:00
ZyX
50a48f2a0e functests: Add tests for some *buf* functions 2017-03-29 10:05:06 +03:00
ZyX
fb146e80aa eval: Split eval.c into smaller files 2017-03-29 10:05:06 +03:00
Justin M. Keyes
18e7d55200 terminal.c:redraw(): Avoid invalid cursor col (#6379)
Removed the call to validate_cursor() because mb_check_adjust_col() is
already called in adjust_topline().

Closes #6378
References #6203

https://s3.amazonaws.com/archive.travis-ci.org/jobs/215498258/log.txt

    [  ERROR   ] ...ovim/neovim/test/functional/terminal/scrollback_spec.lua @ 386: 'scrollback' option set to 0 behaves as 1 (10621.17 ms)
    ==================== File /home/travis/build/neovim/neovim/build/log/ubsan.12836 ====================
    = =================================================================
    = ==12836==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x62100002cd00 at pc 0x000000eafe90 bp 0x7ffc8661fe50 sp 0x7ffc8661fe48
    = READ of size 1 at 0x62100002cd00 thread T0
    =     #0 0xeafe8f in utf_head_off /home/travis/build/neovim/neovim/src/nvim/mbyte.c:1457:7
    =     #1 0x6b890e in getvcol /home/travis/build/neovim/neovim/src/nvim/charset.c:1169:15
    =     #2 0x6bc777 in getvvcol /home/travis/build/neovim/neovim/src/nvim/charset.c:1336:5
    =     #3 0xfc067b in curs_columns /home/travis/build/neovim/neovim/src/nvim/move.c:730:5
    =     #4 0xfbc8db in validate_cursor /home/travis/build/neovim/neovim/src/nvim/move.c:510:5
    =     #5 0x14479ed in setcursor /home/travis/build/neovim/neovim/src/nvim/screen.c:6363:5
    =     #6 0x17fe054 in redraw /home/travis/build/neovim/neovim/src/nvim/terminal.c:1175:5
    =     #7 0x17f95e4 in terminal_enter /home/travis/build/neovim/neovim/src/nvim/terminal.c:392:3
    =     #8 0x70eb2b in edit /home/travis/build/neovim/neovim/src/nvim/edit.c:1300:7
    =     #9 0x11097d1 in normal_finish_command /home/travis/build/neovim/neovim/src/nvim/normal.c:947:13
    =     #10 0x1081191 in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1138:3
    =     #11 0x170b813 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:58:26
    =     #12 0x103631b in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:464:3
    =     #13 0xdfb7a8 in main /home/travis/build/neovim/neovim/src/nvim/main.c:552:3
    =     #14 0x2b8a3c85bf44 in __libc_start_main /build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:287
    =     #15 0x447b25 in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x447b25)
    =
    = 0x62100002cd00 is located 0 bytes to the right of 4096-byte region [0x62100002bd00,0x62100002cd00)
    = allocated by thread T0 here:
    =     #0 0x4f1e98 in malloc (/home/travis/build/neovim/neovim/build/bin/nvim+0x4f1e98)
    =     #1 0xf28774 in try_malloc /home/travis/build/neovim/neovim/src/nvim/memory.c:84:15
    =     #2 0xf28934 in xmalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:118:15
    =     #3 0xec7be8 in mf_alloc_bhdr /home/travis/build/neovim/neovim/src/nvim/memfile.c:646:17
    =     #4 0xec58d4 in mf_new /home/travis/build/neovim/neovim/src/nvim/memfile.c:297:12
    =     #5 0xeda8a8 in ml_new_data /home/travis/build/neovim/neovim/src/nvim/memline.c:2697:16
    =     #6 0xed7beb in ml_open /home/travis/build/neovim/neovim/src/nvim/memline.c:349:8
    =     #7 0x643fcd in open_buffer /home/travis/build/neovim/neovim/src/nvim/buffer.c:109:7
    =     #8 0xa7038c in do_ecmd /home/travis/build/neovim/neovim/src/nvim/ex_cmds.c:2483:24
    =     #9 0xb5bb49 in do_exedit /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:6839:9
    =     #10 0xb7b6d8 in ex_edit /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:6767:3
    =     #11 0xb2a598 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2208:5
    =     #12 0xb08f47 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:602:20
    =     #13 0x109997b in nv_colon /home/travis/build/neovim/neovim/src/nvim/normal.c:4492:18
    =     #14 0x1081188 in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1135:3
    =     #15 0x170b813 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:58:26
    =     #16 0x103631b in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:464:3
    =     #17 0xdfb7a8 in main /home/travis/build/neovim/neovim/src/nvim/main.c:552:3
    =     #18 0x2b8a3c85bf44 in __libc_start_main /build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:287
    =
    = SUMMARY: AddressSanitizer: heap-buffer-overflow /home/travis/build/neovim/neovim/src/nvim/mbyte.c:1457:7 in utf_head_off
    = Shadow bytes around the buggy address:
    =   0x0c427fffd950: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =   0x0c427fffd960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =   0x0c427fffd970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =   0x0c427fffd980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =   0x0c427fffd990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    = =>0x0c427fffd9a0:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9f0: 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
    =   Heap right redzone:      fb
    =   Freed heap region:       fd
    =   Stack left redzone:      f1
    =   Stack mid redzone:       f2
    =   Stack right redzone:     f3
    =   Stack partial redzone:   f4
    =   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
    = ==12836==ABORTING
    =====================================================================================================
    ./test/helpers.lua:82: assertion failed!

    stack traceback:
    	./test/helpers.lua:82: in function 'check_logs'
    	./test/functional/helpers.lua:643: in function <./test/functional/helpers.lua:642>
2017-03-29 02:13:50 +02:00
lonerover
e86042ae17 vim-patch:7.4.2343 and mark NA patches (#6384)
vim-patch:7.4.2343

Problem:    Too many old file tests.
Solution:   Turn several into new style tests. (Yegappan Lakshmanan)

53f1673cd9
2017-03-29 01:30:54 +02:00
Samuel Catherasoo
b9e7ab1484 refactor/single-include: charset.h (#6385) 2017-03-29 01:21:30 +02:00
Justin M. Keyes
6fbcbebae0 win: health/provider.vim: check with .exe extension
Also fix `python_multiple` comparison.
2017-03-28 01:49:36 +02:00
Justin M. Keyes
9d200cd0a3 getcompletion("cmdline") (#6376)
Closes #5823
2017-03-27 21:04:52 +02:00
Daniel Hahler
595acbbc42 rplugin.vim: GetManifestPath(): be more explicit (#6361) 2017-03-27 16:28:05 +02:00
Justin M. Keyes
72c29895e0 Merge #6375 from justinmk/check-single-includes 2017-03-27 15:16:17 +02:00
Justin M. Keyes
88124dfebc build: Prefix check-single-includes artifacts.
The previous naming scheme could conflict with the test fixture
artifacts from `test/functional/fixtures/`, which also produce
`foo-test` artifacts.
2017-03-27 14:44:14 +02:00
Justin M. Keyes
e20e9645b2 build: Rename NEOVIM_* to NVIM_* 2017-03-27 14:27:20 +02:00
Eiichi NISHINA
62774e4356 ci: Check that #include "*.h" works as a single include
Lesser form of include-what-you-use: at least guarantees that header
file did not forget to include something through some other included
file.

Activate run_single_includes_tests on CI.
Fix some IWYU violations.

References #5321
2017-03-27 13:51:05 +02:00
Jakob Schnitzer
7bc37ffb22 terminal: global 'scrollback' #6352
Make the 'scrollback' option work like most other buffer-local options:
- `:set scrollback=x` sets the global and local value
- `:setglobal scrollback=x` sets only the global default
- new terminal buffers inherit the global

Normal buffers are still always -1, and :setlocal there is an error.

Closes #6337
2017-03-27 13:43:20 +02:00
Justin M. Keyes
2b1398c31e Merge #6372 from lonerover/vim-7.4.2307 2017-03-27 13:16:17 +02:00
lonerover
9cd7e19904 vim-patch:7.4.2334
Problem:    On MS-Windows test_getcwd leaves Xtopdir behind.
Solution:   Set 'noswapfile'. (Michael Soyka)

1b0c2fcf6e
2017-03-27 12:19:14 +08:00
lonerover
85ba14af6a vim-patch:7.4.2330
Problem:    Coverity complains about not checking curwin to be NULL.
Solution:   Use firstwin to avoid the warning.

030cddc7ec
2017-03-27 12:19:14 +08:00
lonerover
20e7652b69 vim-patch:7.4.2307
Problem:    Several tests are old style.
Solution:   Turn them into new style tests. (Yegappan Lakshmanan)

cd055da370
2017-03-27 12:19:14 +08:00
raichoo
edc80f6b46 vim-patch:7.4.2357 (#6354)
Problem:    Attempt to read history entry while not initialized.
Solution:   Skip when the index is negative.

46643713dc
2017-03-26 23:15:53 +02:00
lonerover
f9a31e9850 vim-patch:7.4.2349 (#6368)
Problem:    Valgrind reports using uninitialzed memory. (Dominique Pelle)
Solution:   Check the length before checking for a NUL.

2321ca2a78
2017-03-26 19:04:57 +02:00
Yichao Zhou
43a99f77a8 highlight: :match should override 'list' (#6343)
Closes #4946
2017-03-26 13:04:20 +02:00
Justin M. Keyes
cf202b74db build: Do not ref libuv CMake target if USE_BUNDLED_LIBUV=OFF. (#6363)
CMake Warning: The dependency target "libuv" of target "luv-static" does
not exist. (CMP0046)

Closes #6355
2017-03-26 00:22:15 +01:00
Daniel Hahler
b60e5c85ad cmake: USE_BUNDLED_X instead of X_USE_BUNDLED (#6357) 2017-03-25 23:02:20 +01:00
Anmol Sethi
a346cb1d58 man.vim: call s:error in man#read_page (#6362)
The comment is incorrect, s:error does need to be called. I thought the
call was unnecessary because it didn't show any message for me but I had
shortmess+=F which was hiding the message.
2017-03-25 22:43:25 +01:00
Matthew Malcomson
098e91400e refactor: Remove allow_keys global (#6346)
* The allow_keys global is unused in nvim, remove it

* clint
2017-03-25 15:43:19 +01:00
Justin M. Keyes
0cd829161a Merge #6221 2017-03-25 00:16:33 +01:00
Justin M. Keyes
90ac8b09f5 fold.c: uppercase macros 2017-03-25 00:15:31 +01:00
James McCoy
d094a36e7c Merge pull request #6350 from jamessan/vim-8.0.0250
vim-patch:8.0.0250
2017-03-24 16:43:01 -04:00
James McCoy
2a6d44ca52 vim-patch:8.0.0250
Problem:    When virtcol() gets a column that is not the first byte of a
            multi-byte character the result is unpredictable. (Christian
            Ludwig)
Solution:   Correct the column to the first byte of a multi-byte character.
            Change the utf-8 test to new style.

0c0590d982

Closes #6269
2017-03-24 15:11:51 -04:00
Justin M. Keyes
38274051c0 Merge pull request #6323 from justinmk/vimpatches 2017-03-24 18:30:35 +01:00
Tommy Allen
a62ec4eb98 health.vim: tmux: Try -qvg and -qvgs (#6348) 2017-03-24 01:38:01 +01:00
Justin M. Keyes
7214d0bc84 XXX: ex_tabonly(): aucmd_win is not part of the window list.
During free_all_mem, somehow ex_tabonly() may free aucmd_win. But it
isn't fully destroyed (maybe autocmd_busy?). When win_free_all() tries
to free aucmd_win directly, it double-frees the sub-fields.

Tried unnsuccessfully to work around this by invoking `:tabonly!` with
autocmds disabled:

    diff --git a/src/nvim/memory.c b/src/nvim/memory.c
    index 58c01fbe7a12..91c845e94d22 100644
    --- a/src/nvim/memory.c
    +++ b/src/nvim/memory.c
    @@ -565,9 +565,9 @@ void free_all_mem(void)
       /* Close all tabs and windows.  Reset 'equalalways' to avoid redraws. */
       p_ea = false;
       if (first_tabpage->tp_next != NULL)
    -    do_cmdline_cmd("tabonly!");
    +    do_cmdline_cmd("noautocmd tabonly!");
       if (firstwin != lastwin)
    -    do_cmdline_cmd("only!");
    +    do_cmdline_cmd("noautocmd only!");

       /* Free all spell info. */
       spell_free_all();
2017-03-23 23:47:20 +01:00
Matthew Malcomson
a6c9c91841 vim-patch:8.0.0407 : filtering folds with marker method not tested
Problem:    Filtering folds with marker method not tested.
Solution:   Also set 'foldmethod' to "marker".
2017-03-23 15:55:57 +00:00
Matthew Malcomson
308a953e0b Fix wrap-around in 32 bit 2017-03-23 14:37:47 +00:00
Matthew Malcomson
b2b88423aa Robustly handle folds during a :move command
In order to re-order marks according to the :move command, do_move()
uses mark_adjust() in a non-standard manner. The non-standard action is
that it moves some marks *past* other marks. This doesn't matter for
marks, but mark_adjust() calls foldMarkAdjust() which simply changes
fold starts and lengths and doesn't have enough information to know that
other folds have to be checked and reordered.

The array of folds for each window are assumed to be in order of
increasing line number, and if this gets broken some folds can get
"lost".

There has been a previous patch to avoid this problem by deleting and
recalculating all folds in the window, but this comes at the cost of
closing all folds when executing :move, and doesn't cover the case of
manual folds.
This patch adds a new function foldMoveRange() specifically for the
:move command that handles reordering folds as well as simply moving
them. Additionally, we allow calling mark_adjust_nofold() that does the
same as mark_adjust() but doesn't affect any fold array.

Calling mark_adjust_nofold() should be done in the same manner as
calling mark_adjust(), but according changes to the fold arrays must be
done seperately by the calling function.

vim-patch:8.0.0457
vim-patch:8.0.0459
vim-patch:8.0.0461
vim-patch:8.0.0465
2017-03-23 14:37:47 +00:00
Jurica Bradarić
06ed7a189b vim-patch:7.4.2329 (#6341)
Problem:    Error for min() and max() contains %s. (Nikolay Pavlov)
Solution:   Pass the function name. (closes vim/vim#1040)

26b84339fd
2017-03-23 08:54:01 +01:00
raichoo
44e75eba30 vim-patch:7.4.2161 (#6340)
Problem:    Expression test fails without conceal feature.
Solution:   Only check "conceal" with the conceal feature.

7ab6defcaf
2017-03-22 21:57:20 +01:00
Björn Linse
f7aa1bfde6 Merge pull request #6335 from bfredl/mbyte_dead
mbyte: remove dead code
2017-03-22 19:49:07 +01:00
Justin M. Keyes
c398402f12 vim-patch:8.0.0307
Problem:    Asan detects a memory error when EXITFREE is defined. (Dominique
            Pelle)
Solution:   In getvcol() check for ml_get_buf() returning an empty string.
            Also skip adjusting the scroll position.  Set "exiting" in
            mch_exit() for all systems.

955f198fc5
2017-03-22 18:43:01 +01:00
Justin M. Keyes
830b31683e vim-patch:8.0.0502
Problem:    Coverity complains about possible NULL pointer.
Solution:   Add an assert(), let's see if this works on all systems.

a37ffaa5e0
2017-03-22 18:43:01 +01:00
Justin M. Keyes
41bffeacff vim-patch:8.0.0331
Problem:    Restoring help snapshot accesses freed memory. (Dominique Pelle)
Solution:   Don't restore a snapshot when the window closes.

343b8c0429
2017-03-22 18:43:01 +01:00
Justin M. Keyes
54f31187ba vim-patch:8.0.0482
Problem:    The setbufvar() function may mess up the window layout. (Kay Z.)
Solution:   Do not check the window to be valid if it is NULL.

2c90d51123
2017-03-22 18:43:01 +01:00
Justin M. Keyes
f58a593cea vim-patch:8.0.0483
Problem:    Illegal memory access when using :all. (Dominique Pelle)
Solution:   Adjust the cursor position right after setting "curwin".

f79225ed4f
2017-03-22 18:43:01 +01:00
Justin M. Keyes
2b32053559 test/legacy: Test_three_windows: rtp for :help 2017-03-22 18:43:00 +01:00
Justin M. Keyes
51bc9f243a ex_tabnext: Disallow "+NN" arg.
Need to do this explicitly because our implementation of getdigits() is
slightly different.
2017-03-22 18:43:00 +01:00
Justin M. Keyes
33858ccb9b vim-patch:8.0.0485
Problem:    Not all windows commands are tested.
Solution:   Add more tests for windows commands. (Dominique Pelle,
            closes vim/vim#1575) Run test_autocmd separately, it interferes with
            other tests.  Fix tests that depended on side effects.

4520d440c5
2017-03-22 18:43:00 +01:00
Justin M. Keyes
01bf78971c vim-patch:8.0.0172
Problem:    The command selected in the command line window is not executed.
            (Andrey Starodubtsev)
Solution:   Save and restore the command line at a lower level. (closes vim/vim#1370)

1d669c233c
2017-03-22 18:43:00 +01:00
Justin M. Keyes
b82e3358e0 vim-patch:8.0.0083
Problem:    Using freed memory with win_getid(). (Domenique Pelle)
Solution:   For the current tab use curwin.

8e63905263
2017-03-22 18:43:00 +01:00
Justin M. Keyes
9c8540edfd vim-patch:8.0.0159
References #5406

Problem:    Using a NULL pointer when using feedkeys() to trigger drawing a
            tabline.
Solution:   Skip drawing a tabline if TabPageIdxs is NULL. (Dominique Pelle)
            Also fix recursing into getcmdline() from the cmd window.

c695cec469
2017-03-22 18:43:00 +01:00
Justin M. Keyes
f06a691326 vim-patch:8.0.0037
Problem:    Get E924 when switching tabs. ()
Solution:   Use win_valid_any_tab() instead of win_valid(). (Martin Vuille,
            closes vim/vim#1167, closes vim/vim#1171)

0a9046fbcb
2017-03-22 18:43:00 +01:00
Justin M. Keyes
a24c6cc6a8 get_tabpage_arg: satisfy clang warning
vim-patch:8.0.0266
2017-03-22 18:43:00 +01:00
Justin M. Keyes
7e23ce6b4f lint 2017-03-22 18:42:59 +01:00
Justin M. Keyes
0f3afdaa1b vim-patch:8.0.0259
Problem:    Tab commands do not handle count correctly. (Ken Hamada)
Solution:   Add ADDR_TABS_RELATIVE. (Hirohito Higashi)

2f72c70657
2017-03-22 18:42:59 +01:00
Justin M. Keyes
386a5f379b test/legacy: Makefile Add missing tests
These tests aren't in test_alot.vim, so they need to be added to the
Makefile or they won't be run.
2017-03-22 18:42:59 +01:00
Justin M. Keyes
c99514c2a4 test/legacy: Run test_match, test_tabpage isolated
These are failing when run as a batch. Most likely some Vim runtime
patch fixed something, but we don't have it yet. Just isolate them for
now.

Also test_matchadd_conceal_utf8 (it's not there in Vim tree, either).
2017-03-22 18:42:59 +01:00
Justin M. Keyes
78a4c73cf0 vim-patch:7.4.2339
Problem:    Tab page test fails when run as fake root.
Solution:   Check 'buftype' instead of 'filetype'. (James McCoy, closes vim/vim#1042)

100f5c90f4
2017-03-22 18:42:59 +01:00
Justin M. Keyes
89abed7d85 vim-patch:8.0.0032
Problem:    Tests may change the input file when something goes wrong.
Solution:   Avoid writing the input file.

3e8474dd50
2017-03-22 18:42:59 +01:00
Justin M. Keyes
cd9fc4627e vim-patch:8.0.0049
Problem:    When a match ends in part of concealed text highlighting, it might
            mess up concealing by resetting prev_syntax_id.
Solution:   Do not reset prev_syntax_id and add a test to verify. (Christian
            Brabandt, closes vim/vim#1092)

2f97912800
2017-03-22 18:42:59 +01:00
Justin M. Keyes
5ee211770d vim-patch:8.0.0033
Problem:    Cannot use overlapping positions with matchaddpos().
Solution:   Check end of match. (Ozaki Kiichi) Add a test (Hirohito Higashi)

a6c27ee6db
2017-03-22 18:42:58 +01:00
Justin M. Keyes
929859ed81 vim-patch:7.4.2355
Problem:    Regexp fails to match when using "\>\)\?". (Ramel)
Solution:   When a state is already in the list, but addstate_here() is used
            and the existing state comes later, add the new state anyway.

16b3578f35
2017-03-22 18:42:58 +01:00
Justin M. Keyes
53ccd07fa1 lint 2017-03-22 18:42:58 +01:00
Justin M. Keyes
b0e34497b3 test/legacy: fix test_autocmd.vim
vim-patch:8.0.0487
2017-03-22 18:42:58 +01:00
Justin M. Keyes
2e9c1a9c4a vim-patch:8.0.0178
Problem:    test_command_count may fail when a previous test interferes, seen
            on MS-Windows.
Solution:   Run it separately.

9b73c4a215
2017-03-22 18:42:58 +01:00
Justin M. Keyes
10f6624f65 vim-patch:7.4.2328
Problem:    Crash when BufWinLeave autocmd goes to another tab page.
            (Hirohito Higashi)
Solution:   Make close_buffer() go back to the right window.
2017-03-22 18:42:56 +01:00
Justin M. Keyes
4a2e6f460d vim-patch:7.4.2341
Problem:    Tiny things.  Test doesn't clean up properly.
Solution:   Adjust comment and white space. Restore option value.
2017-03-22 18:42:17 +01:00
Justin M. Keyes
4c18670e91 vim-patch:7.4.2346
Problem:    Autocommand test fails when run directly, passes when run as
            part of test_alot.
Solution:   Add command to make the cursor move.  Close a tab page.
2017-03-22 18:42:17 +01:00
Justin M. Keyes
6a8bad0308 vim-patch:8.0.0019
Problem:    Test_command_count is old style.
Solution:   Turn it into a new style test. (Naruhiko Nishino)
            Use more assert functions.
2017-03-22 18:42:16 +01:00
Justin M. Keyes
165ba3e636 vim-patch:7.4.2324
Problem:    Crash when editing a new buffer and BufUnload autocommand wipes
            out the new buffer. (Norio Takagi)
Solution:   Don't allow wiping out this buffer. (partly by Hirohito Higashi)
            Move old style test13 into test_autocmd. Avoid ml_get error when
            editing a file.

e0ab94e712
2017-03-22 18:42:16 +01:00
Justin M. Keyes
ca853edb6f vim-patch:8.0.0177
Problem:    When opening a buffer on a directory and inside a try/catch then
            the BufEnter event is not triggered.
Solution:   Return NOTDONE from readfile() for a directory and deal with the
            three possible return values. (Justin M. Keyes, closes vim/vim#1375,
            closes vim/vim#1353)

e13b9afe12
2017-03-22 18:42:16 +01:00
Justin M. Keyes
b9e1289819 vim-patch:8.0.0486
Problem:    Crash and endless loop when closing windows in a SessionLoadPost
            autocommand.
Solution:   Check for valid tabpage.  (partly neovim/neovim#6308)

8c752bd6c4

Closes #6308
2017-03-22 18:42:16 +01:00
Björn Linse
1d8356a807 mbyte: remove dead code 2017-03-22 17:52:42 +01:00
Justin M. Keyes
a1732b46ab terminal: Avoid invalid cursor col (#6265)
Patch-by: oni-link <knil.ino@gmail.com>

Closes #6203

https://s3.amazonaws.com/archive.travis-ci.org/jobs/206794197/log.txt

References #3161

    [ RUN      ] ...d/neovim/neovim/test/functional/terminal/buffer_spec.lua @ 199: terminal buffer term_close() use-after-free #4393
    ./test/functional/helpers.lua:187: attempt to perform arithmetic on local 'written' (a nil value)

    stack traceback:
    	./test/functional/helpers.lua:187: in function 'nvim_feed'
    	./test/functional/helpers.lua:329: in function 'execute'
    	...d/neovim/neovim/test/functional/terminal/buffer_spec.lua:206: in function <...d/neovim/neovim/test/functional/terminal/buffer_spec.lua:199>

    [  ERROR   ] ...d/neovim/neovim/test/functional/terminal/buffer_spec.lua @ 199: terminal buffer term_close() use-after-free #4393 (199.47 ms)
    ==================== File /home/travis/build/neovim/neovim/build/log/ubsan.15466 ====================
    = =================================================================
    = ==15466==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x621000029101 at pc 0x000000ea7ba0 bp 0x7ffd5bb628c0 sp 0x7ffd5bb628b8
    = READ of size 1 at 0x621000029101 thread T0
    =     #0 0xea7b9f in utf_head_off /home/travis/build/neovim/neovim/src/nvim/mbyte.c:1637:7
    =     #1 0xeaaf53 in mb_adjustpos /home/travis/build/neovim/neovim/src/nvim/mbyte.c:1840:16
    =     #2 0xeaab48 in mb_adjust_cursor /home/travis/build/neovim/neovim/src/nvim/mbyte.c:1825:3
    =     #3 0x11000d0 in normal_finish_command /home/travis/build/neovim/neovim/src/nvim/normal.c:928:5
    =     #4 0x1077df1 in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1147:3
    =     #5 0x16ff943 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:58:26
    =     #6 0x102d8db in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:463:3
    =     #7 0xdf3398 in main /home/travis/build/neovim/neovim/src/nvim/main.c:540:3
    =     #8 0x2b973e8b4f44 in __libc_start_main /build/eglibc-oGUzwX/eglibc-2.19/csu/libc-start.c:287
    =     #9 0x447445 in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x447445)
    =
    = 0x621000029101 is located 1 bytes to the right of 4096-byte region [0x621000028100,0x621000029100)
    = allocated by thread T0 here:
    =     #0 0x4f17b8 in malloc (/home/travis/build/neovim/neovim/build/bin/nvim+0x4f17b8)
    =     #1 0xf1f374 in try_malloc /home/travis/build/neovim/neovim/src/nvim/memory.c:84:15
    =     #2 0xf1f534 in xmalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:118:15
    =     #3 0xebe6a8 in mf_alloc_bhdr /home/travis/build/neovim/neovim/src/nvim/memfile.c:646:17
    =     #4 0xebc394 in mf_new /home/travis/build/neovim/neovim/src/nvim/memfile.c:297:12
    =     #5 0xed1368 in ml_new_data /home/travis/build/neovim/neovim/src/nvim/memline.c:2704:16
    =     #6 0xece6ab in ml_open /home/travis/build/neovim/neovim/src/nvim/memline.c:349:8
    =     #7 0x6438ad in open_buffer /home/travis/build/neovim/neovim/src/nvim/buffer.c:109:7
    =     #8 0xa6ec8d in do_ecmd /home/travis/build/neovim/neovim/src/nvim/ex_cmds.c:2489:24
    =     #9 0xb5a0f9 in do_exedit /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:6723:9
    =     #10 0xb791f8 in ex_edit /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:6651:3
    =     #11 0xb28b43 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2198:5
    =     #12 0xb077a7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:601:20
    =     #13 0x10905db in nv_colon /home/travis/build/neovim/neovim/src/nvim/normal.c:4495:18
    =     #14 0x1077de8 in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1144:3
    =     #15 0x16ff943 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:58:26
    =     #16 0x102d8db in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:463:3
    =     #17 0xdf3398 in main /home/travis/build/neovim/neovim/src/nvim/main.c:540:3
    =     #18 0x2b973e8b4f44 in __libc_start_main /build/eglibc-oGUzwX/eglibc-2.19/csu/libc-start.c:287
    =
    = SUMMARY: AddressSanitizer: heap-buffer-overflow /home/travis/build/neovim/neovim/src/nvim/mbyte.c:1637:7 in utf_head_off
    stack traceback:
    	./test/helpers.lua:80: in function 'check_logs'
    	./test/functional/helpers.lua:639: in function <./test/functional/helpers.lua:638>

    [----------] 9 tests from /home/travis/build/neovim/neovim/test/functional/terminal/buffer_spec.lua (2263.12 ms total)
2017-03-22 14:49:37 +01:00
Justin M. Keyes
ef57ee23bd Merge #6312 from lonerover/vim-7.4.2255
vim-patch: 7.4.2255,7.42256
2017-03-22 12:32:52 +01:00
Justin M. Keyes
92d7cf4511 Merge #6331 from lonerover/vim-7.4.2283
vim-patch:7.4.2283,7.4.2296,7.4.2303
2017-03-22 11:42:17 +01:00
lonerover
114a18b935 vim-patch:7.4.2303
Problem:    When using "is" the mode isn't always updated.
Solution:   Redraw the command line. (Christian Brabandt)

779f2fc3a7
2017-03-22 15:36:10 +08:00
lonerover
c554b53040 vim-patch:7.4.2296
Problem:    No tests for :undolist and "U" command.
Solution:   Add tests. (Dominique Pelle)

c628fdcd46
2017-03-22 15:35:46 +08:00
John Szakmeister
56e400d800 vim_vsnprintf: fix conversion warning #6333
Re-apply fix from #6311 which was accidentally regressed in #6231.
2017-03-22 03:21:32 +01:00
lonerover
ab16c07584 vim-patch:7.4.2283
Problem:    Part of ":oldfiles" command isn't cleared. (Lifepillar)
Solution:   Clear the rest of the line. (closes 1018)

885c00eabe
2017-03-22 08:33:12 +08:00
Justin M. Keyes
7cc4e782a0 doc: Update missing headers. (#6330)
pi_* docs are considered standalone plugins so they don't follow this
convention.
2017-03-22 01:13:51 +01:00
Justin M. Keyes
ab16535580 Merge #6231 from jbradaric/vim-7.4.2266
vim-patch:7.4.2266,7.4.2280,7.4.2291
2017-03-22 00:29:58 +01:00
Jurica Bradaric
3e33025133 strings: Fix problems found during code review 2017-03-21 22:56:05 +01:00
Justin M. Keyes
82c67768fa doc: Replace "For Vim ... Last change ..." headers (#6328) 2017-03-21 17:08:19 +01:00
Justin M. Keyes
6baa669c10 vim-patch:7.4.2164 (#6326)
Problem:    It is not possible to use plugins in an "after" directory to tune
            the behavior of a package.
Solution:   First load plugins from non-after directories, then packages and
            finally plugins in after directories.
            Reset 'loadplugins' before executing --cmd arguments.

66459b7c98

vim-patch:7.4.2172
vim-patch:7.4.2169
vim-patch:7.4.2177
vim-patch:7.4.2178
vim-patch:7.4.2184
vim-patch:8.0.0050
vim-patch:8.0.0105
vim-patch:8.0.0400
vim-patch:8.0.0405

Closes #6034
2017-03-21 17:07:00 +01:00
James McCoy
5657bb9ea6 Merge pull request #6327 from lonerover/issue-#6319
[RFC] fix the behavior of CTRL-F with 'scrolloff' (#6319)
2017-03-21 10:12:02 -04:00
lonerover
7418adc143 move.c: add cursor adjustment for scrolloff (#6319) 2017-03-21 21:37:52 +08:00
lonerover
26d7757ccb vim-patch:7.4.2256
Problem:    Coverity complains about null pointer check.
Solution:   Remove wrong and superfluous error check.

db249f26ed
2017-03-21 21:16:11 +08:00
Justin M. Keyes
2611ba8abb Merge #6324 from justinmk/vim-patch-bc8801c9317eb
vim-patch.sh, vim-patch:bc8801c9317eb
2017-03-21 13:52:38 +01:00
Justin M. Keyes
cc421270ee vim-patch:bc8801c9317eb
Updated runtime files.

bc8801c931
2017-03-21 12:19:17 +01:00
Justin M. Keyes
d6797e2865 .gitignore: Do not ignore *.rej 2017-03-21 12:19:16 +01:00
Justin M. Keyes
03a04172ec scripts/vim-patch.sh: Remove "Last change ..." lines.
Also:
- fix ignoring doc/tags file
- use 12 chars of hash instead of 7
2017-03-21 12:19:16 +01:00
Jack Bracewell
66259e4c49 vim-patch:7.4.2293 (#6307)
The original patch makes all the modeline comments consistent, but these
have been removed in the neovim source. However there as a correction of
a comment included in the patch that we can use.

edf3f97ae2
2017-03-21 11:11:32 +01:00
Jurica Bradaric
c6c8e1e8cc version: Mark patch 2221 as applied.
It was implemented as a part of #3916.
2017-03-21 07:34:08 +01:00
Jurica Bradaric
cad9a76be2 vim-patch:7.4.2291
Problem:    printf() handles floats wrong when there is a sign.
Solution:   Fix placing the sign.  Add tests. (Dominique Pelle)

0418609534
2017-03-20 22:47:09 +01:00
Jurica Bradaric
6ca580be9b vim-patch:7.4.2280
Problem:    printf() doesn't handle infinity float values correctly.
Solution:   Add a table with possible infinity values. (Dominique Pelle)

e999782e36
2017-03-20 22:45:26 +01:00
Jurica Bradaric
b4cb5fa610 vim-patch:7.4.2266
Problem:    printf() test fails on Windows. "-inf" is not used.
Solution:   Check for Windows-specific values for "nan".  Add sign to "inf"
            when appropriate.

9992237a3e
2017-03-20 21:40:41 +01:00
Jurica Bradaric
4f69a8fb88 vim-patch:7.4.2242
Problem:    Timer test sometimes fails.
Solution:   Increase the maximum time for callback timer test.

17f1347b86
2017-03-20 21:15:56 +01:00
Jurica Bradaric
3558f89d22 vim-patch:7.4.2241
Problem:    Timer test sometimes fails.
Solution:   Increase the maximum time for repeating timer.

973365dcc4
2017-03-20 21:15:56 +01:00
Jurica Bradaric
5c2f1e29e3 vim-patch:7.4.2240
Problem:    Tests using the sleep time can be flaky.
Solution:   Use reltime() if available. (Partly by Shane Harper)

f267f8bdf7
2017-03-20 21:15:56 +01:00
Jurica Bradaric
420a9955fa version.c: Mark 7.4.2171 and 7.4.2181 as NA. 2017-03-20 21:15:56 +01:00
Jurica Bradaric
5b8ce2feed vim-patch:7.4.2180
Problem:    There is no easy way to stop all timers.  There is no way to
            temporary pause a timer.
Solution:   Add timer_stopall() and timer_pause().

b73598e2f0
2017-03-20 21:15:56 +01:00
Jurica Bradaric
8924e75f34 vim-patch:7.4.2170
Problem:    Cannot get information about timers.
Solution:   Add timer_info().

8e97bd74b5
2017-03-20 21:15:55 +01:00
Justin M. Keyes
df1e7b7eda Merge #6320 from jamessan/vim-8.0.0116
vim-patch:8.0.0116,8.0.0190,8.0.0195,8.0.0190,8.0.0223,8.0.0393
2017-03-20 20:20:35 +01:00
Drew Neil
ae16e4fa13 doc: remove "only available when compiled with +timers" (#6321) 2017-03-20 13:23:19 +01:00
James McCoy
a56615214d lint 2017-03-19 23:43:49 -04:00
James McCoy
097d04ac71 vim-patch:8.0.0393
Problem:    When the same tag appears more than once, the order is
            unpredictable. (Charles Campbell)
Solution:   Besides using a dict for finding duplicates, use a grow array for
            keeping the tags in sequence.

98e83b2956
2017-03-19 23:43:43 -04:00
James McCoy
d3f15f1e6d vim-patch:8.0.0223
Problem:    Coverity gets confused by the flags passed to find_tags() and
            warnts for an uninitialized variable.
Solution:   Disallow using cscope and help tags at the same time.

fffbf308dd
2017-03-19 23:42:15 -04:00
James McCoy
e1af49b425 vim-patch:8.0.0195
Problem:    Jumping to a tag that is a static item in the current file fails.
            (Kazunobu Kuriyama)
Solution:   Make sure the first byte of the tag key is not NUL. (Suggested by
            James McCoy, closes vim/vim#1387)

a9d23c2087
2017-03-19 23:42:14 -04:00
James McCoy
058516aaf9 vim-patch:8.0.0190
Problem:    Detecting duplicate tags uses a slow linear search.
Solution:   Use a much faster hash table solution. (James McCoy, closes vim/vim#1046)
            But don't add hi_keylen, it makes hash tables 50% bigger.

810f9c361c
2017-03-19 23:42:01 -04:00
Justin M. Keyes
091a99afd4 Merge #6318 from justinmk/pr6244
test/legacy: fix test_normal.vim
2017-03-20 00:47:27 +01:00
Justin M. Keyes
2f54d6927c test/legacy: fix test_normal.vim 2017-03-19 23:52:17 +01:00
raichoo
db128974fc vim-patch:7.4.2348
Problem:    Crash on exit when EXITFREE is defined. (Dominique Pelle)
Solution:   Don't access curwin when exiting.

9a27c7fde6
2017-03-19 21:14:11 +01:00
raichoo
99f2dc1341 vim-patch:8.0.0229
Problem:    When freeing a buffer the local value of the 'formatprg' option is
            not cleared.
Solution:   Add missing change.

24a2d416ec
2017-03-19 21:14:11 +01:00
raichoo
0f5c3f111a vim-patch:8.0.0179
Problem:    'formatprg' is a global option but the value may depend on the
            type of buffer. (Sung Pae)
Solution:   Make 'formatprg' global-local. (closes vim/vim#1380)

9be7c04e6c
2017-03-19 21:14:11 +01:00
raichoo
2ad25c0466 linter: make changes pass the linter 2017-03-19 21:14:11 +01:00
raichoo
86b1e7f583 vim-patch:7.4.2362
Problem:    Illegal memory access with ":1@". (Dominique Pelle)
Solution:   Correct cursor column after setting the line number.  Also avoid
            calling end_visual_mode() when not in Visual mode.

4930a76a03
2017-03-19 21:14:11 +01:00
raichoo
a4f20db08c vim-patch:8.0.0066
Problem:    when calling an operator function when 'linebreak' is set, it is
            internally reset before calling the operator function.
Solution:   Restore 'linebreak' before calling op_function(). (Christian
            Brabandt)

4a08b0dc4d
2017-03-19 21:14:11 +01:00
raichoo
88dd2e8a08 vim-patch:8.0.0064
Problem:    Normal test fails on MS-Windows.
Solution:   Don't try using an illegal file name.

eb828d01d9
2017-03-19 21:14:11 +01:00
raichoo
151605cacc vim-patch:8.0.0060
Problem:    When using an Ex command for 'keywordprg' it is escaped as with a
            shell command. (Romain Lafourcade)
Solution:   Escape for an Ex command. (closes vim/vim#1175)

426f375422
2017-03-19 21:14:11 +01:00
raichoo
707aea86bb vim-patch:7.4.2353
Problem:    Not enough test coverage for Normal mode commands.
Solution:   Add more tests. (Christian Brabandt)

2931f2a5df
2017-03-19 21:14:11 +01:00
raichoo
ae828982ce vim-patch:7.4.2347
Problem:    Crash when closing a buffer while Visual mode is active.
            (Dominique Pelle)
Solution:   Adjust the position before computing the number of lines.
            When closing the current buffer stop Visual mode.

c4a908e836
2017-03-19 21:14:11 +01:00
raichoo
4500b16f15 vim-patch:7.4.2336
Problem:    Running normal mode tests leave a couple of files behind.
            (Yegappan Lakshmanan)
Solution:   Delete the files. (Christian Brabandt)

df0db16cf7
2017-03-19 21:14:11 +01:00
raichoo
1e33c88685 vim-patch:7.4.2333
Problem:    Outdated comments in test.
Solution:   Cleanup normal mode test. (Christian Brabandt)

31845093b7
2017-03-19 21:14:11 +01:00
raichoo
e888864c28 vim-patch:7.4.2326
Problem:    Illegal memory access when Visual selection starts in invalid
            position. (Dominique Pelle)
Solution:   Correct position when needed.

d5824ce1b5
2017-03-19 21:14:11 +01:00
raichoo
42caeccce6 vim-patch:7.4.2322
Problem:    Access memory beyond the end of the line. (Dominique Pelle)
Solution:   Adjust the cursor column.

bc54f3f3fe
2017-03-19 21:14:11 +01:00
raichoo
afd8eacb4e vim-patch:7.4.2317
Problem:    Normal mode tests fail on MS-Windows.
Solution:   Do some tests only on Unix.  Set 'fileformat' to "unix".

0913a1089a
2017-03-19 21:14:11 +01:00
raichoo
b87cb77570 vim-patch:7.4.2315
Problem:    Insufficient testing for Normal mode commands.
Solution:   Add a big test. (Christian Brabandt, closes vim/vim#1029)

87bc3f7459
2017-03-19 21:14:11 +01:00
James McCoy
934137fb48 vim-patch:8.0.0116
Problem:    When reading English help and using CTRl-] the language from
            'helplang' is used.
Solution:   Make help tag jumps keep the language. (Tatsuki, test by Hirohito
            Higashi, closes vim/vim#1249)

6dbf66aa3e
2017-03-19 13:19:24 -04:00
Justin M. Keyes
0cab62ad6f Merge #6305 from lonerover/vim-7.4.2228
vim-patch:7.4.2228,7.4.2248
2017-03-19 12:05:03 +01:00
Björn Linse
6a68a922b8 clipboard: set v:register after startup (#5708)
Fixes #5697
2017-03-18 19:33:25 +01:00
Vadim A. Misbakh-Soloviov
bdcb2a38b3 readfile(): Remove "Reading from stdin..." #6298 2017-03-18 13:43:47 +01:00
lonerover
a5481957c6 vim-patch:7.4.2255
Problem:    The script that checks translations can't handle plurals.
Solution:   Check for plural msgid and msgstr entries.  Leave the cursor on
            the first error.

ec42059b78
2017-03-18 20:39:04 +08:00
lonerover
b65d5ff11b vim-patch:7.4.2248
Problem:    When cancelling the :ptjump prompt a preview window is opened for
            a following command.
Solution:   Reset g_do_tagpreview. (Hirohito Higashi)  Add a test.  Avoid that
            the test runner gets stuck in trying to close a window.

358308dd99
2017-03-18 18:10:23 +08:00
lonerover
700e13da82 vim-patch:7.4.2228
Problem:    Test files have inconsistant modelines.
Solution:   Don't set 'tabstop' to 2, use 'sts' and 'sw'.

9e4d8215d3
2017-03-18 18:08:20 +08:00
John Szakmeister
c6b3975774 vim_vsnprintf: fix conversion error #6311
This looks mostly like a case where the compiler that ships with Ubuntu
12.04 has gone a little too far: `fmt_spec` is actually a char, as are
the literals, so there's really no issue.
2017-03-18 03:45:54 +01:00
Matthew Malcomson
9abef7ded9 test/put_spec: 2x speedup (#6294)
Instead of helpers.clear() between each test, use execute('enew!')
and ensure the state that matters is reset between each test.
2017-03-18 01:59:51 +01:00
Tommy Allen
b6502b868e version.c: Add v prefix to NVIM_VERSION_MEDIUM (#6310) 2017-03-18 01:49:55 +01:00
Jack Bracewell
1de50acc41 vim-patch:7.4.2292 (#6304)
Problem:    Not all systems understand %F in printf().
Solution:   Use %f.

965ed14973
2017-03-17 18:30:18 +01:00
Jack Bracewell
147e115dd9 vim-patch:7.4.2249 (#6303)
Problem:    Missing colon in error message.
Solution:   Add the colon. (Dominique Pelle)

ba2099034f
2017-03-17 18:26:33 +01:00
Justin M. Keyes
62e14d6565 os_set_cloexec: Fix condition. #5986
Also: skip Test_undo_del_chars the right way. #6287
2017-03-17 18:14:24 +01:00
Jack Bracewell
2ea7bfc627 terminal: Support extra arguments in 'shell'. #4504
Tokenize p_sh if used as default in ex_terminal(). Previously p_sh was
used as the first arg in a list when calling termopen(), this would try
to call an untokenized version of shell, meaning if you had an argument
in 'shell':
    set shell=/bin/bash\ --login
the command would fail.

Helped-by: oni-link <knil.ino@gmail.com>

Closes #3999
2017-03-17 17:47:33 +01:00
Justin M. Keyes
0c1f783164 Merge #6087 from justinmk/defaults
defaults: 'ruler', 'showcmd', 'belloff=all'
2017-03-17 13:00:19 +01:00
raichoo
10045cddb6 vim-patch:7.4.2113 #6287
Problem:    Test for undo is flaky.
Solution:   Turn it into a new style test.  Use test_settime() to avoid
            flakyness.

170b10b421
2017-03-17 12:34:53 +01:00
Matthew Malcomson
f6946c68ae job-control: set CLOEXEC on pty processes. #5986
Before this change, new processes started with libuv prevented SIGHUP
from reaching pty processes (by keeping the ptmx file descriptor open).
2017-03-17 12:20:51 +01:00
Björn Linse
ad1884be0d Merge pull request #6296 from FriedSock/use_handle_get_buffer_refactor
Use handle_get_buffer for buflist_findnr
2017-03-17 09:18:51 +01:00
John Szakmeister
694edc5504 test: fix the unit test build on macOS Sierra (#6300)
We need to add the SDK includes to the preprocessing step, otherwise it
will fail to resolve the system includes such as sys/stat.h and fcntl.h.
2017-03-17 09:14:56 +01:00
Jack Bracewell
09583a791c Replace hashtab with handle buffer functions 2017-03-16 18:26:46 +00:00
Justin M. Keyes
1dbe7a4dec doc: handle_* function declarations 2017-03-16 18:44:10 +01:00
Justin M. Keyes
a90beeadbb defaults: 'showcmd', 'belloff', 'ruler'
- Vim "unix default" of 'noshowcmd' is serving few users. And it's
  inconsistent.
- 'ruler' and 'belloff=all' improve the out-of-the-box experience.
- Continue to use 'noshowcmd' and 'noruler' by default in the functional
  tests to keep them fast.

TODO: Add a "disable slow stuff" command or mapping to address the
use-case of a very slow terminal connection.
2017-03-16 18:44:10 +01:00
John Szakmeister
27e1b2dce4 Merge pull request #6292 from jszakmeister/fix-tempfile-test
unittests: avoid using pattern matching on file names
2017-03-16 08:41:06 -04:00
John Szakmeister
3c8d974f73 unittests: avoid using pattern matching on file names
The directory name could contain special characters that trips up the
matching used by find.  Instead, let's just make sure that the filename
starts with the directory name.
2017-03-16 06:58:15 -04:00
raichoo
50953f9661 version.c: mark NA patch (#6285) 2017-03-15 23:43:26 +01:00
Justin M. Keyes
40cc49c5da test/termclose: Avoid indeterminism (#6281) 2017-03-15 23:28:37 +01:00
raichoo
297e8d0fda version.c: mark NA patches (#6282) 2017-03-15 19:49:12 +01:00
Björn Linse
f4b8dbeeb2 Merge pull request #5540 from bfredl/api_since
allow specify api since field and more api compatibility checks
2017-03-15 17:46:07 +01:00
Björn Linse
7d28489a33 release.sh: add api metadata fixture if api level was bumped 2017-03-15 15:01:06 +01:00
Björn Linse
a5d03be7b8 api: bump api level to 2 2017-03-15 15:01:06 +01:00
Björn Linse
9500ecdda5 api: add detailed checks for compatibility and correct "since" value 2017-03-15 15:01:06 +01:00
Björn Linse
da6f4c146e api: implement FUNC_API_SINCE 2017-03-15 15:01:06 +01:00
Björn Linse
82f55503dd api: add api_level_1 fixure 2017-03-15 15:01:06 +01:00
Justin M. Keyes
ec4e84210b Merge #6254 'vim-patch:7.4.2135,7.4.2144,7.4.2151' 2017-03-15 14:10:56 +01:00
Justin M. Keyes
3b52e3c4c8 Merge #6252 from jamessan/vim-7.4.2069
vim-patch:7.4.2069,7.4.2101,7.4.2222,7.4.2223
2017-03-15 13:47:13 +01:00
lonerover
227859ea79 vim-patch:7.4.2264 (#6275)
Problem:    When adding entries to an empty quickfix list the title is reset.
Solution:   Improve handling of the title. (Yegappan Lakshmanan)

2b529bb626
2017-03-14 15:07:48 +01:00
Justin M. Keyes
36fd879b25 doc: eval.txt fixup, README.md 2017-03-13 15:50:50 +01:00
Justin M. Keyes
33d0637521 Merge #6268 from lonerover/vim-7.4.2208
vim-patch: 7.4.2208,7.4.2305
2017-03-13 14:12:38 +01:00
lonerover
76829898bd vim-patch:7.4.2305
Problem:    Marks, writefile and nested function tests are old style.
Solution:   Turn them into new style tests. (Yegappan Lakshmanan)

19a1669ffc
2017-03-13 20:24:48 +08:00
lonerover
ec4c12570c vim-patch:7.4.2208
Problem:    Test for mappings is old style.
Solution:   Convert the test to new style.

2d1a248762
2017-03-13 20:11:24 +08:00
Justin M. Keyes
3f555cce3d Merge #6261 from lonerover/vim-ac80999
vim-patch: ac80999,7.4.2185,7.4.2187,7.4.2196
2017-03-13 03:06:12 +01:00
Matthieu Coudron
71d4b81b4c vim-patch:8.0.0453 (#6266)
Problem:    Adding fold marker creates new comment.
Solution:   Use an existing comment if possible. (LemonBoy, closes vim/vim#1549)

025a6b708a
2017-03-13 01:54:35 +01:00
Justin M. Keyes
c42aebf23e Merge #6264 'coverity fixes' 2017-03-12 20:18:55 +01:00
raichoo
b45ddf731b terminal: disable 'list' by default (#6246) 2017-03-12 22:42:22 +01:00
Justin M. Keyes
bf5110266c Merge #6262 from justinmk/dirchanged
DirChanged fixes
2017-03-12 21:01:04 +01:00
Justin M. Keyes
c5e61b41a5 DirChanged: avoid redundant events on 'autochdir' 2017-03-12 15:45:50 +01:00
Justin M. Keyes
d9fcbc2cfb DirChanged: trigger when switching scopes
Closes #6054
2017-03-12 14:39:32 +01:00
Justin M. Keyes
99a1a58c66 DirChanged: Publish _after_ updating win/tab CWD.
So getcwd() works correctly during DirChanged event.

Closes #6260
2017-03-12 14:39:32 +01:00
Sander Bosma
10a5825b95 coverity/155507: remove condition where both branches were identical
`keylen` was always set to 0 from both branches of an if-statement. This
condition is removed, and the code is simplified based on the fact that
`keylen` is always 0 in this code. Also updated the surrounding comments,
some of which were outdated.
2017-03-12 14:18:13 +01:00
Justin M. Keyes
82117da5df tabpage_S: Name tp_localdir per convention. 2017-03-12 12:39:20 +01:00
Justin M. Keyes
c8f0f8fea6 Merge #6214 from ZyX-I/split-eval'/isolated-unittests
Run all unit tests in separate processes
2017-03-12 10:52:13 +01:00
lonerover
013a9f9a04 vim-patch:7.4.2196
Problem:    glob2regpat test doesn't test everything on MS-Windows.
Solution:   Add patterns with backslash handling.

91c5262b19
2017-03-12 11:40:38 +08:00
lonerover
a4b57c2089 vim-patch:7.4.2187
Problem:    glob2regpat test fails on Windows.
Solution:   Remove the checks that use backslashes.

7547a78446
2017-03-12 11:37:31 +08:00
lonerover
9f13983de2 vim-patch:7.4.2185
Problem:    Test glob2regpat does not test much.
Solution:   Add a few more test cases. (Dominique Pelle)

71dd9744cf
2017-03-12 11:36:12 +08:00
lonerover
ce6d2fbb61 vim-patch:ac80999
add missing test file

ac80999985
2017-03-12 11:33:49 +08:00
James McCoy
d72c177b2a lint 2017-03-11 20:32:39 -05:00
James McCoy
2ed2b1d505 vim-patch:7.4.2223
Problem:    Buffer overflow when using latin1 character with feedkeys().
Solution:   Check for an illegal character.  Add a test.

d3c907b5d2
2017-03-11 20:32:38 -05:00
James McCoy
eaf1f9b9dc vim-patch:7.4.2222
Problem:    Sourcing a script where a character has 0x80 as a second byte does
            not work. (Filipe L B Correia)
Solution:   Turn 0x80 into K_SPECIAL KS_SPECIAL KE_FILLER. (Christian
            Brabandt, closes vim/vim#728)  Add a test case.

6bff02eb53
2017-03-11 20:32:27 -05:00
James McCoy
564e9dc17f vim-patch:7.4.2101
Problem:    Looping over windows, buffers and tab pages is inconsistant.
Solution:   Use FOR_ALL_ macros everywhere. (Yegappan Lakshmanan)

2932359000
2017-03-11 20:32:09 -05:00
James McCoy
5674057e3a vim-patch:7.4.2069
Problem:    spell.c is too big.
Solution:   Split it in spell file handling and spell checking.

9ccfebddc3
2017-03-11 20:32:02 -05:00
ZyX
48e7a83447 unittests: Fix linter error 2017-03-12 04:20:31 +03:00
ZyX
def52ad668 tests: Add description of test directory structure and test env vars 2017-03-12 04:18:15 +03:00
ZyX
d559fe6e93 unittests: Allow running ffi.cdef in the main process 2017-03-12 03:14:34 +03:00
ZyX
a7f64ba517 unittests: Move filtering cdefs to main process 2017-03-12 03:02:14 +03:00
ZyX
bf68907778 unittests: Use more adequate names for some functions 2017-03-12 02:54:23 +03:00
ZyX
9d1b439fb7 tests: Allow lfs.attributes to be NULL when traversing FS 2017-03-12 00:25:55 +03:00
ZyX
8ef6cfa6ac unittests: Fix linter errors 2017-03-11 23:48:16 +03:00
ZyX
a54be846cf unittests: Update test/unit/message_spec.lua 2017-03-11 23:26:33 +03:00
ZyX
ec730daee9 unittests: Do not use which, add data to paths.lua.in instead 2017-03-11 23:23:50 +03:00
ZyX
ce12bda712 unittests: Always close all pipes 2017-03-11 23:23:49 +03:00
ZyX
e2a578f40d unittests: Do not import libnvim or headers in main process
Slows down unit tests much, but gets rid of as much preserved state as possible.
2017-03-11 23:23:49 +03:00
ZyX
9400466282 unittests: Check core dumps in after_each, like in functests 2017-03-11 23:23:49 +03:00
ZyX
12b062b2c8 unittests: Run all unit tests in their own processes
Used

    sed -r -i -e '/ helpers =/ s/$/\nlocal itp = helpers.gen_itp(it)/; s/^(\s*)it\(/\1itp(/' test/unit/**/*_spec.lua

to alter all tests. Locally they all run fine now.

Reasoning:

1. General: state from one test should not affect other tests.
2. Local: travis build is failing with something which may be an output of
   garbage collector. This should prevent state of the garbage collector from
   interferring as well.
2017-03-11 23:23:30 +03:00
ZyX
5898b42d82 unittests: Do not run failing test at all 2017-03-11 23:23:30 +03:00
ZyX
29ed5b3a39 unittests: Fix lint errors 2017-03-11 23:23:30 +03:00
ZyX
b442574862 unittests: Allow failing test to fail 2017-03-11 23:23:30 +03:00
ZyX
ff5dca6630 unittests: Log syscalls if requested 2017-03-11 23:23:30 +03:00
ZyX
1edb3ccc36 unittests: Use own bindings to libc syscall wrappers 2017-03-11 23:23:30 +03:00
ZyX
3adecd3ede unittests: Do not use syscall library: does not work well with cimport 2017-03-11 23:23:30 +03:00
ZyX
9f29a76cab unittests: Try using syscall library instead (ffi-based) 2017-03-11 23:23:30 +03:00
ZyX
b92d6aaf0d unittests: Pause garbage collector while executing tests
Temporary (?) workaround for currently failing check_alloc_log tests.
2017-03-11 23:23:30 +03:00
ZyX
82e5af85c1 unittests: Run tests in a separate process 2017-03-11 23:23:30 +03:00
Sander Bosma
e66c6dd9d5 coverity/155501: fix bug where P_NO_DEF_EXP was ignored 2017-03-11 19:09:55 +01:00
Sander Bosma
4ca8a69067 coverity/133900: intitialize scalar variable in struct 2017-03-11 19:09:17 +01:00
Justin M. Keyes
b2b15e6e13 win/package: nvim-qt v0.2.6 (#6258) 2017-03-11 16:00:26 +01:00
Thiago de Arruda
6493ffac1f contrib/ycm_extra_conf.py (#6257)
- Remove some unnecessary code: IsHeaderFile is no longer required, as the logic
  to find flags to headers is now built into YCM
- Add function to make paths in flags absolute: It seems YCM is not correctly
  resolving paths in flags to consider `build` as the compiler working
  directory.
- Update documentation.
2017-03-11 15:37:21 +01:00
Justin M. Keyes
fd27d5a70f test/scrollback: wiggle-room (#6256) 2017-03-11 14:46:35 +01:00
@equalsraf
c5edde90cc win: third-party: win32yank v0.0.3 (#6255)
Fixes trailing newline bug when pasting text in Windows.

References:
https://github.com/equalsraf/neovim-qt/issues/218
https://github.com/equalsraf/neovim-qt/issues/253
2017-03-11 14:10:19 +01:00
Daniel Hahler
eb8cbfc8f5 vim-patch:8.0.0068 (#6243)
Problem:    Checking did_throw after executing autocommands is wrong. (Daniel
            Hahler)
Solution:   Call aborting() instead, and only when autocommands were executed.

21662be221
2017-03-11 13:56:23 +01:00
Justin M. Keyes
d1afd434f3 rplugin: Call s:LoadRemotePlugins() on startup.
Dispense with the FuncUndefined/CmdUndefined quasi-optimization.
If there are no rplugins, plugin/rplugin.vim takes less than 1ms.

Closes #5821
Closes #6250

Helped-by: Qiming zhao <chemzqm@gmail.com>
2017-03-11 12:26:22 +01:00
lonerover
2ecab2193d vim-patch:7.4.2151
Problem:    Quickfix test fails on MS-Windows.
Solution:   Close the help window. (Christian Brabandt)

cf25fdb8f1
2017-03-11 19:07:05 +08:00
lonerover
6311ec3a63 vim-patch:7.4.2144
Problem:    On MS-Windows quickix does not handle a line with 1023 bytes
            ending in CR-LF properly.
Solution:   Don't consider CR a line break. (Ken Takata)

796aa9c804
2017-03-11 19:02:10 +08:00
lonerover
3de3340132 vim-patch:7.4.2135
Problem:    Various tiny issues.
Solution:   Update comments, white space, etc.

89eaa4185e
2017-03-11 18:26:03 +08:00
raichoo
1743df82f9 'cpoptions': "_" flag to toggle cw behaviour #6235
`cw` and `cW` behave like `ce` and `cE` respectively. This is
inconsistent compared to `dw` and `dW`.
Introduce a new cpoptions flag "_" to toggle the Vi behavior.

Closes #6234
Patch-by: Christian Brabandt <cblists@256bit.org>

References:
https://github.com/chrisbra/vim-mq-patches/blob/master/cpo_changeword
https://groups.google.com/d/msg/vim_use/aaBqT6ECkA4/ALf4odKzEDgJ
https://groups.google.com/d/msg/vim_dev/Dpn3xtUF16I/T6JcOPKN6usJ
http://www.reddit.com/r/vim/comments/26nut8/why_does_cw_work_like_ce/
2017-03-10 19:24:04 +01:00
Gavin Thomas Claugus
59ea30adda version.c: mark NA patches (#6242)
Signed-off-by: Gavin Thomas Claugus <gclaugus@gmail.com>
2017-03-10 00:19:42 +01:00
Justin M. Keyes
087acd79f8 test/let_spec: self-referencing List. (#6228)
Regression test coverage for #6070.
2017-03-08 03:23:40 +01:00
Jurica Bradarić
58b5e14387 vim-patch:7.4.2299 (#6232)
Problem:    QuickFixCmdPre and QuickFixCmdPost autocommands are not always
            triggered.
Solution:   Also trigger on ":expr", ":cbuffer", etc. (Yegappan Lakshmanan)

04c4ce650f
2017-03-07 23:31:15 +01:00
James McCoy
f613dd016a Merge pull request #6225 from jamessan/vim-7.4.2051
vim-patch:7.4.2051,7.4.2068,7.4.2097
2017-03-07 09:03:52 -05:00
Justin M. Keyes
70bbd5a7ef Merge #6222 from jbradaric/vim-7.4.2220
vim-patch:7.4.2220,7.4.2265
2017-03-07 14:07:43 +01:00
Jurica Bradaric
b9cea7f13f vim-patch:7.4.2265
Problem:    printf() isn't tested much.
Solution:   Add more tests for printf(). (Dominique Pelle)

76efafba2a
2017-03-07 08:06:05 +01:00
Matthew Malcomson
6fe677c108 api: nvim_buf_set_lines(): Avoid invalid ml_get. #6019
When the buffer that nvim_buf_set_lines() is changing is not in any vim
window, fix_cursor() leads to calling ml_get_buf() with an invalid line
number. The condition that fix_cursor() was called on was (buf ==
curbuf), but this is always true because of the call to
switch_to_win_for_buf() earlier in the function.

Instead this should be predicated on (save_curbuf.br_buf == NULL)
2017-03-07 01:29:08 +01:00
Justin M. Keyes
1215084676 Merge #6224 from justinmk/test-fish-backtick
test: backtick-expansion for `shell=fish`
2017-03-06 23:44:54 +01:00
James McCoy
532197b4f9 lint 2017-03-06 15:36:14 -05:00
James McCoy
52e56954c6 vim-patch:7.4.2097
Problem:    Warning from 64 bit compiler.
Solution:   use size_t instead of int. (Mike Williams)

d4f31dc454
2017-03-06 15:36:14 -05:00
James McCoy
4e3a2784ec vim-patch:7.4.2068
Problem:    Not all arguments of trunc_string() are tested.  Memory access
            error when running the message tests.
Solution:   Add another test case. (Yegappan Lakshmanan)  Make it easy to run
            unittests with valgrind.  Fix the access error.

b9644433d2
2017-03-06 15:36:09 -05:00
Jurica Bradaric
04b91d6b89 strings.c: Fix problems found during code review. 2017-03-06 21:35:48 +01:00
Jurica Bradaric
2f80360e9a vim-patch:7.4.2220
Problem:    printf() gives an error when the argument for %s is not a string.
            (Ozaki Kiichi)
Solution:   Behave like invoking string() on the argument. (Ken Takata)

e5a8f35b42
2017-03-06 21:35:48 +01:00
James McCoy
7217360e34 vim-patch:7.4.2051
Problem:    No proper testing of trunc_string().
Solution:   Add a unittest for message.c.

502ae4ba63
2017-03-06 15:09:40 -05:00
Justin M. Keyes
d1d35c9cfc test: backtick expansion #6218 2017-03-06 12:40:22 +01:00
raichoo
60fa3aa143 linter: make os_unix.c pass the linter 2017-03-06 13:18:52 +01:00
raichoo
8f0f1a76c2 make backtick-expansion work with shell=fish 2017-03-06 13:18:24 +01:00
Justin M. Keyes
483e8257e5 vim_getenv: $VIMRUNTIME fallback: ../share/nvim/runtime (#6223)
Do this on all systems, so that portable builds work everywhere. This
allows us to ship archives with this folder structure:

    bin/nvim
    share/nvim/runtime

then ./bin/nvim works without the user needing to explicitly set VIMRUNTIME.
2017-03-06 04:04:25 +01:00
Justin M. Keyes
e5be3aaaef health.vim: tmux $TERM, default-terminal 2017-03-06 03:17:40 +01:00
Justin M. Keyes
e32ec03d67 Merge #6202 from justinmk/tui-resize-hack
ui: Ameliorate TUI resize bug.
2017-03-05 23:24:47 +01:00
Tommy Allen
6777b6ecbc ui: Fix TUI resize bug
statusline still disappears in some cases, but this change is a net
improvement.

References #3929 #5692 #4884 #6157
2017-03-05 22:17:32 +01:00
Justin M. Keyes
a568816253 lint
You cannot escape clint...
2017-03-05 22:17:15 +01:00
James McCoy
a314f6d79f Merge pull request #6215 from jamessan/coverity-model
ci: Add Coverity modeling
2017-03-05 09:17:50 -05:00
Justin M. Keyes
6a56ac2eca Merge #6209 from Shougo/vim-8.0.0319
vim-patch: 8.0.0319, 8.0.0347
2017-03-05 10:28:21 +01:00
James McCoy
b0fb1f4540 ci: Add Coverity modeling
[ci skip]
2017-03-04 23:20:00 -05:00
Shougo Matsushita
cf0b344df1 vim-patch:8.0.0347
Problem:    When using CTRL-X CTRL-U inside a comment, the use of the comment
            leader may not work. (Klement)
Solution:   Save and restore did_ai. (Christian Brabandt, closes vim/vim#1494)

d099e03370
2017-03-05 12:02:42 +09:00
Shougo Matsushita
4303399c10 vim-patch:8.0.0319
Problem:    Insert mode completion does not respect "start" in 'backspace'.
Solution:   Check whether backspace can go before where insert started.
            (Hirohito Higashi)

190b04cdd9
2017-03-05 12:02:32 +09:00
Justin M. Keyes
32a9808bc5 win/package: Upgrade to neovim-qt v0.2.5 (#6213) 2017-03-04 21:50:43 +01:00
oni-link
3030ef825d terminal.c: Reset cursor postion when using termopen() (#6212)
After using 'termopen("echo") the current buffer content is changed,
but the cursor position of the current window is not updated.
Because of this, a call to 'mb_adjust_cursor()'  can lead to a
heap-buffer-overflow.

Fix this by resetting the cursor for the current window.

Fixes #3161
2017-03-04 20:12:57 +01:00
Justin M. Keyes
af63f32129 doc: quotes.txt was removed 2017-03-04 04:13:31 +01:00
Justin M. Keyes
8bbdef1fd8 buffer.c: enable -Wconversion #3744 2017-03-03 00:15:42 +01:00
Adam-K-P
165d525abd buffer.c: enable -Wconversion #3744
Closes #3744
2017-03-02 22:46:11 +01:00
Justin M. Keyes
b62f837395 terminal: Restore settings on same window only.
The window may have closed already, then `curwin` should not be altered.

Closes #6204
2017-03-02 13:32:29 +01:00
lonerover
8a10497ce6 vim-patch:7.4.1981 (#6192)
Problem:    No testing for Farsi code.
Solution:   Add a minimal test.  Clean up Farsi code.

ee2615af64
2017-03-02 12:47:35 +01:00
Justin M. Keyes
286aacb2aa Merge #6194 'filtering manually folded lines' 2017-03-02 00:19:06 +01:00
Matthew Malcomson
b1731fe1b5 vim-patch:8.0.0388
Fix a problem when filtering manually folded lines

When foldMarkAdjustRecurse() is called to adjust folds that start inside
the range of lines that are being moved and end outside that range, it
calculates `amount_after` for its recursive call incorrectly.
The calculation assumes that folds inside the changed range are being
deleted, but this is not always the case.

This means nested folds that start after the changed range of lines are
shifted an incorrect amount.

We fix this by calculating the `amount_after` differently if the folds
inside the changed range are not being deleted.
2017-03-02 00:18:00 +01:00
Justin M. Keyes
689e0daa95 vim-patch:8.0.0136
Problem:    When using indent folding and changing indent the wrong fold is
            opened. (Jonathan Fudger)
Solution:   Open the fold under the cursor a bit later. (Christian Brabandt)

54b2bfa399
2017-03-02 00:11:30 +01:00
Justin M. Keyes
3c740f7424 vim-patch:8.0.0135
Problem:    An address relative to the current line, ":.,+3y", does not work
            properly on a closed fold. (Efraim Yawitz)
Solution:   Correct for including the closed fold. (Christian Brabandt)

ded2782783
2017-03-02 00:08:51 +01:00
Justin M. Keyes
985bc6c6e0 doc/api.txt: Merge with api-funcs.txt
It's important that users have a single, easy-to-remember place for
reading about the API. So this commit changes gen_api_vimdoc.py so that
the generated section is appended to api.txt instead of creating
a separate document.

Also remove the section numbering and ToC: it's a maintenance cost, and
it will be unnecessary when #5169 is integrated.
2017-03-01 23:14:45 +01:00
Justin M. Keyes
2c408c0c94 Merge #6185 from justinmk/term-cursor
terminal: Keep cursor position; Disable 'cursorline'
2017-03-01 18:28:45 +01:00
Tommy Allen
4e4c785063 scripts: Annotate API functions in generated docs (#6199) 2017-03-01 17:55:34 +01:00
Justin M. Keyes
4306e5ae0c test: luacheck update
We pull luacheck HEAD, so this is a "catch up" commit to fix
newly-discovered errors.
2017-03-01 14:47:49 +01:00
Justin M. Keyes
3aedf9d669 terminal: Avoid unnecessary redraws. 2017-03-01 14:47:49 +01:00
Justin M. Keyes
857113ca8c terminal: Disable some options in terminal-mode.
In terminal-mode these options are nonsense because cursor is placed at
end of buffer to "follow" output.

Closes #2259
2017-03-01 14:47:49 +01:00
Justin M. Keyes
937e54f865 terminal: Keep cursor position.
Let the terminal dictate the normal-mode cursor position. This will be
disorienting sometimes, but it is closer to what users expect vs always
going to the last line.
2017-03-01 14:47:49 +01:00
Justin M. Keyes
504693ce66 Merge #6139 from justinmk/win32-runtime
win/package: runtime files
2017-03-01 14:41:58 +01:00
Tommy Allen
410da0f678 vim-patch:8.0.0390 (#6197)
Problem:    When the window scrolls horizontally when the popup menu is
            displayed part of it may not be cleared. (Neovim issue #6184)
Solution:   Remove the menu when the windows scrolled. (closes vim/vim#1524)

Fixes #6184
2017-03-01 14:08:05 +01:00
Justin M. Keyes
5c421080f8 win/package: runtime files
runtime/plugin/gui_shim.vim is from Neovim-Qt. This is a temporary
measure, we will add real UI events which obviate gui_shim.vim.

Closes #6145
2017-03-01 14:03:58 +01:00
Justin M. Keyes
500454227f win/package: cat.exe 2017-03-01 12:35:49 +01:00
Justin M. Keyes
2872e57af2 Merge #6191 from jamessan/vim-42ebd06
vim-patch:42ebd06,7.4.2098,6f1d9a0,7.4.2095
2017-02-28 09:57:46 +01:00
Matthieu Coudron
5ed753044d test: Refactor fold tests (#5993) 2017-02-28 09:34:02 +01:00
James McCoy
adc6e636fe vim-patch:7.4.2095
Problem:    Man test fails when run with the GUI.
Solution:   Adjust for different behavior of GUI.  Add assert_inrange().

61c04493b0

Only changes related to assert_inrange() were included, since we have a
distinct man plugin.
2017-02-27 21:40:16 -05:00
James McCoy
f3d8bc8b61 vim-patch:6f1d9a0
Updated runtime files.

6f1d9a096b

This was already included as 6ba3b85382,
but the vim-patch: tag didn't contain enough digits for vim-patch.sh to
notice it.
2017-02-27 20:58:14 -05:00
James McCoy
ad202b8401 vim-patch:7.4.2098
Problem:    Text object tests are old style.
Solution:   Turn them into new style tests. (James McCoy, closes vim/vim#941)

00b24be454
2017-02-27 20:52:42 -05:00
James McCoy
1371e19e2b vim-patch:42ebd06
Update runtime files.

42ebd06642
2017-02-27 20:49:01 -05:00
James McCoy
e0705021c1 Merge pull request #6190 from jamessan/vim-7.4.1991
vim-patch:7.4.1991,7.4.1992,7.4.1993,7.4.1994
2017-02-27 20:33:43 -05:00
Matthew Malcomson
86c2adc074 edit.c: CTRL-SPC: Insert previously-inserted text. #6090
Default Vim behavior of i_CTRL-<Space> is to insert the last-inserted
text and exit insert mode. :help i_CTRL-@

Before this commit that did not happen because insert_handle_key()
checks for NUL instead of checking for ' ' with a CTRL `mod_mask`.

I'm leaving the check for NUL despite the fact that at the moment that
key is never seen when using the terminal UI (not for C-Space, nor C-@).
This is because I assume it's still allowed for other front-ends to pass
NUL, but at the moment the terminal UI isn't.
2017-02-28 01:16:18 +01:00
Justin M. Keyes
28a6d4393d Merge #6148 from delftswa2017/clang-scan-fix-dead-stores
vim-patch:8.0.0353
2017-02-28 00:46:09 +01:00
James McCoy
1fa6d95c67 vim-patch:7.4.1994
Problem:    True-false test fails.
Solution:   Filter the dict to only keep the value that matters.

05e418d436
2017-02-27 15:11:23 -05:00
James McCoy
f863b23fd9 vim-patch:7.4.1993
Problem:    Not all TRUE and FALSE arguments are tested.
Solution:   Add a few more tests.

6bb450145e
2017-02-27 15:04:54 -05:00
James McCoy
2f5aee561e vim-patch:7.4.1992
Problem:    Values for true and false can be confusing.
Solution:   Update the documentation.  Add a test.  Make v:true evaluate to
            TRUE for a non-zero-arg.

e381d3d5e0
2017-02-27 15:00:18 -05:00
Anmol Sethi
c8ee0be745 man.vim: use 'eventignore' instead of :noautocmd #6149
We only need to ignore BufReadCmd (from runtime/plugin/man.vim).

Closes #6144
2017-02-27 18:16:37 +01:00
James McCoy
7046b9a78d Merge pull request #6121 from lonerover/vim-7.4.2046
vim-patch:7.4.2046
2017-02-27 17:57:28 -05:00
Matthieu Coudron
792fbed5f7 build: local.mk.example: doxygen target (#6187) 2017-02-27 23:51:45 +01:00
James McCoy
d290c13421 Merge pull request #6188 from jamessan/vim-7.4.2200
vim-patch:7.4.2200

Closes #5314
2017-02-27 14:35:57 -05:00
James McCoy
eb6651b7a9 vim-patch:7.4.1991
Problem:    glob() does not add a symbolic link when there are no wildcards.
Solution:   Remove the call to mch_getperm().

00efded106
2017-02-27 12:03:28 -05:00
James McCoy
a989851e3b lint 2017-02-27 11:41:52 -05:00
James McCoy
c9c3f92b49 vim-patch:7.4.2200
Problem:    Cannot get all information about a quickfix list.
Solution:   Add an optional argument to get/set loc/qf list(). (Yegappan
            Lakshmanan)

d823fa910c
2017-02-27 11:39:41 -05:00
James McCoy
be65fd88f4 Merge pull request #6186 from jamessan/base-vim-patch
vim-patch.sh: Bump base Vim version to 7.4.1980
2017-02-27 09:48:52 -05:00
James McCoy
0882ca50d8 vim-patch.sh: Bump base Vim version to 7.4.1980
All patches up through 7.4.1974 have been merged and 7.4.1975-1979 are
pending in a PR.

[ci skip]
2017-02-27 09:31:25 -05:00
Christian Stigen Larsen
6041fd7a86 build: Makefile: Try other cmake names, or override. #6163
Distributions like RHEL7 (yum) install CMake as `cmake3`.

Closes #6163
2017-02-27 14:28:15 +01:00
Justin M. Keyes
c318d8e672 Merge #6112 from ZyX-I/split-eval'/buf_get_changedtick
Better b:changedtick support
2017-02-27 10:29:46 +01:00
Justin M. Keyes
8c8ce1832e Merge #6111 from ZyX-I/split-eval'/os-fileio
Refactor writefile() and create more tests for it
2017-02-27 10:20:25 +01:00
Justin M. Keyes
e502cca010 Merge #6142 from justinmk/term-modifiable
terminal: 'modifiable'; 'scrollback'; follow output only if cursor is on last line
2017-02-27 09:59:58 +01:00
James McCoy
73a054d844 Merge pull request #6181 from jamessan/vim-8.0.0379
vim-patch:8.0.0379
2017-02-26 22:12:39 -05:00
James McCoy
69bfe14b79 vim-patch:8.0.0379
Problem:    CTRL-Z and mouse click use CTRL-O unnecessary.
Solution:   Remove stuffing CTRL-O. (James McCoy, closes vim/vim#1453)

74a47162a0
2017-02-26 14:20:54 -05:00
Justin M. Keyes
c484323dc6 terminal.c/redraw(): Remove cargo cult. 2017-02-26 13:00:02 +01:00
Justin M. Keyes
f7908b6f49 channel.c: logging 2017-02-26 13:00:02 +01:00
Justin M. Keyes
152921837e test: screen_setup(): Detect spawn failures, usage errors. 2017-02-26 13:00:01 +01:00
Justin M. Keyes
d90e5f5260 test: screen_setup(): Support cols parameter. 2017-02-26 13:00:01 +01:00
Justin M. Keyes
9dbda59715 test/window_split_tab_spec.lua: fixup
Make the test work after the "follows cursor" changes.
This "auto-resize" feature is going away soon, anyways.
2017-02-26 13:00:01 +01:00
Justin M. Keyes
4ceec30cd0 terminal: Follow output only if cursor is at end.
Closes #2257
Closes #2636
References #2683
2017-02-26 13:00:01 +01:00
Justin M. Keyes
e7bbd35c81 terminal: 'scrollback'
Closes #2637
2017-02-26 11:57:52 +01:00
Justin M. Keyes
300eca3d30 options: 'scrollback' 2017-02-26 11:57:52 +01:00
Justin M. Keyes
fedb8443d5 terminal: Allow undo and 'modifiable'.
Partial step towards #2637. Will crash if *all* lines are deleted.

Closes #2607
References #5431
2017-02-26 11:29:02 +01:00
Tommy Allen
7ea81fe443 terminal: Don't redraw the entire screen when resizing (#6167) 2017-02-26 10:21:44 +01:00
lonerover
0ef2b07d69 vim-patch:7.4.2230 (#6080)
Problem:    There is no equivalent of 'smartcase' for a tag search.
Solution:   Add value "followscs" and "smart" to 'tagcase'. (Christian
            Brabandt, closes vim/vim#712) Turn tagcase test into new style.

66e29d7112
2017-02-25 15:42:25 +01:00
ZyX
a85021068d *: Fix linter errors 2017-02-25 01:23:14 +03:00
ZyX
77ebe85be6 buffer: Hide one of the asserts from lua parser 2017-02-25 00:22:46 +03:00
ZyX
5f7d8f889c buffer: Provide an initializer for di_key 2017-02-24 20:14:01 +03:00
Justin M. Keyes
039c7ab607 ci: MIN_LOG_LEVEL=2 (#6169)
DEBUG_LOG_LEVEL is very noisy and causes a lot of disk activity.
It is not needed on CI.
2017-02-24 11:03:56 +01:00
ZyX
dfb28c524c buffer: Remove b:changedtick from b: before freeing b:
Avoids loosing b:changedtick value at `:bdelete`.
2017-02-24 05:10:31 +03:00
ZyX
fe30d8ccef memory: Free buffers after freeing variables
Avoids use-after-free crashes when compiling with -DEXITFREE.
2017-02-24 05:09:34 +03:00
ZyX
cd8f07cb75 eval: Do not allocate b:changedtick dictionary item 2017-02-24 02:47:43 +03:00
ZyX
9c1865c7f8 *: Fix linter errors 2017-02-23 19:48:41 +03:00
ZyX
858ac9d8e5 api: Make sure dict_set_var doesn’t edit read-only values
Fixes #6147
2017-02-23 19:48:41 +03:00
ZyX
8faa4af396 api: Rename dict_set_value to dict_set_var
Reasonings:
1. It is not used for anything, but scope dictionaries currenly. So there is no 
   need to generalize and split it into dict_set_var (which will contain some 
   scope-dictionary-specific checks) and dict_set_value (which will work for any 
   dictionary).
2. Check for key size is no longer valid for non-scope dictionaries: you *can* 
   use empty keys there. In scope dictionaries also, but you actually are not 
   supposed to store there anything, but variables.

Note that actually one may still do

    let b:[''] = 1

and “bypass” check for variable name. It won’t change what `echo b:` will show, 
but it may affect code which iterates over scope dictionary keys and sets them 
to something (if there is such code).
2017-02-23 19:48:41 +03:00
ZyX
6550caee50 functests: Destroy accidental folds in api/vim_spec 2017-02-23 19:48:41 +03:00
ZyX
f387de4ec0 eval: Remove incorrect workaround
Was replaced by the previous patch. Also fixes legacy test 055.
2017-02-23 19:48:41 +03:00
ZyX
d8a7e5fdbb eval: Forbid (un)locking b:changedtick
Port of vim-patch:8.0.0343
2017-02-23 19:48:41 +03:00
ZyX
9668d26a43 eval: Make sure islocked('b:.changedtick') does not error out
Port of vim-patch:8.0.0345
2017-02-23 19:48:41 +03:00
ZyX
9972db79c8 eval: Specify more precise len for var_check_ro in get_lval 2017-02-23 19:46:45 +03:00
ZyX
d5ab50a040 eval: Refactor var_check_ro, tv_check_lock and var_check_fixed
- They are no longer responble for using gettext.
- They now receive string length and use %.* format specifier in messages.
- And one less global: one of the error messages is never repeated.
2017-02-23 19:46:45 +03:00
ZyX
d820daf076 functests: Add some more tests 2017-02-23 19:46:45 +03:00
ZyX
7869b978e8 eval: Fix memory leak
Ref vim/vim#1497
2017-02-23 19:46:45 +03:00
ZyX
3277eff31a buffer: Forbid unletting b:changedtick 2017-02-23 19:46:45 +03:00
ZyX
e2fbbb292f eval: Refactor item_lock
If I am not mistaking, this commit should not change any functionality.
2017-02-23 19:46:45 +03:00
ZyX
f2c9fd312c eval: Make sure that b:changedtick may not be unlocked via :unlo b:var
It still may be unlocked by `:unlock b:.var`.
2017-02-23 19:46:44 +03:00
ZyX
908e53d98d functests: Add tests
Contains a number of FIXMEs.
2017-02-23 19:46:44 +03:00
ZyX
4f10d42f82 buffer: Bind b:changedtick to b:['changedtick'], remove special cases 2017-02-23 19:46:44 +03:00
ZyX
0eab7ac4b9 api/buffer: Add nvim_buf_get_changedtick method 2017-02-23 19:46:44 +03:00
James McCoy
9752a333c3 Merge pull request #5771 from brcolow/lambda
Lambda Support
2017-02-23 07:30:20 -05:00
Shougo
4e21311f9c vim-patch:8.0.0341 (#6151)
Problem:    When using complete() and typing a character undo is saved after
            the character was inserted. (Shougo)
Solution:   Save for undo before inserting the character.

d56a79d339
2017-02-23 12:37:46 +01:00
Koichi Shiraishi
34e24cb2f7 terminal: Initialize colors in reverse order (#6160)
Closes #3601

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>
2017-02-23 11:44:09 +01:00
James McCoy
d4dd447ded win: test: Fix closure jobs test on Windows 2017-02-23 01:24:55 -05:00
James McCoy
bc76ce2c4f Merge remote-tracking branch 'origin/master' into lambda 2017-02-22 19:23:20 -05:00
ZyX
31cdb227ba eval: Flush buffer in write_list
This way success/failure return from this function is more precise.
2017-02-23 01:49:05 +03:00
Jente Hidskes
1a81ec6d88 strings.c: remove unused assignment
As reported by clang-scan, `length_modifier` is never read in any code path
following this branch. It is safe to remove.
2017-02-20 20:06:38 +01:00
Sander Bosma
192fd161f9 hardcopy.c: fix dead assignment
`has_mbyte` is deprecated (globals.h), so `outputlen` is always assigned
within the if statement. Therefore, the previous initialization is
unnecessary.
2017-02-20 20:06:38 +01:00
Sander Bosma
ddd8f7d333 message.c: fix dead assignment by removing dead code
`enc_dbcs` and `enc_utf8` are deprecated (globals.h), so the second branch is
always taken.
2017-02-20 20:06:38 +01:00
Sander Bosma
8e194c53c7 misc1.c: remove dead initialization 2017-02-20 20:06:38 +01:00
Sander Bosma
83666f3ce2 screen.c: remove dead code
As stated in globals.h, mbyte flags are deprecated, and code using it can be
refractored to remove dead code. Since has_mbyte is defined to true, this
refractoring correct.
2017-02-20 20:06:38 +01:00
Jente Hidskes
04fb65fd76 screen.c: account for translated string length
`[RO]` is appended to the status line and `len` is increased with the length of
this string (4). However, the string is marked for translation and may
thus well be larger (or smaller) than 4. Therefore, we check the length at
runtime. The resulting len is never actually used, and thus could be removed.
However, by keeping this line, the body of this if-statement is kept consistent
with surrounding code, and future changes can not forget to add this line when
additional strings are added to p.
2017-02-20 19:56:58 +01:00
James McCoy
ddab4661f7 strings.h: Include <stdarg.h> for vim_vsnprintf's use of va_list
This fully resolves #6141.
2017-02-20 11:54:58 -05:00
James McCoy
a667972568 string.c: Include <stdarg.h> for va_list type and va_* macros
Closes #6141
2017-02-19 18:40:33 -05:00
Justin M. Keyes
3a2ae17062 globals.h: Avoid expression in array definition.
See aa56b24ee6 (commitcomment-20949000)
2017-02-19 02:55:27 +01:00
Justin M. Keyes
22337b1c01 Merge #6137 from justinmk/cmdline-ctrl-r
cmdline: CTRL-R: Omit trailing ^M character
2017-02-19 14:20:52 +01:00
Justin M. Keyes
baab49ee89 cmdline: CTRL-R: Omit trailing <CR>.
The "technically correct" interpretation is to execute the first line
that is seen (and this is what happens on middle-click paste in Vim).
^M is only intended to "defuse" the newline, so the user can review it.

The parent commit changed the behavior to insert <Space> between lines,
but that's a higher-risk change: it is arguably possible that some user
*wants* the literal ^M chars when e.g. assigning to a register:
    :let @a='<C-R>b'

To avoid that risk, keep the old behavior and only omit the last ^M.
This makes `yy:<C-R>0` nicer at no cost.
2017-02-18 23:24:35 +01:00
Justin M. Keyes
308ccb6f5e cmdline: CTRL-R: <Space> instead of CR between lines.
^M isn't any more "correct" than space: the "technically correct"
interpretation is to execute the first line that is seen (and this is
what happens on middle-click paste in Vim). ^M is only intended to
defuse the newline, so that the user can review the command. We can do
that with a space instead, and then the command can be executed without
having to fix it up first.
2017-02-18 14:49:05 +01:00
Kurt Bonatz
b0bbe82a60 eval.c: has("unnamedplus"). (#6136)
Return 1 for UNIX  with a functioning clipboard provider.

Closes #6103
2017-02-18 14:04:46 +01:00
Justin M. Keyes
158ea52854 options: Remove 'esckeys' (#6138)
This was never supported and it does not make sense for Nvim.
2017-02-18 14:01:20 +01:00
Justin M. Keyes
b49a74a1af doc: README.md 2017-02-17 17:44:10 +01:00
Justin M. Keyes
59254e4ae7 doc: README.md 2017-02-17 17:41:30 +01:00
Justin M. Keyes
c1bc784ad8 Merge #6110 'refactor: Move vim_*printf to strings.c'. 2017-02-17 16:25:19 +01:00
timeyyy
f017ae6115 doc/provider: python virtualenvs #6135
Closes #1887

Helped-by: Tommy Allen <tommy@esdf.io>
2017-02-17 03:44:05 +01:00
Justin M. Keyes
706b01ba79 Merge #6114 'Partial string handling refactoring'. 2017-02-17 02:08:21 +01:00
Justin M. Keyes
4a107a11a1 Merge #6105 from justinmk/win32-bindeps
Windows: ship with common tools
2017-02-16 16:53:34 +01:00
Justin M. Keyes
0095ad5693 win/CI: Cache dependencies. 2017-02-16 16:23:18 +01:00
Justin M. Keyes
ab9298ec15 win/package: Copy externals without analyzing.
These are just blobs that we jammed into the package. find_program() and
WindowsDllCopy.cmake do not make sense here, they search include paths
and try to determine DLL dependencies (GetPrerequisites).
2017-02-16 16:23:18 +01:00
Justin M. Keyes
3378ffac8a win/package: nvim-qt GUI
Closes #6126
2017-02-16 16:23:18 +01:00
Justin M. Keyes
2fbc42aa8a win/package: provide common tools
References #1507
Closes #1811

curl.exe curl_7_52_1_openssl_nghttp2_x86.7z from https://winampplugins.co.uk/curl/
    curl 7.52.1 (x86_64-pc-win32) libcurl/7.52.1 OpenSSL/1.0.2k zlib/1.2.8 nghttp2/1.19.0
    Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
    Features: AsynchDNS IPv6 Largefile NTLM SSL libz HTTP2 HTTPS-proxy

tidy.exe http://tidybatchfiles.info
    HTML Tidy for Windows
    tidy version 5.3.14 date 2017.01.09 compiled for Windows win32 x86.

7za.exe http://www.7-zip.org
    7-Zip 16.04 (2016-10-04)

cat.exe http://unxutils.sourceforge.net

from gVim:
    diff.exe GNU diffutils version 2.7
    xxd.exe V1.10 27oct98 by Juergen Weigert (Win32)
    ye olde hacked-up tee.exe
2017-02-16 16:23:18 +01:00
Rui Abreu Ferreira
7caaa106e3 win/build: Download winpty
Winpty has x86/x64 binary builds, download them when building
Neovim.
2017-02-16 16:23:18 +01:00
Rui Abreu Ferreira
bddea0caff win/build: Fix libuv recipe for Windows/NMake X86_64
The 64bit check for the libuv recipe worked for the VS generator
but not for NMake.
2017-02-16 16:23:18 +01:00
Rui Abreu Ferreira
91205d219a win/build: detect architecture 2017-02-16 16:23:17 +01:00
svaante
a05690ae2d tui.c: Handle missing "key_dc" terminfo entry (#6128)
Closes #6025
2017-02-16 11:59:01 +01:00
lonerover
362298e141 vim-patch:7.4.2061
Problem:    qf_init_ext() is too big.
Solution:   Move code to qf_parse_line() (Yegappan Lakshmanan)

e87e6dddc2
2017-02-16 16:26:12 +08:00
Kurt Bonatz
0e44916fff ex_docmd.c: Allow unescaped spaces in :edit filename (#6119)
This makes :edit consistent on all platforms. 
Also affects :argedit, et al. Wild (tab) completion doesn't work, though.

Closes #6010
2017-02-15 11:12:31 +01:00
lonerover
a926f10d45 vim-patch:7.4.2047
Problem:    Compiler warning for initializing a struct.
Solution:   Initialize in another way. (Anton Lindqvist)

bfafb4c4a0
2017-02-15 12:18:44 +08:00
rover
9380574cf7 vim-patch:7.4.2046
Problem:    The qf_init_ext() function is too big.
Solution:   Refactor it. (Yegappan Lakshmanan)

e0d3797664
2017-02-15 12:14:59 +08:00
Michael Ennen
10c9ecc211 vim-patch:8.0.0297
Problem:    Double free on exit when using a closure. (James McCoy)
Solution:   Split free_al_functions in two parts. (closes #1428)

03ff9bcbc9
2017-02-14 17:38:19 -07:00
Michael Ennen
ef8701610b Allow lambdas to be used with jobs, timers and dictwatchers. 2017-02-14 17:38:19 -07:00
Michael Ennen
bae8a19c63 vim-patch:7.4.2235
Problem:    submatch() does not check for a valid argument.
Solution:   Give an error if the argument is out of range. (Dominique Pelle)

989f592f7f
2017-02-14 17:38:19 -07:00
Michael Ennen
effe760b13 vim-patch:7.4.2233
Problem:    Crash when using funcref() with invalid name. (Dominique Pelle)
Solution:   Check for NULL translated name.

843b884461
2017-02-14 17:38:19 -07:00
Michael Ennen
8cae66b5e0 vim-patch:7.4.2197
Problem:    All functions are freed on exit, which may hide leaks.
Solution:   Only free named functions, not reference counted ones.

c257487035
2017-02-14 17:38:18 -07:00
Michael Ennen
e2f76d190d vim-patch:7.4.2143
Problem:    A funccal is garbage collected while it can still be used.
Solution:   Set copyID in all referenced functions.  Do not list lambda
            functions with ":function".

bc7ce675b2
2017-02-14 17:38:18 -07:00
Michael Ennen
00ac82eae2 vim-patch:7.4.2142
Problem:    Leaking memory when redefining a function.
Solution:   Don't increment the function reference count when it's found by
            name. Don't remove the wrong function from the hashtab.  More
            reference counting fixes.

8dd3a43d75
2017-02-14 17:38:18 -07:00
Michael Ennen
42727ecf08 vim-patch:7.4.2141
Problem:    Coverity reports bogus NULL check.
Solution:   When checking for a variable in the funccal scope don't pass the
            varname.

ba96e9af38
2017-02-14 17:38:18 -07:00
Michael Ennen
e71e9020eb vim-patch:7.4.2139
Problem:    :delfunction causes illegal memory access.
Solution:   Correct logic when deciding to free a function.

0588d4f9d2
2017-02-14 17:38:18 -07:00
Michael Ennen
53fad45115 vim-patch:7.4.2137
Problem:    Using function() with a name will find another function when it is
            redefined.
Solution:   Add funcref().  Refer to lambda using a partial.  Fix several
            reference counting issues.

437bafe4c8
2017-02-14 17:38:18 -07:00
Michael Ennen
1f715ac1c1 vim-patch:7.4.2136
Problem:    Closure function fails.
Solution:   Don't reset uf_scoped when it points to another funccal.

5801644819
2017-02-14 17:38:18 -07:00
Michael Ennen
1e3c0efa0f vim-patch:7.4.2134
Problem:    No error for using function() badly.
Solution:   Check for passing wrong function name. (Ken Takata)

b54c3ff317
2017-02-14 17:38:17 -07:00
Michael Ennen
d7c798cd86 vim-patch:7.4.2121
Problem:    No easy way to check if lambda and closure are supported.
Solution:   Add the +lambda feature.

9532fe7fbe
2017-02-14 17:38:17 -07:00
Michael Ennen
f59321e319 vim-patch:7.4.2120
Problem:    User defined functions can't be a closure.
Solution:   Add the "closure" argument. Allow using :unlet on a bound
            variable. (Yasuhiro Matsumoto, Ken Takata)

10ce39a0d5
2017-02-14 17:38:17 -07:00
Michael Ennen
9f6f7fe26d vim-patch:7.4.2119
Problem:    Closures are not supported.
Solution:   Capture variables in lambdas from the outer scope. (Yasuhiro
            Matsumoto, Ken Takata)

1e96d9bf98
2017-02-14 17:38:17 -07:00
Michael Ennen
6563d85990 vim-patch:7.4.2104
Problem:    Code duplication when unreferencing a function.
Solution:   De-duplicate.

97baee80f0
2017-02-14 17:38:17 -07:00
Michael Ennen
cbaa87a639 vim-patch:7.4.2096
Problem:    Lambda functions show up with completion.
Solution:   Don't show lambda functions. (Ken Takata)

b49edc11a1
2017-02-14 17:38:17 -07:00
Michael Ennen
7f4848aff4 vim-patch:7.4.2090
Problem:    Using submatch() in a lambda passed to substitute() is verbose.
Solution:   Use a static list and pass it as an optional argument to the
            function.  Fix memory leak.

df48fb456f
2017-02-14 17:38:17 -07:00
Michael Ennen
a0ce663710 vim-patch:7.4.2076
Problem:    Syntax error when dict has '>' key.
Solution:   Check for endchar. (Ken Takata)

4f0383bc3f
2017-02-14 17:38:16 -07:00
Michael Ennen
fc46efd3f2 vim-patch:7.4.2072
Problem:    substitute() does not support a Funcref argument.
Solution:   Support a Funcref like it supports  a string starting with "\=".

72ab729c3d
2017-02-14 17:38:16 -07:00
Michael Ennen
bb7d0deb2f vim-patch:7.4.2044
Problem:    filter() and map() either require a string or defining a function.
Solution:   Support lambda, a short way to define a function that evaluates an
            expression. (Yasuhiro Matsumoto, Ken Takata)

069c1e7fa9
2017-02-14 17:38:16 -07:00
Michael Ennen
6c423989fc vim-patch:7.4.2002
Problem:    Crash when passing number to filter() or map().
Solution:   Convert to a string. (Ozaki Kiichi)

a06ec8f345
2017-02-14 17:38:16 -07:00
Michael Ennen
bb2afeb026 vim-patch:7.4.1989
Problem:    filter() and map() only accept a string argument.
Solution:   Implement using a Funcref argument (Yasuhiro Matsumoto, Ken
            Takata)

b33c7eb5b8
2017-02-14 17:38:16 -07:00
Michael Ennen
b0fc6108c9 vim-patch:7.4.1727
Problem:    Cannot detect a crash in tests when caused by garbagecollect().
Solution:   Add garbagecollect_for_testing().  Do not free a job if is still
            useful.

ebf7dfa6f1
2017-02-14 17:38:15 -07:00
Nikolai Aleksandrovich Pavlov
64c375c589 unittest: Filter out standard defines so that they do not spam stderr (#6113) 2017-02-15 01:21:06 +01:00
ZyX
095e6cc2e0 *: Fix linter errors 2017-02-15 03:15:47 +03:00
ZyX
efa2682e3b *: Partial string handling refactoring
Main points:

- Replace `char_u` with `char` in some cases.
- Remove `str[len] = NUL` hack in some cases when `str` may be considered
  `const`.
2017-02-15 02:48:33 +03:00
ZyX
ee16f78fa9 strings: Fix “unexpected format specifier: %lp” ASAN error 2017-02-15 00:45:04 +03:00
ZyX
0086991b1b eval: Fix linter error 2017-02-15 00:28:34 +03:00
Justin M. Keyes
2a50ff7e2f Merge #6108 from ZyX-I/pr-5678
Better core dumps checking
2017-02-14 21:43:01 +01:00
ZyX
f489827b5f eval: Fix error messages from writefile
1. When calling writefile(list, fname, []) do not show error message twice.
2. Do not allow file name to be overwritten for writefile([1], 2).
3. Do not show “Can’t open file with an empty name” error after error like 
   “using Float as a String” when type of the second argument is not correct.
4. Do not give multiple error messages and still continue for code like 
   `writefile(["test", [], [], [], "tset"])`.

Note that to fix 4. ideally I need tv_check_str_or_nr which is currently present 
in two PRs: #6114 and #5119. I would want to avoid copying this function into 
a yet another PR.

Ref vim/vim#1476.
2017-02-14 20:46:12 +03:00
ZyX
066e6b8e9b eval: Return immediately after an error in write_list()
Previously it could attempt to write trailing newline before returning.
2017-02-14 19:40:16 +03:00
James McCoy
eaf9caaf43 Merge pull request #6118 from lonerover/vim-patch
scripts/vim-patch.sh: don't ignore runtime/doc/tagsrch.txt
2017-02-14 06:02:21 -05:00
lonerover
891d412d6c vim-patch.sh: don't ignore runtime/doc/tagsrch.txt 2017-02-14 16:14:41 +08:00
Nikolai Aleksandrovich Pavlov
6e881872f4 api/helpers: Remove NULL dereference (#6109)
Even though all used compilers can swallow this code, it is still
undefined behaviour.
2017-02-14 00:09:49 +01:00
Justin M. Keyes
2f38ed11c9 providers: Disable if g:loaded_* exists.
The exists('g:loaded_foo') convention is rather common, and may be
relied upon in some cases. It's also very unlikely that a user or plugin
has any reason to set g:loaded_foo to zero, so the principle of least
surprise can be brushed aside here.

https://github.com/neovim/neovim/issues/6107#issuecomment-279532143
2017-02-14 00:02:50 +01:00
ZyX
2e179214b8 eval: Remove outdated comment 2017-02-14 01:39:43 +03:00
ZyX
fe0eecf9cc eval: writefile: Give more adequate IO errors and do not call putc() 2017-02-14 01:10:31 +03:00
ZyX
222d98310a os/fileio: Support appending to a file 2017-02-14 01:10:05 +03:00
ZyX
85e1a56560 os/fileio: Allow certain failures during file_fsync
According to the documentation fsync() may fail with EROFS or EINVAL if “file 
descriptor is bound to a special file which does not support synchronization” 
(e.g. /dev/stderr). This condition is completely valid in this case since main 
point of `file_fsync()` is dumping buffered input.
2017-02-14 01:09:59 +03:00
ZyX
a429235b6d message,strings: Move vim_*printf functions to strings.c
Allows eval/typval.h to #include message.h.
2017-02-14 00:53:03 +03:00
ZyX
943531cf9e ci: Make sure core* is the last component of path 2017-02-14 00:33:52 +03:00
Justin M. Keyes
59f12e7d61 ui_detach: Do not redraw during teardown/exit. 2017-02-14 00:33:52 +03:00
ZyX
d670591887 ci: Better core dump checking
- Do not exclude any directories from `find` search, remove dumps before tests
  instead.
- Install `apport` on travis so that linux tests should produce core dumps
  (based on information from travis-ci/travis-ci#3754, not sure whether it still
  applies).
- Check cores in lua so that one has an idea which test is failing exactly. Do
  this only 10% of time on linux because traversing the file system is slow.

Unit tests are still not touched, though it is what `app` argument in
`check_cores` is for.

TODO? consider using `find`, it may be faster. Consider retiring `os.execute`,
      dealing with escaping is bad.
2017-02-14 00:33:52 +03:00
ZyX
3e94510570 ci: Try checking for core dumps
Note: can’t use `dbg_cmd` string because I need arguments with spaces (i.e. `bt
all` and `thread apply all bt full`).
2017-02-14 00:33:20 +03:00
ZyX
da2139296d ci: Extract prepare_build() from build_nvim() 2017-02-14 00:32:52 +03:00
Justin M. Keyes
9451647d9b health.vim: Do not check intentionally disabled providers.
Closes #6107
2017-02-13 22:21:23 +01:00
Justin M. Keyes
4a511de881 ci: Do not use oldtest target on Travis. (#6101)
We must invoke src/nvim/testdir/Makefile directly.
Explained in 3d1084f264:
> Running tests from the top-level Makefile will use the third-party
> dependencies from .deps instead of the ones from the Travis cache.

If we could run `oldtest` with CMake, we would not need to do this. Need
USES_TERMINAL feature (CMake 3.2+) for that.
2017-02-13 15:07:49 +01:00
Justin M. Keyes
b5965bbd24 Merge #6106 from justinmk/health.vim
health.vim: Reduce visual noise.
2017-02-13 02:33:50 +01:00
Justin M. Keyes
770d60d904 coverity/13728: Null pointer dereference (#6100)
coverity claims that `valid_tabpage(NULL)` can return true...
2017-02-12 21:09:52 +01:00
Justin M. Keyes
2ddadaa28c Merge #6084 from justinmk/fix-coverity-155968
coverity/155968: resource leak
2017-02-12 21:09:16 +01:00
Justin M. Keyes
f50de5be41 health.vim: ruby provider advice 2017-02-12 12:51:54 +01:00
Justin M. Keyes
c43ba671c3 health.vim: Reduce visual noise.
- SUCCESS should be extra green, regardless of colorscheme.
- Do not highlight INFO and SUGGESTIONS, they should not demand the
  user's attention.
2017-02-12 11:38:28 +01:00
Justin M. Keyes
aa56b24ee6 os/*: Use os_buf instead of NameBuff, IObuff. 2017-02-12 06:25:27 +01:00
Justin M. Keyes
30826cb2d6 build: oldtest target: TEST_FILE, NVIM_PRG (#6098)
- Add support for TEST_FILE to the `oldtest` target, for consistency
  with the busted/lua tests.
  Caveat: with the busted/lua tests TEST_FILE takes a full path, whereas
  for `oldtest` it must be "test_foo.res".
- Add support for NVIM_PRG, again so that all test-related targets are
  consistent.
- Use consistent name for NVIM_PRG. But still need to support NVIM_PROG
  for QuickBuild CI.

Note: The `oldtest` target is driven by the top-level Makefile, because
it requires a TTY. CMake 3.2 added a USES_TERMINAL flag to
add_custom_target(). But we support CMake 2.8...

    add_custom_target(oldtest
      COMMAND make clean
      COMMAND make NVIM_PRG=$<TARGET_FILE:nvim> $ENV{MAKEOVERRIDES}
      DEPENDS nvim
      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/nvim/testdir"
      USES_TERMINAL true
    )
2017-02-12 01:02:54 +01:00
Nikolai Aleksandrovich Pavlov
abdbfd26bc eval: Add id() function and make printf("%p") return something useful (#6095) 2017-02-11 19:47:02 +01:00
Bruno Roy
b1cf50c684 doc: fr.po: fix intro typo (#6094) 2017-02-11 17:52:50 +01:00
Justin M. Keyes
14fc4825f3 eval/typval_encode: Restore original copyID (#6070)
Does not actually matter for most uses, but critical for mark&sweep garbage
collector.

Closes #5234
Closes #5774
Closes #5817
Closes #5883
Closes #5934
Closes #5970
Closes #5548

Helped-by: James McCoy <jamessan@jamessan.com>
Helped-by: Tommy Allen <tommy@esdf.io>
Helped-by: Justin M. Keyes <justinkz@gmail.com>

---

Steps to reproduce:

    Compile fb9745785226c3251d4c40e84abe7d031183929a with:
       CC=clang CFLAGS=" -O0 -g -DEXITFREE " cmake .. -DMIN_LOG_LEVEL=0 -DCMAKE_BUILD_TYPE=Debug -DBUSTED_OUTPUT_TYPE=utf
       -DCMAKE_INSTALL_PREFIX=$PWD/root -DJEMALLOC_USE_BUNDLED=1 -DCLANG_ASAN_UBSAN=ON -DPREFER_LUAJIT=false

    Directory `crash` contains:
    1. unite directory with be09b0e578
    2. vimfiler directory with 72c37e897d
    3. `init.vim` with a single line which sets `&rtp` to the above two directories (absolute path).

    bin/nvim -u ../crash/init.vim -i NONE --headless -s <(<<< $':split\n:VimFiler\n\C-ww:call garbagecollect()\n\C-w\C-w\C-w')

---

Sample backtrace showing dv_copyID being overwritten by clear_tv, which
allows it to be collected by garbage_collect .. free_unref_items:

    Old value = 152911
    New value = 152912
    0x00000000004938e5 in encode_vim_to_nothing (ignored=0x7fb6348f3b20, top_tv=0x7fb6348f3b20, objname=0x6d62e9 "clear_tv argument") at ../src/nvim/eval/typval_encode.c.h:641
    641               cur_mpsv->data.d.dict->dv_copyID = copyID - 1;
    (rr) bt
    #0  0x00000000004938e5 in encode_vim_to_nothing (ignored=0x7fb6348f3b20, top_tv=0x7fb6348f3b20, objname=0x6d62e9 "clear_tv argument") at ../src/nvim/eval/typval_encode.c.h:641
    #1  0x0000000000485dee in clear_tv (varp=0x7fb6348f3b20) at /home/foo/src/github.com/neovim/src/nvim/eval.c:19876
    #2  0x0000000000494e5e in vars_clear_ext (ht=0x7fb634351460, free_val=1) at /home/foo/src/github.com/neovim/src/nvim/eval.c:20378
    #3  0x0000000000494dca in vars_clear (ht=0x7fb634351460) at /home/foo/src/github.com/neovim/src/nvim/eval.c:20355
    #4  0x000000000048efa3 in free_funccal (fc=0x7fb634351200, free_val=0) at /home/foo/src/github.com/neovim/src/nvim/eval.c:22927
    #5  0x0000000000491d8f in call_user_func (fp=0x7fb6340ae4e0, argcount=0, argvars=0x7ffdd216a050, rettv=0x7ffdd216a2b0, firstline=2, lastline=2, selfdict=0x0)
        at /home/foo/src/github.com/neovim/src/nvim/eval.c:22818
    #6  0x00000000004873a4 in call_func (funcname=0x7fb6348ba3e0 "vimfiler#view#_redraw_screen", len=28, rettv=0x7ffdd216a2b0, argcount_in=0, argvars_in=0x7ffdd216a050, argv_func=0x0, firstline=2,
        lastline=2, doesrange=0x7ffdd216a2ac, evaluate=true, partial=0x0, selfdict_in=0x0) at /home/foo/src/github.com/neovim/src/nvim/eval.c:7687
    #7  0x000000000048a6f0 in get_func_tv (name=0x7fb6348ba3e0 "vimfiler#view#_redraw_screen", len=28, rettv=0x7ffdd216a2b0, arg=0x7ffdd216a2c8, firstline=2, lastline=2, doesrange=0x7ffdd216a2ac,
        evaluate=1, partial=0x0, selfdict=0x0) at /home/foo/src/github.com/neovim/src/nvim/eval.c:7459
    #8  0x0000000000489691 in ex_call (eap=0x7ffdd216a598) at /home/foo/src/github.com/neovim/src/nvim/eval.c:2817
    #9  0x00000000004fae46 in do_one_cmd (cmdlinep=0x7ffdd216a878, flags=7, cstack=0x7ffdd216a880, fgetline=0x4f7c30 <get_loop_line>, cookie=0x7ffdd216a7f8)
        at /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:2198
    #10 0x00000000004f6ae3 in do_cmdline (cmdline=0x0, fgetline=0x499f50 <get_func_line>, cookie=0x7fb634350800, flags=7) at /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:601
    #11 0x00000000004918c0 in call_user_func (fp=0x7fb6340ae6a0, argcount=0, argvars=0x7ffdd216b6d0, rettv=0x7ffdd216b930, firstline=2, lastline=2, selfdict=0x0)
        at /home/foo/src/github.com/neovim/src/nvim/eval.c:22728
    #12 0x00000000004873a4 in call_func (funcname=0x7fb6348f3ee0 "vimfiler#view#_redraw_all_vimfiler", len=34, rettv=0x7ffdd216b930, argcount_in=0, argvars_in=0x7ffdd216b6d0, argv_func=0x0,
        firstline=2, lastline=2, doesrange=0x7ffdd216b92c, evaluate=true, partial=0x0, selfdict_in=0x0) at /home/foo/src/github.com/neovim/src/nvim/eval.c:7687
    #13 0x000000000048a6f0 in get_func_tv (name=0x7fb6348f3ee0 "vimfiler#view#_redraw_all_vimfiler", len=34, rettv=0x7ffdd216b930, arg=0x7ffdd216b948, firstline=2, lastline=2, doesrange=0x7ffdd216b92c,
        evaluate=1, partial=0x0, selfdict=0x0) at /home/foo/src/github.com/neovim/src/nvim/eval.c:7459
    #14 0x0000000000489691 in ex_call (eap=0x7ffdd216bc18) at /home/foo/src/github.com/neovim/src/nvim/eval.c:2817
    #15 0x00000000004fae46 in do_one_cmd (cmdlinep=0x7ffdd216bef8, flags=7, cstack=0x7ffdd216bf00, fgetline=0x539820 <getnextac>, cookie=0x7ffdd216c508)
        at /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:2198
    #16 0x00000000004f6ae3 in do_cmdline (cmdline=0x0, fgetline=0x539820 <getnextac>, cookie=0x7ffdd216c508, flags=7) at /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:601
    #17 0x00000000005390ee in apply_autocmds_group (event=EVENT_VIMRESIZED, fname=0x7fb6348ed2c0 "/home/foo/src/github.com/neovim/build/vimfiler:default", fname_io=0x0, force=false, group=-3,
        buf=0x7fb634858000, eap=0x0) at /home/foo/src/github.com/neovim/src/nvim/fileio.c:6882
    #18 0x000000000052f67c in apply_autocmds (event=EVENT_VIMRESIZED, fname=0x0, fname_io=0x0, force=false, buf=0x7fb634858000) at /home/foo/src/github.com/neovim/src/nvim/fileio.c:6527
    #19 0x0000000000640df2 in screenalloc (doclear=false) at /home/foo/src/github.com/neovim/src/nvim/screen.c:6234
    #20 0x00000000006320d2 in screenclear () at /home/foo/src/github.com/neovim/src/nvim/screen.c:6277
    #21 0x0000000000641edf in screen_resize (width=49, height=56) at /home/foo/src/github.com/neovim/src/nvim/screen.c:7366
    #22 0x00000000006b2d82 in ui_refresh () at /home/foo/src/github.com/neovim/src/nvim/ui.c:175
    #23 0x00000000006b3121 in ui_refresh_event (argv=0x7ffdd216c748) at /home/foo/src/github.com/neovim/src/nvim/ui.c:181
    #24 0x00000000004d8297 in multiqueue_process_events (this=0x7fb634812370) at /home/foo/src/github.com/neovim/src/nvim/event/multiqueue.c:146
    #25 0x00000000004d7616 in loop_poll_events (loop=0x96e900 <main_loop>, ms=-1) at /home/foo/src/github.com/neovim/src/nvim/event/loop.c:56
    #26 0x00000000005eb635 in input_poll (ms=-1) at /home/foo/src/github.com/neovim/src/nvim/os/input.c:326
    #27 0x00000000005ea700 in inbuf_poll (ms=-1) at /home/foo/src/github.com/neovim/src/nvim/os/input.c:348
    #28 0x00000000005ea61d in os_inchar (buf=0x0, maxlen=0, ms=-1, tb_change_cnt=0) at /home/foo/src/github.com/neovim/src/nvim/os/input.c:110
    #29 0x000000000068e0af in state_enter (s=0x7ffdd216c888) at /home/foo/src/github.com/neovim/src/nvim/state.c:49
    #30 0x00000000005ac514 in normal_enter (cmdwin=false, noexmode=false) at /home/foo/src/github.com/neovim/src/nvim/normal.c:463
    #31 0x0000000000565c62 in main (argc=9, argv=0x7ffdd216cc28) at /home/foo/src/github.com/neovim/src/nvim/main.c:540

---

ASAN trace after provoking the bug with VimFiler:

=================================================================
==8540==ERROR: AddressSanitizer: heap-use-after-free on address 0x613000054748 at pc 0x0000007d1dd8 bp 0x7ffe71be6660 sp 0x7ffe71be6658
READ of size 4 at 0x613000054748 thread T0
    #0 0x7d1dd7 in copy_tv /home/foo/src/github.com/neovim/src/nvim/eval.c:20116:37
    #1 0x87b92c in f_get /home/foo/src/github.com/neovim/src/nvim/eval.c:9895:5
    #2 0x7b35c0 in call_func /home/foo/src/github.com/neovim/src/nvim/eval.c:7286:11
    #3 0x7c8d7a in get_func_tv /home/foo/src/github.com/neovim/src/nvim/eval.c:7091:11
    #4 0x8667f9 in eval7 /home/foo/src/github.com/neovim/src/nvim/eval.c:4353:15
    #5 0x8621e5 in eval6 /home/foo/src/github.com/neovim/src/nvim/eval.c:4073:7
    #6 0x85ce69 in eval5 /home/foo/src/github.com/neovim/src/nvim/eval.c:3925:7
    #7 0x858071 in eval4 /home/foo/src/github.com/neovim/src/nvim/eval.c:3666:7
    #8 0x857613 in eval3 /home/foo/src/github.com/neovim/src/nvim/eval.c:3588:7
    #9 0x856bb3 in eval2 /home/foo/src/github.com/neovim/src/nvim/eval.c:3525:7
    #10 0x7ab772 in eval1 /home/foo/src/github.com/neovim/src/nvim/eval.c:3458:7
    #11 0x7abe36 in eval1 /home/foo/src/github.com/neovim/src/nvim/eval.c:3494:9
    #12 0x7a9ecc in eval0 /home/foo/src/github.com/neovim/src/nvim/eval.c:3420:9
    #13 0x830cac in ex_return /home/foo/src/github.com/neovim/src/nvim/eval.c:22191:10
    #14 0xb06a1c in do_one_cmd /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:2198:5
    #15 0xae5557 in do_cmdline /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:601:20
    #16 0x7f2490 in call_user_func /home/foo/src/github.com/neovim/src/nvim/eval.c:21993:3
    #17 0x7b2eee in call_func /home/foo/src/github.com/neovim/src/nvim/eval.c:7271:11
    #18 0x7c8d7a in get_func_tv /home/foo/src/github.com/neovim/src/nvim/eval.c:7091:11
    #19 0x8667f9 in eval7 /home/foo/src/github.com/neovim/src/nvim/eval.c:4353:15
    #20 0x8621e5 in eval6 /home/foo/src/github.com/neovim/src/nvim/eval.c:4073:7
    #21 0x85ce69 in eval5 /home/foo/src/github.com/neovim/src/nvim/eval.c:3925:7
    #22 0x858071 in eval4 /home/foo/src/github.com/neovim/src/nvim/eval.c:3666:7
    #23 0x857613 in eval3 /home/foo/src/github.com/neovim/src/nvim/eval.c:3588:7
    #24 0x856bb3 in eval2 /home/foo/src/github.com/neovim/src/nvim/eval.c:3525:7
    #25 0x7ab772 in eval1 /home/foo/src/github.com/neovim/src/nvim/eval.c:3458:7
    #26 0x7a9ecc in eval0 /home/foo/src/github.com/neovim/src/nvim/eval.c:3420:9
    #27 0x7b78f2 in ex_let /home/foo/src/github.com/neovim/src/nvim/eval.c:1479:9
    #28 0xb06a1c in do_one_cmd /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:2198:5
    #29 0xae5557 in do_cmdline /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:601:20
    #30 0x7f2490 in call_user_func /home/foo/src/github.com/neovim/src/nvim/eval.c:21993:3
    #31 0x7b2eee in call_func /home/foo/src/github.com/neovim/src/nvim/eval.c:7271:11
    #32 0x7c8d7a in get_func_tv /home/foo/src/github.com/neovim/src/nvim/eval.c:7091:11
    #33 0x7c1d3d in ex_call /home/foo/src/github.com/neovim/src/nvim/eval.c:2843:9
    #34 0xb06a1c in do_one_cmd /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:2198:5
    #35 0xae5557 in do_cmdline /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:601:20
    #36 0x7f2490 in call_user_func /home/foo/src/github.com/neovim/src/nvim/eval.c:21993:3
    #37 0x7b2eee in call_func /home/foo/src/github.com/neovim/src/nvim/eval.c:7271:11
    #38 0x7c8d7a in get_func_tv /home/foo/src/github.com/neovim/src/nvim/eval.c:7091:11
    #39 0x7c1d3d in ex_call /home/foo/src/github.com/neovim/src/nvim/eval.c:2843:9
    #40 0xb06a1c in do_one_cmd /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:2198:5
    #41 0xae5557 in do_cmdline /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:601:20
    #42 0xca2918 in apply_autocmds_group /home/foo/src/github.com/neovim/src/nvim/fileio.c:6882:5
    #43 0xc6c446 in apply_autocmds /home/foo/src/github.com/neovim/src/nvim/fileio.c:6527:10
    #44 0x140f374 in screenalloc /home/foo/src/github.com/neovim/src/nvim/screen.c:6234:5
    #45 0x13958d1 in screenclear /home/foo/src/github.com/neovim/src/nvim/screen.c:6277:3
    #46 0x1417573 in screen_resize /home/foo/src/github.com/neovim/src/nvim/screen.c:7366:5
    #47 0x17fb59b in ui_refresh /home/foo/src/github.com/neovim/src/nvim/ui.c:175:3
    #48 0x17fc100 in ui_refresh_event /home/foo/src/github.com/neovim/src/nvim/ui.c:181:3
    #49 0xa05bbf in multiqueue_process_events /home/foo/src/github.com/neovim/src/nvim/event/multiqueue.c:146:7
    #50 0x9ff8b6 in loop_poll_events /home/foo/src/github.com/neovim/src/nvim/event/loop.c:56:3
    #51 0x120d584 in input_poll /home/foo/src/github.com/neovim/src/nvim/os/input.c:326:3
    #52 0x12092ef in inbuf_poll /home/foo/src/github.com/neovim/src/nvim/os/input.c:348:24
    #53 0x1209193 in os_inchar /home/foo/src/github.com/neovim/src/nvim/os/input.c:110:18
    #54 0x16d3615 in state_enter /home/foo/src/github.com/neovim/src/nvim/state.c:49:13
    #55 0x101090b in normal_enter /home/foo/src/github.com/neovim/src/nvim/normal.c:463:3
    #56 0xdd0a82 in main /home/foo/src/github.com/neovim/src/nvim/main.c:542:3
    #57 0x7f3c61df42b0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202b0)
    #58 0x44b959 in _start (/home/foo/src/github.com/neovim/build/bin/nvim+0x44b959)

0x613000054748 is located 8 bytes inside of 352-byte region [0x613000054740,0x6130000548a0)
freed by thread T0 here:
    #0 0x4e9d70 in __interceptor_cfree.localalias.0 (/home/foo/src/github.com/neovim/build/bin/nvim+0x4e9d70)
    #1 0xefa184 in xfree /home/foo/src/github.com/neovim/src/nvim/memory.c:130:3
    #2 0x7e52b5 in dict_free_dict /home/foo/src/github.com/neovim/src/nvim/eval.c:6431:3
    #3 0x7e1e2c in free_unref_items /home/foo/src/github.com/neovim/src/nvim/eval.c:6063:7
    #4 0x7946cd in garbage_collect /home/foo/src/github.com/neovim/src/nvim/eval.c:5985:16
    #5 0xd08f4f in before_blocking /home/foo/src/github.com/neovim/src/nvim/getchar.c:1331:5
    #6 0x1209157 in os_inchar /home/foo/src/github.com/neovim/src/nvim/os/input.c:109:9
    #7 0x16d3615 in state_enter /home/foo/src/github.com/neovim/src/nvim/state.c:49:13
    #8 0x101090b in normal_enter /home/foo/src/github.com/neovim/src/nvim/normal.c:463:3
    #9 0xdd0a82 in main /home/foo/src/github.com/neovim/src/nvim/main.c:542:3
    #10 0x7f3c61df42b0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202b0)

previously allocated by thread T0 here:
    #0 0x4e9f08 in malloc (/home/foo/src/github.com/neovim/build/bin/nvim+0x4e9f08)
    #1 0xef9ee4 in try_malloc /home/foo/src/github.com/neovim/src/nvim/memory.c:84:15
    #2 0xefa0a4 in xmalloc /home/foo/src/github.com/neovim/src/nvim/memory.c:118:15
    #3 0x78bcc6 in dict_alloc /home/foo/src/github.com/neovim/src/nvim/eval.c:6321:15
    #4 0x86dc02 in get_dict_tv /home/foo/src/github.com/neovim/src/nvim/eval.c:6789:9
    #5 0x865751 in eval7 /home/foo/src/github.com/neovim/src/nvim/eval.c:4296:21
    #6 0x8621e5 in eval6 /home/foo/src/github.com/neovim/src/nvim/eval.c:4073:7
    #7 0x85ce69 in eval5 /home/foo/src/github.com/neovim/src/nvim/eval.c:3925:7
    #8 0x858071 in eval4 /home/foo/src/github.com/neovim/src/nvim/eval.c:3666:7
    #9 0x857613 in eval3 /home/foo/src/github.com/neovim/src/nvim/eval.c:3588:7
    #10 0x856bb3 in eval2 /home/foo/src/github.com/neovim/src/nvim/eval.c:3525:7
    #11 0x7ab772 in eval1 /home/foo/src/github.com/neovim/src/nvim/eval.c:3458:7
    #12 0x7a9ecc in eval0 /home/foo/src/github.com/neovim/src/nvim/eval.c:3420:9
    #13 0x7b78f2 in ex_let /home/foo/src/github.com/neovim/src/nvim/eval.c:1479:9
    #14 0xb06a1c in do_one_cmd /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:2198:5
    #15 0xae5557 in do_cmdline /home/foo/src/github.com/neovim/src/nvim/ex_docmd.c:601:20
    #16 0x7f2490 in call_user_func /home/foo/src/github.com/neovim/src/nvim/eval.c:21993:3
    #17 0x7b2eee in call_func /home/foo/src/github.com/neovim/src/nvim/eval.c:7271:11
    #18 0x7c8d7a in get_func_tv /home/foo/src/github.com/neovim/src/nvim/eval.c:7091:11
    #19 0x8667f9 in eval7 /home/foo/src/github.com/neovim/src/nvim/eval.c:4353:15
    #20 0x8621e5 in eval6 /home/foo/src/github.com/neovim/src/nvim/eval.c:4073:7
    #21 0x85ce69 in eval5 /home/foo/src/github.com/neovim/src/nvim/eval.c:3925:7
    #22 0x858071 in eval4 /home/foo/src/github.com/neovim/src/nvim/eval.c:3666:7
    #23 0x857613 in eval3 /home/foo/src/github.com/neovim/src/nvim/eval.c:3588:7
    #24 0x856bb3 in eval2 /home/foo/src/github.com/neovim/src/nvim/eval.c:3525:7
    #25 0x7ab772 in eval1 /home/foo/src/github.com/neovim/src/nvim/eval.c:3458:7
    #26 0x93f89a in filter_map_one /home/foo/src/github.com/neovim/src/nvim/eval.c:9398:7
    #27 0x93f33a in filter_map /home/foo/src/github.com/neovim/src/nvim/eval.c:9372:13
    #28 0x8ceb57 in f_map /home/foo/src/github.com/neovim/src/nvim/eval.c:12900:3
    #29 0x7b35c0 in call_func /home/foo/src/github.com/neovim/src/nvim/eval.c:7286:11

SUMMARY: AddressSanitizer: heap-use-after-free /home/foo/src/github.com/neovim/src/nvim/eval.c:20116:37 in copy_tv
Shadow bytes around the buggy address:
  0x0c2680002890: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c26800028a0: fd fd fd fd fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c26800028b0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c26800028c0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c26800028d0: fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa fa
=>0x0c26800028e0: fa fa fa fa fa fa fa fa fd[fd]fd fd fd fd fd fd
  0x0c26800028f0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c2680002900: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c2680002910: fd fd fd fd fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c2680002920: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c2680002930: 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
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  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
==8540==ABORTING
2017-02-11 07:20:24 +01:00
James McCoy
4baa059605 Merge pull request #6089 from jamessan/vim-7.4.1948
vim-patch:7.4.1948,7.4.1954,7.4.1962
2017-02-10 19:02:08 -05:00
Bruno Roy
99cadb7d27 doc: fr.po: Translate :intro (#6091) 2017-02-10 22:01:12 +01:00
James McCoy
bc33df2453 Merge pull request #6076 from lonerover/vim-7.4.2275
vim-patch: 7.4.2275,7.4.2279
2017-02-10 10:10:09 -05:00
James McCoy
714db8bd6c vim-patch:7.4.1962
Problem:    Two test files for increment/decrement.
Solution:   Move the old style test into the new style test. (Hirohito
            Higashi, closes vim/vim#881)

52df117df7
2017-02-10 09:55:33 -05:00
James McCoy
af6bc3b3bf Re-add upstream's test_increment.vim 2017-02-10 09:53:45 -05:00
James McCoy
3677189bfc vim-patch:7.4.1954
Problem:    No test for what 7.4.1948 fixes.
Solution:   Add a test. (Hirohito Higashi, closes vim/vim#880)

d388d2ac8b

Some adjustments had to be made from upstream since nvim always uses
utf-8 internally.

* Removed the 'set encoding=cp932' line from the test
* Adjusted the expected values for getpos(), since the number of bytes
  is different in utf-8
2017-02-10 09:42:42 -05:00
James McCoy
91efe96b96 vim-patch:7.4.1948
Problem:    Using Ctrl-A with double-byte encoding may result in garbled text.
Solution:   Skip to the start of a character. (Hirohito Higashi)

ad5ca9bc1e
2017-02-10 09:29:16 -05:00
James McCoy
7ed1422521 Merge pull request #5904 from lonerover/vim-7.4.2148
vim-patch:7.4.2148,7.4.2159,7.4.2175,7.4.2295
2017-02-10 07:22:46 -05:00
rover
0b81addd0a fix cscope test failure 2017-02-10 00:35:34 -05:00
rover
971d0590be vim-patch:7.4.2295
Problem:    Cscope test fails.
Solution:   Avoid checking for specific line and column numbers.

4792255eff
2017-02-10 00:35:34 -05:00
rover
40a306fe90 vim-patch:7.4.2175
Problem:    Insufficient testing of cscope.
Solution:   Add more tests. (Dominique Pelle)

812ad4f3a2
2017-02-10 00:35:34 -05:00
rover
a5dd127462 vim-patch:7.4.2159
Problem:    Insufficient testing for cscope.
Solution:   Add more tests. (Dominique Pelle)

5971dab112
2017-02-10 00:35:34 -05:00
rover
845fa57db8 vim-patch:7.4.2148
Problem:    Not much testing for cscope.
Solution:   Add a test that uses the cscope program. (Christian Brabandt)

edf634e0f1
2017-02-10 00:34:47 -05:00
James McCoy
13ce5fd108 Merge pull request #5877 from lonerover/vim-7.4.2082
vim-patch: 7.4.2082,7.4.2084,7.4.2085,7.4.2087,7.4.2088
2017-02-10 00:34:14 -05:00
lonerover
ea87bf79f6 oldtest: Add vim-default for 'backspace' to runtest.vim 2017-02-09 23:36:54 -05:00
lonerover
c69bbc0964 vim-patch:7.4.2088
Problem:    Keymap test fails with normal features.
Solution:   Bail out if the keymap feature is not supported.

f36213597d
2017-02-09 22:14:04 -05:00
lonerover
1861f12a5f vim-patch:7.4.2087
Problem:    Digraph code test coverage is still low.
Solution:   Add more tests. (Christian Brabandt)

e25bc5abb4
2017-02-09 22:14:04 -05:00
lonerover
bec7e47938 vim-patch:7.4.2086
Problem:    Using the system default encoding makes tests unpredictable.
Solution:   Always use utf-8 or latin1 in the new style tests.  Remove setting
            encoding and scriptencoding where it is not needed.

ac105ed3c4
2017-02-09 22:14:04 -05:00
lonerover
6f4a963e0e vim-patch:7.4.2085
Problem:    Digraph tests fails on some systems.
Solution:   Run it separately and set 'encoding' early.

dfd63e30d1
2017-02-09 22:14:04 -05:00
lonerover
775dfc6000 vim-patch:7.4.2084
Problem:    New digraph test makes testing hang.
Solution:   Don't set "nocp".

6008433381
2017-02-09 22:13:03 -05:00
lonerover
fb177c2c48 vim-patch:7.4.2082
Problem:    Not much test coverage for digraphs.
Solution:   Add a new style digraph test. (Christian Brabandt)

397eadbe25
2017-02-09 22:12:48 -05:00
Justin M. Keyes
5b8fac8ace process_spawn: Return status code (#6075) 2017-02-09 14:20:24 +01:00
Justin M. Keyes
0c7751f6ab coverity/155968: resource leak 2017-02-09 10:07:48 +01:00
lonerover
67eae93557 vim-patch:7.4.2279
Problem:    Starting diff mode with the cursor in the last line might end up
            only showing one closed fold. (John Beckett)
Solution:   Scroll the window to show the same relative cursor position.

46328f9a1c
2017-02-09 08:24:43 +08:00
Manuel
3aa8795469 doc: Fix section reference (#6079) 2017-02-08 18:09:27 +01:00
Justin M. Keyes
a2d44c9af6 Merge #6068 from lonerover/vim-7.4.2106
vim-patch:7.4.2106,7.4.2107
2017-02-07 15:00:11 +01:00
lonerover
7629176fb1 vim-patch:7.4.2275
Problem:    ":diffoff!" does not remove filler lines.
Solution:   Force a redraw and invalidate the cursor. (closes vim/vim#1014)

e67d546f3c
2017-02-07 15:47:28 +08:00
lonerover
a090f1a3a4 vim-patch:7.4.2107
Problem:    Misplaced equal sign.
Solution:   Remove it.

d955a0971c
2017-02-07 15:12:20 +08:00
lonerover
ca1b683f00 vim-patch:7.4.2106
Problem:    Clang warns about missing field in initializer.
Solution:   Define COMMA and use it.  (Kazunobu Kuriyama)

ac77aec4da
2017-02-07 15:02:15 +08:00
James McCoy
cca8d2751a Merge pull request #6064 from jamessan/patch-review-preprocess
vim-patch: Use get_vim_patch to retrieve patch for review
2017-02-06 19:43:12 -05:00
James McCoy
7c0d091404 Merge pull request #6063 from jamessan/vim-8.0.0208
vim-patch:8.0.0208
2017-02-06 18:40:05 -05:00
James McCoy
1df492dd3a vim-patch: Use get_vim_patch to retrieve patch for review
This ensures the downloaded Vim patch is preprocessed so unused material
isn't presented to the reviewer.

[ci skip]
2017-02-06 15:58:33 -05:00
James McCoy
86242841e3 lint 2017-02-06 15:26:24 -05:00
James McCoy
18404003c4 vim-patch:8.0.0208
Problem:    Internally used commands for CTRL-Z and mouse click end up in
            history. (Matthew Malcomson)
Solution:   Use do_cmdline_cmd() instead of stuffing them in the readahead
            buffer. (James McCoy, closes vim/vim#1395)

25b0e6b701

Closes #5966
Closes #5967
2017-02-06 15:24:22 -05:00
James McCoy
24ade150f9 Merge pull request #6061 from justinmk/vim-ancient-bugs
vim-patch: fix some resize bugs
2017-02-06 10:23:55 -05:00
James McCoy
11efbc80e3 Merge pull request #5913 from mhinz/buf-lookup-patches
vim-patch:7.4.2017,7.4.2018,7.4.2021,7.4.2022,7.4.2023,7.4.2024
2017-02-06 10:20:49 -05:00
Justin M. Keyes
a767fee8cd eval: set_ref_in_item(): remove dead code
Missed in 25438f149f
2017-02-06 03:05:16 +01:00
Justin M. Keyes
b77cad183d vim-patch:8.0.0275
Problem:    When checking for CTRL-C typed the GUI may detect a screen resize
            and redraw the screen, causing trouble.
Solution:   Set updating_screen in ui_breakcheck().

e3caa11090
2017-02-06 01:21:01 +01:00
Justin M. Keyes
bb2f36d038 Merge #6038 from justinmk/win32-executable
win: executable()
2017-02-05 01:11:06 +01:00
Marco Hinz
b0cf071d43 Fix clint issues 2017-02-04 17:55:46 -05:00
Marco Hinz
d3f97232e8 Make Nvim work with latest vim-patch v7.4.2024
v7.4.2024 changed a few function signatures of functions that we use in
Neovim-specific code, e.g. the API.

Due to that the commit for 7.4.2024 doesn't build on its own, only together with
this commit.
2017-02-04 17:55:46 -05:00
Marco Hinz
c05e7f0fdd vim-patch:7.4.2024
Problem:  More buf_valid() calls can be optimized.
Solution: Use bufref_valid() instead.

NOTE: Some changes related to channels and the Python and Netbeans interfaces
were obviously left out.

7c0a2f367f
2017-02-04 17:55:46 -05:00
Marco Hinz
e3b92c77da vim-patch:7.4.2023
Problem:  buflist_findname_stat() may find a dummy buffer.
Solution: Set the BF_DUMMY flag after loading a dummy buffer. Start
          finding buffers from the end of the list.

NOTE: In Neovim, buflist_findname_stat() was replaced by
buflist_findname_file_id() in c41535d69.

ea3f2e7be4
2017-02-04 17:55:45 -05:00
Marco Hinz
d60d1b3232 vim-patch:7.4.2022
Problem:  Warnings from 64 bit compiler.
Solution: Add type casts. (Mike Williams)

25065ec375
2017-02-04 17:55:45 -05:00
Marco Hinz
1836f3cb9b vim-patch:7.4.2021
Problem:  Still too many buf_valid() calls.
Solution: Make au_new_curbuf a bufref.  Use bufref_valid() in more places.

19ff9bf454
2017-02-04 17:55:45 -05:00
Marco Hinz
e177226d51 vim-patch:7.4.2018
Problem:  buf_valid() can be slow when there are many buffers.
Solution: Add bufref_valid(), only go through the buffer list
          when a buffer was freed.

b25f9a97e9
2017-02-04 17:55:29 -05:00
Marco Hinz
951dd1571c vim-patch:7.4.2017
Problem:  When there are many errors adding them to the quickfix list takes
          a long time.
Solution: Add BLN_NOOPT.  Don't call buf_valid() in buf_copy_options().
          Remember the last file name used.  When going through the buffer
          list start from the end of the list.  Only call buf_valid() when
          autocommands were executed.

8240433f48
2017-02-04 17:15:11 -05:00
Justin M. Keyes
1ec52b893a vim-patch:8.0.0274
Problem:    When update_single_line() is called recursively, or another screen
            update happens while it is busy, errors may occur.
Solution:   Check and update updating_screen. (Christian Brabandt)

070b33da93
2017-02-04 17:43:42 +01:00
Justin M. Keyes
18127f64c4 test: executable(): AppVeyor: Ignore "sibling" failure
This test sometimes fails on AppVeyor, but we still want to exercise the
code path and get at least a "soft" notification in the pending list.
2017-02-04 11:07:50 +01:00
Justin M. Keyes
ea449b16b9 refactor: fix warnings 2017-02-04 11:07:50 +01:00
Justin M. Keyes
67fbbdb1b5 win: executable(): full path without extension
Absolute path is considered executable even *without* an extension.
2017-02-04 11:07:50 +01:00
Justin M. Keyes
cd5b131575 vim-patch:8.0.0280
patch 8.0.0280: problem setting multi-byte environment var on MS-Windows

Problem:    On MS-Windows setting an environment variable with multi-byte
            strings does not work well.
Solution:   Use wputenv when possible. (Taro Muraoka, Ken Takata)

7c23d1d9d9cc
2017-02-04 11:07:49 +01:00
Justin M. Keyes
978c95e5c4 test: helpers.clear(): Set common env vars only if not passed. 2017-02-04 11:07:49 +01:00
Justin M. Keyes
bbfdb84ae1 build: Do not force busted into front of $PATH
This was a workaround from long ago, but it doesn't seem to be needed
anymore. And it breaks the $PATH on the Windows build (AppVeyor CI).

After this change python3 (and 2) is correctly detected on AppVeyor CI.

References #5946
2017-02-04 11:07:49 +01:00
Justin M. Keyes
611411bf85 CheckHealth: choose correct $PATH separator 2017-02-04 11:07:49 +01:00
Justin M. Keyes
224f99b85d win: Append process dir to $PATH
This allows executables to be found by :!, system(), and executable() if
they live next to ("sibling" to) nvim.exe. This is what gvim on Windows
does, and also matches the behavior of Win32 SearchPath().

c4a249a736/src/os_win32.c (L354-L370)
2017-02-04 11:07:49 +01:00
Rui Abreu Ferreira
7d58aba80c test: executable() 2017-02-04 11:07:49 +01:00
Justin M. Keyes
8371d6fb07 win: executable()
Windows: prepend `".;"` to PATH, as Vim does.
c4a249a736/src/os_win32.c (L1916)
2017-02-04 11:07:49 +01:00
Anmol Sethi
3d3b1641d0 man.vim: more robust s:verify_exists #6043
Closes #6039

Also: close the window if we could not get the page from man but only if
we opened it ourselves.
2017-02-04 10:02:59 +01:00
Justin M. Keyes
6d4e08d226 test: Remove whitespace (avoid LF/CRLF discrepancy) 2017-02-04 04:04:27 +01:00
Justin M. Keyes
4b7d3aec04 Revert "tui: update_size(): Fix race condition."
This reverts commit 0e75438a38.
2017-02-04 03:25:36 +01:00
Justin M. Keyes
5ef619eb33 Revert "build: LuaRocks: require unzip (#6049)"
This reverts commit 54293b73d4.
2017-02-04 03:25:17 +01:00
Lucas Hoffmann
bea2e5738d tests: Migrate legacy test 8. #4179
The test produces some "hit enter" prompts and error messages that had to be
dealt with by `feed`ing CTRL-L to nvim.
2017-02-03 23:05:08 +01:00
Justin M. Keyes
6239492d9c Merge #2990 'tests: Migrate legacy test 69.' 2017-02-03 22:55:05 +01:00
Matthieu Coudron
54293b73d4 build: LuaRocks: require unzip (#6049) 2017-02-04 01:03:04 +01:00
Lucas Hoffmann
b4c172d612 tests: Modernize migrated legacy test 69. 2017-02-03 22:54:38 +01:00
James McCoy
11f2bd5fa3 Merge pull request #6050 from jamessan/fix-xclip-tests
Fix xclip tests to cleanup on their own
2017-02-03 11:36:52 -05:00
Justin M. Keyes
0e75438a38 tui: update_size(): Fix race condition.
bridge.width and bridge.height reach ui.c:ui_refresh() when it iterates
through all UIs, so they do not need to be set directly by
tui.c:update_size().

Race found by helgrind:

==18532== Helgrind, a thread error detector
==18532== Copyright (C) 2007-2015, and GNU GPL'd, by OpenWorks LLP et al.
==18532== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info
==18532== Command: ./build/bin/nvim -u NONE --cmd set\ rtp+=~/.vim/bundle/vimfiler.vim,~/.vim/bundle/unite.vim --cmd runtime\ plugin/vimfiler.vim --cmd runtime\ plugin/unite.vim
==18532== Parent PID: 6477
==18532==
==18532== ---Thread-Announcement------------------------------------------
==18532==
==18532== Thread #2 was created
==18532==    at 0x68FA98E: clone (clone.S:73)
==18532==    by 0x5270179: create_thread (createthread.c:102)
==18532==    by 0x5271BE2: pthread_create@@GLIBC_2.2.5 (pthread_create.c:679)
==18532==    by 0x4C32B07: pthread_create_WRK (hg_intercepts.c:427)
==18532==    by 0x4E53A3F: uv_thread_create (in /usr/lib/x86_64-linux-gnu/libuv.so.1.0.0)
==18532==    by 0x6A7154: ui_bridge_attach (ui_bridge.c:89)
==18532==    by 0x6A164C: tui_start (tui.c:116)
==18532==    by 0x6A4CFC: ui_builtin_start (ui.c:89)
==18532==    by 0x55A825: main (main.c:433)
==18532==
==18532== ---Thread-Announcement------------------------------------------
==18532==
==18532== Thread #1 is the program's root thread
==18532==
==18532== ----------------------------------------------------------------
==18532==
==18532== Possible data race during write of size 4 at 0x770E7B4 by thread #2
==18532== Locks held: none
==18532==    at 0x6A3071: update_size (tui.c:759)
==18532==    by 0x6A30DB: sigwinch_cb (tui.c:269)
==18532==    by 0x4D0A54: signal_event (signal.c:44)
==18532==    by 0x4CDDB6: multiqueue_process_events (multiqueue.c:146)
==18532==    by 0x4CD135: loop_poll_events (loop.c:56)
==18532==    by 0x6A2451: tui_main (tui.c:239)
==18532==    by 0x6A857A: ui_thread_run (ui_bridge.c:112)
==18532==    by 0x4E539F6: ??? (in /usr/lib/x86_64-linux-gnu/libuv.so.1.0.0)
==18532==    by 0x4C32D06: mythread_wrapper (hg_intercepts.c:389)
==18532==    by 0x5271423: start_thread (pthread_create.c:333)
==18532==    by 0x68FA9BE: clone (clone.S:105)
==18532==
==18532== This conflicts with a previous read of size 4 by thread #1
==18532== Locks held: none
==18532==    at 0x6A542A: ui_refresh (ui.c:169)
==18532==    by 0x6A5870: ui_refresh_event (ui.c:181)
==18532==    by 0x4CDDB6: multiqueue_process_events (multiqueue.c:146)
==18532==    by 0x4CD135: loop_poll_events (loop.c:56)
==18532==    by 0x5DEDB4: os_breakcheck (input.c:150)
==18532==    by 0x59263D: line_breakcheck (misc1.c:2667)
==18532==    by 0x621AE5: nfa_regmatch (regexp_nfa.c:6171)
==18532==    by 0x61DCF7: nfa_regtry (regexp_nfa.c:6240)
==18532==  Address 0x770e7b4 is 4 bytes inside a block of size 352 alloc'd
==18532==    at 0x4C2EFE5: calloc (vg_replace_malloc.c:711)
==18532==    by 0x57C962: xcalloc (memory.c:119)
==18532==    by 0x6A6E29: ui_bridge_attach (ui_bridge.c:53)
==18532==    by 0x6A164C: tui_start (tui.c:116)
==18532==    by 0x6A4CFC: ui_builtin_start (ui.c:89)
==18532==    by 0x55A825: main (main.c:433)
==18532==  Block was alloc'd by thread #1
==18532==
==18532== ----------------------------------------------------------------
==18532==
==18532== Possible data race during write of size 4 at 0x770E7B8 by thread #2
==18532== Locks held: none
==18532==    at 0x6A3085: update_size (tui.c:760)
==18532==    by 0x6A30DB: sigwinch_cb (tui.c:269)
==18532==    by 0x4D0A54: signal_event (signal.c:44)
==18532==    by 0x4CDDB6: multiqueue_process_events (multiqueue.c:146)
==18532==    by 0x4CD135: loop_poll_events (loop.c:56)
==18532==    by 0x6A2451: tui_main (tui.c:239)
==18532==    by 0x6A857A: ui_thread_run (ui_bridge.c:112)
==18532==    by 0x4E539F6: ??? (in /usr/lib/x86_64-linux-gnu/libuv.so.1.0.0)
==18532==    by 0x4C32D06: mythread_wrapper (hg_intercepts.c:389)
==18532==    by 0x5271423: start_thread (pthread_create.c:333)
==18532==    by 0x68FA9BE: clone (clone.S:105)
==18532==
==18532== This conflicts with a previous read of size 4 by thread #1
==18532== Locks held: none
==18532==    at 0x6A5455: ui_refresh (ui.c:170)
==18532==    by 0x6A5870: ui_refresh_event (ui.c:181)
==18532==    by 0x4CDDB6: multiqueue_process_events (multiqueue.c:146)
==18532==    by 0x4CD135: loop_poll_events (loop.c:56)
==18532==    by 0x5DEDB4: os_breakcheck (input.c:150)
==18532==    by 0x59263D: line_breakcheck (misc1.c:2667)
==18532==    by 0x621AE5: nfa_regmatch (regexp_nfa.c:6171)
==18532==    by 0x61DCF7: nfa_regtry (regexp_nfa.c:6240)
==18532==  Address 0x770e7b8 is 8 bytes inside a block of size 352 alloc'd
==18532==    at 0x4C2EFE5: calloc (vg_replace_malloc.c:711)
==18532==    by 0x57C962: xcalloc (memory.c:119)
==18532==    by 0x6A6E29: ui_bridge_attach (ui_bridge.c:53)
==18532==    by 0x6A164C: tui_start (tui.c:116)
==18532==    by 0x6A4CFC: ui_builtin_start (ui.c:89)
==18532==    by 0x55A825: main (main.c:433)
==18532==  Block was alloc'd by thread #1
2017-02-03 14:04:38 +01:00
Justin M. Keyes
8b804948df Merge #5975 from jamessan/execute-with-attrs
execute: Correctly capture output with highlight attributes
2017-02-03 12:36:17 +01:00
James McCoy
ce51fa0955 test: Turn printargs_path into a function
When test/functional/eval/system_spec.lua is run on its own,
helpers.os_name() was being called before a session had been created.
This caused that describe block to fail.

Turning printargs_path into a function delays the call of
helpers.os_name() until the test is being run, which ensures a session
is available.
2017-02-02 19:52:59 -05:00
James McCoy
7e30fe3157 test: Make xclip exit after one selection request
Closes #4900
2017-02-02 19:52:06 -05:00
James McCoy
e8899178ec Merge pull request #5869 from hardenedapple/undojoin-curhead
Don't set `b_u_curhead` in `ex_undojoin()`
2017-02-02 12:45:02 -05:00
James McCoy
0508192774 Merge pull request #6045 from jamessan/vim-a02a551
vim-patch:a02a551,802a0d9,e18dbe8,063b9d1
2017-02-01 21:10:33 -05:00
James McCoy
8c09dbf082 vim-patch:063b9d1
Updated runtime files.

063b9d15ab
2017-02-01 18:35:12 -05:00
James McCoy
5752bfb224 Run cleanup.vim on {eo,fr}.po 2017-02-01 18:34:58 -05:00
James McCoy
a5b875fe86 vim-patch:e18dbe8
Updated runtime files.

e18dbe865d
2017-02-01 18:34:58 -05:00
James McCoy
4e47568f89 vim-patch:802a0d9
Updated runtime files.

802a0d902f
2017-02-01 18:34:57 -05:00
James McCoy
cb0eead4ee vim-patch:a02a551
Updated runtime files.

a02a551e18
2017-02-01 18:34:52 -05:00
Justin M. Keyes
f8b21b6d82 test: execute() + :redir 2017-02-01 18:31:53 -05:00
James McCoy
7e7f01a3be execute: Correctly capture output with highlight attributes
Closes #5422
2017-02-01 18:28:32 -05:00
Justin M. Keyes
3803314f78 doc: QuickBuild 2017-01-31 08:58:43 +01:00
Justin M. Keyes
88bc9f8e92 xstrlcat: Allow overlapped pointers. (#6017)
memcpy is not equivalent to memmove (which is used by vim_strcat), this
could cause subtle bugs if xstrlcat is used as a replacement for
vim_strcat. But vim_strcat is inconsistent: in the `else` branch it uses
strcpy, which doesn't allow overlap.

Helped-by: oni-link <knil.ino@gmail.com>
Helped-by: James McCoy <jamessan@jamessan.com>
Helped-by: Nikolai Aleksandrovich Pavlov <kp-pav@yandex.ru>
2017-01-31 17:42:22 +01:00
Matthew Malcomson
d25649fa01 undo: :earlier, g-: Set b_u_seq_cur correctly. (#6016)
Previously alternate branches were not accounted for properly, with this
change g- after an undo to a branch point works.

The current sequence number b_u_seq_cur is used in undo_time(), in
u_doit() this was calculated by subtracting one from the curhead
sequence number.

The curhead header entry represents the change that was just undone, so
the sequence number we want is that of the change we have moved to. This
is the sequence number of the undo head that is the uh_next element of
this curhead. That sequence number is not always one less than the
curhead sequence number -- there may have been an alternate branch at
this point.

Instead of subtracting one, we now directly find the sequence number of
curhead->uh_next.
2017-01-31 05:46:55 +01:00
Anmol Sethi
39a6f835e7 man.vim: get page after opening split (#6032)
This will ensure that $MANWIDTH is correctly set.
2017-01-31 16:03:45 +01:00
Anmol Sethi
5bcb972a88 man.vim: remove terminal escape characters (#6033)
This will make man.vim work on nixOS.
2017-01-31 16:00:00 +01:00
Matthieu Coudron
7c83657397 dist: runtime/nvim.desktop
Closes #3689

cmake: Add `desktop-install` and `icon-install` targets. `runtime`
target will trigger them.

Specification:
https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys

Icons are stored system-wide in /usr/share/applications or user wide at
/usr/share/icons/hicolor/scalable/apps and can be overriden in ~/.local/share/icons

nvim.desktop file can be installed system wide or in
~/.local/share/applications/

To test without an installer:
$ xdg-desktop-menu install --novendor runtime/nvim.desktop
$ xdg-icon-resource install --novendor --mode user --size 64 contrib/nvim-icon.png

Once it is installed, you can test with gtk-launch if installed or
dmenu/rofi (drun mode)
2017-01-31 02:02:09 +01:00
Tommy Allen
bdfa1479d2 eval.c: Fix findfile(), :find, gf in :terminal. #6009
Closes #4299
2017-01-31 00:48:30 +01:00
Justin M. Keyes
81525dc5c3 defaults: Revert 'mouse=a' (#6022)
This default causes too much confusion for terminal users. Until
a better approach is implemented, revert to the traditional default.

Better solution would be:
- Implement a right-click menu for TUI
- Set 'mouse=a' *only* if clipboard is working.

Closes #5938
2017-01-28 14:30:57 +01:00
James McCoy
5527754f95 Merge pull request #6012 from jamessan/override-TI-cursor-normal
tui: Ignore DECRST 12 in terminfo's cursor_normal, if present
2017-01-26 09:50:59 -05:00
Justin M. Keyes
59fd0c4132 refactor: Remove strncpy/STRNCPY. (#6008)
Closes #731
References #851

Note: This does not remove some intentional legacy usages of strncpy.
      - memcpy isn't equivalent because it doesn't check the string
        length of `src`, and doesn't zero-out the remainder of `dst`.
      - xstrlcpy isn't equivalent because it doesn't zero-out the
        remainder of `dst`. Some Vim logic depends on that (e.g.
        ex_append which calls vim_strnsave).

Helped-by: Douglas Schneider <ds3@ualberta.ca>
Helped-by: oni-link <knil.ino@gmail.com>
Helped-by: James McCoy <jamessan@jamessan.com>
2017-01-26 14:33:03 +01:00
Justin M. Keyes
f78982620a build: Disable jemalloc for FreeBSD. (#6007)
jemalloc's README states:

> jemalloc [is] the FreeBSD libc allocator since 2005. ...  Modern jemalloc
> releases continue to be integrated back into FreeBSD

Since FreeBSD ships with jemalloc in some form, we don't need to require
jemalloc there. Less risk, low cost.
2017-01-26 13:07:30 +01:00
James McCoy
fd2d4c5ab9 tui: Ignore DECRST 12 in terminfo's cursor_normal, if present
As discussed in neovim/neovim#5977, it's typical for the terminfo
database to disable cursor blink as part of setting up the normal
cursor.  Since this interferes with the user's control over the cursor,
we'll skip over DECRST 12 if it starts the cursor_normal entry.

Note, this doesn't handle any case where DECRST 12 is not at the start
of the entry since unibilium simply stores the given pointer.  We would
need to allocate (and somewhere free) a modified copy of what we get
back from unibi_get_str to handle that.
2017-01-25 11:15:05 -05:00
Justin M. Keyes
25427ae892 test: Fix broken test. 2017-01-24 14:25:50 +01:00
Justin M. Keyes
a8a673c20d Merge #5964 from equalsraf/windows-clipboard
Windows clipboard support
2017-01-24 00:24:26 +01:00
Justin M. Keyes
a3a241d313 ci: XXX: Disable "throttle" test on Travis macOS. 2017-01-23 22:17:16 +01:00
Justin M. Keyes
5892aab1b5 Merge #5996 from justinmk/coverity-133845
xstrlcat() + coverity fixes
2017-01-23 21:50:41 +01:00
Justin M. Keyes
b70a5cdd49 clint.py: Suggest xstrlcat instead of strcat. 2017-01-23 15:49:37 +01:00
Justin M. Keyes
7e799b6e91 refactor: Replace vim_strcat() with xstrlcat(). 2017-01-23 15:49:37 +01:00
Justin M. Keyes
6c467f3f7e coverity/133853: Out-of-bounds access 2017-01-23 15:49:37 +01:00
Justin M. Keyes
d97d66e173 coverity/155512: Pass correct length to strncat()
References 8bc2bffda9
2017-01-23 15:49:37 +01:00
Justin M. Keyes
6be8ea0787 coverity/133845: Negative array index read. (FP)
`find_command(s->ca.cmdchar) >= 0` was established near the start of
normal_execute(). And `unshift_special(&s->ca);` "should" not ever
result in s->ca.cmdchar containing a multibyte char.

So only an assert() is needed here.
2017-01-23 15:49:37 +01:00
Justin M. Keyes
73da522d73 errors: Introduce "E856: Filename too long" 2017-01-23 15:49:37 +01:00
cztchoice
7c7c5a80a4 add_pathsep(): Return false if filename is too long.
References #3042
2017-01-23 15:49:36 +01:00
cztchoice
6e75bb5cbb refactor: strlcat instead of str{n}cat.
Add xstrlcat function.

Closes #3042
References #988
References #1069

coverity: 71530, 71531, 71532
2017-01-23 15:49:36 +01:00
Justin M. Keyes
d4b931deac Merge #5995 from ZyX-I/coverity-fixes
coverity fixes
2017-01-23 01:30:50 +01:00
ZyX
5ac5c7971c coverity/133898: Fix sizeof argument 2017-01-23 02:16:16 +03:00
ZyX
61e04cae75 ex_cmds: Also pass correct length in windows code 2017-01-23 02:09:59 +03:00
ZyX
5369b0c7ea coverity/155511: Pass correct length argument to strncat() 2017-01-23 02:05:17 +03:00
ZyX
8bc2bffda9 coverity/155512: Pass correct length to strncat() 2017-01-23 02:03:48 +03:00
ZyX
47a7d32563 coverity/155513: Do not assume xcalloc can return NULL 2017-01-23 02:02:35 +03:00
Matthew Malcomson
e0e4825897 Don't set b_u_curhead in ex_undojoin()
vim-patch:8.0.0205
This provides no benefit, and introduces some bugs.
2017-01-22 21:19:46 +00:00
Shougo Matsushita
7255f00818 version.c: update
1914: signal
2074: HIKEY2UF()

Closes #5953
2017-01-22 15:10:51 +01:00
Justin M. Keyes
be09274287 test: Avoid Lua closure limit.
Fixes Lua error:
> function at line 543 has more than 60 upvalues
2017-01-22 14:13:53 +01:00
Justin M. Keyes
043d8ba422 Merge #5782 'Visual-mode put from @. register' 2017-01-22 11:10:24 +01:00
Justin M. Keyes
c86caf7e41 readfile(): Fix read-after-free.
References https://github.com/neovim/neovim/pull/5956#pullrequestreview-17812620

Helped-by: oni-link <knil.ino@gmail.com>
2017-01-21 21:57:44 +01:00
Justin M. Keyes
497db001df test: expand_env_esc()
Test expand_env_esc() using the same parameters reported in #3725.

Closes #3725
2017-01-21 18:17:44 +01:00
Justin M. Keyes
bd16e116eb win: test: Enable jobstart() 'shell' test. (#5983) 2017-01-21 17:04:39 +01:00
Justin M. Keyes
10864cd939 Merge #5977 from justinmk/tui-cursor-shape
tui: enable NVIM_TUI_ENABLE_CURSOR_SHAPE by default
2017-01-21 12:21:56 +01:00
Rui Abreu Ferreira
a27fcf38fd Windows: Install runtime dependencies with Neovim binary
Look for runtime dependencies diff.exe and win32yank.exe (and
recursively for DLL dependencies) and install them with nvim.exe. If a
dependency is missing a warning will be issued.
2017-01-20 18:29:18 +00:00
Rui Abreu Ferreira
1cb52309f1 Enable clipboard provider tests in Windows 2017-01-20 18:29:18 +00:00
Rui Abreu Ferreira
f59bb4be6c third-party: Add helper to fetch binary dependencies
Add cmake script with recipes to download binary dependencies, currently
the only dependency is win32yank.
2017-01-20 18:29:17 +00:00
Rui Abreu Ferreira
33cd06dfb7 Windows: Clipboard provider win32yank 2017-01-20 18:29:17 +00:00
Justin M. Keyes
ef753a76b9 tui: Enable mode-sensitive cursor by default.
Also give NVIM_TUI_ENABLE_CURSOR_SHAPE more granularity:
0 = do not change cursor shape
1 = non-blinking ("steady") cursor with mode-sensitive shape
2 = blinking cursor with mode-sensitive shape

Note: blink state is not changed for Konsole, instead user's terminal
preference makes the decision. (Can't do that for xterm-likes, DECSCUSR
forces us to choose blink-state.)

This is a temporary step until the TUI respects 'guicursor'
Ref: https://github.com/neovim/neovim/issues/2583#issuecomment-272988384
2017-01-20 15:48:41 +01:00
Justin M. Keyes
030349d852 input_enqueue(): Fix length calculation. (#5981)
Ref: https://github.com/neovim/neovim/issues/5885#issuecomment-273614373
2017-01-20 13:49:38 +01:00
Justin M. Keyes
4b2759b6da vim-patch:7.4.2049,7.4.2050,7.4.2064,7.4.2067,7.4.2081 (#5969)
vim-patch:7.4.2049,7.4.2050,7.4.2064,7.4.2067,7.4.2081
2017-01-20 13:11:26 +01:00
Justin M. Keyes
8684fdda3b tui: Do not decide cursor blinking.
"CSI ? 12 l" stops cursor blinking. `unibi_cursor_normal` need only
_show_ the cursor, not make any pronouncement about cursor blinking.
User's terminal setting (or NVIM_TUI_ENABLE_CURSOR_SHAPE) takes
precedence.
2017-01-20 01:59:29 +01:00
Justin M. Keyes
e7de3b5f84 test/timer_spec.lua: Relax expected count.
Test sometimes fails on AppVeyor (Windows). 300/50=6, but there could be
environment factors that miss the timer interval on the "edges".
timer_start() does not have such a hard requirement.
2017-01-19 14:46:29 +01:00
Justin M. Keyes
3a574af3c4 ci: Disable "CTRL-C interrupts :global" test
This test is low-value, high-cost. It's slow, and sometimes crashes
luajit. It's still enabled on local runs, that's good enough.
2017-01-19 14:22:01 +01:00
Justin M. Keyes
b7b82f8c71 Merge #5937 from justinmk/win32-test
Windows: test: enable job_spec.lua
2017-01-19 11:10:58 +01:00
Justin M. Keyes
5db30dcc19 Merge #5865 from lonerover/vim-7.4.2036
vim-patch:7.4.2036
2017-01-19 10:56:19 +01:00
Justin M. Keyes
7637df4b59 win: test: XXX: Disable some tests. 2017-01-19 09:55:57 +01:00
Justin M. Keyes
32c7971b2a win: fix warnings 2017-01-19 09:55:57 +01:00
Justin M. Keyes
e40946a5be win: test: enable job_spec.lua
- Default to powershell.
- Avoid hardcoded "-c".
- Remove ^M character from received lines.
- pending_win32(): clear() is unnecessary and it pollutes the tests.

Closes #3973
Helped-by: Rui Abreu Ferreira <raf-ep@gmx.com>
2017-01-19 09:55:57 +01:00
rover
d204cbc0ce buffer.c: use a map instead of hashtab 2017-01-19 12:08:08 +08:00
lonerover
0060974b2b vim-patch:7.4.2081
Problem:    Line numbers in the error list are not always adjusted.
Solution:   Set b_has_qf_entry properly. (Yegappan Lakshmanan)

c1542744e7
2017-01-19 10:51:58 +08:00
lonerover
86f76108f7 vim-patch:7.4.2067
Problem:    Compiler warning for char/char_u conversion. (Tony Mechelynck)
            Inefficient code.
Solution:   Use more lines to fill with spaces. (Nikolai Pavlov) Add type cast.

16ec3c9be3
2017-01-19 10:51:39 +08:00
lonerover
480b02fdb2 vim-patch:7.4.2064
Problem:    Coverity warns for possible buffer overflow.
Solution:   Use vim_strcat() instead of strcat().

4f5c5f2980
2017-01-19 10:11:53 +08:00
lonerover
827f2f9f6b vim-patch:7.4.2050
Problem:    When using ":vimgrep" may end up with duplicate buffers.
Solution:   When adding an error list entry pass the buffer number if possible.

015102e91e
2017-01-19 10:11:53 +08:00
lonerover
1a06a39488 vim-patch:7.4.2049
Problem:    There is no way to get a list of the error lists.
Solution:   Add ":chistory" and ":lhistory".

f6acffbe83
2017-01-19 10:11:53 +08:00
James McCoy
75e6af44e0 Merge pull request #5963 from jamessan/screen-expect-clarity
test: screen: Assert expected row count matches configured screen height
2017-01-18 15:16:07 -05:00
Justin M. Keyes
2ee60e5b28 test: nvim_ui_attach() with huge dimensions. (#5974)
Also:
- Attempt to constrain wall-of-text in screen.lua.
- Windows: Enable screen_basic_spec.lua

Closes #2180
2017-01-18 20:28:35 +01:00
James McCoy
e2b031a342 test: screen_basic: Re-enable min width/height test 2017-01-18 11:24:39 -05:00
James McCoy
4322021bae test: screen: Assert expected row count matches configured screen height
When there is a difference in expected vs. actual row count, the user
gets a confusing message about being unable to string concat a nil value
from screen:expect.

This assert makes it clear what the problem is rather than requiring
people to dig through the code of screen:expect to determine what
happened.
2017-01-18 11:24:34 -05:00
Matthew Malcomson
b7ee8fbc81 put fixup, esp. ". register close #5709 #5781
Note some bugs were judged to have too ugly a fix to solve, tests to
demonstrate these problems, and the explanation behind not fixing them
are below.

describe('register . problems', function()
  before_each(reset)

  -- The difficulty here is: The basic requirement is that the text
  -- inserted is treated as if it were typed in insert mode. This is why
  -- the paste method is to enter insert mode and enter the ". register
  -- into readbuf1.
  -- We can't add a count into the readbuf here because the insert mode
  -- count is implemented with readbuf2 which is checked for characters
  -- after readbuf1.
  -- Hence, the ".gp command (which adds extra characters into readbuf1
  -- to emulate leaving the cursor after the text by moving the cursor
  -- after inserting the text) would insert the motion characters into
  -- the buffer instead of using them to move after the insert has been
  -- done.
  -- I could probably get this working properly with a special flag put
  -- into start_redo_ins() and set in do_put(), but I think this adds
  -- much more complexity than fixing this bug justifies.
  pending('should not change the ". register with ".2p', function()
    local orig_register = funcs.getreg('.')
    feed('2".p')
    eq(orig_register, funcs.getreg('.'))
  end)

  describe("cursor positioning after undo and redo with '.'", function()
    before_each(reset)
    local function make_cursor_test(macro_string)
      return function()
        feed(macro_string)
        local afterpos = funcs.getcurpos()
        local orig_string = curbuf_contents()
        feed('u.')
        eq(afterpos, funcs.getcurpos())
        expect(orig_string)
      end
    end
    -- The difficulty here is: setting the cursor after the end of the
    -- pasted text is done by adding a motion command to the
    -- stuffbuffer after the insert.
    -- Modifying 'redobuff' is done in the code that handles inserting
    -- text and moving around.
    -- I could add a special case in ins_esc() that checks for a flag
    -- set in do_put() to add the motion character to the redo buffer,
    -- but I think that is starting to get way too convoluted for the
    -- benefit.
    pending('should be the same after ".gp and ".gpu.',
            make_cursor_test('".gp'))
    -- The difficulty here is: putting forwards is implemented by using
    -- 'a' instead of 'i' to start insert.
    -- Undoing with 'u' an insert that began with 'a' leaves the cursor
    -- where the first character was inserted, not where the cursor was
    -- when the 'a' was pressed.
    -- We account for this the first time by saving the cursor position
    -- in do_put(), but this isn't stored in redobuff for a second time
    -- around.
    -- We can't change how such a fundamental action as undo after
    -- inserting with 'a' behaves, we could add in a special case
    -- whereby we set a flag in do_put() and read it when entering
    -- insert mode but this seems like way too much to fix such a minor
    -- bug.
    pending('should be the same after ".pu. and ".pu.u.',
            make_cursor_test('".pu.'))
  end)
end)
2017-01-18 12:28:10 +00:00
Justin M. Keyes
d3b4764dc1 win: Define USE_FNAME_CASE (#5962) 2017-01-17 16:32:41 +01:00
Justin M. Keyes
be4c896845 DirChanged: set <amatch> (#5961)
Also:
- test that DirChanged is not recursive
- fix 'not trigger if :cd fails' test on Windows
2017-01-17 10:47:20 +01:00
Shougo
a062cd4ce5 vim-patch:7.4.2062 (#5954)
Problem:    Using dummy variable to compute struct member offset.
Solution:   Use offsetof().

840268400d
2017-01-16 23:18:19 +01:00
Marco Hinz
340f79b4b8 Merge #5928 'New event: DirChanged' 2017-01-16 13:36:16 +01:00
Shougo
fa94c4c2d9 vim-patch:7.4.2031 (#5955)
Problem:    The list_lbr_utf8 test fails if ~/.vim/syntax/c.vim sets
            'textwidth' to a non-zero value. (Oyvind A. Holm)
Solution:   Add a setup.vim file that sets 'runtimepath' and $HOME to a safe
            value. (partly by Christian Brabandt, closes vim/vim#912)

89b10421ca
2017-01-16 12:50:43 +01:00
Michael Schupikov
95a4244587 readfile(): Avoid file message when reading from stdin. #5956
Closes #5921
2017-01-16 01:23:48 +01:00
Justin M. Keyes
3ba5e43d2e Merge #5918 'vim-patch: 7.4.2006, 7.4.2075, 7.4.2077, 7.4.2117, 7.4.2300, 7.4.2313, 7.4.2314'. 2017-01-16 00:59:50 +01:00
Shougo
3fd7be6d3e vim-patch:7.4.2099 (#5951)
Problem:    When a keymap is active only "(lang)" is displayed. (Ilya
            Dogolazky)
Solution:   Show the keymap name. (Dmitri Vereshchagin, closes vim/vim#933)

73ac0c4281
2017-01-15 22:24:12 +01:00
Matthew Malcomson
b5560a69b1 setpos(): Set lowercase mark in other buffers (#5753)
Also make setpos("'A", [999, 1, 1, 0]) fail, i.e. return -1 (assuming there is no buffer 999).

Fixes #5713

Background:

`:help setpos()` mentions an argument `"bufnum"` that determines the buffer a mark should be put in.
This argument is respected for uppercase marks, but not for lowercase marks.
This is reasonable (though I personally would like `setpos()` to be able to set marks in other buffers), but the help doesn't mention this anywhere.

It's also strange that attempting to change buffers with `setpos('.', [bufnr('#'), 1, 1, 0])` alerts the user that having a different buffer is an error, while attempting to set a mark with `setpos("'d", [bufnr('#'), 1, 1, 0])` doesn't tell the user that the `"bufnum"` argument is an error.
2017-01-15 21:36:29 +01:00
Justin M. Keyes
a3a5090ba4 win: ci/AppVeyor: Rearrange PATH setup for python. (#5946)
This was an attempt to enable test/functional/provider/python3_spec.lua
It actually *does* appear to work if we do this:

    mingw32-make functionaltest VERBOSE=1 PATH=C:\Python35;C:\Python27;%PATH%

Note that %PATH% *already* has C:\Python35 at its start by then, so
PATH=C:\Python35;C:\Python27;%PATH% is _redundant_.
python3_spec.lua *does* find python3.exe in that case, and succeeds.
But it causes weird failures in unrelated tests:

    [----------] Running tests from C:/projects/neovim/test/functional\core\job_partial_spec.lua
    [ RUN      ] ...rojects/neovim/test/functional\core\job_partial_spec.lua @ 17: jobs with partials works correctly
    .\test\functional\helpers.lua:89: Vim(call):E903: Process for command "powershell" could not be spawned
    stack traceback:
        .\test\functional\helpers.lua:89: in function 'request'
        .\test\functional\helpers.lua:147: in function 'nvim_command'
        .\test\functional\helpers.lua:344: in function 'source'
        ...rojects/neovim/test/functional\core\job_partial_spec.lua:18: in function <...rojects/neovim/test/functional\core\job_partial_spec.lua:17>
    [  ERROR   ] ...rojects/neovim/test/functional\core\job_partial_spec.lua @ 17: jobs with partials works correctly (0.00 ms)

    [ RUN      ] C:/projects/neovim/test/functional\eval\execute_spec.lua @ 73: execute() does not capture shell-command output
    C:/projects/neovim/test/functional\eval\execute_spec.lua:74: Expected objects to be the same.
    Passed in:
    (string) '
    :!echo "foo"
    Cannot execute cmd.exe
    shell returned -1
    '
    Expected:
    (string) '
    :!echo "foo"
    '
    stack traceback:
        C:/projects/neovim/test/functional\eval\execute_spec.lua:74: in function <C:/projects/neovim/test/functional\eval\execute_spec.lua:73>
    [  FAILED  ] C:/projects/neovim/test/functional\eval\execute_spec.lua @ 73: execute() does not capture shell-command output (15.60 ms)

    [ RUN      ] C:/projects/neovim/test/functional\ex_cmds\arg_spec.lua @ 11: :argument does not restart :terminal buffer
    C:/projects/neovim/test/functional\ex_cmds\arg_spec.lua:18: Expected objects to be the same.
    Passed in:
    (boolean) false
    Expected:
    (boolean) true
    stack traceback:
        C:/projects/neovim/test/functional\ex_cmds\arg_spec.lua:18: in function <C:/projects/neovim/test/functional\ex_cmds\arg_spec.lua:11>
    [  FAILED  ] C:/projects/neovim/test/functional\ex_cmds\arg_spec.lua @ 11: :argument does not restart :terminal buffer (0.00 ms)

    [ RUN      ] C:/projects/neovim/test/functional\ex_cmds\edit_spec.lua @ 11: :edit without arguments does not restart :terminal buffer
    C:/projects/neovim/test/functional\ex_cmds\edit_spec.lua:16: Expected objects to be the same.
    Passed in:
    (boolean) false
    Expected:
    (boolean) true
    stack traceback:
        C:/projects/neovim/test/functional\ex_cmds\edit_spec.lua:16: in function <C:/projects/neovim/test/functional\ex_cmds\edit_spec.lua:11>
    [  FAILED  ] C:/projects/neovim/test/functional\ex_cmds\edit_spec.lua @ 11: :edit without arguments does not restart :terminal buffer (15.60 ms)

    [ RUN      ] ...s/neovim/test/functional\eval\msgpack_functions_spec.lua @ 457: msgpackparse() function msgpackparse(systemlist(...)) does not segfault. #3135
    .\test\functional\helpers.lua:89: Failed to evaluate expression
    stack traceback:
        .\test\functional\helpers.lua:89: in function 'eval'
        ...s/neovim/test/functional\eval\msgpack_functions_spec.lua:460: in function <...s/neovim/test/functional\eval\msgpack_functions_spec.lua:457>
    [  ERROR   ] ...s/neovim/test/functional\eval\msgpack_functions_spec.lua @ 457: msgpackparse() function msgpackparse(systemlist(...)) does not segfault. #3135 (15.63 ms)

    [  FAILED  ] 3 tests, listed below:
    [  FAILED  ] C:/projects/neovim/test/functional\eval\execute_spec.lua @ 73: execute() does not capture shell-command output
    [  FAILED  ] C:/projects/neovim/test/functional\ex_cmds\arg_spec.lua @ 11: :argument does not restart :terminal buffer
    [  FAILED  ] C:/projects/neovim/test/functional\ex_cmds\edit_spec.lua @ 11: :edit without arguments does not restart :terminal buffer
    [  ERROR   ] 2 errors, listed below:
    [  ERROR   ] ...rojects/neovim/test/functional\core\job_partial_spec.lua @ 17: jobs with partials works correctly
    [  ERROR   ] ...s/neovim/test/functional\eval\msgpack_functions_spec.lua @ 457: msgpackparse() function msgpackparse(systemlist(...)) does not segfault. #3135
     64 SKIPPED TESTS
     3 FAILED TESTS
     2 ERRORS
    -- Output to stderr:
    The system cannot find the path specified.
    CMake Error at C:/projects/neovim/cmake/RunTests.cmake:46 (message):
      Running functional tests failed with error: 1.
2017-01-15 14:45:14 +01:00
Shougo
cecaaa84cd vim-patch:7.4.2065 (#5950)
Problem:    Compiler warns for uninitialzed variable. (John Marriott)
Solution:   Set lnum to the right value.

69aa099641
2017-01-15 13:09:39 +01:00
Justin M. Keyes
192243492d test: fix syntax error
Also re-arrange the test to match Vim upstream.
2017-01-15 05:31:37 +01:00
Shougo
a6be6df5d6 vim-patch:7.4.2160 (#5952)
Problem:    setmatches() mixes up values. (Nikolai Pavlov)
Solution:   Save the string instead of reusing a shared buffer.

7dc5e2e486
2017-01-15 02:38:57 +01:00
Shougo
c88e4a270d vim-patch:7.4.1968 (#5949)
Problem:    Invalid memory access with "\<C-">.
Solution:   Do not recognize this as a special character. (Dominique Pelle)

1d90a5a5af
2017-01-15 01:08:27 +01:00
Shougo
b98da8de98 vim-patch:7.4.1910 (#5948)
Problem:    Tests using external command to delete directory.
Solution:   Use delete().

abc70bbf36
2017-01-15 00:44:16 +01:00
Shougo
1474304224 vim-patch:7.4.1851 (#5947)
Problem:    test_syn_attr failes when using the GUI. (Dominique Pelle)
Solution:   Escape the font name properly.

180fc2d418
2017-01-15 00:41:43 +01:00
James McCoy
a265ff448e Merge pull request #5940 from jamessan/master
job: Consume content from rbuffer before invoking the callback again
2017-01-14 07:49:51 -05:00
James McCoy
bde9bedb0b job: Consume content from rbuffer before invoking the callback again
While a job callback is active, it may be invoked again.  Since the
data handled by the first invocation of the callback hasn't been marked
as consumed, the subsequent invocation will see the same data.

Reported-by: Daniel Hahler
Patch-by: oni-link
Closes #5889
2017-01-14 07:49:07 -05:00
Justin M. Keyes
58ba3bcbef Merge #5936 from blueyed/vim-8.0.0121
vim-patch:8.0.0121
2017-01-14 12:29:46 +01:00
James McCoy
947f1ebcb9 Merge pull request #5941 from blueyed/better-clint-note
src/clint.py: improve "Ignoring" message
2017-01-13 20:47:41 -05:00
Daniel Hahler
980bf1e548 Linting 2017-01-13 23:41:00 +01:00
Daniel Hahler
a0b33b333e vim-patch:8.0.0121
Problem:    Setting 'cursorline' changes the curswant column. (Daniel Hahler)
Solution:   Add the P_RWINONLY flag. (closes vim/vim#1297)

a2477fd349
2017-01-13 23:40:59 +01:00
Daniel Hahler
0aa1cff604 src/clint.py: improve "Ignoring" message
It was a bit confusing for me when seeing it myself the first time.

[ci skip]
2017-01-13 22:19:47 +01:00
Marco Hinz
1f7a119f5e Rename yank_do_autocmd() to do_autocmd_textyankpost() 2017-01-13 15:30:02 +01:00
Marco Hinz
20867e6319 Document DirChanged 2017-01-13 15:30:01 +01:00
Marco Hinz
a05779aa1c Move apply_autocmd_dirchanged() to vim_chdir() 2017-01-13 15:29:59 +01:00
Marco Hinz
a2f8adad4c Add autocmd/dirchanged_spec.lua 2017-01-13 15:29:05 +01:00
Marco Hinz
197f50bf9a Trigger DirChanged on 'autochdir' 2017-01-13 15:29:04 +01:00
Marco Hinz
30f775f8a6 Don't expand filenames during autocmd 2017-01-13 15:29:04 +01:00
Marco Hinz
bd8025727c New event: DirChanged 2017-01-13 15:29:00 +01:00
Justin M. Keyes
f686635420 Merge #5933 from justinmk/dir-bufenter
open_buffer(): Raise `BufEnter` for directories.
2017-01-13 04:09:37 +01:00
Justin M. Keyes
82edcb593b Windows: enable more tests 2017-01-13 01:17:12 +01:00
Justin M. Keyes
cc7f1aba46 test: BufEnter 2017-01-13 01:17:11 +01:00
Justin M. Keyes
b5e8e2f20d lint 2017-01-13 01:17:11 +01:00
James McCoy
802b49ee80 Merge pull request #5935 from jamessan/dictwatcher-crash
eval: Remove dictwatcher from watchers queue before freeing it
2017-01-12 18:24:19 -05:00
Justin M. Keyes
42c922b32c open_buffer(): Do BufEnter for directories.
Abuse NOTDONE to give some nuance to the return value of readfile(), so
that open_buffer() can distinguish between "failed, lol" and "failed
because the path is a directory".

Before this change, Vim *already* creates a new buffer when a directory
is edited. So there is no reason it should not raise BufEnter, that was
an implementation detail of ye olde readfile().

Most of the changes in this commit merely preserve the old semantics.
The "implicit" change that we actually are interested in, is this line
in `open_buffer()`, where `retval` being non-FAIL allows EVENT_BUFENTER
to be applied:

    apply_autocmds_retval(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf, &retval);

References https://github.com/vim/vim/issues/1353
2017-01-12 23:10:38 +01:00
James McCoy
674db4b01f eval: Remove dictwatcher from watchers queue before freeing it
This fixes a use-after-free noticed by ASAN which would occur when a
dictwatcher was still active on a dictionary when the dictionary was
freed.

    fun! MakeWatch()
      let d = {'foo': 'bar'}
      call dictwatcheradd(d, 'foo', function('...'))
    endfun

Patch-by: oni-link
Closes #5930
2017-01-12 14:47:43 -05:00
James McCoy
50d0d89129 Merge pull request #5932 from jamessan/icm-fixes
inccommand: Ignore errors during preview and make cmd_can_preview stricter
2017-01-12 06:45:03 -05:00
James McCoy
f2dff86493 inccommand: Preview :sub commands only after the delimiter is present
Closes #5888
2017-01-11 21:05:02 -05:00
James McCoy
dcd77c64ef inccommand: Suppress error reporting when previewing commands
Closes #5912
2017-01-11 21:05:02 -05:00
Justin M. Keyes
207ba359b0 Windows: vim_getenv(): Find runtime relative to nvim. #3303 (#5929)
In Windows we cannot rely on absolute install paths to point to the
location of the runtime. Vim uses the path of the current binary as
a possible location for the runtime folder. In Neovim the install
location places the runtime folder in ../share/nvim/runtime.

In Vim this logic is guarded by USE_EXE_NAME, which is defined for win32
and macOS.

TODO: We may need to incorporate similar logic for macOS:
0cdb72aa38/src/misc1.c (L4287-L4308)
2017-01-11 06:00:55 +01:00
Justin M. Keyes
a08d2f54a0 Merge #5910 from justinmk/win32-jobstart
Windows: fix jobstart()
2017-01-11 02:19:11 +01:00
Justin M. Keyes
9ecdce1d53 test: system([...]): v:shell_error 2017-01-11 01:05:56 +01:00
Rui Abreu Ferreira
1e079fa987 system([...]): Set v:shell_error=-1 if not executable.
Do _not_ set v:shell_error on parameter validation error.

system([...]) does not invoke a shell, so this change is somewhat
questionable. But `:help v:shell_error` is sufficiently vague to allow
-1 in this case.
2017-01-11 01:05:55 +01:00
Rui Abreu Ferreira
4178e865d5 Windows: ci/AppVeyor: Enable Python provider tests
Setup python2/3 and install the Neovim client in Appveyor to
enable the python tests.

- Use the Python installation provided by Appveyor, because dependencies
  pyuv, greenlet have issues compiling with MinGW-w64. And this way we
  avoid building those too.
- Copy python.exe => python3.exe so that the python provider can find
  python3.
2017-01-11 01:05:55 +01:00
Rui Abreu Ferreira
ac44d0ed54 test: system([...]) 2017-01-11 01:05:55 +01:00
Marco Hinz
15c85d8462 clipboard: only check for pbcopy on macOS (#5927)
Fixes #5926.
2017-01-11 00:50:07 +01:00
Rui Abreu Ferreira
a05ebf4a2d Windows: libuv_process_spawn(): Allow libuv argument quoting/escaping.
Closes #5360
References #3305
Reverts commit dc9652e68d.

Disabling the quoting was does not solve the problem in general, and
we would end up having to handle the quoting ourselves.

See: https://github.com/JuliaLang/julia/issues/13776
2017-01-10 23:34:04 +01:00
James McCoy
8a5962023f Merge pull request #5924 from jamessan/vim-7.4.2100
vim-patch:7.4.2100
2017-01-10 15:32:29 -05:00
James McCoy
fc47bd92df lint 2017-01-10 13:05:41 -05:00
James McCoy
4c3204097c vim-patch:7.4.2100
Problem:    "cgn" and "dgn" do not work correctly with a single character
            match and the replacement includes the searched pattern. (John
            Beckett)
Solution:   If the match is found in the wrong column try in the next column.
            Turn the test into new style. (Christian Brabandt)

6835dc61ae

Closes #5796
2017-01-10 13:05:41 -05:00
James McCoy
6095c5df45 Merge pull request #5863 from ZyX-I/more-clint-checks
More clint brace checks
2017-01-10 11:43:14 -05:00
James McCoy
77de73c7c8 Merge pull request #5919 from jamessan/vim-7.4.2008
vim-patch:7.4.2008,7.4.2009
2017-01-10 09:56:53 -05:00
James McCoy
f3c93fbefe lint 2017-01-10 07:14:24 -05:00
James McCoy
9b47115d53 vim-patch:7.4.2009
Problem:    Messages test fails.
Solution:   Don't set redir_execute before returning.

ed59aa60d3
2017-01-10 07:14:24 -05:00
James McCoy
6520517e22 vim-patch:7.4.2008
Problem:    evalcmd() has a confusing name.
Solution:   Rename to execute().  Make silent optional.  Support a list of
            commands.

79815f1ec7
2017-01-10 07:14:12 -05:00
James McCoy
9fcf6d577f Merge pull request #5862 from jamessan/vim-aa3b15d
vim-patch:aa3b15d,82af871,7.4.1925,c95a302
2017-01-09 22:31:45 -05:00
James McCoy
8f32c04df4 vim-patch:c95a302
Updated runtime files.

c95a302a4c
2017-01-09 20:24:08 -05:00
James McCoy
492f2cfeff vim-patch:7.4.1925
Problem:    Viminfo does not merge file marks properly.
Solution:   Use a timestamp.  Add the :clearjumps command.

2d35899721
2017-01-09 20:23:41 -05:00
James McCoy
282109c51b vim-patch:82af871
Updated runtime files.

82af8710bf
2017-01-09 20:23:41 -05:00
James McCoy
60e306368d vim-patch:aa3b15d
Updated runtime files.

aa3b15dbeb
2017-01-09 20:23:41 -05:00
James McCoy
b260004d65 Merge pull request #5860 from jamessan/vim-7.4.1889
vim-patch:7.4.1889
2017-01-09 20:20:03 -05:00
lonerover
2b56cf099a fix test failure 2017-01-09 13:06:24 +08:00
lonerover
a584375e9f vim-patch:7.4.2314
Problem:    No error when deleting an augroup while it's the current one.
Solution:   Disallow deleting an augroup when it's the current one.

de653f0880
2017-01-09 12:23:25 +08:00
lonerover
f8f04350bd vim-patch:7.4.2313
Problem:    Crash when deleting an augroup and listing an autocommand.
            (Dominique Pelle)
Solution:   Make sure deleted_augroup is valid.

b62cc36a60
2017-01-09 12:12:42 +08:00
lonerover
6f285226a9 vim-patch:7.4.2300
Problem:    Get warning for deleting autocommand group when the autocommand
            using the group is scheduled for deletion. (Pavol Juhas)
Solution:   Check for deleted autocommand.

5c80908ced
2017-01-09 11:06:11 +08:00
lonerover
7486e7586d vim-patch:7.4.2117
Problem:    Deleting an augroup that still has autocmds does not give a
            warning.  The next defined augroup takes its place.
Solution:   Give a warning and prevent the index being used for another group
            name.

f2c4c39119
2017-01-09 10:58:05 +08:00
Justin M. Keyes
94101987a5 process_wait(): Avoid dereference after LOOP_PROCESS_EVENTS. (#5917) 2017-01-09 01:42:58 +01:00
Justin M. Keyes
1420e10474 Merge #5519 from blueyed/improve-python-health-check
Improve Python health check
2017-01-09 00:07:13 +01:00
Marco Hinz
370379a486 health: completion for :CheckHealth 2017-01-08 23:49:11 +01:00
Daniel Hahler
35988b93e1 healthcheck: s:download: do not report curl errors (twice)
Since `curl -s` is used, the actual error (e.g. "curl: (6) Could not
resolve host: pypi.python.org") gets not reported anyway, and s:download
returns an error message with `s:shell_error` already.
This changes `s:download` to also include `a:url` in the error message
now.

It removes

> ERROR: Command error (7) curl -sL https://pypi.python.org/pypi/neovim/json:

And changes

> ERROR: HTTP request failed: error: curl error with https://pypi.python.org/pypi/neovim/json: 6
2017-01-08 23:26:47 +01:00
Daniel Hahler
7db0017f4e healthcheck: s:check_python: only report latest with good response 2017-01-08 23:26:47 +01:00
Daniel Hahler
adf32e1403 healthcheck: python: prefer neovim.VERSION 2017-01-08 23:26:46 +01:00
Daniel Hahler
5ce50504f9 healthcheck: python: include nvim path for unknown/outdated version
This helps to identify where the `neovim` module is coming from, e.g.

    - INFO: python3-neovim version: 0.1.10 (outdated; from ~/Vcs/neovim-python-client/neovim)
    - WARNING: Latest python3-neovim is NOT installed: 0.1.12
2017-01-08 23:26:46 +01:00
Daniel Hahler
0583ca63a5 Improve error reporting for Python health check
- s:version_info: return errors from the `import`
 - skip report_ok for latest version, in case the current version was
   not found.  status contains the error that has been reported in that
   case already.
2017-01-08 23:26:42 +01:00
Daniel Hahler
339dd4b1fb s:check_python: handle 'pip install --user -e' 2017-01-08 23:25:45 +01:00
Justin M. Keyes
e7b1b5d6ed health: Windows: Handle backslash path separators. (#5914)
* health: Handle backslash path separators.
* health: brevity, consistency
* health: Do not set bufhidden=wipe.
  In the context of CheckHealth, bufhidden=wipe loses data for no reason.
2017-01-08 21:26:00 +01:00
rover
f5d06c52a2 vim-patch:7.4.2077
Problem:    Cannot update 'tabline' when a tab was closed.
Solution:   Add the TabClosed autocmd event. (partly by Felipe Morales)

12c11d5530
2017-01-08 23:16:39 +08:00
rover
c2344f3d31 vim-patch:7.4.2075
Problem:    No autocommand event to initialize a window or tab page.
Solution:   Add WinNew and TabNew events. (partly by Felipe Morales)

c917da4b3e
2017-01-08 22:46:08 +08:00
rover
888cdce3aa vim-patch:7.4.2006
Problem:    Crash when using tabnext in BufUnload autocmd. (Norio Takagi)
Solution:   First check that the current buffer is the right one. (Hirohito
            Higashi)

30445cb6e9
2017-01-08 21:00:48 +08:00
Justin M. Keyes
2a366b674a Merge #5909 from justinmk/win32-xdg
Windows: fix XDG fallback paths
2017-01-08 03:57:54 +01:00
Rui Abreu Ferreira
ae1ba2b2fb test: Windows: Re-enable shada functional tests
One of the tests remains disabled until we figure out the expected
behaviour of mkdir() on Windows when `prot` is passed.
2017-01-08 03:23:15 +01:00
Rui Abreu Ferreira
32156f06f7 XDG: Windows: resolve $LOCALAPPDATA, $TEMP (#5278)
After #4964 environment variables in the XDG "fallback" table are no
longer expanded.

Fallback to correctly expanded $LOCALAPPDATA, $TEMP. If that fails
(unlikely), fallback to hard-coded paths (e.g. ~/AppData/Local).

Closes #5255
2017-01-08 03:18:00 +01:00
Marco Hinz
ca7a5c0ce7 ruby: old versions don't know gem list -e 2017-01-08 00:44:48 +01:00
Justin M. Keyes
d2f16d534f Merge #5079 from ZyX-I/shada-save-current-pos
shada: Save current cursor position before saving jumps
2017-01-07 23:15:50 +01:00
Justin M. Keyes
50af8e0255 Merge #5903 from ZyX-I/fix-5901
Reset copyID also when dictionary is referenced
2017-01-07 23:13:57 +01:00
ZyX
3967618fa5 unittest: Fix linter errors 2017-01-07 19:12:18 +03:00
ZyX
dea4bb33dc unittest,memory: Fix tests 2017-01-07 19:07:32 +03:00
Marco Hinz
40c76741c1 health: refactor s:check_ruby()
I gone through every single line, renamed the variables to be more consistent
and reordered many lines. Information is now printed as soon as it's available
and errors lead to early returns.

I altered the suggestions for each condition to be more precise and checked that
they fail properly.

This also prevents invalid arguments getting passed to s:version_cmp().
2017-01-07 16:56:38 +01:00
ZyX
6f267b3968 memory: Document new additions to memory.h 2017-01-07 17:58:29 +03:00
ZyX
35416e89bc memory: Restore entered_free_all_mem functionality 2017-01-07 17:52:53 +03:00
ZyX
9a09ffa883 eval: Fix failing test 2017-01-07 15:54:55 +03:00
ZyX
88a4820cc9 unittest: Add failing test for freeing dictionaries in a list 2017-01-07 15:54:55 +03:00
ZyX
728367a196 unittest: Add dict_items function 2017-01-07 15:54:55 +03:00
ZyX
a970c1a957 eval: Make sure that copyID is reset when needed
Works by making value pushed on stack represent the exhausted list.

Fixes #5901, except for dictionaries which need similar adjustment.
2017-01-07 15:15:14 +03:00
ZyX
7d0a892b37 eval/typval_encode.h: Use only a single macros with _INNER[_2] hack 2017-01-07 14:59:42 +03:00
ZyX
41cbb7891d unittest: Add failing test of freeing lists 2017-01-07 14:48:21 +03:00
ZyX
8fd3d31329 unittest: Allow mocking allocator calls 2017-01-07 14:48:21 +03:00
James McCoy
b4c0c61f5c Merge pull request #5826 from ZyX-I/fix-typval_encode
Refactor eval/typval_encode.h
2017-01-06 21:11:33 -05:00
ZyX
dd48d7b94b eval: Fix typo 2017-01-07 00:17:31 +03:00
ZyX
527636f158 functests: Add tests for new fixes 2017-01-06 23:52:31 +03:00
ZyX
1052009b37 eval/typval_encode: Dump empty dictionary before checking for refcycle
Otherwise copyID will stay forever on empty dictionaries.
2017-01-06 23:32:04 +03:00
ZyX
10c6e68db6 eval: Work with reference cycles in partials (self) properly 2017-01-06 22:57:34 +03:00
ZyX
6584fb723a eval/typval_encode: Use TYPVAL_ENCODE_CONV_EMPTY_DICT for partials 2017-01-06 22:48:50 +03:00
ZyX
7f11ec00fd eval/typval_encode.h: Remove documentation that is located in *.c.h 2017-01-06 22:38:46 +03:00
Michael Schupikov
1fee9a7151 eval.c: filter_map(): avoid maybe-uninitialized warning (#5897)
maybe-uninitialized warning observed with -Ofast.
2017-01-06 18:23:52 +01:00
James McCoy
ffdf1904d6 Merge pull request #5893 from lonerover/vim-7.4.2127
vim-patch:7.4.2127
2017-01-06 09:54:40 -05:00
James McCoy
f82f27ccec Merge pull request #5892 from lonerover/vim-7.4.2103
vim-patch: 7.4.2103
2017-01-06 09:47:30 -05:00
lonerover
6c69bc9788 fix lint error 2017-01-06 09:25:15 +08:00
Michael Schupikov
23b39ebb24 time.c: os_microdelay(): Let input cancel the delay. #5830
Closes #5397
2017-01-06 00:57:31 +01:00
Marcus Fritzsch
afa7f42f77 man.vim: Avoid empty argument when MANWIDTH is set. (#5882) 2017-01-06 00:20:22 +01:00
ZyX
a1cce83d3c clint: Add more exceptions to “space after a cast” rule
Python does not allow branching here, complaining that look-behind is not 
fixed-width.
2017-01-06 01:52:36 +03:00
ZyX
10d9c6d813 shada: Mark ALWAYS_INLINE function as inline 2017-01-06 01:47:07 +03:00
Marco Hinz
1fbee630a8 provider: add Python 3.6 (#5886) 2017-01-05 21:29:31 +01:00
nfnty
7a344c795f path.c: vim_FullName(): Fix heap overflow #5737
- Clarify documentation.
- Return `FAIL` and truncate if `fname` is too long.
- Add tests.
2017-01-05 15:17:34 +01:00
rover
9da9e1c417 vim-patch:7.4.2127
Problem:    The short form of ":noswapfile" is ":noswap" instead of ":now".
            (Kent Sibilev)
Solution:   Only require three characters.  Add a test for the short forms.

3bcfca3ab4
2017-01-05 21:12:02 +08:00
lonerover
12b50b116f vim-patch:7.4.2110 (#5880)
Problem:    When there is an CmdUndefined autocmd then the error for a missing
            command is E464 instead of E492. (Manuel Ortega)
Solution:   Don't let the pointer be NULL.

eac784eced
2017-01-05 13:55:32 +01:00
lonerover
bef645e5e4 vim-patch:7.4.2103
Problem:    Can't have "augroup END" right after ":au!".
Solution:   Check for the bar character before the command argument.

e99e84497b
2017-01-05 13:33:56 +08:00
Justin M. Keyes
e21aef1e10 Merge #5874 from ZyX-I/fix-5482
Fix plugin which opens ShaDa files
2017-01-04 17:34:17 +01:00
ZyX
c93ce07628 *: Remove // fname() comments near typval_encode includes 2017-01-04 19:04:15 +03:00
ZyX
358097ac5f eval/encode: Always check the return value of encode_vim_to_\* 2017-01-04 19:02:39 +03:00
Justin M. Keyes
695703ca97 provider/clipboard.vim: fallback if xsel is broken (#5868)
Old versions of `xsel` do not support some required features.
Fall back to `xclip` then.

Closes #5853
2017-01-04 15:10:31 +01:00
ZyX
ac50971f87 shada: Move setpcmark()/cleanup_jumplist() out of the cycle 2017-01-04 16:55:28 +03:00
ZyX
ec975a74ad shada: Fix offset saving 2017-01-04 16:42:43 +03:00
ZyX
40cedfd0f5 shada: Silence linter 2017-01-04 16:37:31 +03:00
ZyX
81ef9f55ae shada: Save current cursor position before saving jumps 2017-01-04 16:34:06 +03:00
Ole Reifschneider
1dc67f4dc8 version.c: update (#5876) 2017-01-04 14:31:23 +01:00
Justin M. Keyes
0ce77a744a Merge #5749 from justinmk/test-ctrl-c 2017-01-04 13:32:39 +01:00
ZyX
24b3b938e8 plugin/shada: Handle NUL characters with intchar correctly
Fixes #5482
2017-01-04 15:06:33 +03:00
Anmol Sethi
d8a97d7b79 man.vim: do not set ft=man on files with extension man (#5831)
Closes #5806
2017-01-04 13:01:03 +01:00
ZyX
d82f5d1ba2 plugin/msgpack: Support character constants like '\0' 2017-01-04 14:53:02 +03:00
ZyX
a934144e04 doc: Document that character constants are supported 2017-01-04 14:52:13 +03:00
Justin M. Keyes
6f9be2464c Merge #5872 justinmk/test_autochdir 2017-01-04 08:24:36 +01:00
Justin M. Keyes
af828f2257 Merge #5864 from ZyX-I/fix-5857
unittest: Allow multiple indirect includes
2017-01-04 11:54:11 +01:00
Justin M. Keyes
a63675c384 test/helpers.rmdir(): Windows: Change to top-level dir on failure.
On Windows, if the nvim process has a directory open the lua process
cannot remove it. After failing once, it's safe to force `nvim` to the
top-level directory. Then try again.
2017-01-04 07:23:13 +01:00
Justin M. Keyes
e43f7425ee refactor: Remove VimL function test()
vim-patch:7.4.1838
2017-01-04 07:23:13 +01:00
Justin M. Keyes
097c8dccca refactor: Remove VimL function test_autochdir()
- Eliminate global test_autochdir.
- Eliminate VimL function test_autochdir()
- Use a lua test instead. Fails correctly after reverting
  0c43479979 / vim-patch:7.4.2015.
2017-01-04 07:23:13 +01:00
lonerover
c56411ed87 vim-patch:7.4.2043 (#5871)
Problem:    setbuvfar() causes a screen redraw.
Solution:   Only use aucmd_prepbuf() for options.

93431df9eb
2017-01-04 06:16:21 +01:00
Justin M. Keyes
e03b43bd07 test: skip_fragile(), TEST_SKIP_FRAGILE
Let build systems define TEST_SKIP_FRAGILE to skip tests that are known to be
resource-intensive (unreliable on slow systems).

References https://github.com/neovim/neovim/pull/5488#issuecomment-265622113
2017-01-04 04:24:18 +01:00
Justin M. Keyes
f4d326cf10 test: ctrl_c_spec
- Improve test reliability by only checking for a line with the string
  we are interested in ("Interrupt").
- Try to avoid OOM by loading an existing big file instead of looping to
  create one.
2017-01-04 03:18:30 +01:00
lonerover
1984e784fb fix lint error 2017-01-04 08:53:38 +08:00
Marco Hinz
15259c4b84 clipboard: show error message only once and put in history (#5870) 2017-01-04 00:45:31 +01:00
Shougo
9cb31ecdb0 syntax/ruby.vim, perl.vim: Preserve 'foldmethod'. (#5858) 2017-01-03 23:53:59 +01:00
ZyX
3c64b814d2 unittests: Fix linter errors 2017-01-03 23:58:12 +03:00
ZyX
937b6fac8f unittest: Fix linter errors 2017-01-03 22:54:55 +03:00
ZyX
b38e725428 unittest: Refactor preprocess.lua
Keeps arguments separated and not joined as a single string as long as possible. 
Abstracts away additional arguments so that Gcc:preprocess should work for 
compilers with different conventions should they be supported.
2017-01-03 22:54:55 +03:00
ZyX
2151ddbd73 unittest: Move nil checks to Gcc:preprocess 2017-01-03 22:54:54 +03:00
ZyX
0d7b779cab unittest: Record previous defines in another place
Previous commit made preprocess.lua know how its output will be used. This moves 
state to cimport, making only it know which is cleaner.
2017-01-03 22:54:54 +03:00
ZyX
410d18ef5c unittest: Allow multiple indirect includes
Works by saving all preprocessor defines and reusing them on each run. This also
saves NVIM_HEADER_H defines. Saving other defines is needed for defines like
`Map(foo, bar)` which are sometimes used to declare types or functions. Saving
types or function declarations is not needed because they are recorded as luajit
state.

Fixes #5857
2017-01-03 22:54:54 +03:00
ZyX
136b382e64 tests: Add tests for partials dumping
Also fixed dumping of partials by encode_vim_to_object and added code which is 
able to work with partials and dictionaries to test/unit/eval/helpers.lua 
(mostly copied from #5119, except for partials handling).
2017-01-03 22:51:29 +03:00
James McCoy
3b793d0453 Merge pull request #5835 from lonerover/vim-7.4.1847
vim-patch:7.4.1847
2017-01-03 11:36:56 -05:00
lonerover
17dc20369e fix lint error 2017-01-03 10:42:44 -05:00
lonerover
1bea73a21e vim-patch:7.4.1847
Problem:    Getting an item from a NULL dict crashes.  Setting a register to a
            NULL list crashes. (Nikolai Pavlov, issue vim/vim#768)  Comparing a NULL
            dict with a NULL dict fails.
Solution:   Properly check for NULL.

13ddc5c359
2017-01-03 10:38:56 -05:00
ZyX
efc624c2fe eval: Fix errorneous early exit when converting lists and dictionaries 2017-01-03 17:28:57 +03:00
ZyX
f21725946c eval/encode: Fail when stringifying NULL functions 2017-01-03 16:13:21 +03:00
Tommy Allen
fd9cc8b0b2 automation: Generate API documentation (#5798)
runtime: Add underscore to {} helpSpecial syntax pattern

docs: Added generated api-funcs.txt
2017-01-03 13:11:19 +01:00
lonerover
a5f36e24bb vim-patch:7.4.2036
Problem:    Looking up a buffer by number is slow if there are many.
Solution:   Use a hashtab.

480778b805
2017-01-03 15:26:32 +08:00
ZyX
06cca5dc59 eval/typval_encode: Handle NULL partials properly 2017-01-03 07:44:54 +03:00
ZyX
9c84f3ba3e eval/typval_encode: Provide proper values as dict argument 2017-01-03 07:41:05 +03:00
ZyX
a5bdd64a5e eval: Fix unused variable error in release builds 2017-01-03 07:14:54 +03:00
ZyX
492c439c54 clint: Check for misplaced brace at function start 2017-01-03 07:11:43 +03:00
ZyX
287c69dd32 clint: Enable check for { positioned at the start of the line correctly
For some reason that was incorrectly hidden by “file is *not* \*.c or \*.h file” 
check.
2017-01-03 07:11:43 +03:00
ZyX
a52238707c eval/encode: Fix 4 new linter failures 2017-01-03 06:39:23 +03:00
ZyX
ff8944105d eval/typval_encode: Refactor arguments to argument macroses
Fixed local test failures somewhere in process.
2017-01-03 06:39:23 +03:00
ZyX
5ba24318e2 eval: Do not free partial contents if partial is still referenced
Should fix some tests, including core/job_partial tests.
2017-01-03 06:39:23 +03:00
ZyX
67b53361ba eval/typval_encode: Rename some \*tv variables
Renames `tv` function argument to `top_tv` and `cur_tv` variable to `tv`, so 
`tv` will mean something more or less the same in both 
_TYPVAL_ENCODE_CONVERT_ONE_VALUE and _TYPVAL_ENCODE_ENCODE functions.
2017-01-03 06:39:23 +03:00
ZyX
e2d81cc479 eval: Do not free partial lists as lists 2017-01-03 06:39:23 +03:00
ZyX
901e7805ee eval: Fix case when cur_mpsv is NULL
Should only happen when clearing VAR_FUNC typval which is not placed inside 
a container.
2017-01-03 06:39:23 +03:00
ZyX
759e736b0a eval/typval_encode: Fix infinite loop
Occurs when trying to dump a partial with attached self dictionary which
references that partial. “Infinite” loop should normally result in Neovim killed
by OOM killer.

Also moved the place when partials are unreferenced by clear_tv: from
…FUNC_START to …FUNC_END.
2017-01-03 06:39:23 +03:00
ZyX
affa3c2baa api/helpers: Fix unused variable error in release build 2017-01-03 06:39:23 +03:00
ZyX
dd27fcfda5 eval/typval_encode: Fix linter errors 2017-01-03 06:39:23 +03:00
ZyX
38ab553eb2 clint: Allow including .c.h files multiple times
Except when they are system just in case. There should be no .c.h system files 
though, but if there will be it is unlikely that they inherit the same 
convention.
2017-01-03 06:39:23 +03:00
ZyX
27343bc5b2 eval/typval_encode: Fix crashes 2017-01-03 06:39:23 +03:00
ZyX
b3163d06b3 eval/typval_encode: Refactor big-big macros into .c.h file
This makes gdb backtraces much more meaningful: specifically I now know at which 
line it crashes in place of seeing that it crashes at 
TYPVAL_ENCODE_DEFINE_CONV_FUNCTIONS macros invocation.
2017-01-03 06:39:23 +03:00
ZyX
c5c75513b8 eval/typval_encode: Make partial conversions not recursive
Is known to crash in the current state.

Ref #5825.
2017-01-03 06:39:23 +03:00
James McCoy
bfb5180627 vim-patch:7.4.1889
Problem:    When umask is set to 0177 Vim can't create temp files. (Lcd)
Solution:   Also correct umask when using mkdtemp().

35d88f4e2f
2017-01-02 20:12:47 -05:00
James McCoy
efe1476d42 Merge pull request #5743 from jamessan/na-vim-patches
version.c: Mark NA patches
2017-01-02 13:57:26 -05:00
James McCoy
af2b5abcd6 lint 2017-01-02 07:18:18 -05:00
James McCoy
9264f4cbbb Mark 'execute()' patches applied
vim-patch:7.4.1996

Problem:    Capturing the output of a command takes a few commands.
Solution:   Add evalcmd().

1e5e1231ac

vim-patch:7.4.1999

Problem:    evalcmd() doesn't work recursively.
Solution:   Use redir_evalcmd instead of redir_vname.

bc5d6dd1dd

vim-patch:7.4.2000

Problem:    Evalcmd test fails.
Solution:   Add missing piece.

245a7cb6d3

vim-patch:7.4.2005

Problem:    After using evalcmd() message output is in the wrong position.
            (Christian Brabandt)
Solution:   Reset msg_col.

ee1deb4a00
2017-01-02 07:11:02 -05:00
James McCoy
5b8bdca564 vim-patch:7.4.1861
Problem:    Compiler warnings with 64 bit compiler.
Solution:   Change int to size_t. (Mike William)

b055066a1d

Functional changes had already been made when package feature was
initially merged.
2017-01-02 07:11:02 -05:00
James McCoy
94a08e8186 vim-patch:7.4.1839
Problem:    Cannot get the items stored in a partial.
Solution:   Support using get() on a partial.

2bbf8eff6f

The content of this was already applied in the partials PR, but no
commit mentioned the upstream patch.
2017-01-02 07:11:02 -05:00
James McCoy
be177bce8f vim-patch:7.4.1781
Problem:    synIDattr() does not respect 'guicolors'.
Solution:   Change the conditition for the mode. (Christian Brabandt)

da5b3dcf06
2017-01-02 07:11:02 -05:00
James McCoy
27b5fa59f5 vim-patch:7.4.1656
Problem:    Crash when using partial with a timer.
Solution:   Increment partial reference count. (Hirohito Higashi)

92e35efaf6

The content of this was already applied in the partials PR, but no
commit mentioned the upstream patch.
2017-01-02 07:11:01 -05:00
James McCoy
67d57f6917 version.c: Mark NA patches
- 1727: garbagecollect_for_testing()
- 1761,1762: NA Coverity issue
- 1769: Adding attributes to if_pyth's sys.stdout
- 1812: Athena/Motif GUI fixes
- 1838: Rename of test functions (e.g., garbagecollect_for_testing()) to start with "test_"
- 1844: More test function renames
- 1888: Calculating sleep time for RealWaitForChar
- 1903,1904,1905,1907,1911,1936: viminfo merging
- 1955: Fix for 64-bit Vim linking against 32-bit Perl due to differing time_t
- 1971: settmode() change for Solaris
- 2073: Reading rgb.txt
- 2093: Netbeans test
- 2094: GUI color allocation changes
- 2132, 2198: job tests
2017-01-02 07:10:49 -05:00
James McCoy
f7639e2490 Merge pull request #5859 from jamessan/vim-7.4.1866
vim-patch:7.4.1866,7.4.1868
2017-01-02 06:39:47 -05:00
James McCoy
945540b782 vim-patch:7.4.1868
Problem:    Setting really_exiting causes memory leaks to be reported.
Solution:   Add the in_free_all_mem flag.

b89a25f17e
2017-01-01 23:20:31 -05:00
James McCoy
1feaa450cb vim-patch:7.4.1866
Problem:    Invalid memory access when exiting with EXITFREE defined.
            (Dominique Pelle)
Solution:   Set "really_exiting" and skip error messages.

a96732150c

This fails to build, due to a00c2e0ecb
removing really_exiting from globals.h, but the next commit fixes the
build failure.
2017-01-01 23:20:24 -05:00
Shougo Matsushita
6ba3b85382 vim-patch:6f1d9a
Updated runtime files.

6f1d9a096b
2017-01-02 10:45:10 +09:00
Shougo Matsushita
0c43479979 vim-patch:7.4.2015
Problem:    When a file gets a name when writing it 'acd' is not effective.
            (Dan Church)
Solution:   Invoke DO_AUTOCHDIR after writing the file. (Allen Haim, closes
            vim/vim#777, closes vim/vim#803)  Add test_autochdir() to enable 'acd' before
            "starting" is reset.

5c71994f4e
2017-01-02 10:43:45 +09:00
James McCoy
c5f4b92ff9 Merge pull request #5613 from jamessan/vim-7.4.2183
vim-patch:7.4.2183,7.4.2194,7.4.2201,7.4.2204,0952131,7.4.2215,7.4.2225,7.4.2226,7.4.2272,7.4.2273,7.4.2277,7.4.2294
2017-01-01 15:12:33 -05:00
Justin M. Keyes
57ce8b5648 Merge #5855 from lonerover/vim-7.4.2019
vim-patch:7.4.2019,7.4.2028
2017-01-01 16:30:21 +01:00
rover
13e2e22073 vim-patch:7.4.2028
Problem:    cppcheck warns for using index before limits check.
Solution:   Swap the expressions. (Dominique Pelle)

5498a41f5a
2017-01-01 23:18:30 +08:00
Shougo
3d3545bbc1 vim-patch:7.4.1834 (#5854)
Problem:    Possible crash when conceal is active.
Solution:   Check for the screen to be valid when redrawing a line.

908be43879
2017-01-01 16:07:49 +01:00
Anmol Sethi
f6c4e0961d man.vim: remove newline from man errors (#5852) 2017-01-01 15:09:27 +01:00
rover
6705652928 vim-patch:7.4.2019
Problem:    When ignoring case utf_fold() may consume a lot of time.
Solution:   Optimize for ASCII.

c4a927ca8d
2017-01-01 21:15:50 +08:00
Justin M. Keyes
61d4ca214f Merge #5804 from brcolow/vim-7.4.1793
vim-patch:7.4.17[83,85,93]
2016-12-31 23:43:49 +01:00
Michael Ennen
137dfdcc4e vim-patch:7.4.1785
Problem:    Regexp test fails on windows.
Solution:   set 'isprint' to the right value for testing.

490465bda6
2016-12-31 14:38:27 -07:00
Michael Ennen
e8ccaa7a52 vim-patch:7.4.1783
Problem:    The old regexp engine doesn't handle character classes correctly.
            (Manuel Ortega)
Solution:   Use regmbc() instead of regc().  Add a test.

af98a49dd0
2016-12-31 14:38:27 -07:00
Michael Ennen
415495273c vim-patch:7.4.1793
Problem:    Some character classes may differ between systems.  On OS/X the
            regexp test fails.
Solution:   Make this less dependent on the system. (idea by Kazunobu Kuriyama)

e8aee7dcf9
2016-12-31 14:38:27 -07:00
lonerover
5366242789 vim-patch:7.4.1970 (#5850)
Problem:    Using ":insert" in an empty buffer sets the jump mark. (Ingo
            Karkat)
Solution:   Don't adjust marks when replacing the empty line in an empty
            buffer. (closes vim/vim#892)

70e136e1d8
2016-12-31 17:32:50 +01:00
lonerover
b37da9c664 vim-patch:7.4.1940 (#5849)
Problem:    "gd" hangs in some situations. (Eric Biggers)
Solution:   Remove the SEARCH_START flag when looping.  Add a test.

23c60f21b0
2016-12-31 17:30:04 +01:00
lonerover
aa35cd9af0 vim-patch:7.4.1876 (#5848)
Problem:    Typing "k" at the hit-enter prompt has no effect.
Solution:   Don't assume recursive use of the prompt if a character was typed.
            (Hirohito Higashi)

a0055ad3a7
2016-12-31 17:27:11 +01:00
Justin M. Keyes
c6a50ca82c test: jobclose(): Avoid indeterminism. (#5851)
stdout activity may reach the queue before `exit`; just discard it.

Observed on Travis CI, ubuntu "trusty" beta image:

    [ RUN      ] ...is/build/neovim/neovim/test/functional/core/job_spec.lua @ 509: jobs running tty-test program jobclose() sends SIGHUP
    ...is/build/neovim/neovim/test/functional/core/job_spec.lua:511: Expected objects to be the same.
    Passed in:
    (table) {
      [1] = 'notification'
     *[2] = 'stdout'
      [3] = {
        [1] = 0
        [2] = {
          [1] = '
    '
          [2] = '' } } }
    Expected:
    (table) {
      [1] = 'notification'
     *[2] = 'exit'
      [3] = {
        [1] = 0
        [2] = 42 } }
    stack traceback:
    	...is/build/neovim/neovim/test/functional/core/job_spec.lua:511: in function <...is/build/neovim/neovim/test/functional/core/job_spec.lua:509>
    [  FAILED  ] ...is/build/neovim/neovim/test/functional/core/job_spec.lua @ 509: jobs running tty-test program jobclose() sends SIGHUP (2.81 ms)
2016-12-31 08:59:44 -05:00
Marco Hinz
d2998a0a49 Tests: make unit tests work on macOS Sierra
Fixes #5455.
2016-12-29 02:58:21 +01:00
James McCoy
46235a30ed lint 2016-12-28 14:57:40 -05:00
James McCoy
552cc4d0b3 vim-patch:7.4.2294
Problem:    Sign test fails on MS-Windows when using the distributed zip
            archives.
Solution:   Create dummy files instead of relying on files in the pixmaps
            directory.

64cefedfc8
2016-12-28 14:57:39 -05:00
James McCoy
de025d6dd0 vim-patch:7.4.2277
Problem:    Memory leak in getbufinfo() when there is a sign. (Dominique
            Pelle)
Solution:   Remove extra vim_strsave().

6a402edbeb
2016-12-28 14:57:39 -05:00
James McCoy
fe03ce23bf vim-patch:7.4.2273
Problem:    getwininfo() and getbufinfo() are inefficient.
Solution:   Do not make a copy of all window/buffer-local options.  Make it
            possible to get them with gettabwinvar() or getbufvar().

3056735ae8
2016-12-28 14:57:39 -05:00
James McCoy
03ed7e1eba vim-patch:7.4.2272
Problem:    getbufinfo(), getwininfo() and gettabinfo() are inefficient.
Solution:   Instead of making a copy of the variables dictionary, use a
            reference.

9f8187c335
2016-12-28 14:57:39 -05:00
James McCoy
c4c894b2fa vim-patch:7.4.2226
Problem:    The field names used by getbufinfo(), gettabinfo() and
            getwininfo() are not consistent.
Solution:   Use bufnr, winnr and tabnr. (Yegappan Lakshmanan)

3392883770
2016-12-28 14:57:39 -05:00
James McCoy
486e968bb6 vim-patch:7.4.2225
Problem:    Crash when placing a sign in a deleted buffer.
Solution:   Check for missing buffer name. (Dominique Pelle). Add a test.

bfd096d020
2016-12-28 14:57:39 -05:00
James McCoy
4453aa0d29 vim-patch:7.4.2215
Problem:    It's not easy to find out if a window is a quickfix or location
            list window.
Solution:   Add "loclist" and "quickfix" entries to the dict returnec by
            getwininfo(). (Yegappan Lakshmanan)

386600f0cb
2016-12-28 14:57:38 -05:00
James McCoy
6205846cd9 vim-patch:0952131
Updated runtime files.

0952131376
2016-12-28 14:57:38 -05:00
James McCoy
0046641070 vim-patch:7.4.2204
Problem:    It is not easy to get information about buffers, windows and
            tabpages.
Solution:   Add getbufinfo(), getwininfo() and gettabinfo(). (Yegappan
            Lakshmanan)

b5ae48e9ff
2016-12-28 14:57:38 -05:00
Chris Lucas
99a8cd3be0 vim-patch:7.4.2201
Problem:    The sign column disappears when the last sign is deleted.
Solution:   Add the 'signcolumn' option. (Christian Brabandt)

95ec9d6a6a
2016-12-28 14:57:38 -05:00
James McCoy
d467104816 vim-patch:7.4.2194
Problem:    Sign tests don't cover enough.
Solution:   Add more test cases. (Dominique Pelle)

446a973ce3
2016-12-28 14:57:38 -05:00
James McCoy
92c7c42f7c vim-patch:7.4.2183
Problem:    Sign tests are old style.
Solution:   Turn them into new style tests. (Dominique Pelle)

09de17536d
2016-12-28 14:57:37 -05:00
James McCoy
e00b024295 vim-patch:7.4.2149
Problem:    If a test leaves a window open a following test may fail.
Solution:   Always close extra windows after running a test.

7cba71d7e3

Apply the runtest.vim changes that were missing from
4431975210
2016-12-28 14:57:22 -05:00
James McCoy
9009c20edb Merge pull request #5827 from justinmk/travisupdate
ci: Install cscope, remove deadsnakes PPA
2016-12-27 23:25:24 -05:00
James McCoy
c8b30307b7 Merge pull request #5838 from mhinz/travis/allowed-failure
CI: allow GCOV build to fail
2016-12-27 23:24:05 -05:00
Anmol Sethi
c72f4d4d05 man.vim: revert "completion now respects 'wildignorecase'" (#5839)
Instead, a note was added to `:h man.vim` on how 'fileignorecase'
controls the case sensitivity of completion.
2016-12-27 19:01:04 -05:00
Marco Hinz
10d7a45e00 CI: allow GCOV build to fail 2016-12-28 00:54:52 +01:00
Justin M. Keyes
068399b13b ci: Upgrade pip3 (instead of install) 2016-12-28 00:18:01 +01:00
Justin M. Keyes
f2be05d6a3 ci: Install cscope, remove deadsnakes PPA
The travis ubuntu "trusty" image already pre-installs python 3.5.
https://docs.travis-ci.com/user/trusty-ci-environment
2016-12-27 23:41:49 +01:00
Justin M. Keyes
8950beeb04 ci: Upgrade to ubuntu 14.04 "trusty" 2016-12-27 23:41:49 +01:00
lonerover
1928b79e0c vim-patch:7.4.1837 (#5834)
Problem:    The BufUnload event is triggered twice, when :bunload is used with
             set to  or .
Solution:   Do not trigger the event when ml_mfp is NULL. (Hirohito Higashi)

c67e892134
2016-12-27 17:39:21 -05:00
ooora
9066e23562 man.vim, provider.vim: Avoid shell syntax. #5734
- Improves compatibility with shell=tcsh.
- man.vim: split read_page into get_page, put_page. Do not split the
  window until we know there is going to be output.
2016-12-27 23:26:06 +01:00
Marco Hinz
fa42495d87 Merge #5832 from nhooyr/man-complete 2016-12-27 22:46:29 +01:00
Anmol Sethi
49983a2270 man.vim: properly handle manpage names with spaces 2016-12-27 16:18:03 -05:00
Anmol Sethi
e59147d1ba man.vim: completion now respects 'wildignorecase' 2016-12-27 16:17:58 -05:00
James McCoy
fb2d1cea3f Merge pull request #5761 from jamessan/vim-7.4.1752
Catchup with upstream quickfix patches
2016-12-27 14:37:30 -05:00
James McCoy
3224ade9c3 lint 2016-12-27 14:10:28 -05:00
James McCoy
7565b48e9c vim-patch:8.0.0006
Problem:    ":lb" is interpreted as ":lbottom" while the documentation says it
            means ":lbuffer".
Solution:   Adjust the order of the commands. (haya14busa, closes vim/vim#1093)

ebdd90ac28
2016-12-27 14:10:28 -05:00
James McCoy
2c59277ca8 vim-patch:7.4.2010
Problem:    There is a :cbottom command but no :lbottom command.
Solution:   Add :lbottom. (Yegappan Lakshmanan)

537ef08408
2016-12-27 14:10:28 -05:00
James McCoy
f224f3fbf1 vim-patch:7.4.1997
Problem:    Cannot easily scroll the quickfix window.
Solution:   Add ":cbottom".

dcb1700186
2016-12-27 14:10:27 -05:00
James McCoy
f613c61dae vim-patch:7.4.1984
Problem:    Not all quickfix features are tested.
Solution:   Add a few more tests. (Yegappan Lakshmanan)

0fcc7c6dd1
2016-12-27 14:10:27 -05:00
James McCoy
5f6eb62a31 vim-patch:7.4.1980
Problem:    'errorformat' is parsed for every call to ":caddexpr".  Can't add
            to two location lists asynchronously.
Solution:   Keep the previously parsed data when appropriate. (mostly by
            Yegappan Lakshmanan)

361c8f0e51
2016-12-27 14:10:27 -05:00
James McCoy
fd94e6313b vim-patch:7.4.1966
Problem:    Coverity reports a resource leak.
Solution:   Close "fd" also when bailing out.

bcf7772a23
2016-12-27 14:10:27 -05:00
James McCoy
82f54c0a5e vim-patch:7.4.1964
Problem:    The quickfix init function is too big.
Solution:   Factor out parsing 'errorformat' to a separate function. (Yegappan
            Lakshmanan)

688e3d1fd9
2016-12-27 14:10:27 -05:00
James McCoy
8f0bf810ff vim-patch:7.4.1953
Problem:    Not all parts of the quickfix code are tested.
Solution:   Add more tests. (Yegappan Lakshmanan)

049cba9e97
2016-12-27 14:10:27 -05:00
James McCoy
d091faf284 vim-patch:7.4.1950
Problem:    Quickfix long lines test not executed for buffer.
Solution:   Call the function to test long lines. (Yegappan Lakshmanan)

f50df3925b
2016-12-27 14:10:27 -05:00
James McCoy
63d4ac7b25 vim-patch:7.4.1949
Problem:    Minor problems with the quickfix code.
Solution:   Fix the problems. (Yegappan Lakshmanan)

38df43bd13
2016-12-27 14:10:27 -05:00
James McCoy
2244253c14 vim-patch:7.4.1941
Problem:    Not all quickfix tests are also done  with the location lists.
Solution:   Test more quickfix code.  Use user commands instead of "exe".
            (Yegappan Lakshmanan)

3ef5bf7d45
2016-12-27 14:10:26 -05:00
James McCoy
4ac88c4faa vim-patch:7.4.1937
Problem:    No test for directory stack in quickfix.
Solution:   Add a test. (Yegappan Lakshmanan)

ab47c61f46
2016-12-27 14:10:26 -05:00
James McCoy
fbcc854d49 vim-patch:7.4.1912
Problem:    No test for using setqflist() on an older quickfix list.
Solution:   Add a couple of tests.

1cee693b31
2016-12-27 14:10:26 -05:00
James McCoy
ab43303df7 vim-patch:7.4.1884
Problem:    Updating marks in a quickfix list is very slow when the list is
            long.
Solution:   Only update marks if the buffer has a quickfix entry.

2f095a4bc4
2016-12-27 14:10:26 -05:00
James McCoy
a86d8b4088 vim-patch:7.4.1882
Problem:    Check for line break at end of line wrong. (Dominique Pelle)
Solution:   Correct the logic.

b37662a0fb
2016-12-27 14:10:26 -05:00
James McCoy
1e49cf6f23 vim-patch:7.4.1881
Problem:    Appending to a long quickfix list is slow.
Solution:   Add qf_last.

83e6d7ac6a
2016-12-27 14:10:26 -05:00
James McCoy
d244068f4f vim-patch:7.4.1871
Problem:    Appending to the quickfix list while the quickfix window is open
            is very slow.
Solution:   Do not delete all the lines, only append the new ones.  Avoid
            using a window while updating the list. (closes vim/vim#841)

864293abb7
2016-12-27 14:10:26 -05:00
James McCoy
9df9cf4ecc vim-patch:7.4.1841
Problem:    The code to reallocate the buffer used for quickfix is repeated.
Solution:   Move the code to a function. (Yegappan Lakshmanan, closes vim/vim#831)

2b2b8ae5ab
2016-12-27 14:10:26 -05:00
James McCoy
e2b081ed0c vim-patch:7.4.1823
Problem:    Warning from 64 bit compiler.
Solution:   Add type cast. (Mike Williams)

d9db8b448c

Already silenced in earlier commits by using size_t.
2016-12-27 14:10:26 -05:00
James McCoy
b9c5ca21e6 vim-patch:7.4.1815
Problem:    Compiler warnings for unused variables. (Ajit Thakkar)
Solution:   Add a dummy initialization. (Yasuhiro Matsumoto)

9a3b3311d2
2016-12-27 14:10:25 -05:00
James McCoy
48b5d0f1ba vim-patch:7.4.1813
Problem:    Memory access error when running test_quickfix.
Solution:   Allocate one more byte. (Yegappan Lakshmanan)

9b4ebc692d
2016-12-27 14:10:01 -05:00
James McCoy
39faa56bce vim-patch:7.4.1802
Problem:    Quickfix doesn't handle long lines well, they are split.
Solution:   Drop characters after a limit. (Anton Lindqvist)

6be8c8e165
2016-12-27 14:10:01 -05:00
James McCoy
29d7a59711 vim-patch:7.4.1768
Problem:    Arguments of setqflist() are not checked properly.
Solution:   Add better checks, add a test. (Nikolai Pavlov, Hirohito Higashi,
            closes vim/vim#661)

d106e5ba7f
2016-12-27 14:10:01 -05:00
James McCoy
e89efe75f9 vim-patch:7.4.1752
Problem:    When adding to the quickfix list the current position is reset.
Solution:   Do not reset the position when not needed. (Yegappan Lakshmanan)

c1808d5822
2016-12-27 14:10:00 -05:00
James McCoy
9ef371fd54 test: quickfix: Move upstream vim quickfix test to src/nvim/testdir
Massaging the upstream patches for this test into the lua tests are too
cumbersome and slow down patching.
2016-12-27 14:09:53 -05:00
Marco Hinz
21708d22ce Clipboard: improve error messages 2016-12-27 15:34:23 +01:00
lonerover
a6b14dbb0b vim-patch:7.4.1816 (#5833)
Problem:    Looping over a null list throws an error.
Solution:   Skip over the for loop.

d8585eded6
2016-12-26 22:15:44 -05:00
Anmol Sethi
7f9a95e5ea man.vim: when completing a fpage, always show section 2016-12-26 18:27:16 -05:00
Shougo Matsushita
4431975210 vim-patch:0 completion-related patches #5745 #5829
vim-patch:8.0.0058

Problem:    Positioning of the popup menu is not good.
Solution:   Position it better. (Hirohito Higashi)

91e44a3305

vim-patch:8.0.0099

Problem:    Popup menu always appears above the cursor when it is in the lower
            half of the screen. (Matt Gardner)
Solution:   Compute the available space better. (Hirohito Higashi,
            closes vim/vim#1241)

73095288da

vim-patch:8.0.0127

Problem:    Cancelling completion still inserts text when formatting is done
            for 'textwidth'. (lacygoill)
Solution:   Don't format when CTRL-E was typed. (Hirohito Higashi,
            closes vim/vim#1312)

73fd498886

vim-patch:7.4.2188

Problem:    Completion does not work properly with some plugins.
Solution:   Revert the part related to typing CTRL-E. (closes vim/vim#972)

c9fb77c692

vim-patch:7.4.2146

Problem:    Not enough testing for popup menu.  CTRL-E does not always work
            properly.
Solution:   Add more tests.  When using CTRL-E check if the popup menu is
            visible. (Christian Brabandt)

472472898a

vim-patch:7.4.2147

Problem:    test_alot fails.
Solution:   Close window.

abb71fbd39

vim-patch:7.4.2149

Problem:    If a test leaves a window open a following test may fail.
Solution:   Always close extra windows after running a test.

7cba71d7e3

vim-patch:7.4.2321

Problem:    When a test is commented out we forget about it.
Solution:   Let a test throw an exception with "Skipped" and list skipped test
            functions. (Christian Brabandt)

dac1947bb3

vim-patch:7.4.2331

Problem:    Using CTRL-X CTRL-V to complete a command line from Insert mode
            does not work after entering an expression on the command line.
Solution:   Don't use "ccline" when not actually using a command line. (test
            by Hirohito Higashi)

33a80eeb85

vim-patch:8.0.0008

Problem:    Popup complete test is disabled.
Solution:   Enable the test and change the assert. (Hirohito Higashi)

9e02cfa226

vim-patch:8.0.0047

Problem:    Crash when using the preview window from an unnamed buffer.
            (lifepillar)
Solution:   Do not clear the wrong buffer. (closes vim/vim#1200)

50e5376926

vim-patch:8.0.0053

Problem:    No test for what 8.0.0047 fixes.
Solution:   Add a test. (Hirohito Higashi)

60ef3e81f4
2016-12-26 22:21:14 +01:00
Justin M. Keyes
e9a2f77bff Merge #5815 from lonerover/vim-7.4.2124
vim-patch: 7.4.2124, 7.4.2126
2016-12-26 11:31:10 -05:00
lonerover
18cb09e095 vim-patch:7.4.1780 (#5828)
Problem:    Warnings reported by cppcheck.
Solution:   Fix the warnings. (Dominique Pelle)

dc633cf827
2016-12-26 11:25:59 -05:00
James McCoy
c1d1493eb2 Merge pull request #5818 from jamessan/typval-encode-partial
eval: encode: Fix NULL check for partial's name
2016-12-24 13:26:10 -05:00
Justin M. Keyes
432e9e5a2e build: Do not check for obsolete <termio.h> 2016-12-24 17:41:06 +01:00
Justin M. Keyes
cdcf5d2039 build: Support old libtermkey.
Check TERMKEY_VERSION_* before referencing `TermKey_Terminfo_Getstr_Hook`.
2016-12-24 17:32:30 +01:00
James McCoy
a083c85ae4 eval: encode: Fix NULL check for partial's name 2016-12-23 22:35:18 -05:00
Justin M. Keyes
a3b58cd60a Merge #5758 from justinmk/fixkbs
tui: check stty/termios for kbs
2016-12-23 14:00:32 -05:00
Justin M. Keyes
657369bb68 CheckHealth: terminfo: remove "kbs" advice 2016-12-23 18:28:54 +01:00
Justin M. Keyes
0b244de384 test: job_spec: Avoid unreliable screen test. 2016-12-23 18:28:54 +01:00
Justin M. Keyes
af2e629be4 tui: check stty/termios for kbs
Requires libtermkey 0.19+

Closes #2048
Closes #5693

See a9b61424aa%5E...c0eb4e4a05f49ad8fee0195c77f2c29d09cc36af
See https://bugzilla.redhat.com/show_bug.cgi?id=142659
See fe4e9470bb/tty-keys.c (L625-L632)
2016-12-23 18:28:54 +01:00
lonerover
308836d5ce vim-patch:7.4.2126
Problem:    No tests for :diffget and :diffput
Solution:   Add tests.

90d121fa36
2016-12-23 10:42:36 +08:00
lonerover
4682129449 vim-patch:7.4.2124
Problem:    diffmode test leaves files behind, breaking another test.
Solution:   Delete the files.

623cf88f9c
2016-12-23 09:13:05 +08:00
James McCoy
f1bfd055a7 Merge pull request #5810 from lonerover/vim-7.4.2123
vim-patch:7.4.2123
2016-12-22 10:41:21 -05:00
James McCoy
98a9bedb62 Merge pull request #5809 from lonerover/vim-7.4.2335
vim-patch:7.4.2335
2016-12-22 10:38:58 -05:00
James McCoy
81fcba90a7 Merge pull request #5807 from mhinz/fix/vim-patch
vim-patch: fix default answers
2016-12-22 10:37:54 -05:00
lonerover
5dea033443 vim-patch:7.4.2123
Problem:    No new style test for diff mode.
Solution:   Add a test.  Check that folds are in sync.

42093c0ec5
2016-12-22 15:00:58 +08:00
Marco Hinz
66936d7866 vim-patch: fix default answers 2016-12-22 03:17:01 +01:00
lonerover
3e7f78b6cf vim-patch:7.4.2335
Problem:    taglist() is slow. (Luc Hermitte)
Solution:   Check for CTRL-C less often when doing a linear search. (closes
            vim/vim#1044)

72b4b870fc
2016-12-19 12:38:12 +08:00
Shougo
33319b1bf0 syntax/vim.vim: Remove external interface checks (#5785) 2016-12-18 17:39:58 -05:00
James McCoy
aa4ef8966c Merge pull request #5779 from lonerover/vim-7.4.2337
vim-patch:7.4.2337
2016-12-16 10:08:26 -05:00
lonerover
c22a147026 vim-patch:7.4.2337
Problem:    taglist() is still slow. (Luc Hermitte)
Solution:   Check for CTRL-C less often when finding duplicates.

77b642501a
2016-12-16 10:07:56 -05:00
James McCoy
a26188b58d Merge pull request #5775 from jamessan/vim-patch-review
vim-patch: Allow skipping non-"vim-patch" commits during review
2016-12-16 10:03:40 -05:00
Marco Hinz
c8c296557b Man: use non-recursive mappings for :Man (#5777)
This is a regression introduced by:

  https://github.com/neovim/neovim/pull/5290/files#diff-8691c83194ea5f1342ecc9f17b4c51d8R46

When the <plug> mappings were changed to using :Man, they should have changed to
use `nnoremap` as well.

Fixes #5776.
2016-12-15 17:36:55 +01:00
James McCoy
412d87698f vim-patch: Allow skipping non-"vim-patch" commits during review
It's not atypical to have extra, non-"vim-patch" commits in a PR merging
a bigger or set of related patches from Vim.  Rather than immediately
aborting, display the patch header to the user and let them decide
whether to continue reviewing.
2016-12-15 09:09:52 -05:00
Justin M. Keyes
02a9824438 Merge #5772 from justinmk/fixsegfault
eval.c: set_selfdict(): Fix invalid memory access.
2016-12-15 06:40:55 +01:00
James McCoy
f089d299e3 Merge pull request #5770 from jamessan/shada-lint
shada: Move '%' handling from shada_write to its own function
2016-12-14 15:23:19 -05:00
Justin M. Keyes
b29c5dd384 doc: job_control.txt
References #5529
2016-12-14 20:52:18 +01:00
Justin M. Keyes
43ba7f4d98 eval.c: set_selfdict(): Fix invalid memory access. 2016-12-14 20:52:18 +01:00
James McCoy
966be42a2b shada: Move '%' handling from shada_write to its own function
shada_get_buflist finds all the relevant buffers and generates the
kSDItemBufferList ShadaEntry.
2016-12-14 06:56:48 -05:00
James McCoy
8c9cccbcb6 Merge pull request #5760 from jamessan/shada-percent-count
shada: Respect the optional buffer count for shada-%
2016-12-13 22:35:25 -05:00
Marco Hinz
5855f30cb1 Make VimL code compatible with merged Partial support (#5765)
Closes #5763.
2016-12-13 14:48:42 +01:00
James McCoy
dbe41fe310 Merge pull request #5764 from jamessan/get-vim-patch
vim-patch: Add -g switch to download/preprocess patch
2016-12-13 08:39:47 -05:00
James McCoy
c6bd9f525c vim-patch: Add -g switch to download/preprocess patch 2016-12-12 20:55:25 -05:00
James McCoy
7eb91c781b shada: Respect the optional buffer count for shada-%
Closes #5759
2016-12-12 14:35:09 -05:00
James McCoy
988ab5804a Merge pull request #5529 from brcolow/vim-7.4.1559
Port partial patches from vim
2016-12-12 10:53:32 -05:00
Michael Ennen
5e4eb18eb0 Add some tests and cleanup. 2016-12-12 10:17:35 -05:00
Björn Linse
0f681c80e1 Make partials work with jobs, timers, and dictwatchers. 2016-12-12 10:17:35 -05:00
Michael Ennen
a21c687661 Fixes. 2016-12-12 10:17:35 -05:00
Michael Ennen
2c4e92abea vim-patch:7.4.1731 Mark as NA
Leave a note in vim_diff.txt about it.
2016-12-12 10:17:35 -05:00
Michael Ennen
6c5dd6827f vim-patch:7.4.1875
Problem:    Comparing functions and partials doesn't work well.
Solution:   Add tests. (Nikolai Pavlov)  Compare the dict and arguments in the
            partial.

8e759ba865
2016-12-12 10:17:35 -05:00
Michael Ennen
b42347da45 vim-patch:7.4.1862 Mark as NA 2016-12-12 10:17:35 -05:00
Michael Ennen
537cee4883 vim-patch:7.4.1860
Problem:    Using a partial for timer_start() may cause a crash.
Solution:   Set the copyID in timer objects. (Ozaki Kiichi)

e3188e2615
2016-12-12 10:17:35 -05:00
Michael Ennen
c52856af2c vim-patch:7.4.1842
Problem:    get() works for Partial but not for Funcref.
Solution:   Accept Funcref.  Also return the function itself. (Nikolai Pavlov)

03e19a04ac
2016-12-12 10:17:35 -05:00
Michael Ennen
02c58d8a07 vim-patch:7.4.1839
Problem:    Cannot get the items stored in a partial.
Solution:   Support using get() on a partial.

2bbf8eff6f
2016-12-12 10:17:35 -05:00
Michael Ennen
c82dc7a6fd vim-patch:7.4.1836
Problem:    When using a partial on a dictionary it always gets bound to that
            dictionary.
Solution:   Make a difference between binding a function to a dictionary
            explicitly or automatically.

1d429610bf
2016-12-12 10:17:35 -05:00
Michael Ennen
eb337c9949 vim-patch:7.4.1720 Mark as NA 2016-12-12 10:17:35 -05:00
Michael Ennen
25438f149f vim-patch:7.4.1719
Problem:    Leaking memory when there is a cycle involving a job and a
            partial.
Solution:   Add a copyID to job and channel.  Set references in items referred
            by them.  Go through all jobs and channels to find unreferenced
            items.  Also, decrement reference counts when garbage collecting.

107e1eef1d
2016-12-12 10:17:35 -05:00
Michael Ennen
e97e24c77e vim-patch:7.4.1718
Problem:    Coverity: not using return value of set_ref_in_item().
Solution:   Use the return value.

d56374e25d
2016-12-12 10:17:35 -05:00
Michael Ennen
0645787741 vim-patch:7.4.1715
Problem:    Double free when a partial is in a cycle with a list or dict.
            (Nikolai Pavlov)
Solution:   Do not free a nested list or dict used by the partial.

ddecc25947
2016-12-12 10:17:35 -05:00
Michael Ennen
c6bc1e7bab vim-patch:7.4.1645
Problem:    When a dict contains a partial it can't be redefined as a
            function. (Nikolai Pavlov)
Solution:   Remove the partial when overwriting with a function.

c5fbe8af4c
2016-12-12 10:17:35 -05:00
Michael Ennen
04f328f1ae vim-patch:7.4.1644 Mark as NA 2016-12-12 10:17:35 -05:00
Michael Ennen
9d91218213 vim-patch:7.4.1639
Problem:    Invoking garbage collection may cause a double free.
Solution:   Don't free the dict in a partial when recursive is FALSE.

5f436fcf99
2016-12-12 10:17:35 -05:00
Michael Ennen
1945013eb7 vim-patch:7.4.1638
Problem:    When binding a function to a dict the reference count is wrong.
Solution:   Decrement dict reference count, only reference the function when
            actually making a copy. (Ken Takata)

e4eb6ff089
2016-12-12 10:17:35 -05:00
Michael Ennen
bae31b764a vim-patch:7.4.1608
Problem:    string() doesn't handle a partial.
Solution:   Make a string from a partial.

5c29154b52
2016-12-12 10:17:35 -05:00
Michael Ennen
3213b28c01 vim-patch:7.4.1607
Problem:    Comparing a function that exists on two dicts is not backwards
            compatible. (Thinca)
Solution:   Only compare the function, not what the partial adds.

f0e86a0dbd
2016-12-12 10:17:35 -05:00
Michael Ennen
5241ca7d7a vim-patch:7.4.1606
Problem:    Having type() handle a Funcref that is or isn't a partial
            differently causes problems for existing scripts.
Solution:   Make type() return the same value. (Thinca)

953cc7fb13
2016-12-12 10:17:35 -05:00
Michael Ennen
34a7814219 vim-patch:7.4.1605
Problem:    Catching exception that won't be thrown.
Solution:   Remove try/catch.

3905e291fe
2016-12-12 10:17:35 -05:00
Michael Ennen
86706011a6 vim-patch:7.4.1590
Problem:    Warning for shadowed variable. (Christian Brabandt)
Solution:   Move the variable into a local block.

3f242a844e
2016-12-12 10:17:35 -05:00
Michael Ennen
531249a4ac vim-patch:7.4.1589
Problem:    Combining dict and args with partial doesn't always work.
Solution:   Use the arguments from the partial.

9e63f61cb0
2016-12-12 10:17:35 -05:00
Michael Ennen
cf2701b269 vim-patch:7.4.1586
Problem:    Nesting partials doesn't work.
Solution:   Append arguments. (Ken Takata)

8a1bb04637
2016-12-12 10:17:35 -05:00
Michael Ennen
27b2fb944a vim-patch:7.4.1585
Problem:    Partial is not recognized everywhere.
Solution:   Check for partial in trans_function_name(). (Yasuhiro Matsumoto)
            Add a test.

d22a18928e
2016-12-12 10:17:35 -05:00
Michael Ennen
e2258598ca vim-patch:7.4.1582
Problem:    Get E923 when using function(dict.func, [], dict). (Kent Sibilev)
            Storing a function with a dict in a variable drops the dict if the
            function is script-local.
Solution:   Translate the function name.  Use dict arg if present.

6f2e4b36c9
2016-12-12 10:17:35 -05:00
Michael Ennen
5cf0c99755 vim-patch:7.4.1581
Problem:    Using ":call dict.func()" where the function is a partial does
            not work.  Using "dict.func()" where the function does not take a
            Dictionary does not work.
Solution:   Handle partial properly in ":call". (Yasuhiro Matsumoto)

65639032bb
2016-12-12 10:17:35 -05:00
Michael Ennen
2c1b4c7f3c vim-patch:7.4.1580
Problem:    Crash when using function reference. (Luchr)
Solution:   Set initial refcount. (Ken Takata)

7a5c46a9df
2016-12-12 10:17:35 -05:00
Michael Ennen
529482d684 vim-patch:7.4.1577
Problem:    Cannot pass "dict.Myfunc" around as a partial.
Solution:   Create a partial when expected.

ab1fa3955f
2016-12-12 10:17:35 -05:00
Michael Ennen
f90551b0e6 vim-patch:7.4.1564
Problem:    An empty list in function() causes an error.
Solution:   Handle an empty list like there is no list of arguments.

346418c624
2016-12-12 10:17:35 -05:00
Michael Ennen
66922d89cc vim-patch:7.4.1563
Problem:    Partial test fails on windows.
Solution:   Return 1 or -1 from compare function.

790500a8e6
2016-12-12 10:17:34 -05:00
Michael Ennen
521e45f2a8 vim-patch:7.4.1559
Problem:    Passing cookie to a callback is clumsy.
Solution:   Change function() to take arguments and return a partial.

1735bc988c
2016-12-12 10:17:34 -05:00
James McCoy
75c18b6aaa Merge pull request #5756 from jamessan/viminfo-leak
option.c: Update free_oldval after adjusting opt_idx for shada/viminfo
2016-12-12 06:55:23 -05:00
James McCoy
8995a15b20 Merge pull request #5757 from jamessan/vim-7.4.1867
vim-patch:7.4.1867
2016-12-12 06:55:11 -05:00
James McCoy
2d3c835534 vim-patch:7.4.1867
Problem:    Memory leak in test_matchstrpos.
Solution:   Free the string before overwriting. (Yegappan Lakshmanan)

3c809343c7
2016-12-11 23:21:51 -05:00
James McCoy
79c711670c option.c: Update free_oldval after adjusting opt_idx for shada/viminfo
Previously, free_oldval was set immediately on entering
did_set_string_option.  However, opt_idx hadn't been adjusted to account
for diverting 'viminfo' manipulation to 'shada'.

Therefore, the code which determines whether to free the old value was
looking at the flags for 'viminfo' while the code which sets whether a
value was allocated was modifying the flags for 'shada'.  This led to a
leak of any values set for 'viminfo'.

Updating free_oldval once opt_idx has been adjusted for the
'viminfo'/'shada' handling ensures the check/set values are consistent.

Closes #5698
2016-12-11 23:17:50 -05:00
Justin M. Keyes
29e651515f Merge #5752 from justinmk/doc
doc: api_info(), typval_encode.h
2016-12-11 02:04:33 +01:00
Justin M. Keyes
0fe89fc9d7 Merge #5750 from justinmk/jobstart
jobstart(): Return -1 if cmd is non-executable
2016-12-11 01:38:17 +01:00
Justin M. Keyes
19848dce50 doc: README.md: update appveyor URL 2016-12-11 01:32:28 +01:00
Justin M. Keyes
100a8d40db CheckHealth: more precise check for sensible.vim
Closes #5751
2016-12-11 01:26:49 +01:00
Justin M. Keyes
cc7c42ed5d po: Remove E902 message 2016-12-11 01:14:22 +01:00
Justin M. Keyes
d32888073f test: jobstart() 2016-12-11 01:14:22 +01:00
Aaron Williamson
c8d5e9230e jobstart(): Return -1 if cmd is not executable. #5671
Closes #5465
2016-12-10 16:01:27 +01:00
Rafael Bodill
f344e40699 ex_docmd.c: Save/restore winminheight/winminwidth. #5717
Fix session load with winminheight/winminwidth >1.

Problem:  Vim temporarily sets winheight/winwidth to 1 while loading
          session. If user has his minimum window size set higher, this
          causes an error.
Solution: Temporarily set winminheight/winminwidth, and restore the
          original values (in the right order) when finishing session read.
          The order of the compound 'set' command is important, if it is
          wrong there will be an error.
2016-12-10 04:05:07 +01:00
Shougo
2380747ff2 vim-patch:7.4.1909 (#5748)
Problem:    Doubled semicolons.
Solution:   Reduce to one. (Dominique Pelle)

945ec093cd
2016-12-10 13:40:29 +01:00
Shougo
26f8cdedc3 vim-patch:7.4.1897 (#5747)
Problem:    Various typos, long lines and style mistakes.
Solution:   Fix the typos, wrap lines, improve style.

fd89d7ea81
2016-12-10 13:39:28 +01:00
Justin M. Keyes
7c513d646d Merge #5396 from justinmk/tui-throttle
throttle shell output to maintain responsiveness
2016-12-10 02:18:15 +01:00
Justin M. Keyes
4abe9afbf6 out_data_decide_throttle(): timeout instead of hard limit.
Instead of managing max_visits, check the time every N visits. This avoids edge
cases where max_visits is large but the chunk frequency slowed down, which would
causing the "..." pulse to show for a very long time. It's more important to
show output at reasonable intervals than to avoid calling os_hrtime().
2016-12-10 01:26:34 +01:00
Justin M. Keyes
ea154dfdb2 out_data_decide_throttle(): Avoid too-small final chunk. 2016-12-10 01:26:34 +01:00
Justin M. Keyes
cb58999007 os/shell: do_os_system(): Always show last chunk.
This ameliorates use-cases like:
    :!cat foo.txt
    :make
where the user is interested in the last few lines of output.

Try these shell-based ex-commands before/after this commit:
    :grep -r '' *
    :make
    :!yes
    :!grep -r '' *
    :!git grep ''
    :!cat foo
    :!echo foo
    :!while true; do date; done
    :!for i in `seq 1 20000`; do echo XXXXXXXXXX $i; done

In all cases the last few lines of the command should always be shown,
regardless of where throttling was triggered.
2016-12-10 01:26:34 +01:00
Marco Hinz
5082af415f Health: rework syntax (#5744)
- By re-enabling code blocks (every line that doesn't begin with a "-" and is
  indented by at least 4 spaces), we prevent the Markdown syntax to evaluate "_"
  as beginning for italic text.

  That's the case for `:CheckHealth deoplete` for instance. It would output:

    $ cat /tmp/log_{PID}

  Since the deoplete check gets run first, almost all of the following
  `:CheckHealth` output would be italic.

- Since we re-enable code blocks, we now have to tell our custom syntax that it
  can be part of markdownCodeBlock as well. Otherwise there would be no
  highlithing for our keywords ERROR, INFO, etc. after 4 spaces of indent.

- Since we do the above anyway, we make it work for mkdListItemLine as well.
  That's a highlight group from `plasticboy/vim-markdown` opposed to the shipped
  markdown syntax (which essentially is `tpope/vim-markdown`). Before this patch
  there was no highlighting at all in the `:CheckHealth` output.
2016-12-09 19:54:24 +01:00
Justin M. Keyes
97204e1cef os/shell: Throttle :! output, pulse "..." message.
Periodically skip :! spam. This is a "cheat" that works for all UIs and greatly
improves responsiveness when :! spams MB or GB of output:
    :!yes
    :!while true; do date; done
    :!git grep ''
    :grep -r '' *

After ~10KB of data is seen from a single :! invocation, output will be skipped
for ~1s and three dots "..." will pulse in the bottom-left. Thereafter the
behavior alternates at every:
    * 10KB received
    * ~1s throttled

This also avoids out-of-memory which could happen with large :! outputs.

Note: This commit does not change the behavior of execute(':!foo').
      execute(':!foo') returns the string ':!foo^M', it captures *only* Vim
      messages, *not* shell command output. Vim behaves the same way.
      Use system('foo') for capturing shell command output.

Closes #1234

Helped-by: oni-link <knil.ino@gmail.com>
2016-12-09 18:51:17 +01:00
Justin M. Keyes
043f85210a tui: "backpressure": Drop messages to avoid flooding.
Closes #1234

multiqueue:
- Implement multiqueue_size()
- Rename MultiQueueItem.parent to MultiQueueItem.parent_item, to avoid confusion
  with MultiQueue.parent.
2016-12-09 18:51:17 +01:00
Shougo Matsushita
7da7ff7c5c vim-patch:7.4.1758, 7.4.1759, 7.4.1692 #5640
vim-patch:7.4.1758

Problem:    Triggering CursorHoldI when in CTRL-X mode causes problems.
Solution:   Do not trigger CursorHoldI in CTRL-X mode. Add "!" flag to
            feedkeys() (test with that didn't work though).

245c41070c

vim-patch:7.4.1759

Problem:    When using feedkeys() in a timer the inserted characters are not
            used right away.
Solution:   Break the wait loop when characters have been added to typebuf.
            use this for testing CursorHoldI.

40b1b5443c

vim-patch:7.4.1692
Problem:    feedkeys('i', 'x') gets stuck, waits for a character to be typed.
Solution:   Behave like ":normal". (Yasuhiro Matsumoto)
2016-12-09 17:46:14 +01:00
Justin M. Keyes
880ce887ed ci: Update appveyor artifact path. 2016-12-09 17:09:17 +01:00
Marco Hinz
ae9f1938ea Health: match syntax keyword case exactly (#5741)
This prevents the string "error" within error messages to be highlighted as
healthError.
2016-12-09 16:47:29 +01:00
James McCoy
4a2d2248e8 Merge pull request #5736 from jamessan/vim-7.4.1754
vim-patch:7.4.1754
2016-12-09 09:42:23 -05:00
Marco Hinz
20995c7960 Remove g:python{,3}_host_skip_check (#5738)
This option simplifies the configuration options:

1) `g:python{,3}_host_prog` is not set.

    Neovim tries its best to find a suitable interpreter. This means calling
    exepath(), potentially multiple times, and a system('python -c ...') with
    the first found interpreter, to get the Python version.

2) `g:python{,3}_host_prog` is set.

    Avoids everything of the above. No safety checks, no training wheels. Fast
    host startup time!
2016-12-09 15:08:18 +01:00
James McCoy
ddfac951ea Merge pull request #5705 from brcolow/vim-7.4.1835
vim-patch:7.4.[1835,1956]
2016-12-08 10:43:17 -05:00
James McCoy
7775fb7dff lint 2016-12-08 10:36:24 -05:00
James McCoy
d1473880bc vim-patch:7.4.1754
Problem:    When 'filetype' was set and reloading a buffer which does not
            cause it to be set, the syntax isn't loaded. (KillTheMule)
Solution:   Remember whether the FileType event was fired and fire it if not.
            (Anton Lindqvist, closes vim/vim#747)

c3691332f7
2016-12-08 10:27:32 -05:00
James McCoy
49d2952658 Merge pull request #5659 from brcolow/vim-7.4.1685
vim-patch:7.4.[1685,2163,2217,2269],8.0.00[33,40]
2016-12-08 09:18:51 -05:00
Justin M. Keyes
adf29cef72 syntax.c: Update color names. (#5733)
Closes #5178
2016-12-08 01:01:12 +01:00
Justin M. Keyes
ff99cbfc02 Merge #5488 from justinmk/test-fix-mouse-drag
test: Disable unreliable test on travis+ASAN_UBSAN
2016-12-07 23:55:18 +01:00
Justin M. Keyes
8da23cb919 Merge #5729 from jamessan/vim-7.4.1751
vim-patch:7.4.1751,8d8aa0a
2016-12-07 18:47:10 +01:00
Justin M. Keyes
933c873cae test: Handle SIGHUP in tty-test fixture.
Closes #5727
2016-12-07 17:22:37 +01:00
Justin M. Keyes
a1b0f594ea test: Disable unreliable tests on travis+ASAN_UBSAN 2016-12-07 17:22:23 +01:00
James McCoy
f7a49532b1 lint 2016-12-07 11:04:33 -05:00
Justin M. Keyes
1a4f13ba8f test: helpers.retry() 2016-12-07 17:03:52 +01:00
James McCoy
035eb27575 vim-patch:8d8aa0a
Add missing test file.

8d8aa0a367
2016-12-07 10:44:35 -05:00
James McCoy
4f3c9ad4d7 vim-patch:7.4.1751
Problem:    Crash when 'tagstack' is off. (Dominique Pelle)
Solution:   Fix it. (Hirohito Higashi)

def5abe0a2
2016-12-07 10:44:31 -05:00
Björn Linse
e6b7dade4f Merge pull request #5712 from bfredl/utf8charset
clean up charset.c for assumed &encoding=utf-8
2016-12-07 15:42:06 +01:00
Justin M. Keyes
ff35d4c987 doc: 'shelltemp'
Closes #5706
2016-12-07 13:37:44 +01:00
Björn Linse
2eeabf9a43 mbyte: clean up charset.c for assumed encoding=utf-8 2016-12-07 08:59:08 +01:00
Michael Ennen
63c46c1106 vim-patch:8.0.0040
Problem:    Whole line highlighting with matchaddpos() does not work.
Solution:   Check for zero length. (Hirohito Higashi)

8507747600
2016-12-07 00:37:29 -07:00
Michael Ennen
0e99d29169 vim-patch:8.0.0033
Problem:    Cannot use overlapping positions with matchaddpos().
Solution:   Check end of match. (Ozaki Kiichi) Add a test (Hirohito Higashi)

a6c27ee6db
2016-12-06 22:57:30 -07:00
Michael Ennen
652f15aaa5 Add vim defaults to runtest.vim. 2016-12-06 22:42:14 -07:00
Michael Ennen
c5d2e442a3 vim-patch:7.4.2269
Problem:    Using 'hlsearch' highlighting instead of matchpos if there is no
            search match.
Solution:   Pass NULL as last item to next_search_hl() when searching for
            'hlsearch' match. (Shane Harper, closes vim/vim#1013)

e17bdffff7
2016-12-06 17:15:49 -07:00
Michael Ennen
0064e9738a vim-patch:7.4.2217
Problem:    When using matchaddpos() a character after the end of the line can
            be highlighted.
Solution:   Only highlight existing characters. (Hirohito Higashi)

4f416e4124
2016-12-06 17:12:08 -07:00
Michael Ennen
629e788b36 vim-patch:7.4.2163
Problem:    match() and related functions tested with old style test.
Solution:   Convert to new style test. (Hirohito Higashi)

d76a0c15f8
2016-12-06 17:02:13 -07:00
Michael Ennen
6fea2dfd26 vim-patch:7.4.1685
Problem:    There is no easy way to get all the information about a match.
Solution:   Add matchstrpos(). (Ozaki Kiichi)

7fed5c18f8
2016-12-06 15:52:48 -07:00
James McCoy
6115029496 Merge pull request #5721 from jamessan/vim-7.4.1708
vim-patch:7.4.1708
2016-12-06 15:47:59 -05:00
James McCoy
e085f7c5f1 vim-patch:7.4.1708
Problem:    New regexp engine does not work properly with EBCDIC.
Solution:   Define equivalence class characters. (Owen Leibman)

2a6fa564a3

Although nvim doesn't support EBCDIC systems, this keeps us inline with
upstream code so its easier to merge future patches in this area and
improves the readability of the code.
2016-12-06 11:16:33 -05:00
Marco Hinz
7666b4950e Health: show :help + tags (#5719) 2016-12-05 13:01:47 +01:00
James McCoy
8089292472 Merge pull request #5715 from equal-l2/change-lua-url
Update Lua's download URL
2016-12-03 23:59:38 -05:00
James McCoy
0165de0228 Merge pull request #5707 from jamessan/moar-cleaning
build: Make clean targets more thorough
2016-12-03 23:33:13 -05:00
James McCoy
cc33aebd8e Merge pull request #5716 from jamessan/fix-man-plugin
ftplugin/man: Finish early if &filetype is not man
2016-12-03 23:32:07 -05:00
James McCoy
9337e98b16 ftplugin/man: Finish early if &filetype is not man
Many people have `runtime ftplugin/man.vim` in their init file, as was
required in Vim to have the `:Man` command generally available.
7a4d069b removed the &filetype check, which caused these setups to
always create a blank `man://` buffer.
2016-12-03 21:27:43 -05:00
equal-l2
3143d7cce3 Change Lua's download URL 2016-12-04 09:42:32 +09:00
Justin M. Keyes
b025474258 vim-patch:8.0.0110 (#5700)
Closes #5616

Problem:    Drop command doesn't use existing window.
Solution:   Check the window width properly. (Hirohito Higashi)

5a030a540f
2016-12-03 22:38:13 +01:00
Justin M. Keyes
e29a4ceede Merge #5704 from jamessan/vim-7.4.1748
vim-patch:7.4.1748
vim-patch:f9660b5
2016-12-03 18:09:42 +01:00
James McCoy
d98ebd6ab9 build: Make clean targets more thorough 2016-12-02 20:38:55 -05:00
James McCoy
d9dffeb486 lint 2016-12-02 20:30:08 -05:00
James McCoy
a4f646dde8 vim-patch:f9660b5
Add missing test file.

f9660b59b2
2016-12-02 20:30:06 -05:00
James McCoy
fa9cd8b878 vim-patch:7.4.1748
Problem:    "gD" does not find match in first column of first line. (Gary
            Johnson)
Solution:   Accept match at the cursor.

1538fc34fa
2016-12-02 20:30:03 -05:00
Michael Ennen
34efe443ac vim-patch:7.4.1956
Problem:    When using CTRL-W f and pressing "q" at the ATTENTION dialog the
            newly opened window is not closed.
Solution:   Close the window and go back to the original one. (Norio Takagi,
            Hirohito Higashi)

5d2ca04029
2016-12-02 17:28:54 -07:00
Michael Ennen
9af8cd768d vim-patch:7.4.1835
Problem:    When splitting and closing a window the status height changes.
Solution:   Compute the frame height correctly. (Hirohito Higashi)

991dea3ab1
2016-12-02 16:04:47 -07:00
Justin M. Keyes
3607e0b8ff doc: Remove obsolete reference to rgb_file.
Closes #5695
2016-12-01 16:00:28 +01:00
James McCoy
77dceaaeb7 Merge pull request #5675 from brcolow/vim-7.4.1738
vim-patch:7.4.17[35,38,39]
2016-12-01 13:32:12 -05:00
James McCoy
6c1d81aef2 Merge pull request #5663 from brcolow/vim-7.4.1702
vim-patch:7.4.1702
2016-12-01 12:51:10 -05:00
Michael Ennen
4f3bb5262c vim-patch:7.4.1702
Problem:    Using freed memory when parsing 'printoptions' fails.
Solution:   Save the old options and restore them in case of an error.
            (Dominique)

4afc7c5d4a
2016-12-01 09:20:23 -05:00
Michael Ennen
909b7d9dea vim-patch:7.4.1739
Problem:    Messages test fails on MS-Windows.
Solution:   Adjust the asserts.  Skip the "messages maintainer" line if not
            showing all messages

bea1ede1c5
2016-12-01 09:15:47 -05:00
James McCoy
85f9f9f46d Merge pull request #5674 from brcolow/vim-7.4.1723
vim-patch:7.4.1723
2016-12-01 09:07:33 -05:00
James McCoy
e1cdf04f2d Merge pull request #5665 from brcolow/vim-7.4.1711
vim-patch:7.4.1711
2016-12-01 09:01:55 -05:00
Marco Hinz
d2e8c76dc2 Merge PR #5651 from mhinz/vv/exitval 2016-12-01 15:00:58 +01:00
Marco Hinz
df2ffe48ce Tests: add tests for v:exiting 2016-12-01 14:57:27 +01:00
Marco Hinz
147b03e7d0 Add v:exiting
Contains the exit value nvim will use.

Before exiting, it is v:null. That way jobs or autocmds (in VimLeavePre or
VimLeave) can check if Neovim is about to quit and with what exit value.

Closes #4666.
2016-12-01 14:57:22 +01:00
James McCoy
5194e3bc45 Merge pull request #5664 from brcolow/vim-7.4.1707
vim-patch:7.4.1707
2016-12-01 08:46:18 -05:00
Björn Linse
1f8a3da796 Merge pull request #5669 from chemzqm/add-cmdline-mode-rpc
Add cmdline mode to ui_mode_change
2016-12-01 08:05:44 +01:00
James McCoy
0e1c406df4 Merge pull request #5662 from brcolow/vim-7.4.1701
vim-patch:7.4.1701
2016-12-01 00:14:16 -05:00
James McCoy
5679ceb3a8 Merge pull request #5648 from brcolow/vim-7.4.2071
vim-patch:7.4.2071
2016-11-30 20:58:11 -05:00
chemzqm
3cf4b14e96 add cmdline mode to modechange of RPC and tests
use set_cursor_shape_bar for cmdline mode

fix test of screen_basic_spec.lua & screen.lua

comment fix
2016-11-30 22:20:06 +08:00
Michael Ennen
f94740097b vim-patch:7.4.1738
Problem:    Count for ":messages" depends on number of lines.
Solution:   Add ADDR_OTHER address type.

5d91646599
2016-11-29 16:32:43 -07:00
Michael Ennen
d2be11fbf2 vim-patch:7.4.1735
Problem:    It is not possible to only see part of the message history.  It is
            not possible to clear messages.
Solution:   Add a count to ":messages" and a clear argument. (Yasuhiro
            Matsumoto)

451f849fd6
2016-11-29 16:32:43 -07:00
Shougo
f2c6cc2d09 version.c: mark NA patches (#5657)
1710: external command
2311: Appveyor
2016-11-29 23:43:25 +01:00
Justin M. Keyes
78cbed5138 Merge #5643 from Shougo/vim-7.4.1686
vim-patch:7.4.1686, 7.4.2007
2016-11-29 23:40:29 +01:00
Michael Ennen
783c9aac8e vim-patch:7.4.1699 (#5660)
Problem:    :packadd does not work the same when used early or late.
Solution:   Always load plugins matching "plugin/**/*.vim".

71fb0c146b
2016-11-29 23:19:25 +01:00
Michael Ennen
5efcefee87 vim-patch:7.4.2071
Problem:    The return value of type() is difficult to use.
Solution:   Define v:t_ constants. (Ken Takata)

f562e72df7
2016-11-29 15:02:24 -07:00
James McCoy
3979c6cbed Merge pull request #5687 from jamessan/if_py-crash
msgpack_rpc: Allocate empty string in msgpack_rpc_to_object
2016-11-29 09:40:53 -05:00
James McCoy
b37d062459 msgpack_rpc: Allocate empty string in msgpack_rpc_to_object
STR_CASE previously used a NULL data pointer for the String object, but
this pushes the NULL checks to the rest of the code.  Instead,
allocating an empty string solves the same issue of there not being any
data but ensures that we're not passing NULL to functions that don't
expect it.

Closes #5627
2016-11-29 08:19:48 -05:00
James McCoy
9e56278d0b Merge pull request #5684 from jamessan/initialize-terminput-buf
rbuffer: Use xcalloc to ensure memory is initialized
2016-11-29 06:54:56 -05:00
James McCoy
80b808dbfe rbuffer: Use xcalloc to ensure memory is initialized
Since the rbuffer contents are used by string functions (like sscan,
strlen, etc.), it is not safe to use uninitialized memory.  Using
xcalloc ensures the string-based functions do not run past the end of
the buffer.

Closes #5676
2016-11-28 19:32:39 -05:00
Marco Hinz
39bb43c530 startup: Initialize v:count1 (#5656)
The man plugin uses `v:count == v:count1` to detect if a count was explicitly
given. Unfortunately v:count1 does _not_ default to 1 but 0 during startup.

Now we set v:count1 to 1 early.

Fixes https://github.com/neovim/neovim/issues/5655
2016-11-28 20:44:29 +01:00
Justin M. Keyes
9956beee24 version bump 2016-11-27 20:03:35 +01:00
Justin M. Keyes
0542baac28 NVIM v0.1.7
FEATURES:
0213e99aaf PR #5561 'inccommand'

FIXES:
c685879eea PR #5632 SECURITY FIX
d28d108648 CheckHealth: Fix version comparison.
7be113d795 PR #5670 shell_write_cb: Schedule error message.
1d4563771b jobs: ensure calling jobclose() on a pty job sends SIGHUP.
36c0ec6dd4 tui/suspend_event(): set STDIN to "blocking"
7a4d069bcc, cf52b881d9 man.vim: avoid errors in unusual circumstances
ed198737fd PR #5546 ex_global: Catch CTRL-C even if it is mapped.

CHANGES:
9147331e21 PR #2905 encoding: only allow encoding=utf-8
5f0260808c PR #5636 build: Upgrade jemalloc
f1fed42ca7 PR #5567 l10n: Update Ukrainian translation
2016-11-27 20:03:30 +01:00
Michael Ennen
68271a6d19 vim-patch:7.4.1723
Problem:    When using try/catch in 'tabline' it is still considered an
            error and the tabline will be disabled.
Solution:   Check did_emsg instead of called_emsg. (haya14busa, closes #746)

f73d3bc253
2016-11-26 16:17:39 -07:00
Justin M. Keyes
7be113d795 shell_write_cb: Schedule error message. (#5670)
Closes #5558
2016-11-26 13:08:42 +01:00
Michael Ennen
22c7dbd5f8 vim-patch:7.4.1711
Problem:    When using try/catch in 'statusline' it is still considered an
            error and the status line will be disabled.
Solution:   Check did_emsg instead of called_emsg. (haya14busa, closes vim/vim#729)

a742e084b6
2016-11-25 18:23:36 -07:00
Michael Ennen
8f84c1da83 vim-patch:7.4.1707
Problem:    Cannot use empty dictionary key, even though it can be useful.
Solution:   Allow using an empty dictionary key.

0921ecff1c
2016-11-25 18:23:11 -07:00
Björn Linse
ecd7beb6e4 Merge pull request #5666 from bfredl/modechangetest
ui: add tests for ui_mode_change
2016-11-25 17:39:46 +01:00
Justin M. Keyes
0de6f450e4 vim-patch:7.4.2086
Problem:    Using the system default encoding makes tests unpredictable.
Solution:   Always use utf-8 or latin1 in the new style tests.  Remove setting
            encoding and scriptencoding where it is not needed.

ac105ed3c4
2016-11-25 15:46:58 +01:00
Björn Linse
4b95bb582d ui: add tests for ui_mode_change
Also fix snapshot_util() to work even if default_attr_ids is not a
proper lua array.
2016-11-25 11:37:23 +01:00
Michael Ennen
783220e427 vim-patch:7.4.1701
Problem:    Equivalence classes still tested in old style tests.
Solution:   Remove the duplicate.

f9f22dbe4f
2016-11-24 23:30:30 -07:00
Shougo Matsushita
d24222cea8 vim-patch:7.4.2007
Problem:    Running the tests leaves a viminfo file behind.
Solution:   Make the viminfo option empty.

fc4ad61607
2016-11-25 06:43:36 +09:00
James McCoy
42736d6a2a Merge pull request #5595 from jamessan/tsan-pie
tsan: Compile with -fPIE and updated clang
2016-11-24 09:55:12 -05:00
James McCoy
cbf2a86c1d Merge pull request #5654 from brcolow/vim-7.4.1923
vim-patch:7.4.1923
2016-11-23 21:27:20 -05:00
James McCoy
2c154216a4 Merge pull request #5644 from Shougo/vim-7.4.1691
vim-patch:7.4.1691
2016-11-23 21:03:26 -05:00
James McCoy
e00bc61325 Merge pull request #5642 from Shougo/vim-7.4.1660
vim-patch:7.4.1660
2016-11-23 20:49:24 -05:00
James McCoy
b1854cefea Merge pull request #5641 from Shougo/vim-7.4.1696
vim-patch:7.4.1696
2016-11-23 20:37:37 -05:00
James McCoy
ca292c9768 Avoid serializing NULL string through msgpack
Attempting to serialize a NULL string through msgpack results in
msgpack_sbuffer_write attempting to memcpy from a NULL pointer, which is
undefined behavior.
2016-11-23 20:30:00 -05:00
James McCoy
38ee85d000 Move utf8len_tab definition to globals.h
The existing code would cause utf8len_tab to be declared as non-extern
when main.cpp included globals.h as well as in mbyte.c.  This causes the
following warning

    Linking C executable ../../bin/nvim
    /usr/bin/ld: Warning: size of symbol `utf8len_tab' changed from 256 in CMakeFiles/nvim.dir/main.c.o to 320 in CMakeFiles/nvim.dir/mbyte.c.o

Moving the definition to globals.h and using INIT() ensures the array is
only defined in main.cpp and other places globals.h is included see an
extern declaration.
2016-11-23 20:29:59 -05:00
James McCoy
6d727657c8 ci: Make ubsan print out a stacktrace when it finds a problem 2016-11-23 20:29:59 -05:00
James McCoy
b6a090b4fd tsan: Compile with -fPIE and force clang-3.8
This fixes failures with TSAN builds like

    FATAL: ThreadSanitizer can not mmap the shadow memory (something is mapped at 0x55deea465000 < 0x7cf000000000)
    FATAL: Make sure to compile with -fPIE and to link with -pie.
2016-11-23 20:29:51 -05:00
Michael Ennen
4f8964cc00 vim-patch:7.4.1923
Problem:    Command line editing is not tested much.
Solution:   Add tests for expanding the file name and 'wildmenu'.

ae3150ec8d

The test_cmdline.vim tests were ported in 23f591dba0 and thus
should have marked 1923 as applied. The test_cmdline.vim invocation
has been moved from test_alot.vim to src/nvim/testdir/Makefile to
better accord with the upstream code.
2016-11-23 15:56:35 -07:00
Shougo Matsushita
5c06f350ce vim-patch:7.4.1691
Problem:    When switching to a new buffer and an autocommand applies syntax
            highlighting an ml_get error may occur.
Solution:   Check "syn_buf" against the buffer in the window. (Alexander von
            Buddenbrock, closes vim/vim#676)

b681be175b
2016-11-24 07:07:22 +09:00
Shougo Matsushita
81591b146a vim-patch:7.4.1696
Problem:    When using :stopinsert in a silent mapping the "INSERT" message
            isn't cleared. (Coacher)
Solution:   Always clear the message. (Christian Brabandt, closes vim/vim#718)

fd773e9e88
2016-11-24 07:04:39 +09:00
Michael Ennen
a46fc0d754 vim-patch:7.4.1928 (#5653)
Problem:    Overwriting pointer argument.
Solution:   Assign to what it points to. (Dominique Pelle)

76ae22fef3

The typos corrected in the original vim patch are no long present
in the neovim code base and the pointer assignment was done correctly
in the porting of patch 1913 (where the changes were introduced).
2016-11-23 22:00:11 +01:00
Shougo Matsushita
071a7d3d78 vim-patch:7.4.1686
Problem:    When running tests $HOME/.viminfo is written. (James McCoy)
Solution:   Add 'nviminfo' to the 'viminfo' option. (closes vim/vim#722)

e9c0727003
2016-11-22 07:30:42 +09:00
Shougo Matsushita
d152e2f3fd vim-patch:7.4.1660
Problem:    has('patch-7.4.1') doesn't work.
Solution:   Fix off-by-one error. (Thinca)

819821c5a9
2016-11-22 07:27:13 +09:00
Michael Ennen
5f0260808c build: Upgrade jemalloc from 4.2.1 to 4.3.1. (#5636)
Closes #5415
2016-11-21 13:36:55 +01:00
James McCoy
6b1c8bbc18 Merge pull request #5632 from jamessan/vim-8.0.0056
vim-patch:8.0.0056,8.0.0057
2016-11-20 23:03:24 -05:00
James McCoy
c685879eea vim-patch:8.0.0057
Problem:    Tests fail without the 'keymap' features.
Solution:   Check for feature in test.

9376f5f482
2016-11-20 14:07:46 -05:00
James McCoy
4fad66fbe6 vim-patch:8.0.0056
Problem:    When setting 'filetype' there is no check for a valid name.
Solution:   Only allow valid characters in 'filetype', 'syntax' and 'keymap'.

d0b5138ba4
2016-11-20 14:07:46 -05:00
Justin M. Keyes
42033bc5bd Merge #5630 from nhooyr/man-ftplugin
man.vim: bug fixes
2016-11-19 22:50:10 +01:00
Anmol Sethi
7a4d069bcc man.vim: do not assume ftplugin is sourced before syntax
Fixes #5574
2016-11-19 13:41:04 -05:00
Anmol Sethi
cf52b881d9 man.vim: no guarantee that the first line contains anything useful
Fixes #5628
2016-11-18 14:06:42 -05:00
Björn Linse
acbce46782 Merge pull request #5624 from bfredl/jobcloseterm
jobs: ensure calling jobclose() on a pty job sends SIGHUP
2016-11-17 18:40:59 +01:00
Justin M. Keyes
c3a7a94a12 l10n: Remove some non-UTF8 .po files. (#5622)
Some .po files do not have UTF8 versions, leave those alone for now.

Also remove sjiscorr.c utility.
2016-11-17 17:27:13 +01:00
Björn Linse
1d4563771b jobs: ensure calling jobclose() on a pty job sends SIGHUP. Closes #5619 2016-11-17 15:13:45 +01:00
James McCoy
927e3e32d7 Merge pull request #5623 from justinmk/luacheck
build: Target luacheck HEAD.
2016-11-16 21:17:21 -05:00
Justin M. Keyes
44e6ee930f build: Target luacheck HEAD.
https://github.com/mpeterv/luacheck/pull/81#issuecomment-261099606

> If you really want to use bleeding-edge version you should get the
> rockspec from master branch, not a fixed commit ...
> The correct way to install from a specific commit is cloning that
> commit and running "luarocks make" from project directory. The reason
> is that running "install" or "build" on an scm rockspec fetches
> sources from master but uses build description from the rockspec
> itself, which may be outdated.
2016-11-17 00:55:39 +01:00
Justin M. Keyes
5e241b5f50 build: cmake: Use portable delimiters. (#5620)
Fixes build on Windows (msys2 mingw64).
Closes #5342
2016-11-16 22:26:51 +01:00
Anatolii Sakhnik
f1fed42ca7 l10n: Update Ukrainian translation (#5567)
* Fix translation of the term 'tag'

Prefer native word instead of transliteration

* Update uk.po automatically

Run make update-po-uk in src/nvim/po

* Update fuzzy translations in uk.po

* Translate missing msgstr

* Fix layout of the front page

* Apply cleanup.vim

Additionally, remove irrelevant and confusing comments

* Copy uk.po into uk.cp1251.po
2016-11-16 18:58:07 +01:00
James McCoy
108d54bbd4 Merge pull request #5600 from jamessan/vim-7.4.1640
vim-patch:7.4.1640,7.4.1647,7.4.1650,7.4.1664
2016-11-16 06:52:19 -05:00
James McCoy
c66ca17ca1 Merge pull request #5614 from Shougo/vim-7.4.2251
vim-patch:7.4.2251
2016-11-15 23:45:20 -05:00
James McCoy
34317846d6 lint 2016-11-15 23:16:09 -05:00
James McCoy
4e66bc99e4 Mark 7.4.1697 as applied
The patch was merged in 9e1c6596 but version.c didn't get updated
accordingly.
2016-11-15 23:16:09 -05:00
James McCoy
2e5736e2cd vim-patch:7.4.1664
Problem:    Crash in :cgetexpr.
Solution:   Check for NULL pointer. (Dominique) Add a test.

89c64d557d
2016-11-15 23:16:09 -05:00
James McCoy
830bf8665b vim-patch:7.4.1650
Problem:    Quickfix test fails.
Solution:   Accept any number of matches.

f68f1d7079
2016-11-15 23:16:09 -05:00
James McCoy
caa33aaaf8 vim-patch:7.4.1647
Problem:    Using freed memory after setqflist() and ":caddbuffer".  (Dominique)
Solution:   Set qf_ptr when adding the first item to the quickfix list.

8b20179c65
2016-11-15 23:16:08 -05:00
James McCoy
c0fd830be4 Bump all nvim-specific error codes above E5000
In order to not conflict with new error codes that Vim adds, all Neovim
error codes should be above 5000.  The three existing sub-5000 error
codes (E926, E951, and E952) are now E50003, E5004, and E5005
respectively.

E953 was removed in 6167ce6df2, so just
remove it from the help.
2016-11-15 23:16:08 -05:00
James McCoy
7231438f12 vim-patch:7.4.1640
Problem:    Crash when an autocommand changes a quickfix list. (Dominique)
Solution:   Check wether an entry is still valid. (Yegappan Lakshmanan,
            Hirohito Higashi)

ffec3c5349
2016-11-15 23:16:08 -05:00
James McCoy
aba853a156 Merge pull request #5615 from jamessan/vim-7.4.1892
vim-patch:7.4.1892,7.4.1894
2016-11-15 22:49:34 -05:00
James McCoy
49f73e5275 vim-patch:7.4.1894
Problem:    Cannot get the window ID for a mouse click.
Solution:   Add v:mouse_winid.

511972d810
2016-11-15 22:00:25 -05:00
James McCoy
defa86b08a vim-patch:7.4.1892
Problem:    balloon eval only gets the window number, not the ID.
Solution:   Add v:beval_winid.

c9721bdc63
2016-11-15 21:48:08 -05:00
Shougo Matsushita
458b1fc0e7 vim-patch:7.4.2251
Problem:    In rare cases diffing 4 buffers is not enough.
Solution:   Raise the limit to 8. (closes vim/vim#1000)

015efc32c1
2016-11-16 08:55:17 +09:00
James McCoy
c91e9c1c7a Merge pull request #5611 from jamessan/vim-7.4.2174
vim-patch:7.4.2174
2016-11-15 14:57:57 -05:00
Shougo
c69cfd7d1c vim-patch:8.0.0035 (#5609)
Problem:    Order of matches for 'omnifunc' is messed up. (Danny Su)
Solution:   Do not set compl_curr_match when called from complete_check().
            (closes vim/vim#1168)

472e85970e
2016-11-15 17:59:55 +01:00
James McCoy
12ed735719 lint 2016-11-15 11:50:54 -05:00
James McCoy
9d9d93aee3 vim-patch:7.4.2174
Problem:    Adding duplicate flags to 'whichwrap' leaves commas behind.
Solution:   Also remove the commas. (Naruhiko Nishino)

c8ce615299
2016-11-15 11:48:37 -05:00
James McCoy
10c72cd365 vim-patch.sh: Remove "set -o pipefail"
grep 2.26 changed its behavior when redirecting its output to /dev/null
such that it exits as soon as one match is found.  This causes sed to
get a SIGPIPE which, due to "set -o pipefail", falsely implies that the
patch is not applied.

Removing "set -o pipefail" preserves the good exit status from grep.
2016-11-15 07:53:01 -05:00
Justin M. Keyes
d28d108648 CheckHealth: Fix version comparison.
Compare numbers instead of strings.
2016-11-15 13:15:40 +01:00
Justin M. Keyes
01ef6fc3d2 Merge #5607 from justinmk/icm
'inccommand': auto-disable if too slow; fix other behaviors
2016-11-15 09:12:47 +01:00
Justin M. Keyes
35231312d7 'inccommand': Add tests. 2016-11-15 05:01:25 +01:00
Justin M. Keyes
3f7a2d785d 'inccommand': Introduce CMDPREVIEW state.
Command "live preview" is fundamentally a non-recursive concept
("preview of a preview" is not useful). Maintaining this as a
global is less awkward and closer to what we actually want to
express, vs adorning exarg_T, CommandLineState, etc.
2016-11-15 04:22:24 +01:00
Justin M. Keyes
708617ebb6 inccommand=nosplit: Jump to first match.
Call update_topline() to adjust the current viewport.

Closes #5597
2016-11-15 04:22:24 +01:00
Justin M. Keyes
91507c271e 'inccommand': Detect "non-interactive", "too slow".
command_line_changed:
  - Check (current_SID == 0) instead of KeyTyped
    - We want to update during mappings (KeyTyped is false then).
  - Check vpeekc_any()
    - Avoids unnecessary work.
    - Avoids triggering live preview during macros.
    - Caveat: This makes the redraw "stutter" if user spams (holds a key)
      in the replace pattern. But that scenario is not important.
  - Update screen if the command is changed to a non-live command.
    (`s->live` goes from true => false) => clears the preview
command_line_execute:
  - Let CTRL-C cancel live preview
do_sub:
  - Enforce a time limit ('redrawtime').
  - Unset 'inccommand' if time limit is reached.

Closes #5602
Closes #5585
2016-11-15 04:22:24 +01:00
James McCoy
0c799a8f10 Merge pull request #5606 from jamessan/vim-7.4.1658
vim-patch:7.4.1658
2016-11-14 16:16:18 -05:00
James McCoy
0b686e9b61 lint 2016-11-14 14:16:40 -05:00
James McCoy
9d2985ecba vim-patch:7.4.1658
Problem:    A plugin does not know when VimEnter autocommands were already
            triggered.
Solution:   Add the v:vim_did_enter variable.

1473551a44
2016-11-14 14:16:40 -05:00
James McCoy
4539d867d4 Merge pull request #5603 from jamessan/remove-flaky-term-resize-test
test: window_spec: Remove flaky terminal resize test
2016-11-13 19:54:14 -05:00
James McCoy
5e1dc26f74 test: window_spec: Remove flaky terminal resize test 2016-11-13 18:47:03 -05:00
Justin M. Keyes
598f5af58b Merge #5582 from justinmk/icm
'inccommand': Support :smagic/:snomagic. Less jumping around.
2016-11-12 13:32:48 +01:00
Tommy Allen
84eed76b55 CheckHealth: Include v:throwpoint in error message (#5575)
* health.vim: Include v:throwpoint in error message

* health/provider.vim: Check for ruby executable

* health/provider.vim: Combine subprocess stdout and stderr

* test: Updated CheckHealth test
2016-11-12 11:59:15 +01:00
James McCoy
7e48c23a50 vim-patch:7.4.1634 (#5594)
Problem:    Vertical movement after CTRL-A ends up in the wrong column.
            (Urtica Dioica)
Solution:   Set curswant when appropriate. (Hirohito Higashi)

8e08125d3a
2016-11-12 11:32:23 +01:00
James McCoy
c5bc0ea04c vim-patch:7.4.1614 (#5593)
Problem:    Still quickfix test in old style.
Solution:   Turn test 10 into a new style test.

7eba3d2cbf
2016-11-12 11:30:18 +01:00
James McCoy
05d1211424 Merge pull request #5592 from jamessan/vim-7.4.1591
vim-patch:7.4.1591
2016-11-11 16:01:13 -05:00
James McCoy
7baa96b717 vim-patch:7.4.1591
Problem:    The quickfix title is truncated.
Solution:   Save the command before it is truncated. (Anton Lindqvist)

5584df65a0
2016-11-11 11:37:42 -05:00
Justin M. Keyes
ae9a3d3b99 'inccommand': Simplify cursor placement logic.
Remove the inner for-loop; just use the column of the first in-line
match.
2016-11-11 05:45:06 +01:00
Justin M. Keyes
795f2bb9b9 'inccommand': Restore cursor/view if cancelled.
Restore cursor position and window "view", if command is cancelled.
This is how 'incsearch' works.
2016-11-10 18:09:48 +01:00
Justin M. Keyes
2e1217da46 'inccommand': buftype=nofile, restore cursor/view
- Use a standard scratch buffer instead of a new 'buftype', functions
  like curbufIsChanged() already have special handling for scratch bufs.
- Cleanup some stuff from the previous merge.
- Add support for :smagic, :snomagic. Closes #5578
2016-11-10 15:48:00 +01:00
Justin M. Keyes
0213e99aaf Merge #5561 'inccommand'
Initial work by:
  Robin Elrharbi-Fleury (Robinhola)
  Audrey Rayé (Adrey06)
  Philémon Hullot (DesbyP)
  Aymeric Collange (aym7)
  Clément Guyomard (Clement0)

Major revisions by:
  KillTheMule
  Björn Linse <bjorn.linse@gmail.com>
  Justin M. Keyes <justinkz@gmail.com>
2016-11-09 03:19:22 +01:00
Justin M. Keyes
aa0e09d251 'inccommand': Preserve curbuf->b_u_newhead.
Add tests for undotree().

Helped-by: Björn Linse <bjorn.linse@gmail.com>

When "curhead" points to a valid head, the value of "newhead" is
meaningless (and really should be set to null). The undo state for
a buffer is _logically_ the enum:

  enum UndoState {
    CurrentHead(head),
    NewHead(head),
    EmptyTree
  }

nvim _represents_ this as: whenever `curbuf->b_u_curhead` is nonnull it
should be used as the current head, and `curbuf->b_u_newhead` is
ignored. If the there is a current head, then this will be redoed on the
next redo, and its parent will be undone on next undo. Only if
`b_u_curhead` is NULL, `b_u_newhead` will be used as the head to undo
(and it is not possible to redo). Also both can be NULL, to indicate an
empty undotree. (To be fair, this only strictly true when calling undo.c
from the outside, in some places _within_ a function in undo.c both
values might be meaningful)

Apparently `undotree()` breaks this non-abstraction, this _cosmetic_
issue can easily be fixed by `ex_substitute` also saving and restoring
`b_u_newhead`, but is doesn't reflect any error really how
`u_undo_and_forget` manipulates the _actual_ state of the undo tree.
2016-11-09 01:03:47 +01:00
Justin M. Keyes
21dfbfbb9a perf: do_sub(): avoid work, avoid screen updates
- Don't fill matched_lines if not showing a preview (!eap->is_live).
- Encapsulate: Move cursor placement logic to show_sub().
2016-11-08 21:22:24 +01:00
Justin M. Keyes
f3e8ca3bf5 'inccommand': preserve 'modified'
During the live preview, the buffer-local 'modified' flag
should not be changed.
2016-11-08 21:22:24 +01:00
Justin M. Keyes
ff6ec703d5 'inccommand': Do not trigger during scripts, feedkeys(). 2016-11-08 21:22:24 +01:00
KillTheMule
527ba2b12a 'inccommand': test: scripts/feedkeys() should not trigger preview 2016-11-08 21:22:24 +01:00
Justin M. Keyes
6a3f8d48d0 'inccommand': rename 'incsubstitute'
'inccommand' allows us to expand the feature to other commands, such as:
    :cdo
    :cfdo
    :global

Also rename "IncSubstitute" highlight group to "Substitute".
2016-11-08 21:22:13 +01:00
Justin M. Keyes
1e0e301062 'inccommand': format line numbers as "|123| "
This matches what Quickfix traditionally does.
2016-11-08 21:21:46 +01:00
Justin M. Keyes
3ccf69c1de 'inccommand': set buffer name to [Preview]
[inc_sub] is less obvious for users. Also, in the future we may want to
generalize the idea of a "preview buffer", or "incremental commands"
besides :substitute.
2016-11-08 21:21:46 +01:00
Justin M. Keyes
d0689eb0b2 'inccommand': disable 'cursorline', 'spell' in preview 2016-11-08 21:21:43 +01:00
Justin M. Keyes
e31f9007e4 'inccommand': preserve b:changedtick 2016-11-08 21:21:00 +01:00
Justin M. Keyes
e4e7b2d239 lint 2016-11-08 21:21:00 +01:00
Justin M. Keyes
c04ffe866d 'inccommand': rework
- Eliminate/isolate static/global variables
- Remove special-case parameter from buflist_new()
- Remove special-case ECMD_RESERVED_BUFNR
- To determine when u_undo_and_forget() should be done, check
  b_changedtick instead of a heuristic.
- use mb_string2cells() instead of strlen() to measure the :sub patterns
- call ml_close() before buf_clear_file(). Avoids leaks caught by ASan.

Original patch by:
  Robin Elrharbi-Fleury (Robinhola)
  Audrey Rayé (Adrey06)
  Philémon Hullot (DesbyP)
  Aymeric Collange (aym7)
  Clément Guyomard (Clement0)
2016-11-08 21:20:08 +01:00
Marco Hinz
bd33f1165b CheckHealth: ignore non-existing markdownCodeBlock group (#5570)
People using [1] would experience an error, because their markdown syntax
doesn't define the markdownCodeBlock group.

[1]: https://github.com/plasticboy/vim-markdown

Closes #5569
2016-11-08 19:01:15 +01:00
Tommy Allen
3089c86f4e CheckHealth: timeout system() calls (#5565) 2016-11-08 14:34:03 +01:00
Björn Linse
9147331e21 Merge pull request #2905 from bfredl/utf8
Only allow encoding=utf-8 and simplify multibyte code
2016-11-05 18:12:14 +01:00
Björn Linse
4ab3fe8eaa encoding: update documentation 2016-11-05 14:49:24 +01:00
Björn Linse
b3ece5c81c encoding: update tests
Change shada reencoding tests to check for
correct handling of UTF-8 and binary strings.

Delete enc=latin1 json tests.
2016-11-05 14:49:24 +01:00
Björn Linse
18f56c8e90 encoding: delete non-UTF-8 implementations of multibyte functions
Deleted documentation was duplicated at specific utf_ implementation
2016-11-05 14:49:24 +01:00
Björn Linse
5072ab9e5b encoding: cleanup mbyte.c given fixed encoding=utf-8
Eliminate mb_init():
Set "enc_utf" and "has_mbyte" early. Eliminate "enc_unicode" and "enc_latin1like".
init_chartab() and screenalloc() are already invoked elsewhere
in the initialization process.
The EncodingChanged autocmd cannot be triggered.
At initialization, there is no spellfiles to reload
2016-11-05 14:49:24 +01:00
Björn Linse
4804001aff encoding: only allow encoding=utf-8 2016-11-05 14:49:23 +01:00
Marco Hinz
32d9c19e29 Health: introduce help links (#5557)
We can now use help links like in normal help pages. The bars around them will
be concealed as well.

* Health: link string "SUCCESS" to ModeMsg

So far we linked "SUCCESS" to the Function highlight group.

The newly introduced healthHelp group links to Idenfifier as it does for links
in normal help pages.

Now the problem is that the Function group links again to Identifier as well, so
both, "SUCCESS" and help links, would use the same colors.

* Health: don't use Markdown code blocks

Every line indented by more than 4 spaces would lose its highlighting otherwise.

* Health: add helper health#help_to_link()
2016-11-04 11:03:05 +01:00
James McCoy
01f1028496 Merge pull request #5524 from brcolow/vim-7.4.1967
vim-patch:7.4.1967
2016-11-02 20:06:23 -04:00
Michael Ennen
b8bb1f6729 vim-patch:7.4.1967
Problem: Falling back from NFA to old regexp engine does not work properly.
(fritzophrenic)
Solution: Do not restore nfa_match. (Christian Brabandt, closes vim/vim#867)

6747fabc73

Helped-by: jamessan
2016-11-02 20:05:45 -04:00
James McCoy
9ef4be9aab Merge pull request #5550 from jamessan/big-endian-fixes
Making nvim big-endian friendly
2016-11-02 20:04:10 -04:00
James McCoy
654e92186b lint 2016-11-02 10:06:27 -04:00
James McCoy
9b545dd3db nvim_win_get_number: Use int as rv to fix BE issues
rv is int64_t but its address is being passed into win_get_tabwin as if
it were an int.  This breaks on big-endian systems, since win_get_tabwin
will store the data to the "wrong" half of the int64_t, thus returning
invalid data out of nvim_win_get_number.
2016-11-02 10:06:27 -04:00
James McCoy
37e64d79cc object_to_vim: Fix buffer/window/tabpage conversion on BE systems
Since data.integer is a different (larger) integer type than
data.{buffer,window,tabpage}, we cannot abuse the union by using
data.integer to access the value for all 4 types.  Instead, remove the
{buffer,window,tabpage} members and always use the integer member.

In order to accomodate this, perform distinct validation and coercion
between the Integer type and Buffer/Window/Tabpage types in
object_to_vim, msgpack_rpc helpers, and gendispatch.lua.
2016-11-02 10:06:27 -04:00
James McCoy
87ff2682d7 Use int as the standard type for boolean options.
All options are accessed by passing char_u pointers around, casting the
pointer to the right pointer type for the specific option, and then
dereferencing that pointer.

This dance works fine on little-endian systems when some bool options
are int types (as in Vim) and some are bool types (as would make more
sense), but on big-endian systems *(int *)varp when varp is pointing to
a bool will read random memory.

Therefore, all boolean options must remain a consistent type and int is
currently the easiest to choose.
2016-11-02 10:06:26 -04:00
Justin M. Keyes
349fa0048b Merge #5542 from mhinz/health/clipboard
CheckHealth: add clipboard check
2016-11-02 12:17:32 +01:00
Marco Hinz
3a802e3c16 provider/clipboard.vim: never show a warning on sourcing
Never throw an error when provider/clipboard.vim is sourced for the first time.
Save the error instead and expose it via `provider#clipboard#Error()`, mimicking
provider/python.vim.
2016-11-02 12:06:57 +01:00
Marco Hinz
797d72a997 health/provider.vim: add clipboard check 2016-11-02 12:06:54 +01:00
Marco Hinz
0a1b852cd1 provider/clipboard.vim: refactor 2016-11-02 12:04:43 +01:00
Justin M. Keyes
36c0ec6dd4 tui/suspend_event(): set STDIN to "blocking"
Set STDIN to blocking on "suspend". This was missed in #2598.
See 8a782f1699.

Also on "continue"/SIGCONT explicitly set STDIN back to NON-blocking.
We don't explicitly do that on *startup* (libuv does it internally),
but on "continue" it seems wise to restore libuv's expectations.

Closes #5459
2016-11-02 01:20:16 +01:00
James McCoy
d37c2e5dc2 doc: Remove features from vim_diff which have been merged upstream (#5554)
- TabNew/TabClosed: Introduced in 7.4.2075 and 7.4.2077
- hl-EndOfBuffer: Introduced in 7.4.2213
2016-10-31 17:26:32 +01:00
Justin M. Keyes
e427cdf2d4 doc/api: Closes #1842 2016-10-31 16:16:37 +01:00
James McCoy
859e9fa65f Merge pull request #5527 from brcolow/vim-7.4.1730
vim-patch:7.4.[1730,1734,1741,1742,1779,1782]
2016-10-31 10:13:41 -04:00
Justin M. Keyes
b172f9904f doc: eval/typval_encode.h
Annotate TYPVAL_ENCODE_DEFINE_CONV_FUNCTIONS to aid code navigation.
2016-10-31 02:21:16 +01:00
Justin M. Keyes
ed198737fd Merge #5546 from justinmk/global-ctrlc
ex_global: Catch CTRL-C even if it is mapped.
2016-10-30 14:20:40 +01:00
Justin M. Keyes
49cf0b6ac4 lint 2016-10-30 13:10:29 +01:00
Justin M. Keyes
7cd204dbfa ex_global: Catch CTRL-C even if it is mapped.
Problem: If CTRL-C is mapped, it does not interrupt :global output.
Solution: clear `mapped_ctrl_c` during :global.
2016-10-30 13:10:29 +01:00
KillTheMule
e8c0f90962 Linted 2016-10-30 10:52:05 +01:00
KillTheMule
561c1e39e0 Tests for incsubstitution feature 2016-10-30 10:52:05 +01:00
KillTheMule
13841a56b4 Incsubsitution feature
Originally implemented by

* Clement0
* DesbyP
* aym7
* Adrey06
* Robinhola

in #4811. Major reworkings and bug
fixes by

* bfredl

Most tests suggested by ZyX-l, suggestions for improvements by oni-link.
2016-10-30 10:21:18 +01:00
James McCoy
6143cfdeec Merge pull request #5543 from jamessan/fix-shada-marks-test
test: Fix shada/marks_spec.lua failure
2016-10-29 12:49:50 -04:00
J Phani Mahesh
3d49fc1f50 CheckHealth: fix check for tmux escape-time (#5545) 2016-10-29 14:48:19 +02:00
James McCoy
93f3896300 test: Fix shada/marks_spec.lua failure
The 'dump and read back mark " from a closed tab' test needs to actually
create a second tab.  Since it wasn't doing so, the 'q!' command caused
nvim to exit and the subsequent 'qall' command fails.
2016-10-28 22:32:14 -04:00
Justin M. Keyes
242c3d5f0b version bump 2016-10-28 15:16:59 +02:00
Michael Ennen
f6f77272b3 vim-patch:7.4.1782
Problem:    strcharpart() does not work properly with some multi-byte
            characters.
Solution:   Use mb_cptr2len() instead of mb_char2len(). (Hirohito Higashi)

fca6600305
2016-10-24 12:49:17 -07:00
Michael Ennen
6bc0d9b8c7 vim-patch:7.4.1779
Problem:    Using negative index in strcharpart(). (Yegappan Lakshmanan)
Solution:   Assume single byte when using a negative iindex.

73dfe917ba
2016-10-23 22:55:22 -07:00
Michael Ennen
b5dfdf0669 vim-patch:7.4.1742
Problem:    strgetchar() does not work correctly.
Solution:   use mb_cptr2len().  Add a test. (Naruhiko Nishino)

5d18e0eca5
2016-10-23 18:04:46 -07:00
Michael Ennen
9e5dca8490 vim-patch:7.4.1741
Problem:    Not testing utf-8 characters.
Solution:   Move the right asserts to the test_expr_utf8 test.

b22bd46b96
2016-10-23 18:04:46 -07:00
Michael Ennen
763422b036 vim-patch:7.4.1734
Problem:    Test fails when not using utf-8.
Solution:   Split test in regularand utf-8 part.

0f518a8f4d
2016-10-23 18:04:46 -07:00
Michael Ennen
d6e27f90b9 vim-patch:7.4.1730
Problem:    It is not easy to get a character out of a string.
Solution:   Add strgetchar() and strcharpart().

58de0e2dcc
2016-10-23 18:04:28 -07:00
Lucas Hoffmann
622a3ae8ea tests: Migrate legacy test 69. 2016-05-23 10:17:51 +02:00
1297 changed files with 135424 additions and 145821 deletions

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env bash
set -e
set -o pipefail
if [[ -n "${CI_TARGET}" ]]; then
exit
fi
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
brew update
fi
echo "Upgrade Python 2's 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's pip."
pip3 -q install --user --upgrade pip
else
# TODO: Replace with upgrade when Travis gets python3-pip package.
echo "Install pip for Python 3."
curl -sSL https://bootstrap.pypa.io/get-pip.py -o "${HOME}/get-pip.py"
# After this, pip in PATH will refer to Python 3's pip.
python3.3 "${HOME}/get-pip.py" --user --upgrade
fi

View File

@@ -1,113 +0,0 @@
check_core_dumps() {
sleep 2
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
local cores="$(find /cores/ -type f -print)"
local dbg_cmd="lldb -Q -o bt -f ${BUILD_DIR}/bin/nvim -c"
else
# FIXME (fwalch): Will trigger if a file named core.* exists outside of $DEPS_BUILD_DIR.
local cores="$(find ./ -type f -not -path "*${DEPS_BUILD_DIR}*" -name 'core.*' -print)"
local dbg_cmd="gdb -n -batch -ex bt ${BUILD_DIR}/bin/nvim"
fi
if [ -z "${cores}" ]; then
return
fi
for core in $cores; do
${dbg_cmd} "${core}"
done
exit 1
}
check_logs() {
# Iterate through each log to remove an useless warning.
for log in $(find "${1}" -type f -name "${2}"); do
sed -i "${log}" \
-e '/Warning: noted but unhandled ioctl/d' \
-e '/could cause spurious value errors to appear/d' \
-e '/See README_MISSING_SYSCALL_OR_IOCTL for guidance/d'
done
# Now do it again, but only consider files with size > 0.
local err=""
for log in $(find "${1}" -type f -name "${2}" -size +0); do
cat "${log}"
err=1
done
if [[ -n "${err}" ]]; then
echo "Runtime errors detected."
exit 1
fi
}
valgrind_check() {
check_logs "${1}" "valgrind-*"
}
asan_check() {
check_logs "${1}" "*san.*"
}
run_unittests() {
${MAKE_CMD} -C "${BUILD_DIR}" unittest
}
run_functionaltests() {
if ! ${MAKE_CMD} -C "${BUILD_DIR}" ${FUNCTIONALTEST}; then
asan_check "${LOG_DIR}"
valgrind_check "${LOG_DIR}"
exit 1
fi
asan_check "${LOG_DIR}"
valgrind_check "${LOG_DIR}"
}
run_oldtests() {
${MAKE_CMD} -C "${BUILD_DIR}" helptags
if ! make -C "${TRAVIS_BUILD_DIR}/src/nvim/testdir"; then
reset
asan_check "${LOG_DIR}"
valgrind_check "${LOG_DIR}"
exit 1
fi
asan_check "${LOG_DIR}"
valgrind_check "${LOG_DIR}"
}
install_nvim() {
${MAKE_CMD} -C "${BUILD_DIR}" install
"${INSTALL_PREFIX}/bin/nvim" --version
"${INSTALL_PREFIX}/bin/nvim" -u NONE -e -c ':help' -c ':qall' || {
echo "Running ':help' in the installed nvim failed."
echo "Maybe the helptags have not been generated properly."
exit 1
}
local genvimsynf=syntax/vim/generated.vim
# Check that all runtime files were installed
for file in doc/tags $genvimsynf $(
cd runtime ; git ls-files | grep -e '.vim$' -e '.ps$' -e '.dict$' -e '.py$' -e '.tutor$'
) ; do
if ! test -e "${INSTALL_PREFIX}/share/nvim/runtime/$file" ; then
echo "It appears that $file is not installed."
exit 1
fi
done
# Check that generated syntax file has function names, #5060.
local gpat='syn keyword vimFuncName .*eval'
if ! grep -q "$gpat" "${INSTALL_PREFIX}/share/nvim/runtime/$genvimsynf"; then
echo "It appears that $genvimsynf does not contain $gpat."
exit 1
fi
for file in $(
cd runtime ; git ls-files | grep -e '.awk$' -e '.sh$' -e '.bat$'
) ; do
if ! test -x "${INSTALL_PREFIX}/share/nvim/runtime/$file" ; then
echo "It appears that $file is not installed or is not executable."
exit 1
fi
done
}

View File

@@ -1,22 +0,0 @@
#!/usr/bin/env bash
set -e
set -o pipefail
CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CI_DIR}/common/build.sh"
source "${CI_DIR}/common/test.sh"
build_nvim
if [ "$CLANG_SANITIZER" != "TSAN" ]; then
# Additional threads are only created when the builtin UI starts, which
# doesn't happen in the unit/functional tests
run_unittests
run_functionaltests
fi
run_oldtests
install_nvim
touch "${SUCCESS_MARKER}"

7
.gitignore vendored
View File

@@ -4,7 +4,6 @@
/.deps/ /.deps/
/tmp/ /tmp/
*.rej
*.orig *.orig
*.mo *.mo
.*.sw? .*.sw?
@@ -40,9 +39,6 @@ tags
# generated by luacheck during `make testlint' # generated by luacheck during `make testlint'
/test/.luacheckcache /test/.luacheckcache
# luarocks, not added as a subtree because of the large number of blobs
/third-party/luarocks
# local make targets # local make targets
local.mk local.mk
@@ -50,6 +46,3 @@ local.mk
/runtime/doc/*.html /runtime/doc/*.html
/runtime/doc/tags.ref /runtime/doc/tags.ref
/runtime/doc/errors.log /runtime/doc/errors.log
# clint errors, generated by `make lint`
/errors.json

View File

@@ -1,3 +1,4 @@
dist: trusty
sudo: false sudo: false
language: c language: c
@@ -9,9 +10,7 @@ env:
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM # http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
- MAKE_CMD="make -j2" - MAKE_CMD="make -j2"
# Update PATH for pip. # Update PATH for pip.
- PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:$PATH" - PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:/usr/lib/llvm-symbolizer-3.9/bin:$PATH"
# LLVM symbolizer path.
- LLVM_SYMBOLIZER="$(which llvm-symbolizer-3.4)"
# Build directory for Neovim. # Build directory for Neovim.
- BUILD_DIR="$TRAVIS_BUILD_DIR/build" - BUILD_DIR="$TRAVIS_BUILD_DIR/build"
# Build directory for third-party dependencies. # Build directory for third-party dependencies.
@@ -26,9 +25,9 @@ env:
- CMAKE_FLAGS="-DTRAVIS_CI_BUILD=ON - CMAKE_FLAGS="-DTRAVIS_CI_BUILD=ON
-DCMAKE_BUILD_TYPE=Debug -DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX
-DBUSTED_OUTPUT_TYPE=gtest -DBUSTED_OUTPUT_TYPE=nvim
-DDEPS_PREFIX=$DEPS_BUILD_DIR/usr -DDEPS_PREFIX=$DEPS_BUILD_DIR/usr
-DMIN_LOG_LEVEL=0" -DMIN_LOG_LEVEL=2"
- DEPS_CMAKE_FLAGS="-DDEPS_DOWNLOAD_DIR:PATH=$DEPS_DOWNLOAD_DIR" - DEPS_CMAKE_FLAGS="-DDEPS_DOWNLOAD_DIR:PATH=$DEPS_DOWNLOAD_DIR"
# Additional CMake flags for 32-bit builds. # Additional CMake flags for 32-bit builds.
- CMAKE_FLAGS_32BIT="-DCMAKE_SYSTEM_LIBRARY_PATH=/lib32:/usr/lib32:/usr/local/lib32 - CMAKE_FLAGS_32BIT="-DCMAKE_SYSTEM_LIBRARY_PATH=/lib32:/usr/lib32:/usr/local/lib32
@@ -36,22 +35,17 @@ env:
-DCMAKE_TOOLCHAIN_FILE=$TRAVIS_BUILD_DIR/cmake/i386-linux-gnu.toolchain.cmake" -DCMAKE_TOOLCHAIN_FILE=$TRAVIS_BUILD_DIR/cmake/i386-linux-gnu.toolchain.cmake"
# Environment variables for Clang sanitizers. # Environment variables for Clang sanitizers.
- ASAN_OPTIONS="detect_leaks=1:check_initialization_order=1:log_path=$LOG_DIR/asan" - ASAN_OPTIONS="detect_leaks=1:check_initialization_order=1:log_path=$LOG_DIR/asan"
- ASAN_SYMBOLIZER_PATH="$LLVM_SYMBOLIZER" - TSAN_OPTIONS="log_path=$LOG_DIR/tsan"
- TSAN_OPTIONS="external_symbolizer_path=$LLVM_SYMBOLIZER log_path=$LOG_DIR/tsan" - UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
- UBSAN_OPTIONS="log_path=$LOG_DIR/ubsan"
# Environment variables for Valgrind. # Environment variables for Valgrind.
- VALGRIND_LOG="$LOG_DIR/valgrind-%p.log" - VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
# Cache marker for third-party dependencies cache. # Cache marker for third-party dependencies cache.
# If this file exists, we know that the cache contains compiled # If this file exists, we know that the cache contains compiled
# dependencies and we can use it. # dependencies and we can use it.
- CACHE_MARKER="$HOME/.cache/nvim-deps/.travis_cache_marker" - CACHE_MARKER="$HOME/.cache/nvim-deps/.travis_cache_marker"
# Test success marker. If this file exists, we know that all tests
# were successful. Required because we only want to update the cache
# if the tests were successful, but don't have this information
# available in before_cache (which is run before after_success).
- SUCCESS_MARKER="$BUILD_DIR/.tests_successful"
# default target name for functional tests # default target name for functional tests
- FUNCTIONALTEST=functionaltest - FUNCTIONALTEST=functionaltest
- CI_TARGET=tests
matrix: matrix:
include: include:
@@ -70,10 +64,10 @@ matrix:
compiler: gcc-5 -m32 compiler: gcc-5 -m32
env: BUILD_32BIT=ON env: BUILD_32BIT=ON
- os: linux - os: linux
compiler: clang compiler: clang-3.9
env: CLANG_SANITIZER=ASAN_UBSAN env: CLANG_SANITIZER=ASAN_UBSAN
- os: linux - os: linux
compiler: clang compiler: clang-3.9
env: CLANG_SANITIZER=TSAN env: CLANG_SANITIZER=TSAN
- os: osx - os: osx
compiler: clang compiler: clang
@@ -81,37 +75,41 @@ matrix:
- os: osx - os: osx
compiler: gcc-4.9 compiler: gcc-4.9
osx_image: xcode7.3 # macOS 10.11 osx_image: xcode7.3 # macOS 10.11
allow_failures:
- env: GCOV=gcov-5 CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
fast_finish: true fast_finish: true
before_install: .ci/before_install.sh before_install: ci/before_install.sh
install: .ci/install.sh install: ci/install.sh
before_script: .ci/before_script.sh before_script: ci/before_script.sh
script: .ci/script.sh script: ci/script.sh
before_cache: .ci/before_cache.sh before_cache: ci/before_cache.sh
after_success: .ci/after_success.sh after_success: ci/after_success.sh
addons: addons:
apt: apt:
sources: sources:
# TODO: Remove PPA when Travis gets Python >=3.3.
- deadsnakes
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- llvm-toolchain-trusty-3.9
packages: packages:
- autoconf - autoconf
- automake - automake
- apport
- build-essential - build-essential
- clang-3.4 - clang-3.9
- cmake - cmake
- cscope
- g++-5-multilib - g++-5-multilib
- g++-multilib - g++-multilib
- gcc-5-multilib - gcc-5-multilib
- gcc-multilib - gcc-multilib
- gdb - gdb
- language-pack-tr
- libc6-dev-i386 - libc6-dev-i386
- libtool - libtool
- llvm-3.4-dev - llvm-3.9-dev
- locales
- pkg-config - pkg-config
- python3.3-dev
- unzip - unzip
- valgrind - valgrind
- xclip - xclip

View File

@@ -42,8 +42,10 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
if(CMAKE_COMPILER_IS_GNUCXX) if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ") set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")
endif() endif()
endif()
# Enable fixing case-insensitive filenames for Mac. if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# Enable fixing case-insensitive filenames for Windows and Mac.
set(USE_FNAME_CASE TRUE) set(USE_FNAME_CASE TRUE)
endif() endif()
@@ -61,12 +63,12 @@ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
# If not in a git repo (e.g., a tarball) these tokens define the complete # 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`. # version string, else they are combined with the result of `git describe`.
set(NVIM_VERSION_MAJOR 0) set(NVIM_VERSION_MAJOR 0)
set(NVIM_VERSION_MINOR 1) set(NVIM_VERSION_MINOR 2)
set(NVIM_VERSION_PATCH 6) set(NVIM_VERSION_PATCH 0)
set(NVIM_VERSION_PRERELEASE "") # for package maintainers set(NVIM_VERSION_PRERELEASE "") # for package maintainers
# API level # API level
set(NVIM_API_LEVEL 1) # Bump this after any API change. set(NVIM_API_LEVEL 2) # Bump this after any API change.
set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change. set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change.
set(NVIM_API_PRERELEASE false) set(NVIM_API_PRERELEASE false)
@@ -150,9 +152,9 @@ if(NOT MSVC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wconversion") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wconversion")
endif() endif()
# gcc 4.0 and better turn on _FORTIFY_SOURCE=2 automatically. This currently # gcc 4.0+ sets _FORTIFY_SOURCE=2 automatically. This currently
# does not work with Neovim due to some uses of dynamically-sized structures. # does not work with Neovim due to some uses of dynamically-sized structures.
# See https://github.com/neovim/neovim/issues/223 for details. # https://github.com/neovim/neovim/issues/223
include(CheckCSourceCompiles) include(CheckCSourceCompiles)
# Include the build type's default flags in the check for _FORTIFY_SOURCE, # Include the build type's default flags in the check for _FORTIFY_SOURCE,
@@ -255,11 +257,10 @@ if(HAS_DIAG_COLOR_FLAG)
add_definitions(-fdiagnostics-color=auto) add_definitions(-fdiagnostics-color=auto)
endif() endif()
option( option(TRAVIS_CI_BUILD "Travis/QuickBuild CI. Extra flags will be set." OFF)
TRAVIS_CI_BUILD "Travis CI build. Extra compilation flags will be set." OFF)
if(TRAVIS_CI_BUILD) if(TRAVIS_CI_BUILD)
message(STATUS "Travis CI build enabled.") message(STATUS "Travis/QuickBuild CI build enabled.")
add_definitions(-Werror) add_definitions(-Werror)
if(DEFINED ENV{BUILD_32BIT}) if(DEFINED ENV{BUILD_32BIT})
# Get some test coverage for unsigned char # Get some test coverage for unsigned char
@@ -274,7 +275,6 @@ else()
endif() endif()
add_definitions(-DINCLUDE_GENERATED_DECLARATIONS) add_definitions(-DINCLUDE_GENERATED_DECLARATIONS)
add_definitions(-DHAVE_CONFIG_H)
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_NAME STREQUAL "Linux") 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_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
@@ -309,6 +309,21 @@ include_directories(SYSTEM ${LIBUV_INCLUDE_DIRS})
find_package(Msgpack 1.0.0 REQUIRED) find_package(Msgpack 1.0.0 REQUIRED)
include_directories(SYSTEM ${MSGPACK_INCLUDE_DIRS}) include_directories(SYSTEM ${MSGPACK_INCLUDE_DIRS})
list(APPEND CMAKE_REQUIRED_INCLUDES "${MSGPACK_INCLUDE_DIRS}")
check_c_source_compiles("
#include <msgpack.h>
int
main(void)
{
return MSGPACK_OBJECT_FLOAT32;
}
" MSGPACK_HAS_FLOAT32)
if(MSGPACK_HAS_FLOAT32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_MSGPACK_HAS_FLOAT32")
endif()
if(UNIX) if(UNIX)
option(FEAT_TUI "Enable the Terminal UI" ON) option(FEAT_TUI "Enable the Terminal UI" ON)
else() else()
@@ -340,8 +355,8 @@ 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.") message(FATAL_ERROR "Sanitizers are only supported for Clang.")
endif() endif()
if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD|FreeBSD")
message(STATUS "detected OpenBSD; disabled jemalloc. #5318") message(STATUS "detected OpenBSD/FreeBSD; disabled jemalloc. #5318")
option(ENABLE_JEMALLOC "enable jemalloc" OFF) option(ENABLE_JEMALLOC "enable jemalloc" OFF)
else() else()
option(ENABLE_JEMALLOC "enable jemalloc" ON) option(ENABLE_JEMALLOC "enable jemalloc" ON)
@@ -423,7 +438,6 @@ if(NOT BUSTED_OUTPUT_TYPE)
endif() endif()
find_program(LUACHECK_PRG luacheck) find_program(LUACHECK_PRG luacheck)
find_program(GPERF_PRG gperf) find_program(GPERF_PRG gperf)
include(InstallHelpers) include(InstallHelpers)
@@ -439,11 +453,11 @@ install_helper(
# MIN_LOG_LEVEL for log.h # MIN_LOG_LEVEL for log.h
if(DEFINED MIN_LOG_LEVEL) if(DEFINED MIN_LOG_LEVEL)
if(NOT MIN_LOG_LEVEL MATCHES "^[0-3]$") if(NOT MIN_LOG_LEVEL MATCHES "^[0-3]$")
message(FATAL_ERROR "MIN_LOG_LEVEL must be a number DEBUG (0), INFO (1), WARNING (2) or ERROR (3)") message(FATAL_ERROR "MIN_LOG_LEVEL must be a number 0-3")
endif() endif()
message(STATUS "Log level set to ${MIN_LOG_LEVEL}") message(STATUS "MIN_LOG_LEVEL set to ${MIN_LOG_LEVEL}")
else() else()
message(STATUS "Log level not specified, defaulting to INFO(1)") message(STATUS "MIN_LOG_LEVEL not specified, defaulting to INFO(1)")
endif() endif()
# Go down the tree. # Go down the tree.
@@ -456,7 +470,7 @@ get_compile_flags(NVIM_VERSION_CFLAGS)
add_subdirectory(test/includes) add_subdirectory(test/includes)
add_subdirectory(config) add_subdirectory(config)
add_subdirectory(test/functional/fixtures) # compile pty/shell test programs add_subdirectory(test/functional/fixtures) # compile test programs
add_subdirectory(runtime) add_subdirectory(runtime)
# Setup some test-related bits. We do this after going down the tree because we # Setup some test-related bits. We do this after going down the tree because we
@@ -489,10 +503,9 @@ if(BUSTED_PRG)
${CMAKE_BINARY_DIR}/test/config/paths.lua) ${CMAKE_BINARY_DIR}/test/config/paths.lua)
set(UNITTEST_PREREQS nvim-test unittest-headers) set(UNITTEST_PREREQS nvim-test unittest-headers)
if(WIN32) set(FUNCTIONALTEST_PREREQS nvim printargs-test shell-test)
set(FUNCTIONALTEST_PREREQS nvim shell-test) if(NOT WIN32)
else() list(APPEND FUNCTIONALTEST_PREREQS tty-test)
set(FUNCTIONALTEST_PREREQS nvim tty-test shell-test)
endif() endif()
set(BENCHMARK_PREREQS nvim tty-test) set(BENCHMARK_PREREQS nvim tty-test)
@@ -522,8 +535,7 @@ if(BUSTED_PRG)
DEPENDS ${UNITTEST_PREREQS} DEPENDS ${UNITTEST_PREREQS}
${TEST_TARGET_ARGS}) ${TEST_TARGET_ARGS})
else() else()
message(WARNING "The Luajit ffi is not available in ${LUA_PRG}" message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}")
", disabling unit tests")
endif() endif()
add_custom_target(functionaltest add_custom_target(functionaltest

View File

@@ -6,10 +6,15 @@ Getting started
If you want to help but don't know where to start, here are some If you want to help but don't know where to start, here are some
low-risk/isolated tasks: low-risk/isolated tasks:
- Help us [review pull requests](#reviewing)!
- Merge a [Vim patch]. - Merge a [Vim patch].
- Try a [complexity:low] issue. - Try a [complexity:low] issue.
- Fix [clang-scan] or [coverity](#coverity) warnings. - Fix [clang-scan], [coverity](#coverity), and [PVS](#pvs-studio) warnings.
Developer guidelines
--------------------
- Nvim developers should read `:help dev-help`.
- External UI developers should read `:help dev-ui`.
Reporting problems Reporting problems
------------------ ------------------
@@ -26,17 +31,25 @@ Reporting problems
Pull requests ("PRs") Pull requests ("PRs")
--------------------- ---------------------
- To avoid duplicate work, you may want to create a `[WIP]` pull request so that - To avoid duplicate work, create a `[WIP]` pull request as soon as possible.
others know what you are working on. - Avoid cosmetic changes to unrelated files in the same commit: noise makes
- Avoid cosmetic changes to unrelated files in the same commit: extra noise reviews take longer.
makes reviews more difficult.
- Use a [feature branch][git-feature-branch] instead of the master branch. - Use a [feature branch][git-feature-branch] instead of the master branch.
- [Rebase your feature branch][git-rebasing] onto (upstream) master before - Use a **rebase workflow** for small PRs.
opening the PR. - After addressing review comments, it's fine to rebase and force-push.
- After addressing the review comments, it's fine to rebase and force-push to - Use a **merge workflow** for big, high-risk PRs.
your review. - Merge `master` into your PR when there are conflicts or when master
- Try to [tidy your history][git-history-rewriting]: combine related commits introduces breaking changes.
with interactive rebasing, separate monolithic commits, etc. - Use the `ri` git alias:
```
[alias]
ri = "!sh -c 't=\"${1:-master}\" ; s=\"${2:-HEAD}\" ; if git merge-base --is-ancestor \"$t\" \"$s\" ; then o=\"$t\" ; else mb=\"$(git merge-base \"$t\" \"$s\")\" ; if test \"x$mb\" = x ; then o=\"$t\" ; else lm=\"$(git log -n1 --merges \"$t..$s\" --pretty=%H)\" ; if test \"x$lm\" = x ; then o=\"$mb\" ; else o=\"$lm\" ; fi ; fi ; fi ; [ $# -gt 0 ] && shift ; [ $# -gt 0 ] && shift ; git rebase --interactive \"$o\" \"$@\"' -"
```
This avoids unnecessary rebases yet still allows you to combine related
commits, separate monolithic commits, etc.
- Do not edit commits that come before the merge commit.
- During a squash/fixup, use `exec make -C build unittest` between each
pick/edit/reword.
### Stages: WIP, RFC, RDY ### Stages: WIP, RFC, RDY
@@ -90,6 +103,15 @@ Each pull request must pass the automated builds ([travis CI] and [quickbuild]).
a commit that contains only style changes. a commit that contains only style changes.
- [How to investigate QuickBuild failures](https://github.com/neovim/neovim/pull/4718#issuecomment-217631350) - [How to investigate QuickBuild failures](https://github.com/neovim/neovim/pull/4718#issuecomment-217631350)
QuickBuild uses this invocation:
mkdir -p build/${params.get("buildType")} \
&& cd build/${params.get("buildType")} \
&& cmake -G "Unix Makefiles" -DBUSTED_OUTPUT_TYPE=TAP -DCMAKE_BUILD_TYPE=${params.get("buildType")}
-DTRAVIS_CI_BUILD=ON ../.. && ${node.getAttribute("make", "make")}
VERBOSE=1 nvim unittest-prereqs functionaltest-prereqs
### Coverity ### Coverity
[Coverity](https://scan.coverity.com/projects/neovim-neovim) runs against the [Coverity](https://scan.coverity.com/projects/neovim-neovim) runs against the
@@ -102,6 +124,11 @@ Use this commit-message format for coverity fixes:
where `<id>` is the Coverity ID (CID). For example see [#804](https://github.com/neovim/neovim/pull/804). where `<id>` is the Coverity ID (CID). For example see [#804](https://github.com/neovim/neovim/pull/804).
### PVS-Studio
Run `scripts/pvscheck.sh` to check the codebase with [PVS
Studio](https://www.viva64.com/en/pvs-studio/).
Reviewing Reviewing
--------- ---------

View File

@@ -4,6 +4,7 @@ filter-true = $(strip $(filter-out 1 on ON true TRUE,$1))
# See contrib/local.mk.example # See contrib/local.mk.example
-include local.mk -include local.mk
CMAKE_PRG ?= $(shell (command -v cmake3 || echo cmake))
CMAKE_BUILD_TYPE ?= Debug CMAKE_BUILD_TYPE ?= Debug
CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
@@ -15,7 +16,7 @@ BUILD_TYPE ?= $(shell (type ninja > /dev/null 2>&1 && echo "Ninja") || \
ifeq (,$(BUILD_TOOL)) ifeq (,$(BUILD_TOOL))
ifeq (Ninja,$(BUILD_TYPE)) ifeq (Ninja,$(BUILD_TYPE))
ifneq ($(shell cmake --help 2>/dev/null | grep Ninja),) ifneq ($(shell $(CMAKE_PRG) --help 2>/dev/null | grep Ninja),)
BUILD_TOOL := ninja BUILD_TOOL := ninja
else else
# User's version of CMake doesn't support Ninja # User's version of CMake doesn't support Ninja
@@ -67,7 +68,7 @@ cmake:
$(MAKE) build/.ran-cmake $(MAKE) build/.ran-cmake
build/.ran-cmake: | deps build/.ran-cmake: | deps
cd build && cmake -G '$(BUILD_TYPE)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) .. cd build && $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) ..
touch $@ touch $@
deps: | build/.ran-third-party-cmake deps: | build/.ran-third-party-cmake
@@ -79,14 +80,20 @@ build/.ran-third-party-cmake:
ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),) ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),)
mkdir -p .deps mkdir -p .deps
cd .deps && \ cd .deps && \
cmake -G '$(BUILD_TYPE)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \ $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \
$(DEPS_CMAKE_FLAGS) ../third-party $(DEPS_CMAKE_FLAGS) ../third-party
endif endif
mkdir -p build mkdir -p build
touch $@ touch $@
# TODO: cmake 3.2+ add_custom_target() has a USES_TERMINAL flag.
oldtest: | nvim helptags oldtest: | nvim helptags
+$(SINGLE_MAKE) -C src/nvim/testdir $(MAKEOVERRIDES) +$(SINGLE_MAKE) -C src/nvim/testdir clean
ifeq ($(strip $(TEST_FILE)),)
+$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG="$(realpath build/bin/nvim)" $(MAKEOVERRIDES)
else
+$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG="$(realpath build/bin/nvim)" NEW_TESTS=$(TEST_FILE) SCRIPTS= $(MAKEOVERRIDES)
endif
helptags: | nvim helptags: | nvim
+$(BUILD_CMD) -C build helptags +$(BUILD_CMD) -C build helptags
@@ -111,6 +118,7 @@ test: functionaltest unittest
clean: clean:
+test -d build && $(BUILD_CMD) -C build clean || true +test -d build && $(BUILD_CMD) -C build clean || true
$(MAKE) -C src/nvim/testdir clean $(MAKE) -C src/nvim/testdir clean
$(MAKE) -C runtime/doc clean
distclean: clean distclean: clean
rm -rf .deps build rm -rf .deps build
@@ -118,12 +126,15 @@ distclean: clean
install: | nvim install: | nvim
+$(BUILD_CMD) -C build install +$(BUILD_CMD) -C build install
clint: clint: build/.ran-cmake
cmake -DLINT_PRG=./src/clint.py \ +$(BUILD_CMD) -C build clint
-DLINT_DIR=src \
-DLINT_SUPPRESS_URL="$(DOC_DOWNLOAD_URL_BASE)$(CLINT_ERRORS_FILE_PATH)" \
-P cmake/RunLint.cmake
lint: clint testlint clint-full: build/.ran-cmake
+$(BUILD_CMD) -C build clint-full
check-single-includes: build/.ran-cmake
+$(BUILD_CMD) -C build check-single-includes
lint: check-single-includes clint testlint
.PHONY: test testlint functionaltest unittest lint clint clean distclean nvim libnvim cmake deps install .PHONY: test testlint functionaltest unittest lint clint clean distclean nvim libnvim cmake deps install

View File

@@ -1,4 +1,4 @@
[![Neovim](https://raw.githubusercontent.com/neovim/neovim.github.io/master/logos/neovim-logo.png)](https://neovim.io) [![Neovim](https://raw.githubusercontent.com/neovim/neovim.github.io/master/logos/neovim-logo-600x173.png)](https://neovim.io)
[Wiki](https://github.com/neovim/neovim/wiki) | [Wiki](https://github.com/neovim/neovim/wiki) |
[Documentation](https://neovim.io/doc) | [Documentation](https://neovim.io/doc) |
@@ -7,7 +7,7 @@
[Gitter **Chat**](https://gitter.im/neovim/neovim) [Gitter **Chat**](https://gitter.im/neovim/neovim)
[![Travis Build Status](https://travis-ci.org/neovim/neovim.svg?branch=master)](https://travis-ci.org/neovim/neovim) [![Travis Build Status](https://travis-ci.org/neovim/neovim.svg?branch=master)](https://travis-ci.org/neovim/neovim)
[![AppVeyor Build status](https://ci.appveyor.com/api/projects/status/cf1jwc29198748we/branch/master?svg=true)](https://ci.appveyor.com/project/neovim/neovim/branch/master) [![AppVeyor Build status](https://ci.appveyor.com/api/projects/status/urdqjrik5u521fac/branch/master?svg=true)](https://ci.appveyor.com/project/neovim/neovim/branch/master)
[![Pull requests waiting for review](https://badge.waffle.io/neovim/neovim.svg?label=RFC&title=RFCs)](https://waffle.io/neovim/neovim) [![Pull requests waiting for review](https://badge.waffle.io/neovim/neovim.svg?label=RFC&title=RFCs)](https://waffle.io/neovim/neovim)
[![Coverage Status](https://img.shields.io/coveralls/neovim/neovim.svg)](https://coveralls.io/r/neovim/neovim) [![Coverage Status](https://img.shields.io/coveralls/neovim/neovim.svg)](https://coveralls.io/r/neovim/neovim)
[![Coverity Scan Build](https://scan.coverity.com/projects/2227/badge.svg)](https://scan.coverity.com/projects/2227) [![Coverity Scan Build](https://scan.coverity.com/projects/2227/badge.svg)](https://scan.coverity.com/projects/2227)
@@ -18,14 +18,39 @@ Neovim is a project that seeks to aggressively refactor Vim in order to:
- Simplify maintenance and encourage [contributions](CONTRIBUTING.md) - Simplify maintenance and encourage [contributions](CONTRIBUTING.md)
- Split the work between multiple developers - Split the work between multiple developers
- Enable advanced [external UIs] without modifications to the core - Enable [advanced UIs] without modifications to the core
- Improve extensibility with a new [plugin architecture](https://github.com/neovim/neovim/wiki/Plugin-UI-architecture) - Maximize [extensibility](https://github.com/neovim/neovim/wiki/Plugin-UI-architecture)
For more details, see See [the wiki](https://github.com/neovim/neovim/wiki/Introduction) and [Roadmap]
[the wiki](https://github.com/neovim/neovim/wiki/Introduction)! for more information.
[![Throughput Graph](https://graphs.waffle.io/neovim/neovim/throughput.svg)](https://waffle.io/neovim/neovim/metrics) [![Throughput Graph](https://graphs.waffle.io/neovim/neovim/throughput.svg)](https://waffle.io/neovim/neovim/metrics)
Install from source
-------------------
make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install
See [the wiki](https://github.com/neovim/neovim/wiki/Building-Neovim) for details.
Install from package
--------------------
Packages are in [Homebrew], [Debian], [Ubuntu], [Fedora], [Arch Linux], and
[more](https://github.com/neovim/neovim/wiki/Installing-Neovim).
Project layout
--------------
- `ci/`: Build server scripts
- `cmake/`: Build scripts
- `runtime/`: Application files
- [`src/`](src/nvim/README.md): Application source code
- `third-party/`: CMake sub-project to build third-party dependencies (if the
`USE_BUNDLED_DEPS` flag is undefined or `USE_BUNDLED` CMake option is false).
- [`test/`](test/README.md): Test files
What's been done so far What's been done so far
----------------------- -----------------------
@@ -34,24 +59,13 @@ What's been done so far
- Asynchronous [job control](https://github.com/neovim/neovim/pull/2247) - Asynchronous [job control](https://github.com/neovim/neovim/pull/2247)
- [Shared data (shada)](https://github.com/neovim/neovim/pull/2506) among multiple editor instances - [Shared data (shada)](https://github.com/neovim/neovim/pull/2506) among multiple editor instances
- [XDG base directories](https://github.com/neovim/neovim/pull/3470) support - [XDG base directories](https://github.com/neovim/neovim/pull/3470) support
- [libuv](https://github.com/libuv/libuv/)-based platform/OS/"mch" layer - [libuv](https://github.com/libuv/libuv/)-based platform/OS layer
- [Pushdown automaton](https://github.com/neovim/neovim/pull/3413) input model - [Pushdown automaton](https://github.com/neovim/neovim/pull/3413) input model
- 1000s of new tests - 1000s of new tests
- Legacy tests converted to Lua tests - Legacy tests converted to Lua tests
See [`:help nvim-features`][nvim-features] for a comprehensive list. See [`:help nvim-features`][nvim-features] for a comprehensive list.
What's being worked on now
--------------------------
See the [Roadmap].
How do I get it?
----------------
There is a Debian package, homebrew formula, PKGBUILD for Arch Linux, RPM, and
more. See [the wiki](https://github.com/neovim/neovim/wiki/Installing-Neovim)!
License License
------- -------
@@ -81,6 +95,11 @@ See `LICENSE` for details.
[license-commit]: https://github.com/neovim/neovim/commit/b17d9691a24099c9210289f16afb1a498a89d803 [license-commit]: https://github.com/neovim/neovim/commit/b17d9691a24099c9210289f16afb1a498a89d803
[nvim-features]: https://neovim.io/doc/user/vim_diff.html#nvim-features [nvim-features]: https://neovim.io/doc/user/vim_diff.html#nvim-features
[Roadmap]: https://neovim.io/roadmap/ [Roadmap]: https://neovim.io/roadmap/
[external UIs]: https://github.com/neovim/neovim/wiki/Related-projects#gui-projects [advanced UIs]: https://github.com/neovim/neovim/wiki/Related-projects#gui-projects
[Homebrew]: https://github.com/neovim/homebrew-neovim#installation
[Debian]: https://packages.debian.org/testing/neovim
[Ubuntu]: http://packages.ubuntu.com/search?keywords=neovim
[Fedora]: https://admin.fedoraproject.org/pkgdb/package/rpms/neovim
[Arch Linux]: https://www.archlinux.org/packages/?q=neovim
<!-- vim: set tw=80: --> <!-- vim: set tw=80: -->

View File

@@ -4,7 +4,10 @@ configuration:
- MINGW_32 - MINGW_32
install: [] install: []
build_script: build_script:
- call .ci\build.bat - call ci\build.bat
cache:
- C:\msys64\var\cache\pacman\pkg -> ci\build.bat
- .deps -> third-party\**
artifacts: artifacts:
- path: build/Neovim.zip - path: build/Neovim.zip
- path: build/Neovim.exe - path: build/bin/nvim.exe

View File

@@ -0,0 +1,305 @@
local s = require 'say'
local pretty = require 'pl.pretty'
local term = require 'term'
local colors
local isWindows = package.config:sub(1,1) == '\\'
if isWindows then
colors = setmetatable({}, {__index = function() return function(s) return s end end})
else
colors = require 'term.colors'
end
return function(options)
local busted = require 'busted'
local handler = require 'busted.outputHandlers.base'()
local c = {
succ = function(s) return colors.bright(colors.green(s)) end,
skip = function(s) return colors.bright(colors.yellow(s)) end,
fail = function(s) return colors.bright(colors.magenta(s)) end,
errr = function(s) return colors.bright(colors.red(s)) end,
test = tostring,
file = colors.cyan,
time = colors.dim,
note = colors.yellow,
sect = function(s) return colors.green(colors.dim(s)) end,
nmbr = colors.bright,
}
local repeatSuiteString = '\nRepeating all tests (run %d of %d) . . .\n\n'
local randomizeString = c.note('Note: Randomizing test order with a seed of %d.\n')
local globalSetup = c.sect('[----------]') .. ' Global test environment setup.\n'
local fileStartString = c.sect('[----------]') .. ' Running tests from ' .. c.file('%s') .. '\n'
local runString = c.sect('[ RUN ]') .. ' ' .. c.test('%s') .. ': '
local successString = c.succ('OK') .. '\n'
local skippedString = c.skip('SKIP') .. '\n'
local failureString = c.fail('FAIL') .. '\n'
local errorString = c.errr('ERR') .. '\n'
local fileEndString = c.sect('[----------]') .. ' '.. c.nmbr('%d') .. ' %s from ' .. c.file('%s') .. ' ' .. c.time('(%.2f ms total)') .. '\n\n'
local globalTeardown = c.sect('[----------]') .. ' Global test environment teardown.\n'
local suiteEndString = c.sect('[==========]') .. ' ' .. c.nmbr('%d') .. ' %s from ' .. c.nmbr('%d') .. ' test %s ran. ' .. c.time('(%.2f ms total)') .. '\n'
local successStatus = c.succ('[ PASSED ]') .. ' ' .. c.nmbr('%d') .. ' %s.\n'
local timeString = c.time('%.2f ms')
local summaryStrings = {
skipped = {
header = c.skip('[ SKIPPED ]') .. ' ' .. c.nmbr('%d') .. ' %s, listed below:\n',
test = c.skip('[ SKIPPED ]') .. ' %s\n',
footer = ' ' .. c.nmbr('%d') .. ' SKIPPED %s\n',
},
failure = {
header = c.fail('[ FAILED ]') .. ' ' .. c.nmbr('%d') .. ' %s, listed below:\n',
test = c.fail('[ FAILED ]') .. ' %s\n',
footer = ' ' .. c.nmbr('%d') .. ' FAILED %s\n',
},
error = {
header = c.errr('[ ERROR ]') .. ' ' .. c.nmbr('%d') .. ' %s, listed below:\n',
test = c.errr('[ ERROR ]') .. ' %s\n',
footer = ' ' .. c.nmbr('%d') .. ' %s\n',
},
}
c = nil
local fileCount = 0
local fileTestCount = 0
local testCount = 0
local successCount = 0
local skippedCount = 0
local failureCount = 0
local errorCount = 0
local pendingDescription = function(pending)
local name = pending.name
local string = ''
if type(pending.message) == 'string' then
string = string .. pending.message .. '\n'
elseif pending.message ~= nil then
string = string .. pretty.write(pending.message) .. '\n'
end
return string
end
local failureDescription = function(failure)
local string = failure.randomseed and ('Random seed: ' .. failure.randomseed .. '\n') or ''
if type(failure.message) == 'string' then
string = string .. failure.message
elseif failure.message == nil then
string = string .. 'Nil error'
else
string = string .. pretty.write(failure.message)
end
string = string .. '\n'
if options.verbose and failure.trace and failure.trace.traceback then
string = string .. failure.trace.traceback .. '\n'
end
return string
end
local getFileLine = function(element)
local fileline = ''
if element.trace or element.trace.short_src then
fileline = colors.cyan(element.trace.short_src) .. ' @ ' ..
colors.cyan(element.trace.currentline) .. ': '
end
return fileline
end
local getTestList = function(status, count, list, getDescription)
local string = ''
local header = summaryStrings[status].header
if count > 0 and header then
local tests = (count == 1 and 'test' or 'tests')
local errors = (count == 1 and 'error' or 'errors')
string = header:format(count, status == 'error' and errors or tests)
local testString = summaryStrings[status].test
if testString then
for _, t in ipairs(list) do
local fullname = getFileLine(t.element) .. colors.bright(t.name)
string = string .. testString:format(fullname)
string = string .. getDescription(t)
end
end
end
return string
end
local getSummary = function(status, count)
local string = ''
local footer = summaryStrings[status].footer
if count > 0 and footer then
local tests = (count == 1 and 'TEST' or 'TESTS')
local errors = (count == 1 and 'ERROR' or 'ERRORS')
string = footer:format(count, status == 'error' and errors or tests)
end
return string
end
local getSummaryString = function()
local tests = (successCount == 1 and 'test' or 'tests')
local string = successStatus:format(successCount, tests)
string = string .. getTestList('skipped', skippedCount, handler.pendings, pendingDescription)
string = string .. getTestList('failure', failureCount, handler.failures, failureDescription)
string = string .. getTestList('error', errorCount, handler.errors, failureDescription)
string = string .. ((skippedCount + failureCount + errorCount) > 0 and '\n' or '')
string = string .. getSummary('skipped', skippedCount)
string = string .. getSummary('failure', failureCount)
string = string .. getSummary('error', errorCount)
return string
end
handler.suiteReset = function()
fileCount = 0
fileTestCount = 0
testCount = 0
successCount = 0
skippedCount = 0
failureCount = 0
errorCount = 0
return nil, true
end
handler.suiteStart = function(suite, count, total, randomseed)
if total > 1 then
io.write(repeatSuiteString:format(count, total))
end
if randomseed then
io.write(randomizeString:format(randomseed))
end
io.write(globalSetup)
io.flush()
return nil, true
end
local function getElapsedTime(tbl)
if tbl.duration then
return tbl.duration * 1000
else
return tonumber('nan')
end
end
handler.suiteEnd = function(suite, count, total)
local elapsedTime_ms = getElapsedTime(suite)
local tests = (testCount == 1 and 'test' or 'tests')
local files = (fileCount == 1 and 'file' or 'files')
io.write(globalTeardown)
io.write(suiteEndString:format(testCount, tests, fileCount, files, elapsedTime_ms))
io.write(getSummaryString())
io.flush()
return nil, true
end
handler.fileStart = function(file)
fileTestCount = 0
io.write(fileStartString:format(file.name))
io.flush()
return nil, true
end
handler.fileEnd = function(file)
local elapsedTime_ms = getElapsedTime(file)
local tests = (fileTestCount == 1 and 'test' or 'tests')
fileCount = fileCount + 1
io.write(fileEndString:format(fileTestCount, tests, file.name, elapsedTime_ms))
io.flush()
return nil, true
end
handler.testStart = function(element, parent)
io.write(runString:format(handler.getFullName(element)))
io.flush()
return nil, true
end
handler.testEnd = function(element, parent, status, debug)
local elapsedTime_ms = getElapsedTime(element)
local string
fileTestCount = fileTestCount + 1
testCount = testCount + 1
if status == 'success' then
successCount = successCount + 1
string = successString
elseif status == 'pending' then
skippedCount = skippedCount + 1
string = skippedString
elseif status == 'failure' then
failureCount = failureCount + 1
string = nil
elseif status == 'error' then
errorCount = errorCount + 1
string = nil
end
if string ~= nil then
if elapsedTime_ms == elapsedTime_ms then
string = timeString:format(elapsedTime_ms) .. ' ' .. string
end
io.write(string)
io.flush()
end
return nil, true
end
handler.testFailure = function(element, parent, message, debug)
io.write(failureString)
io.flush()
io.write(failureDescription(handler.failures[#handler.failures]))
io.flush()
return nil, true
end
handler.testError = function(element, parent, message, debug)
io.write(errorString)
io.flush()
io.write(failureDescription(handler.errors[#handler.errors]))
io.flush()
return nil, true
end
handler.error = function(element, parent, message, debug)
if element.descriptor ~= 'it' then
io.write(failureDescription(handler.errors[#handler.errors]))
io.flush()
errorCount = errorCount + 1
end
return nil, true
end
busted.subscribe({ 'suite', 'reset' }, handler.suiteReset)
busted.subscribe({ 'suite', 'start' }, handler.suiteStart)
busted.subscribe({ 'suite', 'end' }, handler.suiteEnd)
busted.subscribe({ 'file', 'start' }, handler.fileStart)
busted.subscribe({ 'file', 'end' }, handler.fileEnd)
busted.subscribe({ 'test', 'start' }, handler.testStart, { predicate = handler.cancelOnPending })
busted.subscribe({ 'test', 'end' }, handler.testEnd, { predicate = handler.cancelOnPending })
busted.subscribe({ 'failure', 'it' }, handler.testFailure)
busted.subscribe({ 'error', 'it' }, handler.testError)
busted.subscribe({ 'failure' }, handler.error)
busted.subscribe({ 'error' }, handler.error)
return handler
end

View File

@@ -3,12 +3,15 @@
set -e set -e
set -o pipefail set -o pipefail
CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CI_DIR}/common/suite.sh"
# Don't cache pip's log and selfcheck. # Don't cache pip's log and selfcheck.
rm -rf "${HOME}/.cache/pip/log" rm -rf "${HOME}/.cache/pip/log"
rm -f "${HOME}/.cache/pip/selfcheck.json" rm -f "${HOME}/.cache/pip/selfcheck.json"
# Update the third-party dependency cache only if the build was successful. # Update the third-party dependency cache only if the build was successful.
if [[ -f "${SUCCESS_MARKER}" ]]; then if ended_successfully; then
rm -rf "${HOME}/.cache/nvim-deps" rm -rf "${HOME}/.cache/nvim-deps"
mv "${DEPS_BUILD_DIR}" "${HOME}/.cache/nvim-deps" mv "${DEPS_BUILD_DIR}" "${HOME}/.cache/nvim-deps"
touch "${CACHE_MARKER}" touch "${CACHE_MARKER}"

25
ci/before_install.sh Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -e
set -o pipefail
if [[ "${CI_TARGET}" == lint ]]; then
exit
fi
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
brew update
fi
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 pip."
pip3 -q install --user --upgrade pip
else
echo "Upgrade Python 3 pip."
pip3 -q install --user --upgrade pip
fi

View File

@@ -3,7 +3,7 @@
set -e set -e
set -o pipefail set -o pipefail
if [[ -n "${CI_TARGET}" ]]; then if [[ "${CI_TARGET}" == lint ]]; then
exit exit
fi fi

View File

@@ -17,7 +17,17 @@ set PATH=C:\Program Files (x86)\CMake\bin\cpack.exe;%PATH%
:: Build third-party dependencies :: 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 -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%-python2 mingw-w64-%ARCH%-diffutils gperf" || 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 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 mkdir .deps
cd .deps cd .deps
@@ -28,7 +38,7 @@ cd ..
:: Build Neovim :: Build Neovim
mkdir build mkdir build
cd build cd build
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUSTED_OUTPUT_TYPE=gtest -DGPERF_PRG="C:\msys64\usr\bin\gperf.exe" .. || goto :error cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUSTED_OUTPUT_TYPE=nvim -DGPERF_PRG="C:\msys64\usr\bin\gperf.exe" .. || goto :error
mingw32-make VERBOSE=1 || goto :error mingw32-make VERBOSE=1 || goto :error
bin\nvim --version || goto :error bin\nvim --version || goto :error

View File

@@ -1,8 +1,16 @@
top_make() {
${MAKE_CMD} "$@"
}
build_make() {
top_make -C "${BUILD_DIR}" "$@"
}
build_deps() { build_deps() {
if [[ "${BUILD_32BIT}" == ON ]]; then if test "${BUILD_32BIT}" = ON ; then
DEPS_CMAKE_FLAGS="${DEPS_CMAKE_FLAGS} ${CMAKE_FLAGS_32BIT}" DEPS_CMAKE_FLAGS="${DEPS_CMAKE_FLAGS} ${CMAKE_FLAGS_32BIT}"
fi fi
if [[ "${FUNCTIONALTEST}" == "functionaltest-lua" ]]; then if test "${FUNCTIONALTEST}" = "functionaltest-lua" ; then
DEPS_CMAKE_FLAGS="${DEPS_CMAKE_FLAGS} -DUSE_BUNDLED_LUA=ON" DEPS_CMAKE_FLAGS="${DEPS_CMAKE_FLAGS} -DUSE_BUNDLED_LUA=ON"
fi fi
@@ -10,11 +18,10 @@ build_deps() {
# If there is a valid cache and we're not forced to recompile, # If there is a valid cache and we're not forced to recompile,
# use cached third-party dependencies. # use cached third-party dependencies.
if [[ -f "${CACHE_MARKER}" ]] && [[ "${BUILD_NVIM_DEPS}" != true ]]; then if test -f "${CACHE_MARKER}" && test "${BUILD_NVIM_DEPS}" != "true" ; then
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
local statcmd="stat -f '%Sm'"
else
local statcmd="stat -c '%y'" local statcmd="stat -c '%y'"
if test "${TRAVIS_OS_NAME}" = osx ; then
statcmd="stat -f '%Sm'"
fi fi
echo "Using third-party dependencies from Travis's cache (last updated: $(${statcmd} "${CACHE_MARKER}"))." echo "Using third-party dependencies from Travis's cache (last updated: $(${statcmd} "${CACHE_MARKER}"))."
@@ -30,39 +37,41 @@ build_deps() {
echo "Configuring with '${DEPS_CMAKE_FLAGS}'." echo "Configuring with '${DEPS_CMAKE_FLAGS}'."
CC= cmake ${DEPS_CMAKE_FLAGS} "${TRAVIS_BUILD_DIR}/third-party/" CC= cmake ${DEPS_CMAKE_FLAGS} "${TRAVIS_BUILD_DIR}/third-party/"
if ! ${MAKE_CMD}; then if ! top_make; then
exit 1 exit 1
fi fi
cd "${TRAVIS_BUILD_DIR}" cd "${TRAVIS_BUILD_DIR}"
} }
build_nvim() { prepare_build() {
if [[ -n "${CLANG_SANITIZER}" ]]; then if test -n "${CLANG_SANITIZER}" ; then
CMAKE_FLAGS="${CMAKE_FLAGS} -DCLANG_${CLANG_SANITIZER}=ON" CMAKE_FLAGS="${CMAKE_FLAGS} -DCLANG_${CLANG_SANITIZER}=ON"
fi fi
if [[ "${BUILD_32BIT}" == ON ]]; then if test "${BUILD_32BIT}" = ON ; then
CMAKE_FLAGS="${CMAKE_FLAGS} ${CMAKE_FLAGS_32BIT}" CMAKE_FLAGS="${CMAKE_FLAGS} ${CMAKE_FLAGS_32BIT}"
fi fi
mkdir -p "${BUILD_DIR}" mkdir -p "${BUILD_DIR}"
cd "${BUILD_DIR}" cd "${BUILD_DIR}"
echo "Configuring with '${CMAKE_FLAGS}'." echo "Configuring with '${CMAKE_FLAGS} $@'."
cmake ${CMAKE_FLAGS} "${TRAVIS_BUILD_DIR}" cmake ${CMAKE_FLAGS} "$@" "${TRAVIS_BUILD_DIR}"
}
build_nvim() {
echo "Building nvim." echo "Building nvim."
if ! ${MAKE_CMD} nvim; then if ! top_make nvim ; then
exit 1 exit 1
fi fi
if [ "$CLANG_SANITIZER" != "TSAN" ]; then if test "$CLANG_SANITIZER" != "TSAN" ; then
echo "Building libnvim." echo "Building libnvim."
if ! ${MAKE_CMD} libnvim; then if ! top_make libnvim ; then
exit 1 exit 1
fi fi
echo "Building nvim-test." echo "Building nvim-test."
if ! ${MAKE_CMD} nvim-test; then if ! top_make nvim-test ; then
exit 1 exit 1
fi fi
fi fi

192
ci/common/suite.sh Normal file
View File

@@ -0,0 +1,192 @@
# HACK: get newline for use in strings given that "\n" and $'' do not work.
NL="$(printf '\nE')"
NL="${NL%E}"
FAIL_SUMMARY=""
# Test success marker. If END_MARKER file exists, we know that all tests
# finished. If FAIL_SUMMARY_FILE exists we know that some tests failed, this
# file will contain information about failed tests. Build is considered
# successful if tests ended without any of them failing.
END_MARKER="$BUILD_DIR/.tests_finished"
FAIL_SUMMARY_FILE="$BUILD_DIR/.test_errors"
ANSI_CLEAR="\033[0K"
travis_fold() {
local action="$1"
local name="$2"
name="$(echo -n "$name" | tr '\n\0' '--' | sed 's/[^A-Za-z0-9]\{1,\}/-/g')"
name="$(echo -n "$name" | sed 's/-$//')"
echo -en "travis_fold:${action}:${name}\r${ANSI_CLEAR}"
}
if test "$TRAVIS" != "true" ; then
travis_fold() {
return 0
}
fi
enter_suite() {
set +x
FAILED=0
rm -f "${END_MARKER}"
local suite_name="$1"
export NVIM_TEST_CURRENT_SUITE="${NVIM_TEST_CURRENT_SUITE}/$suite_name"
travis_fold start "${NVIM_TEST_CURRENT_SUITE}"
set -x
}
exit_suite() {
set +x
travis_fold end "${NVIM_TEST_CURRENT_SUITE}"
if test $FAILED -ne 0 ; then
echo "Suite ${NVIM_TEST_CURRENT_SUITE} failed, summary:"
echo "${FAIL_SUMMARY}"
fi
export NVIM_TEST_CURRENT_SUITE="${NVIM_TEST_CURRENT_SUITE%/*}"
if test "$1" != "--continue" ; then
exit $FAILED
else
local saved_failed=$FAILED
FAILED=0
return $saved_failed
fi
}
fail() {
local test_name="$1"
local fail_char="$2"
local message="$3"
: ${fail_char:=F}
: ${message:=Test $test_name failed}
local full_msg="$fail_char $NVIM_TEST_CURRENT_SUITE|$test_name :: $message"
FAIL_SUMMARY="${FAIL_SUMMARY}${NL}${full_msg}"
echo "${full_msg}" >> "${FAIL_SUMMARY_FILE}"
echo "Failed: $full_msg"
FAILED=1
}
run_test() {
local cmd="$1"
test $# -gt 0 && shift
local test_name="$1"
: ${test_name:=$cmd}
test $# -gt 0 && shift
if ! eval "$cmd" ; then
fail "${test_name}" "$@"
fi
}
run_test_wd() {
local hang_ok=
if test "$1" = "--allow-hang" ; then
hang_ok=1
shift
fi
local timeout="$1"
test $# -gt 0 && shift
local cmd="$1"
test $# -gt 0 && shift
local restart_cmd="$1"
: ${restart_cmd:=true}
test $# -gt 0 && shift
local test_name="$1"
: ${test_name:=$cmd}
test $# -gt 0 && shift
local output_file="$(mktemp)"
local status_file="$(mktemp)"
local sid_file="$(mktemp)"
local restarts=5
local prev_tmpsize=-1
while test $restarts -gt 0 ; do
: > "$status_file"
: > "$sid_file"
setsid \
env \
output_file="$output_file" \
status_file="$status_file" \
sid_file="$sid_file" \
cmd="$cmd" \
CI_DIR="$CI_DIR" \
sh -c '
. "${CI_DIR}/common/test.sh"
ps -o sid= > "$sid_file"
(
ret=0
if ! eval "$cmd" 2>&1 ; then
ret=1
fi
echo "$ret" > "$status_file"
) | tee -a "$output_file"
'
while test "$(stat -c "%s" "$status_file")" -eq 0 ; do
prev_tmpsize=$tmpsize
sleep $timeout
tmpsize="$(stat -c "%s" "$output_file")"
if test $tempsize -eq $prev_temsize ; then
# no output, assuming either hang or exit
break
fi
done
restarts=$(( restarts - 1 ))
if test "$(stat -c "%s" "$status_file")" -eq 0 ; then
# Status file not updated, assuming hang
# SID not known, this should not ever happen
if test "$(stat -c "%s" "$sid_file")" -eq 0 ; then
fail "$test_name" E "Shell did not run"
break
fi
# Kill all processes which belong to one session: should get rid of test
# processes as well as sh itself.
pkill -KILL -s$(cat "$sid_file")
if test $restarts -eq 0 ; then
if test -z "$hang_ok" ; then
fail "$test_name" E "Test hang up"
fi
else
echo "Test ${test_name} hang up, restarting"
eval "$restart_cmd"
fi
else
local new_failed="$(cat "$status_file")"
if test "$new_failed" != "0" ; then
fail "$test_name" F "Test failed in run_test_wd"
fi
break
fi
done
rm -f "$output_file"
rm -f "$status_file"
rm -f "$sid_file"
}
ended_successfully() {
if test -f "${FAIL_SUMMARY_FILE}" ; then
echo 'Test failed, complete summary:'
cat "${FAIL_SUMMARY_FILE}"
return 1
fi
if ! test -f "${END_MARKER}" ; then
echo 'ended_successfully called before end marker was touched'
return 1
fi
return 0
}
end_tests() {
touch "${END_MARKER}"
ended_successfully
}

174
ci/common/test.sh Normal file
View File

@@ -0,0 +1,174 @@
. "${CI_DIR}/common/build.sh"
. "${CI_DIR}/common/suite.sh"
print_core() {
local app="$1"
local core="$2"
if test "$app" = quiet ; then
echo "Found core $core"
return 0
fi
echo "======= Core file $core ======="
if test "${TRAVIS_OS_NAME}" = osx ; then
lldb -Q -o "bt all" -f "${app}" -c "${core}"
else
gdb -n -batch -ex 'thread apply all bt full' "${app}" -c "${core}"
fi
}
check_core_dumps() {
local del=
if test "$1" = "--delete" ; then
del=1
shift
fi
local app="${1:-${BUILD_DIR}/bin/nvim}"
if test "${TRAVIS_OS_NAME}" = osx ; then
local cores="$(find /cores/ -type f -print)"
else
local cores="$(find ./ -type f -name 'core.*' -print)"
fi
if test -z "${cores}" ; then
return
fi
local core
for core in $cores; do
if test "$del" = "1" ; then
print_core "$app" "$core" >&2
rm "$core"
else
print_core "$app" "$core"
fi
done
if test "$app" != quiet ; then
fail 'cores' E 'Core dumps found'
fi
}
check_logs() {
# Iterate through each log to remove an useless warning.
for log in $(find "${1}" -type f -name "${2}"); do
sed -i "${log}" \
-e '/Warning: noted but unhandled ioctl/d' \
-e '/could cause spurious value errors to appear/d' \
-e '/See README_MISSING_SYSCALL_OR_IOCTL for guidance/d'
done
# Now do it again, but only consider files with size > 0.
local err=""
for log in $(find "${1}" -type f -name "${2}" -size +0); do
cat "${log}"
err=1
done
if test -n "${err}" ; then
fail 'logs' E 'Runtime errors detected.'
fi
}
valgrind_check() {
check_logs "${1}" "valgrind-*"
}
asan_check() {
check_logs "${1}" "*san.*"
}
run_unittests() {(
enter_suite unittests
ulimit -c unlimited || true
if ! build_make unittest ; then
fail 'unittests' F 'Unit tests failed'
fi
check_core_dumps "$(which luajit)"
exit_suite
)}
run_functionaltests() {(
enter_suite functionaltests
ulimit -c unlimited || true
if ! build_make ${FUNCTIONALTEST}; then
fail 'functionaltests' F 'Functional tests failed'
fi
asan_check "${LOG_DIR}"
valgrind_check "${LOG_DIR}"
check_core_dumps
exit_suite
)}
run_oldtests() {(
enter_suite oldtests
ulimit -c unlimited || true
if ! make -C "${TRAVIS_BUILD_DIR}/src/nvim/testdir"; then
reset
fail 'oldtests' F 'Legacy tests failed'
fi
asan_check "${LOG_DIR}"
valgrind_check "${LOG_DIR}"
check_core_dumps
exit_suite
)}
check_runtime_files() {(
set +x
local test_name="$1" ; shift
local message="$1" ; shift
local tst="$1" ; shift
cd runtime
for file in $(git ls-files "$@") ; do
# Check that test is not trying to work with files with spaces/etc
# Prefer failing the build over using more robust construct because files
# with IFS are not welcome.
if ! test -e "$file" ; then
fail "$test_name" E \
"It appears that $file is only a part of the file name"
fi
if ! test "$tst" "$INSTALL_PREFIX/share/nvim/runtime/$file" ; then
fail "$test_name" F "$(printf "$message" "$file")"
fi
done
)}
install_nvim() {(
enter_suite 'install_nvim'
if ! build_make install ; then
fail 'install' E 'make install failed'
exit_suite
fi
"${INSTALL_PREFIX}/bin/nvim" --version
if ! "${INSTALL_PREFIX}/bin/nvim" -u NONE -e -c ':help' -c ':qall' ; then
echo "Running ':help' in the installed nvim failed."
echo "Maybe the helptags have not been generated properly."
fail 'help' F 'Failed running :help'
fi
# Check that all runtime files were installed
check_runtime_files \
'runtime-install' \
'It appears that %s is not installed.' \
-e \
'*.vim' '*.ps' '*.dict' '*.py' '*.tutor'
# Check that some runtime files are installed and are executables
check_runtime_files \
'not-exe' \
'It appears that %s is not installed or is not executable.' \
-x \
'*.awk' '*.sh' '*.bat'
# Check that generated syntax file has function names, #5060.
local genvimsynf=syntax/vim/generated.vim
local gpat='syn keyword vimFuncName .*eval'
if ! grep -q "$gpat" "${INSTALL_PREFIX}/share/nvim/runtime/$genvimsynf" ; then
fail 'funcnames' F "It appears that $genvimsynf does not contain $gpat."
fi
exit_suite
)}
csi_clean() {
find "${BUILD_DIR}/bin" -name 'test-includes-*' -delete
find "${BUILD_DIR}" -name '*test-include*.o' -delete
}

View File

@@ -3,7 +3,7 @@
set -e set -e
set -o pipefail set -o pipefail
if [[ -n "${CI_TARGET}" ]]; then if [[ "${CI_TARGET}" == lint ]]; then
exit exit
fi fi
@@ -17,11 +17,7 @@ echo "Install neovim module and coveralls for Python 2."
CC=cc pip2.7 -q install --user --upgrade neovim cpp-coveralls CC=cc pip2.7 -q install --user --upgrade neovim cpp-coveralls
echo "Install neovim module for Python 3." echo "Install neovim module for Python 3."
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
CC=cc pip3 -q install --user --upgrade neovim CC=cc pip3 -q install --user --upgrade neovim
else
CC=cc pip3.3 -q install --user --upgrade neovim
fi
echo "Install neovim RubyGem." echo "Install neovim RubyGem."
gem install --no-document --version ">= 0.2.0" neovim gem install --no-document --version ">= 0.2.0" neovim

34
ci/run_lint.sh Executable file
View File

@@ -0,0 +1,34 @@
#!/usr/bin/env bash
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"
enter_suite 'clint'
run_test 'top_make clint-full' clint
exit_suite --continue
enter_suite 'testlint'
run_test 'top_make testlint' testlint
exit_suite --continue
enter_suite single-includes
CLICOLOR_FORCE=1 run_test_wd \
--allow-hang \
10s \
'top_make check-single-includes' \
'csi_clean' \
single-includes
exit_suite --continue
end_tests

34
ci/run_tests.sh Executable file
View File

@@ -0,0 +1,34 @@
#!/usr/bin/env bash
set -e
set -o pipefail
CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CI_DIR}/common/build.sh"
source "${CI_DIR}/common/test.sh"
source "${CI_DIR}/common/suite.sh"
enter_suite build
check_core_dumps --delete quiet
prepare_build
build_nvim
exit_suite --continue
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
run_test run_functionaltests
fi
run_test run_oldtests
run_test install_nvim
exit_suite --continue
end_tests

View File

@@ -3,16 +3,11 @@
set -e set -e
set -o pipefail set -o pipefail
if [[ -n "${CI_TARGET}" ]]; then
make "${CI_TARGET}"
exit 0
fi
# This will pass the environment variables down to a bash process which runs # This will pass the environment variables down to a bash process which runs
# as $USER, while retaining the environment variables defined and belonging # as $USER, while retaining the environment variables defined and belonging
# to secondary groups given above in usermod. # to secondary groups given above in usermod.
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
sudo -E su "${USER}" -c ".ci/run_tests.sh" sudo -E su "${USER}" -c "ci/run_${CI_TARGET}.sh"
else else
.ci/run_tests.sh ci/run_${CI_TARGET}.sh
fi fi

18
cmake/Download.cmake Normal file
View File

@@ -0,0 +1,18 @@
file(
DOWNLOAD "${URL}" "${FILE}"
STATUS status
LOG log
)
list(GET status 0 status_code)
list(GET status 1 status_string)
if(NOT status_code EQUAL 0)
if(NOT ALLOW_FAILURE)
message(FATAL_ERROR "error: downloading '${URL}' failed
status_code: ${status_code}
status_string: ${status_string}
log: ${log}
")
endif()
endif()

View File

@@ -4,7 +4,7 @@
# JEMALLOC_INCLUDE_DIRS - The jemalloc include directories # JEMALLOC_INCLUDE_DIRS - The jemalloc include directories
# JEMALLOC_LIBRARIES - The libraries needed to use jemalloc # JEMALLOC_LIBRARIES - The libraries needed to use jemalloc
if(NOT JEMALLOC_USE_BUNDLED) if(NOT USE_BUNDLED_JEMALLOC)
find_package(PkgConfig) find_package(PkgConfig)
if (PKG_CONFIG_FOUND) if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_JEMALLOC QUIET jemalloc) pkg_check_modules(PC_JEMALLOC QUIET jemalloc)

View File

@@ -4,7 +4,7 @@
# LIBTERMKEY_INCLUDE_DIRS - The libtermkey include directories # LIBTERMKEY_INCLUDE_DIRS - The libtermkey include directories
# LIBTERMKEY_LIBRARIES - The libraries needed to use libtermkey # LIBTERMKEY_LIBRARIES - The libraries needed to use libtermkey
if(NOT LIBTERMKEY_USE_BUNDLED) if(NOT USE_BUNDLED_LIBTERMKEY)
find_package(PkgConfig) find_package(PkgConfig)
if (PKG_CONFIG_FOUND) if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_LIBTERMKEY QUIET termkey) pkg_check_modules(PC_LIBTERMKEY QUIET termkey)

View File

@@ -8,7 +8,7 @@
# Set the LIBUV_USE_STATIC variable to specify if static libraries should # Set the LIBUV_USE_STATIC variable to specify if static libraries should
# be preferred to shared ones. # be preferred to shared ones.
if(NOT LIBUV_USE_BUNDLED) if(NOT USE_BUNDLED_LIBUV)
find_package(PkgConfig) find_package(PkgConfig)
if (PKG_CONFIG_FOUND) if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_LIBUV QUIET libuv) pkg_check_modules(PC_LIBUV QUIET libuv)

View File

@@ -4,7 +4,7 @@
# LIBVTERM_INCLUDE_DIRS - The libvterm include directories # LIBVTERM_INCLUDE_DIRS - The libvterm include directories
# LIBVTERM_LIBRARIES - The libraries needed to use libvterm # LIBVTERM_LIBRARIES - The libraries needed to use libvterm
if(NOT LIBVTERM_USE_BUNDLED) if(NOT USE_BUNDLED_LIBVTERM)
find_package(PkgConfig) find_package(PkgConfig)
if (PKG_CONFIG_FOUND) if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_LIBVTERM QUIET vterm) pkg_check_modules(PC_LIBVTERM QUIET vterm)

View File

@@ -4,7 +4,7 @@
# LUAJIT_INCLUDE_DIRS - The luajit include directories # LUAJIT_INCLUDE_DIRS - The luajit include directories
# LUAJIT_LIBRARIES - The libraries needed to use luajit # LUAJIT_LIBRARIES - The libraries needed to use luajit
if(NOT LUAJIT_USE_BUNDLED) if(NOT USE_BUNDLED_LUAJIT)
find_package(PkgConfig) find_package(PkgConfig)
if (PKG_CONFIG_FOUND) if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_LUAJIT QUIET luajit) pkg_check_modules(PC_LUAJIT QUIET luajit)

View File

@@ -4,7 +4,7 @@
# MSGPACK_INCLUDE_DIRS - The msgpack include directories # MSGPACK_INCLUDE_DIRS - The msgpack include directories
# MSGPACK_LIBRARIES - The libraries needed to use msgpack # MSGPACK_LIBRARIES - The libraries needed to use msgpack
if(NOT MSGPACK_USE_BUNDLED) if(NOT USE_BUNDLED_MSGPACK)
find_package(PkgConfig) find_package(PkgConfig)
if (PKG_CONFIG_FOUND) if (PKG_CONFIG_FOUND)
pkg_search_module(PC_MSGPACK QUIET pkg_search_module(PC_MSGPACK QUIET

View File

@@ -4,7 +4,7 @@
# UNIBILIUM_INCLUDE_DIRS - The unibilium include directories # UNIBILIUM_INCLUDE_DIRS - The unibilium include directories
# UNIBILIUM_LIBRARIES - The libraries needed to use unibilium # UNIBILIUM_LIBRARIES - The libraries needed to use unibilium
if(NOT UNIBILIUM_USE_BUNDLED) if(NOT USE_BUNDLED_UNIBILIUM)
find_package(PkgConfig) find_package(PkgConfig)
if (PKG_CONFIG_FOUND) if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_UNIBILIUM QUIET unibilium) pkg_check_modules(PC_UNIBILIUM QUIET unibilium)

View File

@@ -0,0 +1,2 @@
file(GLOB_RECURSE JSON_FILES *.json)
file(COPY ${JSON_FILES} DESTINATION "${TARGET}")

View File

@@ -1,32 +0,0 @@
get_filename_component(LINT_DIR ${LINT_DIR} ABSOLUTE)
get_filename_component(LINT_PREFIX ${LINT_DIR} PATH)
set(LINT_SUPPRESS_FILE "${LINT_PREFIX}/errors.json")
if(DEFINED ENV{LINT_FILE})
file(GLOB_RECURSE LINT_FILES "$ENV{LINT_FILE}")
else()
file(GLOB_RECURSE LINT_FILES ${LINT_DIR}/*.c ${LINT_DIR}/*.h)
endif()
set(LINT_ARGS)
if(LINT_SUPPRESS_URL)
file(DOWNLOAD ${LINT_SUPPRESS_URL} ${LINT_SUPPRESS_FILE})
list(APPEND LINT_ARGS "--suppress-errors=${LINT_SUPPRESS_FILE}")
endif()
foreach(lint_file ${LINT_FILES})
file(RELATIVE_PATH lint_file "${LINT_PREFIX}" "${lint_file}")
list(APPEND LINT_ARGS "${lint_file}")
endforeach()
execute_process(
COMMAND ${LINT_PRG} ${LINT_ARGS}
RESULT_VARIABLE res
WORKING_DIRECTORY "${LINT_PREFIX}")
file(REMOVE ${LINT_SUPPRESS_FILE})
if(NOT res EQUAL 0)
message(FATAL_ERROR "Linting failed: ${res}.")
endif()

View File

@@ -1,13 +1,10 @@
get_filename_component(BUSTED_DIR ${BUSTED_PRG} PATH)
set(ENV{PATH} "${BUSTED_DIR}:$ENV{PATH}")
set(ENV{VIMRUNTIME} ${WORKING_DIR}/runtime) set(ENV{VIMRUNTIME} ${WORKING_DIR}/runtime)
set(ENV{NVIM_RPLUGIN_MANIFEST} ${WORKING_DIR}/Xtest_rplugin_manifest) set(ENV{NVIM_RPLUGIN_MANIFEST} ${WORKING_DIR}/Xtest_rplugin_manifest)
set(ENV{XDG_CONFIG_HOME} ${WORKING_DIR}/Xtest_xdg/config) set(ENV{XDG_CONFIG_HOME} ${WORKING_DIR}/Xtest_xdg/config)
set(ENV{XDG_DATA_HOME} ${WORKING_DIR}/Xtest_xdg/share) set(ENV{XDG_DATA_HOME} ${WORKING_DIR}/Xtest_xdg/share)
if(NVIM_PRG) if(NVIM_PRG)
set(ENV{NVIM_PROG} "${NVIM_PRG}") set(ENV{NVIM_PRG} "${NVIM_PRG}")
endif() endif()
if(DEFINED ENV{TEST_FILE}) if(DEFINED ENV{TEST_FILE})
@@ -28,6 +25,8 @@ if(DEFINED ENV{TEST_FILTER})
set(TEST_TAG "--filter=$ENV{TEST_FILTER}") set(TEST_TAG "--filter=$ENV{TEST_FILTER}")
endif() endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${WORKING_DIR}/Xtest-tmpdir)
set(ENV{TMPDIR} ${WORKING_DIR}/Xtest-tmpdir)
set(ENV{SYSTEM_NAME} ${SYSTEM_NAME}) set(ENV{SYSTEM_NAME} ${SYSTEM_NAME})
execute_process( execute_process(
COMMAND ${BUSTED_PRG} ${TEST_TAG} ${TEST_FILTER} -v -o ${BUSTED_OUTPUT_TYPE} COMMAND ${BUSTED_PRG} ${TEST_TAG} ${TEST_FILTER} -v -o ${BUSTED_OUTPUT_TYPE}
@@ -40,6 +39,7 @@ execute_process(
file(REMOVE ${WORKING_DIR}/Xtest_rplugin_manifest) file(REMOVE ${WORKING_DIR}/Xtest_rplugin_manifest)
file(REMOVE_RECURSE ${WORKING_DIR}/Xtest_xdg) file(REMOVE_RECURSE ${WORKING_DIR}/Xtest_xdg)
file(REMOVE_RECURSE ${WORKING_DIR}/Xtest-tmpdir)
if(NOT res EQUAL 0) if(NOT res EQUAL 0)
message(STATUS "Output to stderr:\n${err}") message(STATUS "Output to stderr:\n${err}")

View File

@@ -26,6 +26,7 @@ if(NOT HAVE_SYS_WAIT_H AND UNIX)
message(SEND_ERROR "header sys/wait.h is required for Unix") message(SEND_ERROR "header sys/wait.h is required for Unix")
endif() endif()
check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H) check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H)
check_include_files(termios.h HAVE_TERMIOS_H)
check_include_files(utime.h HAVE_UTIME_H) check_include_files(utime.h HAVE_UTIME_H)
check_include_files(sys/uio.h HAVE_SYS_UIO_H) check_include_files(sys/uio.h HAVE_SYS_UIO_H)

View File

@@ -43,6 +43,7 @@
#cmakedefine HAVE_STRNCASECMP #cmakedefine HAVE_STRNCASECMP
#cmakedefine HAVE_SYS_UTSNAME_H #cmakedefine HAVE_SYS_UTSNAME_H
#cmakedefine HAVE_SYS_WAIT_H #cmakedefine HAVE_SYS_WAIT_H
#cmakedefine HAVE_TERMIOS_H
#cmakedefine HAVE_UTIME #cmakedefine HAVE_UTIME
#cmakedefine HAVE_UTIME_H #cmakedefine HAVE_UTIME_H
#cmakedefine HAVE_UTIMES #cmakedefine HAVE_UTIMES

View File

@@ -2,7 +2,9 @@
## What is this? ## What is this?
This provides the code necessary to configure vim's YCM plugin to provide C semantic support (completion, go-to-definition, etc) for developers working on the Neovim project. This provides the code necessary to configure vim's YCM plugin to provide C
semantic support (completion, go-to-definition, etc) for developers working on
the Neovim project.
## Installation ## Installation
@@ -13,10 +15,17 @@ Install [YouCompleteMe](https://github.com/Valloric/YouCompleteMe).
### Step 2 ### Step 2
```bash ```bash
cp contrib/YouCompleteMe/ycm_extra_conf.py src/.ycm_extra_conf.py cp contrib/YouCompleteMe/ycm_extra_conf.py .ycm_extra_conf.py
echo .ycm_extra_conf.py >> .git/info/exclude echo .ycm_extra_conf.py >> .git/info/exclude
make make
(Add the following somewhere in your vimrc)
autocmd FileType c nnoremap <buffer> <silent> <C-]> :YcmCompleter GoTo<cr>
``` ```
Tip: to improve source code navigation, add something like this to your nvim
configuration:
```vim
au FileType c,cpp nnoremap <buffer> <c-]> :YcmCompleter GoTo<CR>
```
And use `ctrl+]` when the cursor is positioned in a symbol to quickly jump to a
definition or declaration.

View File

@@ -9,47 +9,57 @@ def DirectoryOfThisScript():
def GetDatabase(): def GetDatabase():
compilation_database_folder = os.path.join(DirectoryOfThisScript(), compilation_database_folder = os.path.join(DirectoryOfThisScript(),
'..', 'build') 'build')
if os.path.exists(compilation_database_folder): if os.path.exists(compilation_database_folder):
return ycm_core.CompilationDatabase(compilation_database_folder) return ycm_core.CompilationDatabase(compilation_database_folder)
return None return None
def IsHeaderFile(filename):
extension = os.path.splitext(filename)[1]
return extension == '.h'
def GetCompilationInfoForFile(filename): def GetCompilationInfoForFile(filename):
database = GetDatabase() database = GetDatabase()
if not database: if not database:
return None return None
if IsHeaderFile(filename):
basename = os.path.splitext(filename)[0]
c_file = basename + '.c'
# for pure headers (no c file), default to main.c
if not os.path.exists(c_file):
c_file = os.path.join(DirectoryOfThisScript(), 'nvim', 'main.c')
if os.path.exists(c_file):
compilation_info = database.GetCompilationInfoForFile(c_file)
if compilation_info.compiler_flags_:
return compilation_info
return None
return database.GetCompilationInfoForFile(filename) return database.GetCompilationInfoForFile(filename)
# It seems YCM does not resolve directories correctly. This function will
# adjust paths in the compiler flags to be absolute
def FixDirectories(args, compiler_working_dir):
def adjust_path(path):
return os.path.abspath(os.path.join(compiler_working_dir, path))
adjust_next_arg = False
new_args = []
for arg in args:
if adjust_next_arg:
arg = adjust_path(arg)
adjust_next_arg = False
else:
for dir_flag in ['-I', '-isystem', '-o', '-c']:
if arg.startswith(dir_flag):
if arg != dir_flag:
# flag and path are concatenated in same arg
path = arg[len(dir_flag):]
new_path = adjust_path(path)
arg = '{0}{1}'.format(dir_flag, new_path)
else:
# path is specified in next argument
adjust_next_arg = True
new_args.append(arg)
return new_args
def FlagsForFile(filename): def FlagsForFile(filename):
compilation_info = GetCompilationInfoForFile(filename) compilation_info = GetCompilationInfoForFile(filename)
if not compilation_info: if not compilation_info:
return None return None
# Add flags not needed for clang-the-binary, # Add flags not needed for clang-the-binary,
# but needed for libclang-the-library (YCM uses this last one). # but needed for libclang-the-library (YCM uses this last one).
flags = (list(compilation_info.compiler_flags_) flags = FixDirectories((list(compilation_info.compiler_flags_)
if compilation_info.compiler_flags_ if compilation_info.compiler_flags_
else []) else []), compilation_info.compiler_working_dir_)
extra_flags = ['-Wno-newline-eof'] extra_flags = ['-Wno-newline-eof']
final_flags = flags + extra_flags
return { return {
'flags': final_flags, 'flags': flags + extra_flags,
'do_cache': True 'do_cache': True
} }

View File

@@ -62,3 +62,12 @@
# CMAKE_EXTRA_FLAGS += -DLIBVTERM_USE_STATIC=OFF # CMAKE_EXTRA_FLAGS += -DLIBVTERM_USE_STATIC=OFF
# CMAKE_EXTRA_FLAGS += -DLUAJIT_USE_STATIC=OFF # CMAKE_EXTRA_FLAGS += -DLUAJIT_USE_STATIC=OFF
# CMAKE_EXTRA_FLAGS += -DMSGPACK_USE_STATIC=OFF # CMAKE_EXTRA_FLAGS += -DMSGPACK_USE_STATIC=OFF
#
#
# .DEFAULT_GOAL := nvim
#
# Run doxygen over the source code.
# Output will be in build/doxygen
#
# doxygen:
# doxygen src/Doxyfile

View File

@@ -371,26 +371,6 @@ See
Used to set the 'shell' option, which determines the shell used by the Used to set the 'shell' option, which determines the shell used by the
.Ic :terminal .Ic :terminal
command. command.
.It Ev NVIM_TUI_ENABLE_CURSOR_SHAPE
If defined, change the cursor shape to a vertical bar while in insert mode.
Requires that the host terminal supports the DECSCUSR CSI escape sequence.
Has no effect in GUIs.
.Pp
Depending on the terminal emulator, using this option with
.Nm
under
.Xr tmux 1
might require adding the following to
.Pa ~/.tmux.conf :
.Bd -literal -offset indent
set -ga terminal-overrides ',*:Ss=\eE[%p1%d q:Se=\eE[2 q'
.Ed
.Pp
See
.Ic terminal-overrides
in the
.Xr tmux 1
manual page for more information.
.El .El
.Sh FILES .Sh FILES
.Bl -tag -width "~/.config/nvim/init.vim" .Bl -tag -width "~/.config/nvim/init.vim"

View File

@@ -100,6 +100,20 @@ add_custom_target(
${GENERATED_PACKAGE_TAGS} ${GENERATED_PACKAGE_TAGS}
) )
# Optional targets for nvim.desktop file and icon.
find_program(XDG_MENU_PRG xdg-desktop-menu)
find_program(XDG_ICON_PRG xdg-icon-resource)
if(XDG_MENU_PRG)
add_custom_target(desktop-file
COMMAND xdg-desktop-menu install --novendor ${PROJECT_SOURCE_DIR}/runtime/nvim.desktop)
# add_dependencies(runtime desktop-file)
endif()
if(XDG_ICON_PRG)
add_custom_target(desktop-icon
COMMAND xdg-icon-resource install --novendor --size 128 ${PROJECT_SOURCE_DIR}/runtime/nvim.png)
# add_dependencies(runtime desktop-icon)
endif()
# CMake is painful here. It will create the destination using the user's # CMake is painful here. It will create the destination using the user's
# current umask, and we don't want that. And we don't just want to install # current umask, and we don't want that. And we don't just want to install
# the target directory, as it will mess with existing permissions. So this # the target directory, as it will mess with existing permissions. So this

View File

@@ -2,12 +2,13 @@
" Description: Perform Ada specific completion & tagging. " Description: Perform Ada specific completion & tagging.
" Language: Ada (2005) " Language: Ada (2005)
" $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $ " $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
" Maintainer: Martin Krischik <krischik@users.sourceforge.net> " Maintainer: Mathias Brousset <mathiasb17@gmail.com>
" Martin Krischik <krischik@users.sourceforge.net>
" Taylor Venable <taylor@metasyntax.net> " Taylor Venable <taylor@metasyntax.net>
" Neil Bird <neil@fnxweb.com> " Neil Bird <neil@fnxweb.com>
" Ned Okie <nokie@radford.edu> " Ned Okie <nokie@radford.edu>
" $Author: krischik $ " $Author: krischik $
" $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $ " $Date: 2017-01-31 20:20:05 +0200 (Mon, 01 Jan 2017) $
" Version: 4.6 " Version: 4.6
" $Revision: 887 $ " $Revision: 887 $
" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $ " $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $
@@ -23,6 +24,7 @@
" 09.05.2007 MK Session just won't work no matter how much " 09.05.2007 MK Session just won't work no matter how much
" tweaking is done " tweaking is done
" 19.09.2007 NO still some mapleader problems " 19.09.2007 NO still some mapleader problems
" 31.01.2017 MB fix more mapleader problems
" Help Page: ft-ada-functions " Help Page: ft-ada-functions
"------------------------------------------------------------------------------ "------------------------------------------------------------------------------
@@ -585,11 +587,11 @@ function ada#Map_Menu (Text, Keys, Command)
\ " :" . a:Command . "<CR>" \ " :" . a:Command . "<CR>"
execute execute
\ "nnoremap <buffer>" . \ "nnoremap <buffer>" .
\ escape(l:leader . "a" . a:Keys , '\') . \ " <Leader>a" . a:Keys .
\" :" . a:Command \" :" . a:Command
execute execute
\ "inoremap <buffer>" . \ "inoremap <buffer>" .
\ escape(l:leader . "a" . a:Keys , '\') . \ " <Learder>a" . a:Keys .
\" <C-O>:" . a:Command \" <C-O>:" . a:Command
endif endif
return return

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,184 @@
" Language: ConTeXt typesetting engine
" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
" Latest Revision: 2016 Oct 21
let s:keepcpo= &cpo
set cpo&vim
" Helper functions {{{
function! s:context_echo(message, mode)
redraw
echo "\r"
execute 'echohl' a:mode
echomsg '[ConTeXt]' a:message
echohl None
endf
function! s:sh()
return has('win32') || has('win64') || has('win16') || has('win95')
\ ? ['cmd.exe', '/C']
\ : ['/bin/sh', '-c']
endfunction
" For backward compatibility
if exists('*win_getid')
function! s:win_getid()
return win_getid()
endf
function! s:win_id2win(winid)
return win_id2win(a:winid)
endf
else
function! s:win_getid()
return winnr()
endf
function! s:win_id2win(winnr)
return a:winnr
endf
endif
" }}}
" ConTeXt jobs {{{
if has('job')
let g:context_jobs = []
" Print the status of ConTeXt jobs
function! context#job_status()
let l:jobs = filter(g:context_jobs, 'job_status(v:val) == "run"')
let l:n = len(l:jobs)
call s:context_echo(
\ 'There '.(l:n == 1 ? 'is' : 'are').' '.(l:n == 0 ? 'no' : l:n)
\ .' job'.(l:n == 1 ? '' : 's').' running'
\ .(l:n == 0 ? '.' : ' (' . join(l:jobs, ', ').').'),
\ 'ModeMsg')
endfunction
" Stop all ConTeXt jobs
function! context#stop_jobs()
let l:jobs = filter(g:context_jobs, 'job_status(v:val) == "run"')
for job in l:jobs
call job_stop(job)
endfor
sleep 1
let l:tmp = []
for job in l:jobs
if job_status(job) == "run"
call add(l:tmp, job)
endif
endfor
let g:context_jobs = l:tmp
if empty(g:context_jobs)
call s:context_echo('Done. No jobs running.', 'ModeMsg')
else
call s:context_echo('There are still some jobs running. Please try again.', 'WarningMsg')
endif
endfunction
function! context#callback(path, job, status)
if index(g:context_jobs, a:job) != -1 && job_status(a:job) != 'run' " just in case
call remove(g:context_jobs, index(g:context_jobs, a:job))
endif
call s:callback(a:path, a:job, a:status)
endfunction
function! context#close_cb(channel)
call job_status(ch_getjob(a:channel)) " Trigger exit_cb's callback for faster feedback
endfunction
function! s:typeset(path)
call add(g:context_jobs,
\ job_start(add(s:sh(), context#command() . ' ' . shellescape(fnamemodify(a:path, ":t"))), {
\ 'close_cb' : 'context#close_cb',
\ 'exit_cb' : function(get(b:, 'context_callback', get(g:, 'context_callback', 'context#callback')),
\ [a:path]),
\ 'in_io' : 'null'
\ }))
endfunction
else " No jobs
function! context#job_status()
call s:context_echo('Not implemented', 'WarningMsg')
endfunction!
function! context#stop_jobs()
call s:context_echo('Not implemented', 'WarningMsg')
endfunction
function! context#callback(path, job, status)
call s:callback(a:path, a:job, a:status)
endfunction
function! s:typeset(path)
execute '!' . context#command() . ' ' . shellescape(fnamemodify(a:path, ":t"))
call call(get(b:, 'context_callback', get(g:, 'context_callback', 'context#callback')),
\ [a:path, 0, v:shell_error])
endfunction
endif " has('job')
function! s:callback(path, job, status) abort
if a:status < 0 " Assume the job was terminated
return
endif
" Get info about the current window
let l:winid = s:win_getid() " Save window id
let l:efm = &l:errorformat " Save local errorformat
let l:cwd = fnamemodify(getcwd(), ":p") " Save local working directory
" Set errorformat to parse ConTeXt errors
execute 'setl efm=' . escape(b:context_errorformat, ' ')
try " Set cwd to expand error file correctly
execute 'lcd' fnameescape(fnamemodify(a:path, ':h'))
catch /.*/
execute 'setl efm=' . escape(l:efm, ' ')
throw v:exception
endtry
try
execute 'cgetfile' fnameescape(fnamemodify(a:path, ':r') . '.log')
botright cwindow
finally " Restore cwd and errorformat
execute s:win_id2win(l:winid) . 'wincmd w'
execute 'lcd ' . fnameescape(l:cwd)
execute 'setl efm=' . escape(l:efm, ' ')
endtry
if a:status == 0
call s:context_echo('Success!', 'ModeMsg')
else
call s:context_echo('There are errors. ', 'ErrorMsg')
endif
endfunction
function! context#command()
return get(b:, 'context_mtxrun', get(g:, 'context_mtxrun', 'mtxrun'))
\ . ' --script context --autogenerate --nonstopmode'
\ . ' --synctex=' . (get(b:, 'context_synctex', get(g:, 'context_synctex', 0)) ? '1' : '0')
\ . ' ' . get(b:, 'context_extra_options', get(g:, 'context_extra_options', ''))
endfunction
" Accepts an optional path (useful for big projects, when the file you are
" editing is not the project's root document). If no argument is given, uses
" the path of the current buffer.
function! context#typeset(...) abort
let l:path = fnamemodify(strlen(a:000[0]) > 0 ? a:1 : expand("%"), ":p")
let l:cwd = fnamemodify(getcwd(), ":p") " Save local working directory
call s:context_echo('Typesetting...', 'ModeMsg')
execute 'lcd' fnameescape(fnamemodify(l:path, ":h"))
try
call s:typeset(l:path)
finally " Restore local working directory
execute 'lcd ' . fnameescape(l:cwd)
endtry
endfunction!
"}}}
let &cpo = s:keepcpo
unlet s:keepcpo
" vim: sw=2 fdm=marker

View File

@@ -0,0 +1,25 @@
" Language: ConTeXt typesetting engine
" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
" Latest Revision: 2016 Oct 15
let s:keepcpo= &cpo
set cpo&vim
" Complete keywords in MetaPost blocks
function! contextcomplete#Complete(findstart, base)
if a:findstart == 1
if len(synstack(line('.'), 1)) > 0 &&
\ synIDattr(synstack(line('.'), 1)[0], "name") ==# 'contextMPGraphic'
return syntaxcomplete#Complete(a:findstart, a:base)
else
return -3
endif
else
return syntaxcomplete#Complete(a:findstart, a:base)
endif
endfunction
let &cpo = s:keepcpo
unlet s:keepcpo
" vim: sw=2 fdm=marker

View File

@@ -1,6 +1,6 @@
" Vim autoload file for editing compressed files. " Vim autoload file for editing compressed files.
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2014 Nov 05 " Last Change: 2016 Sep 28
" These functions are used by the gzip plugin. " These functions are used by the gzip plugin.
@@ -63,6 +63,9 @@ fun gzip#read(cmd)
" set 'modifiable' " set 'modifiable'
let ma_save = &ma let ma_save = &ma
setlocal ma setlocal ma
" set 'write'
let write_save = &write
set write
" Reset 'foldenable', otherwise line numbers get adjusted. " Reset 'foldenable', otherwise line numbers get adjusted.
if has("folding") if has("folding")
let fen_save = &fen let fen_save = &fen
@@ -127,6 +130,7 @@ fun gzip#read(cmd)
let &pm = pm_save let &pm = pm_save
let &cpo = cpo_save let &cpo = cpo_save
let &l:ma = ma_save let &l:ma = ma_save
let &write = write_save
if has("folding") if has("folding")
let &l:fen = fen_save let &l:fen = fen_save
endif endif

View File

@@ -1,18 +1,22 @@
function! s:enhance_syntax() abort function! s:enhance_syntax() abort
syntax case match
syntax keyword healthError ERROR syntax keyword healthError ERROR
\ containedin=markdownCodeBlock,mkdListItemLine
highlight link healthError Error highlight link healthError Error
syntax keyword healthWarning WARNING syntax keyword healthWarning WARNING
\ containedin=markdownCodeBlock,mkdListItemLine
highlight link healthWarning WarningMsg highlight link healthWarning WarningMsg
syntax keyword healthInfo INFO
highlight link healthInfo ModeMsg
syntax keyword healthSuccess SUCCESS syntax keyword healthSuccess SUCCESS
highlight link healthSuccess Function \ containedin=markdownCodeBlock,mkdListItemLine
highlight healthSuccess guibg=#5fff00 guifg=#080808 ctermbg=82 ctermfg=232
syntax keyword healthSuggestion SUGGESTIONS syntax match healthHelp "|.\{-}|" contains=healthBar
highlight link healthSuggestion String \ containedin=markdownCodeBlock,mkdListItemLine
syntax match healthBar "|" contained conceal
highlight link healthHelp Identifier
" We do not care about markdown syntax errors in :CheckHealth output. " We do not care about markdown syntax errors in :CheckHealth output.
highlight! link markdownError Normal highlight! link markdownError Normal
@@ -27,7 +31,9 @@ function! health#check(plugin_names) abort
tabnew tabnew
setlocal wrap breakindent setlocal wrap breakindent
setlocal filetype=markdown bufhidden=wipe setlocal filetype=markdown
setlocal conceallevel=2 concealcursor=nc
setlocal keywordprg=:help iskeyword=@,48-57,_,192-255,-,#
call s:enhance_syntax() call s:enhance_syntax()
if empty(healthchecks) if empty(healthchecks)
@@ -49,7 +55,7 @@ function! health#check(plugin_names) abort
let output = execute( let output = execute(
\ 'call health#report_error(''Failed to run healthcheck for "' \ 'call health#report_error(''Failed to run healthcheck for "'
\ .s:to_plugin_name(c) \ .s:to_plugin_name(c)
\ .'" plugin. Exception:''."\n".v:exception)') \ .'" plugin. Exception:''."\n".v:throwpoint."\n".v:exception)')
endif endif
endtry endtry
call append('$', split(output, "\n") + ['']) call append('$', split(output, "\n") + [''])
@@ -57,6 +63,8 @@ function! health#check(plugin_names) abort
endfor endfor
endif endif
" needed for plasticboy/vim-markdown, because it uses fdm=expr
normal! zR
setlocal nomodified setlocal nomodified
redraw|echo '' redraw|echo ''
endfunction endfunction
@@ -78,6 +86,11 @@ function! s:indent_after_line1(s, columns) abort
return join(lines, "\n") return join(lines, "\n")
endfunction endfunction
" Changes ':h clipboard' to ':help |clipboard|'.
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
function! s:format_report_message(status, msg, ...) abort " {{{ function! s:format_report_message(status, msg, ...) abort " {{{
let output = ' - ' . a:status . ': ' . s:indent_after_line1(a:msg, 4) let output = ' - ' . a:status . ': ' . s:indent_after_line1(a:msg, 4)
@@ -99,7 +112,7 @@ function! s:format_report_message(status, msg, ...) abort " {{{
let output .= "\n - " . s:indent_after_line1(suggestion, 10) let output .= "\n - " . s:indent_after_line1(suggestion, 10)
endfor endfor
return output return s:help_to_link(output)
endfunction " }}} endfunction " }}}
" Use {msg} to report information in the current section " Use {msg} to report information in the current section
@@ -131,8 +144,8 @@ function! health#report_error(msg, ...) abort " {{{
endfunction " }}} endfunction " }}}
function! s:filepath_to_function(name) abort function! s:filepath_to_function(name) abort
return substitute(substitute(substitute(a:name, ".*autoload/", "", ""), return substitute(substitute(substitute(a:name, '.*autoload[\/]', '', ''),
\ "\\.vim", "#check", ""), "/", "#", "g") \ '\.vim', '#check', ''), '[\/]', '#', 'g')
endfunction endfunction
function! s:discover_health_checks() abort function! s:discover_health_checks() abort

View File

@@ -1,16 +1,28 @@
let s:suggest_faq = 'See https://github.com/neovim/neovim/wiki/FAQ' let s:suggest_faq = 'https://github.com/neovim/neovim/wiki/FAQ'
function! s:check_config() abort function! s:check_config() abort
let ok = v:true
call health#report_start('Configuration') call health#report_start('Configuration')
if get(g:, 'loaded_sensible', 0)
let ok = v:false
let sensible_pi = globpath(&runtimepath, '**/sensible.vim', 1, 1) let sensible_pi = globpath(&runtimepath, '**/sensible.vim', 1, 1)
if empty(sensible_pi)
call health#report_ok('no issues found')
else
call health#report_info("found sensible.vim plugin:\n".join(sensible_pi, "\n")) call health#report_info("found sensible.vim plugin:\n".join(sensible_pi, "\n"))
call health#report_error("sensible.vim plugin is not needed; Nvim has the same defaults built-in." call health#report_error("sensible.vim plugin is not needed; Nvim has the same defaults built-in."
\ ." Also, sensible.vim sets 'ttimeoutlen' to a sub-optimal value.", \ ." Also, sensible.vim sets 'ttimeoutlen' to a sub-optimal value.",
\ ["Remove sensible.vim plugin, or wrap it in a `if !has('nvim')` check."]) \ ["Remove sensible.vim plugin, or wrap it in a `if !has('nvim')` check."])
endif 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+",
\ [ "Use the 'guicursor' option to configure cursor shape. :help 'guicursor'",
\ 'https://github.com/neovim/neovim/wiki/Following-HEAD#20170402' ])
endif
if ok
call health#report_ok('no issues found')
endif
endfunction endfunction
" Load the remote plugin manifest file and check for unregistered plugins " Load the remote plugin manifest file and check for unregistered plugins
@@ -41,7 +53,7 @@ function! s:check_rplugin_manifest() abort
\ + glob(python_dir.'/*/__init__.py', 1, 1) \ + glob(python_dir.'/*/__init__.py', 1, 1)
let contents = join(readfile(script)) let contents = join(readfile(script))
if contents =~# '\<\%(from\|import\)\s\+neovim\>' if contents =~# '\<\%(from\|import\)\s\+neovim\>'
if script =~# '/__init__\.py$' if script =~# '[\/]__init__\.py$'
let script = fnamemodify(script, ':h') let script = fnamemodify(script, ':h')
endif endif
@@ -106,46 +118,56 @@ function! s:check_tmux() abort
call health#report_error('command failed: '.cmd."\n".out) call health#report_error('command failed: '.cmd."\n".out)
elseif empty(tmux_esc_time) elseif empty(tmux_esc_time)
call health#report_error('escape-time is not set', suggestions) call health#report_error('escape-time is not set', suggestions)
elseif tmux_esc_time > 500 elseif tmux_esc_time > 300
call health#report_error( call health#report_error(
\ 'escape-time ('.tmux_esc_time.') is higher than 300ms', suggestions) \ 'escape-time ('.tmux_esc_time.') is higher than 300ms', suggestions)
else else
call health#report_ok('escape-time: '.tmux_esc_time.'ms') call health#report_ok('escape-time: '.tmux_esc_time.'ms')
endif endif
" check $TERM " check default-terminal and $TERM
call health#report_info('$TERM: '.$TERM) call health#report_info('$TERM: '.$TERM)
if $TERM !~# '\v(tmux-256color|screen-256color)' let cmd = 'tmux show-option -qvg default-terminal'
let out = system(cmd)
let tmux_default_term = substitute(out, '\v(\s|\r|\n)', '', 'g')
if empty(tmux_default_term)
let cmd = 'tmux show-option -qvgs default-terminal'
let out = system(cmd)
let tmux_default_term = substitute(out, '\v(\s|\r|\n)', '', 'g')
endif
if v:shell_error
call health#report_error('command failed: '.cmd."\n".out)
elseif tmux_default_term !=# $TERM
call health#report_info('default-terminal: '.tmux_default_term)
call health#report_error( call health#report_error(
\ '$TERM should be "screen-256color" or "tmux-256color" when running tmux.', \ '$TERM differs from the tmux `default-terminal` setting. Colors might look wrong.',
\ ['$TERM may have been set by some rc (.bashrc, .zshrc, ...).'])
elseif $TERM !~# '\v(tmux-256color|screen-256color)'
call health#report_error(
\ '$TERM should be "screen-256color" or "tmux-256color" in tmux. Colors might look wrong.',
\ ["Set default-terminal in ~/.tmux.conf:\nset-option -g default-terminal \"screen-256color\"", \ ["Set default-terminal in ~/.tmux.conf:\nset-option -g default-terminal \"screen-256color\"",
\ s:suggest_faq]) \ s:suggest_faq])
endif endif
endfunction endfunction
function! s:check_terminfo() abort function! s:check_terminal() abort
if !executable('infocmp') if !executable('infocmp')
return return
endif endif
call health#report_start('terminfo') call health#report_start('terminal')
let suggestions = [
\ "Set key_backspace to \\177 (ASCII BACKSPACE). Run these commands:\n"
\ .'infocmp $TERM | sed ''s/kbs=^[hH]/kbs=\\177/'' > $TERM.ti'
\ ."\n"
\ .'tic $TERM.ti',
\ s:suggest_faq]
let cmd = 'infocmp -L' let cmd = 'infocmp -L'
let out = system(cmd) let out = system(cmd)
let kbs_entry = matchstr(out, 'key_backspace=\S*') let kbs_entry = matchstr(out, 'key_backspace=[^,[:space:]]*')
let kdch1_entry = matchstr(out, 'key_dc=[^,[:space:]]*')
if v:shell_error if v:shell_error
call health#report_error('command failed: '.cmd."\n".out) call health#report_error('command failed: '.cmd."\n".out)
elseif !empty(matchstr(out, '\Vkey_backspace=^H'))
call health#report_error('key_backspace (kbs) entry is ^H (ASCII DELETE): '
\ .kbs_entry, suggestions)
else else
call health#report_info('key_backspace terminfo entry: ' call health#report_info('key_backspace (kbs) terminfo entry: '
\ .(empty(kbs_entry) ? '? (not found)' : kbs_entry)) \ .(empty(kbs_entry) ? '? (not found)' : kbs_entry))
call health#report_info('key_dc (kdch1) terminfo entry: '
\ .(empty(kbs_entry) ? '? (not found)' : kdch1_entry))
endif endif
endfunction endfunction
@@ -153,6 +175,6 @@ function! health#nvim#check() abort
call s:check_config() call s:check_config()
call s:check_performance() call s:check_performance()
call s:check_rplugin_manifest() call s:check_rplugin_manifest()
call s:check_terminfo() call s:check_terminal()
call s:check_tmux() call s:check_tmux()
endfunction endfunction

View File

@@ -1,20 +1,27 @@
let s:shell_error = 0
function! s:is_bad_response(s) abort function! s:is_bad_response(s) abort
return a:s =~? '\v(^unable)|(^error)' return a:s =~? '\v(^unable)|(^error)|(^outdated)'
endfunction endfunction
function! s:trim(s) abort function! s:trim(s) abort
return substitute(a:s, '^\_s*\|\_s*$', '', 'g') return substitute(a:s, '^\_s*\|\_s*$', '', 'g')
endfunction endfunction
" Convert '\' to '/'. Collapse '//' and '/./'.
function! s:normalize_path(s) abort
return substitute(substitute(a:s, '\', '/', 'g'), '/\./\|/\+', '/', 'g')
endfunction
" Simple version comparison. " Simple version comparison.
function! s:version_cmp(a, b) abort function! s:version_cmp(a, b) abort
let a = split(a:a, '\.') let a = split(a:a, '\.', 0)
let b = split(a:b, '\.') let b = split(a:b, '\.', 0)
for i in range(len(a)) for i in range(len(a))
if a[i] > b[i] if str2nr(a[i]) > str2nr(b[i])
return 1 return 1
elseif a[i] < b[i] elseif str2nr(a[i]) < str2nr(b[i])
return -1 return -1
endif endif
endfor endfor
@@ -22,11 +29,68 @@ function! s:version_cmp(a, b) abort
return 0 return 0
endfunction endfunction
" Handler for s:system() function.
function! s:system_handler(jobid, data, event) dict abort
if a:event ==# 'stdout' || a:event ==# 'stderr'
let self.output .= join(a:data, '')
elseif a:event ==# 'exit'
let s:shell_error = a:data
endif
endfunction
" Run a system command and timeout after 30 seconds.
function! s:system(cmd, ...) abort
let stdin = a:0 ? a:1 : ''
let ignore_stderr = a:0 > 1 ? a:2 : 0
let ignore_error = a:0 > 2 ? a:3 : 0
let opts = {
\ 'output': '',
\ 'on_stdout': function('s:system_handler'),
\ 'on_exit': function('s:system_handler'),
\ }
if !ignore_stderr
let opts.on_stderr = function('s:system_handler')
endif
let jobid = jobstart(a:cmd, opts)
if jobid < 1
call health#report_error(printf('Command error %d: %s', jobid,
\ type(a:cmd) == type([]) ? join(a:cmd) : a:cmd))
let s:shell_error = 1
return opts.output
endif
if !empty(stdin)
call jobsend(jobid, stdin)
endif
let res = jobwait([jobid], 30000)
if res[0] == -1
call health#report_error(printf('Command timed out: %s',
\ type(a:cmd) == type([]) ? join(a:cmd) : a:cmd))
call jobstop(jobid)
elseif s:shell_error != 0 && !ignore_error
call health#report_error(printf('Command error (%d) %s: %s', jobid,
\ type(a:cmd) == type([]) ? join(a:cmd) : a:cmd,
\ opts.output))
endif
return opts.output
endfunction
function! s:systemlist(cmd, ...) abort
let stdout = split(s:system(a:cmd, a:0 ? a:1 : ''), "\n")
if a:0 > 1 && !empty(a:2)
return filter(stdout, '!empty(v:val)')
endif
return stdout
endfunction
" Fetch the contents of a URL. " Fetch the contents of a URL.
function! s:download(url) abort function! s:download(url) abort
if executable('curl') if executable('curl')
let rv = system(['curl', '-sL', a:url]) let rv = s:system(['curl', '-sL', a:url], '', 1, 1)
return v:shell_error ? 'curl error: '.v:shell_error : rv return s:shell_error ? 'curl error with '.a:url.': '.s:shell_error : rv
elseif executable('python') elseif executable('python')
let script = " let script = "
\try:\n \try:\n
@@ -37,14 +101,27 @@ function! s:download(url) abort
\response = urlopen('".a:url."')\n \response = urlopen('".a:url."')\n
\print(response.read().decode('utf8'))\n \print(response.read().decode('utf8'))\n
\" \"
let rv = system(['python', '-c', script]) let rv = s:system(['python', '-c', script])
return empty(rv) && v:shell_error return empty(rv) && s:shell_error
\ ? 'python urllib.request error: '.v:shell_error \ ? 'python urllib.request error: '.s:shell_error
\ : rv \ : rv
endif endif
return 'missing `curl` and `python`, cannot make pypi request' return 'missing `curl` and `python`, cannot make pypi request'
endfunction endfunction
" Check for clipboard tools.
function! s:check_clipboard() abort
call health#report_start('Clipboard (optional)')
let clipboard_tool = provider#clipboard#Executable()
if empty(clipboard_tool)
call health#report_warn(
\ 'No clipboard tool found. Clipboard registers will not work.',
\ [':help clipboard'])
else
call health#report_ok('Clipboard tool found: '. clipboard_tool)
endif
endfunction
" Get the latest Neovim Python client version from PyPI. " Get the latest Neovim Python client version from PyPI.
function! s:latest_pypi_version() abort function! s:latest_pypi_version() abort
@@ -73,7 +150,7 @@ endfunction
" ] " ]
function! s:version_info(python) abort function! s:version_info(python) abort
let pypi_version = s:latest_pypi_version() let pypi_version = s:latest_pypi_version()
let python_version = s:trim(system([ let python_version = s:trim(s:system([
\ a:python, \ a:python,
\ '-c', \ '-c',
\ 'import sys; print(".".join(str(x) for x in sys.version_info[:3]))', \ 'import sys; print(".".join(str(x) for x in sys.version_info[:3]))',
@@ -83,27 +160,32 @@ function! s:version_info(python) abort
let python_version = 'unable to parse python response' let python_version = 'unable to parse python response'
endif endif
let nvim_path = s:trim(system([ let nvim_path = s:trim(s:system([
\ a:python, \ a:python, '-c', 'import neovim; print(neovim.__file__)']))
\ '-c', if s:shell_error || empty(nvim_path)
\ 'import neovim; print(neovim.__file__)'])) return [python_version, 'unable to load neovim Python module', pypi_version,
let nvim_path = v:shell_error ? '' : nvim_path \ nvim_path]
if empty(nvim_path)
return [python_version, 'unable to find nvim executable', pypi_version, 'unable to get nvim executable']
endif endif
" Assuming that multiple versions of a package are installed, sort them " Assuming that multiple versions of a package are installed, sort them
" numerically in descending order. " numerically in descending order.
function! s:compare(metapath1, metapath2) function! s:compare(metapath1, metapath2) abort
let a = matchstr(fnamemodify(a:metapath1, ':p:h:t'), '[0-9.]\+') let a = matchstr(fnamemodify(a:metapath1, ':p:h:t'), '[0-9.]\+')
let b = matchstr(fnamemodify(a:metapath2, ':p:h:t'), '[0-9.]\+') let b = matchstr(fnamemodify(a:metapath2, ':p:h:t'), '[0-9.]\+')
return a == b ? 0 : a > b ? 1 : -1 return a == b ? 0 : a > b ? 1 : -1
endfunction endfunction
let nvim_version = 'unable to find nvim version' " Try to get neovim.VERSION (added in 0.1.11dev).
let nvim_version = s:system(['python', '-c',
\ 'from neovim import VERSION as v; '.
\ 'print("{}.{}.{}{}".format(v.major, v.minor, v.patch, v.prerelease))'],
\ '', 1, 1)
if empty(nvim_version)
let nvim_version = 'unable to find neovim Python module version'
let base = fnamemodify(nvim_path, ':h') let base = fnamemodify(nvim_path, ':h')
let metas = glob(base.'-*/METADATA', 1, 1) + glob(base.'-*/PKG-INFO', 1, 1) let metas = glob(base.'-*/METADATA', 1, 1)
\ + glob(base.'-*/PKG-INFO', 1, 1)
\ + glob(base.'.egg-info/PKG-INFO', 1, 1)
let metas = sort(metas, 's:compare') let metas = sort(metas, 's:compare')
if !empty(metas) if !empty(metas)
@@ -114,11 +196,13 @@ function! s:version_info(python) abort
endif endif
endfor endfor
endif endif
endif
let version_status = 'unknown' let nvim_path_base = fnamemodify(nvim_path, ':~:h')
let version_status = 'unknown; '.nvim_path_base
if !s:is_bad_response(nvim_version) && !s:is_bad_response(pypi_version) if !s:is_bad_response(nvim_version) && !s:is_bad_response(pypi_version)
if s:version_cmp(nvim_version, pypi_version) == -1 if s:version_cmp(nvim_version, pypi_version) == -1
let version_status = 'outdated' let version_status = 'outdated; from '.nvim_path_base
else else
let version_status = 'up to date' let version_status = 'up to date'
endif endif
@@ -129,7 +213,7 @@ endfunction
" Check the Python interpreter's usability. " Check the Python interpreter's usability.
function! s:check_bin(bin) abort function! s:check_bin(bin) abort
if !filereadable(a:bin) if !filereadable(a:bin) && (!has('win32') || !filereadable(a:bin.'.exe'))
call health#report_error(printf('"%s" was not found.', a:bin)) call health#report_error(printf('"%s" was not found.', a:bin))
return 0 return 0
elseif executable(a:bin) != 1 elseif executable(a:bin) != 1
@@ -140,49 +224,50 @@ function! s:check_bin(bin) abort
endfunction endfunction
function! s:check_python(version) abort function! s:check_python(version) abort
call health#report_start('Python ' . a:version . ' provider') call health#report_start('Python ' . a:version . ' provider (optional)')
let python_bin_name = 'python'.(a:version == 2 ? '' : '3') let pyname = 'python'.(a:version == 2 ? '' : '3')
let pyenv = resolve(exepath('pyenv')) let pyenv = resolve(exepath('pyenv'))
let pyenv_root = exists('$PYENV_ROOT') ? resolve($PYENV_ROOT) : 'n' let pyenv_root = exists('$PYENV_ROOT') ? resolve($PYENV_ROOT) : 'n'
let venv = exists('$VIRTUAL_ENV') ? resolve($VIRTUAL_ENV) : '' let venv = exists('$VIRTUAL_ENV') ? resolve($VIRTUAL_ENV) : ''
let host_prog_var = python_bin_name.'_host_prog' let host_prog_var = pyname.'_host_prog'
let host_skip_var = python_bin_name.'_host_skip_check' let loaded_var = 'g:loaded_'.pyname.'_provider'
let python_bin = '' let python_bin = ''
let python_multiple = [] let python_multiple = []
if exists(loaded_var) && !exists('*provider#'.pyname.'#Call')
call health#report_info('Disabled. '.loaded_var.'='.eval(loaded_var))
return
endif
if exists('g:'.host_prog_var) if exists('g:'.host_prog_var)
call health#report_info(printf('Using: g:%s = "%s"', host_prog_var, get(g:, host_prog_var))) call health#report_info(printf('Using: g:%s = "%s"', host_prog_var, get(g:, host_prog_var)))
endif endif
let [python_bin_name, pythonx_errs] = provider#pythonx#Detect(a:version) let [pyname, pythonx_errs] = provider#pythonx#Detect(a:version)
if empty(python_bin_name) if empty(pyname)
call health#report_warn('No Python interpreter was found with the neovim ' call health#report_warn('No Python interpreter was found with the neovim '
\ . 'module. Using the first available for diagnostics.') \ . 'module. Using the first available for diagnostics.')
if !empty(pythonx_errs) if !empty(pythonx_errs)
call health#report_warn(pythonx_errs) call health#report_warn(pythonx_errs)
endif endif
let old_skip = get(g:, host_skip_var, 0)
let g:[host_skip_var] = 1
let [python_bin_name, pythonx_errs] = provider#pythonx#Detect(a:version)
let g:[host_skip_var] = old_skip
endif endif
if !empty(python_bin_name) if !empty(pyname)
if exists('g:'.host_prog_var) if exists('g:'.host_prog_var)
let python_bin = exepath(python_bin_name) let python_bin = exepath(pyname)
endif endif
let python_bin_name = fnamemodify(python_bin_name, ':t') let pyname = fnamemodify(pyname, ':t')
endif endif
if !empty(pythonx_errs) if !empty(pythonx_errs)
call health#report_error('Python provider error', pythonx_errs) call health#report_error('Python provider error', pythonx_errs)
endif endif
if !empty(python_bin_name) && empty(python_bin) && empty(pythonx_errs) if !empty(pyname) && empty(python_bin) && empty(pythonx_errs)
if !exists('g:'.host_prog_var) if !exists('g:'.host_prog_var)
call health#report_info(printf('`g:%s` is not set. Searching for ' call health#report_info(printf('`g:%s` is not set. Searching for '
\ . '%s in the environment.', host_prog_var, python_bin_name)) \ . '%s in the environment.', host_prog_var, pyname))
endif endif
if !empty(pyenv) if !empty(pyenv)
@@ -195,21 +280,21 @@ function! s:check_python(version) abort
call health#report_ok(printf('pyenv found: "%s"', pyenv)) call health#report_ok(printf('pyenv found: "%s"', pyenv))
endif endif
let python_bin = s:trim(system( let python_bin = s:trim(s:system([pyenv, 'which', pyname], '', 1))
\ printf('"%s" which %s 2>/dev/null', pyenv, python_bin_name)))
if empty(python_bin) if empty(python_bin)
call health#report_warn(printf('pyenv couldn''t find %s.', python_bin_name)) call health#report_warn(printf('pyenv could not find %s.', pyname))
endif endif
endif endif
if empty(python_bin) if empty(python_bin)
let python_bin = exepath(python_bin_name) let python_bin = exepath(pyname)
if exists('$PATH') if exists('$PATH')
for path in split($PATH, ':') for path in split($PATH, has('win32') ? ';' : ':')
let path_bin = path.'/'.python_bin_name let path_bin = s:normalize_path(path.'/'.pyname)
if path_bin != python_bin && index(python_multiple, path_bin) == -1 if path_bin != s:normalize_path(python_bin)
\ && index(python_multiple, path_bin) == -1
\ && executable(path_bin) \ && executable(path_bin)
call add(python_multiple, path_bin) call add(python_multiple, path_bin)
endif endif
@@ -218,15 +303,15 @@ function! s:check_python(version) abort
if len(python_multiple) if len(python_multiple)
" This is worth noting since the user may install something " This is worth noting since the user may install something
" that changes $PATH, like homebrew. " that changes $PATH, like homebrew.
call health#report_info(printf('There are multiple %s executables found. ' call health#report_info(printf('Multiple %s executables found. '
\ . 'Set "g:%s" to avoid surprises.', python_bin_name, host_prog_var)) \ . 'Set `g:%s` to avoid surprises.', pyname, host_prog_var))
endif endif
if python_bin =~# '\<shims\>' if python_bin =~# '\<shims\>'
call health#report_warn(printf('"%s" appears to be a pyenv shim.', python_bin), [ call health#report_warn(printf('`%s` appears to be a pyenv shim.', python_bin), [
\ 'The "pyenv" executable is not in $PATH,', \ 'The `pyenv` executable is not in $PATH,',
\ 'Your pyenv installation is broken. You should set ' \ 'Your pyenv installation is broken. You should set '
\ . '"g:'.host_prog_var.'" to avoid surprises.', \ . '`g:'.host_prog_var.'` to avoid surprises.',
\ ]) \ ])
endif endif
endif endif
@@ -237,9 +322,9 @@ function! s:check_python(version) abort
if empty(venv) && !empty(pyenv) && !exists('g:'.host_prog_var) if empty(venv) && !empty(pyenv) && !exists('g:'.host_prog_var)
\ && !empty(pyenv_root) && resolve(python_bin) !~# '^'.pyenv_root.'/' \ && !empty(pyenv_root) && resolve(python_bin) !~# '^'.pyenv_root.'/'
call health#report_warn('pyenv is not set up optimally.', [ call health#report_warn('pyenv is not set up optimally.', [
\ printf('Suggestion: Create a virtualenv specifically ' \ printf('Create a virtualenv specifically '
\ . 'for Neovim using pyenv and use "g:%s". This will avoid ' \ . 'for Neovim using pyenv, and set `g:%s`. This will avoid '
\ . 'the need to install Neovim''s Python client in each ' \ . 'the need to install Neovim''s Python module in each '
\ . 'version/virtualenv.', host_prog_var) \ . 'version/virtualenv.', host_prog_var)
\ ]) \ ])
elseif !empty(venv) && exists('g:'.host_prog_var) elseif !empty(venv) && exists('g:'.host_prog_var)
@@ -251,18 +336,18 @@ function! s:check_python(version) abort
if resolve(python_bin) !~# '^'.venv_root.'/' if resolve(python_bin) !~# '^'.venv_root.'/'
call health#report_warn('Your virtualenv is not set up optimally.', [ call health#report_warn('Your virtualenv is not set up optimally.', [
\ printf('Suggestion: Create a virtualenv specifically ' \ printf('Create a virtualenv specifically '
\ . 'for Neovim and use "g:%s". This will avoid ' \ . 'for Neovim and use `g:%s`. This will avoid '
\ . 'the need to install Neovim''s Python client in each ' \ . 'the need to install Neovim''s Python module in each '
\ . 'virtualenv.', host_prog_var) \ . 'virtualenv.', host_prog_var)
\ ]) \ ])
endif endif
endif endif
endif endif
if empty(python_bin) && !empty(python_bin_name) if empty(python_bin) && !empty(pyname)
" An error message should have already printed. " An error message should have already printed.
call health#report_error(printf('"%s" was not found.', python_bin_name)) call health#report_error(printf('`%s` was not found.', pyname))
elseif !empty(python_bin) && !s:check_bin(python_bin) elseif !empty(python_bin) && !s:check_bin(python_bin)
let python_bin = '' let python_bin = ''
endif endif
@@ -272,23 +357,20 @@ function! s:check_python(version) abort
if exists('$VIRTUAL_ENV') if exists('$VIRTUAL_ENV')
if !empty(pyenv) if !empty(pyenv)
let pyenv_prefix = resolve(s:trim(system([pyenv, 'prefix']))) let pyenv_prefix = resolve(s:trim(s:system([pyenv, 'prefix'])))
if $VIRTUAL_ENV != pyenv_prefix if $VIRTUAL_ENV != pyenv_prefix
let virtualenv_inactive = 1 let virtualenv_inactive = 1
endif endif
elseif !empty(python_bin_name) && exepath(python_bin_name) !~# '^'.$VIRTUAL_ENV.'/' elseif !empty(pyname) && exepath(pyname) !~# '^'.$VIRTUAL_ENV.'/'
let virtualenv_inactive = 1 let virtualenv_inactive = 1
endif endif
endif endif
if virtualenv_inactive if virtualenv_inactive
let suggestions = [
\ 'If you are using Zsh, see: http://vi.stackexchange.com/a/7654/5229',
\ ]
call health#report_warn( call health#report_warn(
\ '$VIRTUAL_ENV exists but appears to be inactive. ' \ '$VIRTUAL_ENV exists but appears to be inactive. '
\ . 'This could lead to unexpected results.', \ . 'This could lead to unexpected results.',
\ suggestions) \ [ 'If you are using Zsh, see: http://vi.stackexchange.com/a/7654/5229' ])
endif endif
" Diagnostic output " Diagnostic output
@@ -302,7 +384,7 @@ function! s:check_python(version) abort
if !empty(python_bin) if !empty(python_bin)
let [pyversion, current, latest, status] = s:version_info(python_bin) let [pyversion, current, latest, status] = s:version_info(python_bin)
if a:version != str2nr(pyversion) if a:version != str2nr(pyversion)
call health#report_warn('Got an unexpected version of Python.' . call health#report_warn('Unexpected Python version.' .
\ ' This could lead to confusing error messages.') \ ' This could lead to confusing error messages.')
endif endif
if a:version == 3 && str2float(pyversion) < 3.3 if a:version == 3 && str2float(pyversion) < 3.3
@@ -310,67 +392,89 @@ function! s:check_python(version) abort
endif endif
call health#report_info('Python'.a:version.' version: ' . pyversion) call health#report_info('Python'.a:version.' version: ' . pyversion)
call health#report_info(printf('%s-neovim Version: %s', python_bin_name, current)) if s:is_bad_response(status)
call health#report_info(printf('%s-neovim version: %s (%s)', pyname, current, status))
else
call health#report_info(printf('%s-neovim version: %s', pyname, current))
endif
if s:is_bad_response(current) if s:is_bad_response(current)
let suggestions = [
\ 'Error found was: ' . current,
\ 'Use the command `$ pip' . a:version . ' install neovim`',
\ ]
call health#report_error( call health#report_error(
\ 'Neovim Python client is not installed.', \ "Neovim Python client is not installed.\nError: ".current,
\ suggestions) \ ['Run in shell: pip' . a:version . ' install neovim'])
endif endif
if s:is_bad_response(latest) if s:is_bad_response(latest)
call health#report_warn('Unable to contact PyPI.') call health#report_warn('Could not contact PyPI to get latest version.')
call health#report_error('HTTP request failed: '.latest) call health#report_error('HTTP request failed: '.latest)
endif elseif s:is_bad_response(status)
call health#report_warn(printf('Latest %s-neovim is NOT installed: %s',
if s:is_bad_response(status) \ pyname, latest))
call health#report_warn('Latest Neovim Python client version: ('.latest.')') elseif !s:is_bad_response(current)
elseif !s:is_bad_response(latest) call health#report_ok(printf('Latest %s-neovim is installed: %s',
call health#report_ok('Latest Neovim Python client is installed: ('.status.')') \ pyname, latest))
endif endif
endif endif
endfunction endfunction
function! s:check_ruby() abort function! s:check_ruby() abort
call health#report_start('Ruby provider') call health#report_start('Ruby provider (optional)')
let ruby_version = systemlist('ruby -v')[0]
let ruby_prog = provider#ruby#Detect()
let suggestions =
\ ['Install or upgrade the neovim RubyGem using `gem install neovim`.']
if empty(ruby_prog) let loaded_var = 'g:loaded_ruby_provider'
let ruby_prog = 'not found' if exists(loaded_var) && !exists('*provider#ruby#Call')
let prog_vers = 'not found' call health#report_info('Disabled. '.loaded_var.'='.eval(loaded_var))
call health#report_error('Missing Neovim RubyGem', suggestions) return
else
silent let latest_gem = get(systemlist("gem list -ra '^neovim$' 2>/dev/null | " .
\ "awk -F'[()]' '{print $2}' | " .
\ 'cut -d, -f1'), 0, 'not found')
let latest_desc = ' (latest: ' . latest_gem . ')'
silent let prog_vers = systemlist(ruby_prog . ' --version')[0]
if v:shell_error
let prog_vers = 'not found' . latest_desc
call health#report_warn('Neovim RubyGem is not up-to-date.', suggestions)
elseif s:version_cmp(prog_vers, latest_gem) == -1
let prog_vers .= latest_desc
call health#report_warn('Neovim RubyGem is not up-to-date.', suggestions)
else
call health#report_ok('Found up-to-date neovim RubyGem')
endif
endif endif
call health#report_info('Ruby Version: ' . ruby_version) if !executable('ruby') || !executable('gem')
call health#report_info('Host Executable: ' . ruby_prog) call health#report_warn(
call health#report_info('Host Version: ' . prog_vers) \ '`ruby` and `gem` must be in $PATH.',
\ ['Install Ruby and verify that `ruby` and `gem` commands work.'])
return
endif
call health#report_info('Ruby: '. s:system('ruby -v'))
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".'])
return
endif
call health#report_info('Host: '. host)
let latest_gem_cmd = has('win32') ? 'cmd /c gem list -ra ^^neovim$' : 'gem list -ra ^neovim$'
let latest_gem = s:system(split(latest_gem_cmd))
if s:shell_error || empty(latest_gem)
call health#report_error('Failed to run: '. latest_gem_cmd,
\ ["Make sure you're connected to the internet.",
\ 'Are you behind a firewall or proxy?'])
return
endif
let latest_gem = get(split(latest_gem, ' (\|, \|)$' ), 1, 'not found')
let current_gem_cmd = host .' --version'
let current_gem = s:system(current_gem_cmd)
if s:shell_error
call health#report_error('Failed to run: '. current_gem_cmd,
\ ['Report this issue with the output of: ', current_gem_cmd])
return
endif
if s:version_cmp(current_gem, latest_gem) == -1
call health#report_warn(
\ printf('Gem "neovim" is out-of-date. Installed: %s, latest: %s',
\ current_gem, latest_gem),
\ ['Run in shell: gem update neovim'])
else
call health#report_ok('Latest "neovim" gem is installed: '. current_gem)
endif
endfunction endfunction
function! health#provider#check() abort function! health#provider#check() abort
call s:check_clipboard()
call s:check_python(2) call s:check_python(2)
call s:check_python(3) call s:check_python(3)
call s:check_ruby() call s:check_ruby()

View File

@@ -1,11 +1,5 @@
" Maintainer: Anmol Sethi <anmol@aubble.com> " Maintainer: Anmol Sethi <anmol@aubble.com>
if &shell =~# 'fish$'
let s:man_cmd = 'man ^/dev/null'
else
let s:man_cmd = 'man 2>/dev/null'
endif
let s:man_find_arg = "-w" let s:man_find_arg = "-w"
" TODO(nhooyr) Completion may work on SunOS; I'm not sure if `man -l` displays " TODO(nhooyr) Completion may work on SunOS; I'm not sure if `man -l` displays
@@ -49,46 +43,139 @@ function! man#open_page(count, count1, mods, ...) abort
call s:error(v:exception) call s:error(v:exception)
return return
endtry endtry
call s:push_tag() call s:push_tag()
let bufname = 'man://'.name.(empty(sect)?'':'('.sect.')') let bufname = 'man://'.name.(empty(sect)?'':'('.sect.')')
try
set eventignore+=BufReadCmd
if a:mods !~# 'tab' && s:find_man() if a:mods !~# 'tab' && s:find_man()
noautocmd execute 'silent edit' bufname execute 'silent edit' fnameescape(bufname)
else else
noautocmd execute 'silent' a:mods 'split' bufname execute 'silent' a:mods 'split' fnameescape(bufname)
endif endif
finally
set eventignore-=BufReadCmd
endtry
try
let page = s:get_page(path)
catch
if a:mods =~# 'tab' || !s:find_man()
" a new window was opened
close
endif
call s:error(v:exception)
return
endtry
let b:man_sect = sect let b:man_sect = sect
call s:read_page(path) call s:put_page(page)
endfunction endfunction
function! man#read_page(ref) abort function! man#read_page(ref) abort
try try
let [sect, name] = man#extract_sect_and_name_ref(a:ref) let [sect, name] = man#extract_sect_and_name_ref(a:ref)
let [b:man_sect, name, path] = s:verify_exists(sect, name) let [sect, name, path] = s:verify_exists(sect, name)
let page = s:get_page(path)
catch catch
" call to s:error() is unnecessary call s:error(v:exception)
return return
endtry endtry
call s:read_page(path) let b:man_sect = sect
call s:put_page(page)
endfunction endfunction
function! s:read_page(path) abort " Handler for s:system() function.
function! s:system_handler(jobid, data, event) dict abort
if a:event == 'stdout'
let self.stdout .= join(a:data, "\n")
elseif a:event == 'stderr'
let self.stderr .= join(a:data, "\n")
else
let self.exit_code = a:data
endif
endfunction
" Run a system command and timeout after 30 seconds.
function! s:system(cmd, ...) abort
let opts = {
\ 'stdout': '',
\ 'stderr': '',
\ 'exit_code': 0,
\ 'on_stdout': function('s:system_handler'),
\ 'on_stderr': function('s:system_handler'),
\ 'on_exit': function('s:system_handler'),
\ }
let jobid = jobstart(a:cmd, opts)
if jobid < 1
throw printf('command error %d: %s', jobid, join(a:cmd))
endif
let res = jobwait([jobid], 30000)
if res[0] == -1
try
call jobstop(jobid)
throw printf('command timed out: %s', join(a:cmd))
catch /^Vim\%((\a\+)\)\=:E900/
endtry
elseif res[0] == -2
throw printf('command interrupted: %s', join(a:cmd))
endif
if opts.exit_code != 0
throw printf("command error (%d) %s: %s", jobid, join(a:cmd), substitute(opts.stderr, '\_s\+$', '', &gdefault ? '' : 'g'))
endif
return opts.stdout
endfunction
function! s:get_page(path) abort
" Respect $MANWIDTH or default to window width.
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
return s:system(['env', 'MANPAGER=cat', 'MANWIDTH='.manwidth, 'man', a:path])
endfunction
function! s:put_page(page) abort
setlocal modifiable setlocal modifiable
setlocal noreadonly setlocal noreadonly
silent keepjumps %delete _ silent keepjumps %delete _
" Force MANPAGER=cat to ensure Vim is not recursively invoked (by man-db). silent put =a:page
" http://comments.gmane.org/gmane.editors.vim.devel/29085 " Remove all backspaced/escape characters.
" Respect $MANWIDTH, or default to window width. execute 'silent keeppatterns keepjumps %substitute,.\b\|\e\[\d\+m,,e'.(&gdefault?'':'g')
let cmd = 'env MANPAGER=cat'.(empty($MANWIDTH) ? ' MANWIDTH='.winwidth(0) : '')
let cmd .= ' '.s:man_cmd.' '.shellescape(a:path)
silent put =system(cmd)
" remove all the backspaced text
execute 'silent keeppatterns keepjumps %substitute,.\b,,e'.(&gdefault?'':'g')
while getline(1) =~# '^\s*$' while getline(1) =~# '^\s*$'
silent keepjumps 1delete _ silent keepjumps 1delete _
endwhile endwhile
setlocal filetype=man setlocal filetype=man
endfunction endfunction
function! man#show_toc() abort
let bufname = bufname('%')
let info = getloclist(0, {'winid': 1})
if !empty(info) && getwinvar(info.winid, 'qf_toc') ==# bufname
lopen
return
endif
let toc = []
let lnum = 2
let last_line = line('$') - 1
while lnum && lnum < last_line
let text = getline(lnum)
if text =~# '^\%( \{3\}\)\=\S.*$'
call add(toc, {'bufnr': bufnr('%'), 'lnum': lnum, 'text': text})
endif
let lnum = nextnonblank(lnum + 1)
endwhile
call setloclist(0, toc, ' ')
call setloclist(0, [], 'a', {'title': 'Man TOC'})
lopen
let w:qf_toc = bufname
endfunction
" attempt to extract the name and sect out of 'name(sect)' " attempt to extract the name and sect out of 'name(sect)'
" otherwise just return the largest string of valid characters in ref " otherwise just return the largest string of valid characters in ref
function! man#extract_sect_and_name_ref(ref) abort function! man#extract_sect_and_name_ref(ref) abort
@@ -112,28 +199,26 @@ endfunction
function! s:get_path(sect, name) abort function! s:get_path(sect, name) abort
if empty(a:sect) if empty(a:sect)
let path = system(s:man_cmd.' '.s:man_find_arg.' '.shellescape(a:name)) return s:system(['man', s:man_find_arg, a:name])
if path !~# '^\/'
throw 'no manual entry for '.a:name
endif
return path
endif endif
" '-s' flag handles: " '-s' flag handles:
" - tokens like 'printf(echo)' " - tokens like 'printf(echo)'
" - sections starting with '-' " - sections starting with '-'
" - 3pcap section (found on macOS) " - 3pcap section (found on macOS)
" - commas between sections (for section priority) " - commas between sections (for section priority)
return system(s:man_cmd.' '.s:man_find_arg.' -s '.shellescape(a:sect).' '.shellescape(a:name)) return s:system(['man', s:man_find_arg, '-s', a:sect, a:name])
endfunction endfunction
function! s:verify_exists(sect, name) abort function! s:verify_exists(sect, name) abort
try
let path = s:get_path(a:sect, a:name) let path = s:get_path(a:sect, a:name)
if path !~# '^\/' catch /^command error (/
try
let path = s:get_path(get(b:, 'man_default_sects', ''), a:name) let path = s:get_path(get(b:, 'man_default_sects', ''), a:name)
if path !~# '^\/' catch /^command error (/
let path = s:get_path('', a:name) let path = s:get_path('', a:name)
endif endtry
endif endtry
" We need to extract the section from the path because sometimes " We need to extract the section from the path because sometimes
" the actual section of the manpage is more specific than the section " the actual section of the manpage is more specific than the section
" we provided to `man`. Try ':Man 3 App::CLI'. " we provided to `man`. Try ':Man 3 App::CLI'.
@@ -157,7 +242,7 @@ endfunction
function! man#pop_tag() abort function! man#pop_tag() abort
if !empty(s:tag_stack) if !empty(s:tag_stack)
let tag = remove(s:tag_stack, -1) let tag = remove(s:tag_stack, -1)
silent execute tag['buf'].'buffer' execute 'silent' tag['buf'].'buffer'
call cursor(tag['lnum'], tag['col']) call cursor(tag['lnum'], tag['col'])
endif endif
endfunction endfunction
@@ -197,8 +282,6 @@ function! s:error(msg) abort
echohl None echohl None
endfunction endfunction
let s:mandirs = join(split(system(s:man_cmd.' '.s:man_find_arg), ':\|\n'), ',')
" see man#extract_sect_and_name_ref on why tolower(sect) " see man#extract_sect_and_name_ref on why tolower(sect)
function! man#complete(arg_lead, cmd_line, cursor_pos) abort function! man#complete(arg_lead, cmd_line, cursor_pos) abort
let args = split(a:cmd_line) let args = split(a:cmd_line)
@@ -215,6 +298,7 @@ function! man#complete(arg_lead, cmd_line, cursor_pos) abort
let tmp = split(a:arg_lead, '(') let tmp = split(a:arg_lead, '(')
let name = tmp[0] let name = tmp[0]
let sect = tolower(get(tmp, 1, '')) let sect = tolower(get(tmp, 1, ''))
return s:complete(sect, '', name)
elseif args[1] !~# '^[^()]\+$' elseif args[1] !~# '^[^()]\+$'
" cursor (|) is at ':Man 3() |' or ':Man (3|' or ':Man 3() pri|' " cursor (|) is at ':Man 3() |' or ':Man (3|' or ':Man 3() pri|'
" or ':Man 3() pri |' " or ':Man 3() pri |'
@@ -242,20 +326,50 @@ function! man#complete(arg_lead, cmd_line, cursor_pos) abort
let name = a:arg_lead let name = a:arg_lead
let sect = tolower(args[1]) let sect = tolower(args[1])
endif endif
" We remove duplicates incase the same manpage in different languages was found. return s:complete(sect, sect, name)
return uniq(sort(map(globpath(s:mandirs,'man?/'.name.'*.'.sect.'*', 0, 1), 's:format_candidate(v:val, sect)'), 'i'))
endfunction endfunction
function! s:format_candidate(path, sect) abort function! s:complete(sect, psect, name) abort
try
let mandirs = join(split(s:system(['man', s:man_find_arg]), ':\|\n'), ',')
catch
call s:error(v:exception)
return
endtry
let pages = globpath(mandirs,'man?/'.a:name.'*.'.a:sect.'*', 0, 1)
" We remove duplicates in case the same manpage in different languages was found.
return uniq(sort(map(pages, 's:format_candidate(v:val, a:psect)'), 'i'))
endfunction
function! s:format_candidate(path, psect) abort
if a:path =~# '\.\%(pdf\|in\)$' " invalid extensions if a:path =~# '\.\%(pdf\|in\)$' " invalid extensions
return return
endif endif
let [sect, name] = s:extract_sect_and_name_path(a:path) let [sect, name] = s:extract_sect_and_name_path(a:path)
if sect ==# a:sect if sect ==# a:psect
return name return name
elseif sect =~# a:sect.'.\+$' elseif sect =~# a:psect.'.\+$'
" We include the section if the user provided section is a prefix " We include the section if the user provided section is a prefix
" of the actual section. " of the actual section.
return name.'('.sect.')' return name.'('.sect.')'
endif endif
endfunction 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
" 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')
try
let b:man_sect = man#extract_sect_and_name_ref(ref)[0]
catch
let b:man_sect = ''
endtry
execute 'silent file man://'.fnameescape(ref)
endfunction

View File

@@ -665,11 +665,15 @@ function msgpack#eval(s, special_objs) abort
call add(expr, ']}') call add(expr, ']}')
let s = s[1:] let s = s[1:]
elseif s[0] is# '''' elseif s[0] is# ''''
let char = matchstr(s, '\m\C^''\zs.\ze''') let char = matchstr(s, '\v\C^\''\zs%(\\\d+|.)\ze\''')
if empty(char) if empty(char)
throw 'char-invalid:Invalid integer character literal format: ' . s throw 'char-invalid:Invalid integer character literal format: ' . s
endif endif
if char[0] is# '\'
call add(expr, +char[1:])
else
call add(expr, char2nr(char)) call add(expr, char2nr(char))
endif
let s = s[len(char) + 2:] let s = s[len(char) + 2:]
else else
throw 'unknown:Invalid non-space character: ' . s throw 'unknown:Invalid non-space character: ' . s

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
" Maintainer: Dávid Szabó ( complex857 AT gmail DOT com ) " Maintainer: Dávid Szabó ( complex857 AT gmail DOT com )
" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) " Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
" URL: https://github.com/shawncplus/phpcomplete.vim " URL: https://github.com/shawncplus/phpcomplete.vim
" Last Change: 2015 Jul 13 " Last Change: 2016 Oct 10
" "
" OPTIONS: " OPTIONS:
" "
@@ -195,6 +195,8 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
" }}} " }}}
elseif context =~? 'implements' elseif context =~? 'implements'
return phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports) return phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports)
elseif context =~? 'instanceof'
return phpcomplete#CompleteClassName(a:base, ['c', 'n'], current_namespace, imports)
elseif context =~? 'extends\s\+.\+$' && a:base == '' elseif context =~? 'extends\s\+.\+$' && a:base == ''
return ['implements'] return ['implements']
elseif context =~? 'extends' elseif context =~? 'extends'
@@ -787,6 +789,8 @@ function! phpcomplete#CompleteClassName(base, kinds, current_namespace, imports)
if kinds == ['c', 'i'] if kinds == ['c', 'i']
let filterstr = 'v:val =~? "\\(class\\|interface\\)\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"' let filterstr = 'v:val =~? "\\(class\\|interface\\)\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"'
elseif kinds == ['c', 'n']
let filterstr = 'v:val =~? "\\(class\\|namespace\\)\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"'
elseif kinds == ['c'] elseif kinds == ['c']
let filterstr = 'v:val =~? "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"' let filterstr = 'v:val =~? "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"'
elseif kinds == ['i'] elseif kinds == ['i']
@@ -931,7 +935,7 @@ function! phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibite
endfor endfor
for modifier in a:modifiers for modifier in a:modifiers
" if the modifier is prohibited its a no match " if the modifier is prohibited it's a no match
if index(a:prohibited_modifiers, modifier) != -1 if index(a:prohibited_modifiers, modifier) != -1
return 0 return 0
endif endif
@@ -996,7 +1000,7 @@ function! phpcomplete#CompleteUserClass(context, base, sccontent, visibility) "
let required_modifiers += ['static'] let required_modifiers += ['static']
endif endif
let all_variable = filter(deepcopy(a:sccontent), let all_variable = filter(deepcopy(a:sccontent),
\ 'v:val =~ "^\\s*\\(var\\s\\+\\|public\\s\\+\\|protected\\s\\+\\|private\\s\\+\\|final\\s\\+\\|abstract\\s\\+\\|static\\s\\+\\)\\+\\$"') \ 'v:val =~ "\\(^\\s*\\(var\\s\\+\\|public\\s\\+\\|protected\\s\\+\\|private\\s\\+\\|final\\s\\+\\|abstract\\s\\+\\|static\\s\\+\\)\\+\\$\\|^\\s*\\(\\/\\|\\*\\)*\\s*@property\\s\\+\\S\\+\\s\\S\\{-}\\s*$\\)"')
let variables = [] let variables = []
for i in all_variable for i in all_variable
@@ -1160,6 +1164,14 @@ function! phpcomplete#GetTaglist(pattern) " {{{
endif endif
let tags = taglist(a:pattern) let tags = taglist(a:pattern)
for tag in tags
for prop in keys(tag)
if prop == 'cmd' || prop == 'static' || prop == 'kind' || prop == 'builtin'
continue
endif
let tag[prop] = substitute(tag[prop], '\\\\', '\\', 'g')
endfor
endfor
let s:cache_tags[a:pattern] = tags let s:cache_tags[a:pattern] = tags
let has_key = has_key(s:cache_tags, a:pattern) let has_key = has_key(s:cache_tags, a:pattern)
let s:cache_tags_checksum = cache_checksum let s:cache_tags_checksum = cache_checksum
@@ -1379,7 +1391,7 @@ function! phpcomplete#GetCallChainReturnType(classname_candidate, class_candidat
" Get Structured information of all classes and subclasses including namespace and includes " Get Structured information of all classes and subclasses including namespace and includes
" try to find the method's return type in docblock comment " try to find the method's return type in docblock comment
for classstructure in classcontents for classstructure in classcontents
let docblock_target_pattern = 'function\s\+&\?'.method.'\|\(public\|private\|protected\|var\).\+\$'.method let docblock_target_pattern = 'function\s\+&\?'.method.'\>\|\(public\|private\|protected\|var\).\+\$'.method.'\>\|@property.\+\$'.method.'\>'
let doc_str = phpcomplete#GetDocBlock(split(classstructure.content, '\n'), docblock_target_pattern) let doc_str = phpcomplete#GetDocBlock(split(classstructure.content, '\n'), docblock_target_pattern)
if doc_str != '' if doc_str != ''
break break
@@ -1387,8 +1399,17 @@ function! phpcomplete#GetCallChainReturnType(classname_candidate, class_candidat
endfor endfor
if doc_str != '' if doc_str != ''
let docblock = phpcomplete#ParseDocBlock(doc_str) let docblock = phpcomplete#ParseDocBlock(doc_str)
if has_key(docblock.return, 'type') || has_key(docblock.var, 'type') if has_key(docblock.return, 'type') || has_key(docblock.var, 'type') || len(docblock.properties) > 0
let type = has_key(docblock.return, 'type') ? docblock.return.type : docblock.var.type let type = has_key(docblock.return, 'type') ? docblock.return.type : has_key(docblock.var, 'type') ? docblock.var.type : ''
if type == ''
for property in docblock.properties
if property.description =~? method
let type = property.type
break
endif
endfor
endif
" there's a namespace in the type, threat the type as FQCN " there's a namespace in the type, threat the type as FQCN
if type =~ '\\' if type =~ '\\'
@@ -1554,6 +1575,9 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
elseif get(methodstack, 0) =~# function_invocation_pattern elseif get(methodstack, 0) =~# function_invocation_pattern
let function_name = matchstr(methodstack[0], '^\s*\zs'.function_name_pattern) let function_name = matchstr(methodstack[0], '^\s*\zs'.function_name_pattern)
let function_file = phpcomplete#GetFunctionLocation(function_name, a:current_namespace) let function_file = phpcomplete#GetFunctionLocation(function_name, a:current_namespace)
if function_file == ''
let function_file = phpcomplete#GetFunctionLocation(function_name, '\')
endif
if function_file == 'VIMPHP_BUILTINFUNCTION' if function_file == 'VIMPHP_BUILTINFUNCTION'
" built in function, grab the return type from the info string " built in function, grab the return type from the info string
@@ -1569,7 +1593,7 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines) let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines)
" try to expand the classname of the returned type with the context got from the function's source file " try to expand the classname of the returned type with the context got from the function's source file
let [classname_candidate, unused] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports) let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
endif endif
endif endif
if classname_candidate != '' if classname_candidate != ''
@@ -1650,9 +1674,10 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
let sub_methodstack = phpcomplete#GetMethodStack(matchstr(line, '^\s*'.object.'\s*=&\?\s*\s\+\zs.*')) let sub_methodstack = phpcomplete#GetMethodStack(matchstr(line, '^\s*'.object.'\s*=&\?\s*\s\+\zs.*'))
let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType( let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(
\ classname, \ classname,
\ a:current_namespace, \ namespace_for_class,
\ a:imports, \ a:imports,
\ sub_methodstack) \ sub_methodstack)
return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate
endif endif
endif endif
@@ -1783,6 +1808,9 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
let [function_name, function_namespace] = phpcomplete#ExpandClassName(function_name, a:current_namespace, a:imports) let [function_name, function_namespace] = phpcomplete#ExpandClassName(function_name, a:current_namespace, a:imports)
let function_file = phpcomplete#GetFunctionLocation(function_name, function_namespace) let function_file = phpcomplete#GetFunctionLocation(function_name, function_namespace)
if function_file == ''
let function_file = phpcomplete#GetFunctionLocation(function_name, '\')
endif
if function_file == 'VIMPHP_BUILTINFUNCTION' if function_file == 'VIMPHP_BUILTINFUNCTION'
" built in function, grab the return type from the info string " built in function, grab the return type from the info string
@@ -1798,7 +1826,7 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
let classname_candidate = docblock.return.type let classname_candidate = docblock.return.type
let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines) let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines)
" try to expand the classname of the returned type with the context got from the function's source file " try to expand the classname of the returned type with the context got from the function's source file
let [classname_candidate, unused] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports) let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
break break
endif endif
endif endif
@@ -1861,6 +1889,8 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
for tag in tags for tag in tags
if tag.kind ==? 'v' && tag.cmd =~? '=\s*new\s\+\zs'.class_name_pattern.'\ze' if tag.kind ==? 'v' && tag.cmd =~? '=\s*new\s\+\zs'.class_name_pattern.'\ze'
let classname = matchstr(tag.cmd, '=\s*new\s\+\zs'.class_name_pattern.'\ze') let classname = matchstr(tag.cmd, '=\s*new\s\+\zs'.class_name_pattern.'\ze')
" unescape the classname, it would have "\" doubled since it is an ex command
let classname = substitute(classname, '\\\(\_.\)', '\1', 'g')
return classname return classname
endif endif
endfor endfor
@@ -2077,6 +2107,19 @@ function! phpcomplete#GetClassContentsStructure(file_path, file_lines, class_nam
endif endif
call searchpair('{', '', '}', 'W') call searchpair('{', '', '}', 'W')
let class_closing_bracket_line = line('.') let class_closing_bracket_line = line('.')
" Include class docblock
let doc_line = cfline - 1
if getline(doc_line) =~? '^\s*\*/'
while doc_line != 0
if getline(doc_line) =~? '^\s*/\*\*'
let cfline = doc_line
break
endif
let doc_line -= 1
endwhile
endif
let classcontent = join(getline(cfline, class_closing_bracket_line), "\n") let classcontent = join(getline(cfline, class_closing_bracket_line), "\n")
let used_traits = [] let used_traits = []
@@ -2241,8 +2284,19 @@ function! phpcomplete#GetDocBlock(sccontent, search) " {{{
let line = a:sccontent[i] let line = a:sccontent[i]
" search for a function declaration " search for a function declaration
if line =~? a:search if line =~? a:search
if line =~? '@property'
let doc_line = i
while doc_line != sccontent_len - 1
if a:sccontent[doc_line] =~? '^\s*\*/'
let l = doc_line
break
endif
let doc_line += 1
endwhile
else
let l = i - 1 let l = i - 1
" start backward serch for the comment block endif
" start backward search for the comment block
while l != 0 while l != 0
let line = a:sccontent[l] let line = a:sccontent[l]
" if it's a one line docblock like comment and we can just return it right away " if it's a one line docblock like comment and we can just return it right away
@@ -2263,7 +2317,7 @@ function! phpcomplete#GetDocBlock(sccontent, search) " {{{
return '' return ''
end end
while l != 0 while l >= 0
let line = a:sccontent[l] let line = a:sccontent[l]
if line =~? '^\s*/\*\*' if line =~? '^\s*/\*\*'
let comment_start = l let comment_start = l
@@ -2297,9 +2351,10 @@ function! phpcomplete#ParseDocBlock(docblock) " {{{
\ 'return': {}, \ 'return': {},
\ 'throws': [], \ 'throws': [],
\ 'var': {}, \ 'var': {},
\ 'properties': [],
\ } \ }
let res.description = substitute(matchstr(a:docblock, '\zs\_.\{-}\ze\(@var\|@param\|@return\|$\)'), '\(^\_s*\|\_s*$\)', '', 'g') let res.description = substitute(matchstr(a:docblock, '\zs\_.\{-}\ze\(@type\|@var\|@param\|@return\|$\)'), '\(^\_s*\|\_s*$\)', '', 'g')
let docblock_lines = split(a:docblock, "\n") let docblock_lines = split(a:docblock, "\n")
let param_lines = filter(copy(docblock_lines), 'v:val =~? "^@param"') let param_lines = filter(copy(docblock_lines), 'v:val =~? "^@param"')
@@ -2334,15 +2389,26 @@ function! phpcomplete#ParseDocBlock(docblock) " {{{
endif endif
endfor endfor
let var_line = filter(copy(docblock_lines), 'v:val =~? "^@var"') let var_line = filter(copy(docblock_lines), 'v:val =~? "^\\(@var\\|@type\\)"')
if len(var_line) > 0 if len(var_line) > 0
let var_parts = matchlist(var_line[0], '@var\s\+\(\S\+\)\s*\(.*\)') let var_parts = matchlist(var_line[0], '\(@var\|@type\)\s\+\(\S\+\)\s*\(.*\)')
let res['var'] = { let res['var'] = {
\ 'line': var_parts[0], \ 'line': var_parts[0],
\ 'type': phpcomplete#GetTypeFromDocBlockParam(get(var_parts, 1, '')), \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(var_parts, 2, '')),
\ 'description': get(var_parts, 2, '')} \ 'description': get(var_parts, 3, '')}
endif endif
let property_lines = filter(copy(docblock_lines), 'v:val =~? "^@property"')
for property_line in property_lines
let parts = matchlist(property_line, '\(@property\)\s\+\(\S\+\)\s*\(.*\)')
if len(parts) > 0
call add(res.properties, {
\ 'line': parts[0],
\ 'type': phpcomplete#GetTypeFromDocBlockParam(get(parts, 2, '')),
\ 'description': get(parts, 3, '')})
endif
endfor
return res return res
endfunction endfunction
" }}} " }}}
@@ -2498,6 +2564,7 @@ function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{
let name = matchstr(name, '\\\zs[^\\]\+\ze$') let name = matchstr(name, '\\\zs[^\\]\+\ze$')
endif endif
endif endif
" leading slash is not required use imports are always absolute " leading slash is not required use imports are always absolute
let imports[name] = {'name': object, 'kind': ''} let imports[name] = {'name': object, 'kind': ''}
endfor endfor
@@ -2533,6 +2600,7 @@ function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{
elseif !exists('no_namespace_candidate') elseif !exists('no_namespace_candidate')
" save the first namespacless match to be used if no better " save the first namespacless match to be used if no better
" candidate found later on " candidate found later on
let tag.namespace = namespace_for_classes
let no_namespace_candidate = tag let no_namespace_candidate = tag
endif endif
endif endif

View File

@@ -22,43 +22,75 @@ function! s:try_cmd(cmd, ...)
let argv = split(a:cmd, " ") let argv = split(a:cmd, " ")
let out = a:0 ? systemlist(argv, a:1, 1) : systemlist(argv, [''], 1) let out = a:0 ? systemlist(argv, a:1, 1) : systemlist(argv, [''], 1)
if v:shell_error if v:shell_error
if !exists('s:did_error_try_cmd')
echohl WarningMsg echohl WarningMsg
echo "clipboard: error: ".(len(out) ? out[0] : '') echomsg "clipboard: error: ".(len(out) ? out[0] : '')
echohl None echohl None
let s:did_error_try_cmd = 1
endif
return 0 return 0
endif endif
return out return out
endfunction endfunction
" Returns TRUE if `cmd` exits with success, else FALSE.
function! s:cmd_ok(cmd)
call system(a:cmd)
return v:shell_error == 0
endfunction
let s:cache_enabled = 1 let s:cache_enabled = 1
if executable('pbcopy') let s:err = ''
function! provider#clipboard#Error() abort
return s:err
endfunction
function! provider#clipboard#Executable() abort
if has('mac') && executable('pbcopy')
let s:copy['+'] = 'pbcopy' let s:copy['+'] = 'pbcopy'
let s:paste['+'] = 'pbpaste' let s:paste['+'] = 'pbpaste'
let s:copy['*'] = s:copy['+'] let s:copy['*'] = s:copy['+']
let s:paste['*'] = s:paste['+'] let s:paste['*'] = s:paste['+']
let s:cache_enabled = 0 let s:cache_enabled = 0
elseif exists('$DISPLAY') && executable('xsel') return 'pbcopy'
elseif exists('$DISPLAY') && executable('xsel') && s:cmd_ok('xsel -o -b')
let s:copy['+'] = 'xsel --nodetach -i -b' let s:copy['+'] = 'xsel --nodetach -i -b'
let s:paste['+'] = 'xsel -o -b' let s:paste['+'] = 'xsel -o -b'
let s:copy['*'] = 'xsel --nodetach -i -p' let s:copy['*'] = 'xsel --nodetach -i -p'
let s:paste['*'] = 'xsel -o -p' let s:paste['*'] = 'xsel -o -p'
return 'xsel'
elseif exists('$DISPLAY') && executable('xclip') elseif exists('$DISPLAY') && executable('xclip')
let s:copy['+'] = 'xclip -quiet -i -selection clipboard' let s:copy['+'] = 'xclip -quiet -i -selection clipboard'
let s:paste['+'] = 'xclip -o -selection clipboard' let s:paste['+'] = 'xclip -o -selection clipboard'
let s:copy['*'] = 'xclip -quiet -i -selection primary' let s:copy['*'] = 'xclip -quiet -i -selection primary'
let s:paste['*'] = 'xclip -o -selection primary' let s:paste['*'] = 'xclip -o -selection primary'
return 'xclip'
elseif executable('lemonade') elseif executable('lemonade')
let s:copy['+'] = 'lemonade copy' let s:copy['+'] = 'lemonade copy'
let s:paste['+'] = 'lemonade paste' let s:paste['+'] = 'lemonade paste'
let s:copy['*'] = 'lemonade copy' let s:copy['*'] = 'lemonade copy'
let s:paste['*'] = 'lemonade paste' let s:paste['*'] = 'lemonade paste'
return 'lemonade'
elseif executable('doitclient') elseif executable('doitclient')
let s:copy['+'] = 'doitclient wclip' let s:copy['+'] = 'doitclient wclip'
let s:paste['+'] = 'doitclient wclip -r' let s:paste['+'] = 'doitclient wclip -r'
let s:copy['*'] = s:copy['+'] let s:copy['*'] = s:copy['+']
let s:paste['*'] = s:paste['+'] let s:paste['*'] = s:paste['+']
else return 'doitclient'
echom 'clipboard: No clipboard tool available. See :help clipboard' elseif executable('win32yank')
let s:copy['+'] = 'win32yank -i --crlf'
let s:paste['+'] = 'win32yank -o --lf'
let s:copy['*'] = s:copy['+']
let s:paste['*'] = s:paste['+']
return 'win32yank'
endif
let s:err = 'clipboard: No clipboard tool available. :help clipboard'
return ''
endfunction
if empty(provider#clipboard#Executable())
finish finish
endif endif

View File

@@ -1,5 +1,5 @@
" The Python provider uses a Python host to emulate an environment for running " The Python provider uses a Python host to emulate an environment for running
" python-vim plugins. See ":help provider". " python-vim plugins. :help provider
" "
" Associating the plugin with the Python host is the first step because plugins " Associating the plugin with the Python host is the first step because plugins
" will be passed as command-line arguments " will be passed as command-line arguments

View File

@@ -1,5 +1,5 @@
" The Python3 provider uses a Python3 host to emulate an environment for running " The Python3 provider uses a Python3 host to emulate an environment for running
" python3 plugins. See ":help provider". " python3 plugins. :help provider
" "
" Associating the plugin with the Python3 host is the first step because " Associating the plugin with the Python3 host is the first step because
" plugins will be passed as command-line arguments " plugins will be passed as command-line arguments

View File

@@ -47,32 +47,28 @@ function! provider#pythonx#Require(host) abort
endfunction endfunction
function! provider#pythonx#Detect(major_ver) abort function! provider#pythonx#Detect(major_ver) abort
let host_var = (a:major_ver == 2) ? if a:major_ver == 2
\ 'g:python_host_prog' : 'g:python3_host_prog' if exists('g:python_host_prog')
let skip_var = (a:major_ver == 2) ? return [g:python_host_prog, '']
\ 'g:python_host_skip_check' : 'g:python3_host_skip_check' else
let skip = exists(skip_var) ? {skip_var} : 0 let progs = ['python2', 'python2.7', 'python2.6', 'python']
if exists(host_var) endif
" Disable auto detection. else
let [result, err] = s:check_interpreter({host_var}, a:major_ver, skip) if exists('g:python3_host_prog')
if result return [g:python3_host_prog, '']
return [{host_var}, err] else
let progs = ['python3', 'python3.7', 'python3.6', 'python3.5',
\ 'python3.4', 'python3.3', 'python']
endif endif
return ['', 'provider/pythonx: Could not load Python ' . a:major_ver
\ . ' from ' . host_var . ': ' . err]
endif endif
let prog_suffixes = (a:major_ver == 2) ?
\ ['2', '2.7', '2.6', '']
\ : ['3', '3.5', '3.4', '3.3', '']
let errors = [] let errors = []
for prog in map(prog_suffixes, "'python' . v:val")
let [result, err] = s:check_interpreter(prog, a:major_ver, skip) for prog in progs
let [result, err] = s:check_interpreter(prog, a:major_ver)
if result if result
return [prog, err] return [prog, err]
endif endif
" Accumulate errors in case we don't find " Accumulate errors in case we don't find
" any suitable Python interpreter. " any suitable Python interpreter.
call add(errors, err) call add(errors, err)
@@ -83,16 +79,12 @@ function! provider#pythonx#Detect(major_ver) abort
\ . ":\n" . join(errors, "\n")] \ . ":\n" . join(errors, "\n")]
endfunction endfunction
function! s:check_interpreter(prog, major_ver, skip) abort function! s:check_interpreter(prog, major_ver) abort
let prog_path = exepath(a:prog) let prog_path = exepath(a:prog)
if prog_path ==# '' if prog_path ==# ''
return [0, a:prog . ' not found in search path or not executable.'] return [0, a:prog . ' not found in search path or not executable.']
endif endif
if a:skip
return [1, '']
endif
let min_version = (a:major_ver == 2) ? '2.6' : '3.3' let min_version = (a:major_ver == 2) ? '2.6' : '3.3'
" Try to load neovim module, and output Python version. " Try to load neovim module, and output Python version.
@@ -120,15 +112,14 @@ function! s:check_interpreter(prog, major_ver, skip) abort
endif endif
if v:shell_error == 2 if v:shell_error == 2
return [0, prog_path . ' does not have the neovim module installed. ' return [0, prog_path.' does not have the "neovim" module. :help provider-python']
\ . 'See ":help provider-python".']
elseif v:shell_error == 127 elseif v:shell_error == 127
" This can happen with pyenv's shims. " This can happen with pyenv's shims.
return [0, prog_path . ' does not exist: ' . prog_ver] return [0, prog_path . ' does not exist: ' . prog_ver]
elseif v:shell_error elseif v:shell_error
return [0, 'Checking ' . prog_path . ' caused an unknown error. ' return [0, 'Checking ' . prog_path . ' caused an unknown error. '
\ . '(' . v:shell_error . ', output: ' . prog_ver . ')' \ . '(' . v:shell_error . ', output: ' . prog_ver . ')'
\ . ' Please report this at github.com/neovim/neovim.'] \ . ' Report this at https://github.com/neovim/neovim']
endif endif
return [1, ''] return [1, '']

View File

@@ -2,7 +2,6 @@ let s:hosts = {}
let s:plugin_patterns = {} let s:plugin_patterns = {}
let s:plugins_for_host = {} let s:plugins_for_host = {}
" Register a host by associating it with a factory(funcref) " Register a host by associating it with a factory(funcref)
function! remote#host#Register(name, pattern, factory) abort function! remote#host#Register(name, pattern, factory) abort
let s:hosts[a:name] = {'factory': a:factory, 'channel': 0, 'initialized': 0} let s:hosts[a:name] = {'factory': a:factory, 'channel': 0, 'initialized': 0}
@@ -13,7 +12,6 @@ function! remote#host#Register(name, pattern, factory) abort
endif endif
endfunction endfunction
" Register a clone to an existing host. The new host will use the same factory " Register a clone to an existing host. The new host will use the same factory
" as `source`, but it will run as a different process. This can be used by " as `source`, but it will run as a different process. This can be used by
" plugins that should run isolated from other plugins created for the same host " plugins that should run isolated from other plugins created for the same host
@@ -31,12 +29,8 @@ function! remote#host#RegisterClone(name, orig_name) abort
\ } \ }
endfunction endfunction
" Get a host channel, bootstrapping it if necessary " Get a host channel, bootstrapping it if necessary
function! remote#host#Require(name) abort function! remote#host#Require(name) abort
if empty(s:plugins_for_host)
call remote#host#LoadRemotePlugins()
endif
if !has_key(s:hosts, a:name) if !has_key(s:hosts, a:name)
throw 'No host named "'.a:name.'" is registered' throw 'No host named "'.a:name.'" is registered'
endif endif
@@ -52,7 +46,6 @@ function! remote#host#Require(name) abort
return host.channel return host.channel
endfunction endfunction
function! remote#host#IsRunning(name) abort function! remote#host#IsRunning(name) abort
if !has_key(s:hosts, a:name) if !has_key(s:hosts, a:name)
throw 'No host named "'.a:name.'" is registered' throw 'No host named "'.a:name.'" is registered'
@@ -60,7 +53,6 @@ function! remote#host#IsRunning(name) abort
return s:hosts[a:name].channel != 0 return s:hosts[a:name].channel != 0
endfunction endfunction
" Example of registering a Python plugin with two commands (one async), one " Example of registering a Python plugin with two commands (one async), one
" autocmd (async) and one function (sync): " autocmd (async) and one function (sync):
" "
@@ -117,73 +109,6 @@ function! remote#host#RegisterPlugin(host, path, specs) abort
call add(plugins, {'path': a:path, 'specs': a:specs}) call add(plugins, {'path': a:path, 'specs': a:specs})
endfunction endfunction
" Get the path to the rplugin manifest file.
function! s:GetManifestPath() abort
let manifest_base = ''
if exists('$NVIM_RPLUGIN_MANIFEST')
return fnamemodify($NVIM_RPLUGIN_MANIFEST, ':p')
endif
let dest = has('win32') ? '$LOCALAPPDATA' : '$XDG_DATA_HOME'
if !exists(dest)
let dest = has('win32') ? '~/AppData/Local' : '~/.local/share'
endif
let dest = fnamemodify(expand(dest), ':p')
if !empty(dest) && !filereadable(dest)
let dest .= ('/' ==# dest[-1:] ? '' : '/') . 'nvim'
call mkdir(dest, 'p', 0700)
let manifest_base = dest
endif
return manifest_base.'/rplugin.vim'
endfunction
" Old manifest file based on known script locations.
function! s:GetOldManifestPath() abort
let prefix = exists('$MYVIMRC')
\ ? $MYVIMRC
\ : matchstr(get(split(execute('scriptnames'), '\n'), 0, ''), '\f\+$')
return fnamemodify(expand(prefix, 1), ':h')
\.'/.'.fnamemodify(prefix, ':t').'-rplugin~'
endfunction
function! s:GetManifest() abort
let manifest = s:GetManifestPath()
if !filereadable(manifest)
" Check if an old manifest file exists and move it to the new location.
let old_manifest = s:GetOldManifestPath()
if filereadable(old_manifest)
call rename(old_manifest, manifest)
endif
endif
return manifest
endfunction
function! remote#host#LoadRemotePlugins() abort
let manifest = s:GetManifest()
if filereadable(manifest)
execute 'source' fnameescape(manifest)
endif
endfunction
function! remote#host#LoadRemotePluginsEvent(event, pattern) abort
autocmd! nvim-rplugin
call remote#host#LoadRemotePlugins()
if exists('#'.a:event.'#'.a:pattern) " Avoid 'No matching autocommands'.
execute 'silent doautocmd <nomodeline>' a:event a:pattern
endif
endfunction
function! s:RegistrationCommands(host) abort function! s:RegistrationCommands(host) abort
" Register a temporary host clone for discovering specs " Register a temporary host clone for discovering specs
let host_id = a:host.'-registration-clone' let host_id = a:host.'-registration-clone'
@@ -228,7 +153,6 @@ function! s:RegistrationCommands(host) abort
return lines return lines
endfunction endfunction
function! remote#host#UpdateRemotePlugins() abort function! remote#host#UpdateRemotePlugins() abort
let commands = [] let commands = []
let hosts = keys(s:hosts) let hosts = keys(s:hosts)
@@ -245,12 +169,11 @@ function! remote#host#UpdateRemotePlugins() abort
endtry endtry
endif endif
endfor endfor
call writefile(commands, s:GetManifest()) call writefile(commands, g:loaded_remote_plugins)
echomsg printf('remote/host: generated rplugin manifest: %s', echomsg printf('remote/host: generated rplugin manifest: %s',
\ s:GetManifest()) \ g:loaded_remote_plugins)
endfunction endfunction
function! remote#host#PluginsForHost(host) abort function! remote#host#PluginsForHost(host) abort
if !has_key(s:plugins_for_host, a:host) if !has_key(s:plugins_for_host, a:host)
let s:plugins_for_host[a:host] = [] let s:plugins_for_host[a:host] = []
@@ -258,7 +181,6 @@ function! remote#host#PluginsForHost(host) abort
return s:plugins_for_host[a:host] return s:plugins_for_host[a:host]
endfunction endfunction
function! remote#host#LoadErrorForHost(host, log) abort function! remote#host#LoadErrorForHost(host, log) abort
return 'Failed to load '. a:host . ' host. '. return 'Failed to load '. a:host . ' host. '.
\ 'You can try to see what happened by starting nvim with '. \ 'You can try to see what happened by starting nvim with '.
@@ -266,7 +188,6 @@ function! remote#host#LoadErrorForHost(host, log) abort
\ ' Also, the host stderr is available in messages.' \ ' Also, the host stderr is available in messages.'
endfunction endfunction
" Registration of standard hosts " Registration of standard hosts
" Python/Python3 " Python/Python3

View File

@@ -93,7 +93,7 @@ function! s:GetBufferRubyEntity( name, type, ... )
let stopline = 1 let stopline = 1
let crex = '^\s*\<' . a:type . '\>\s*\<' . a:name . '\>\s*\(<\s*.*\s*\)\?' let crex = '^\s*\<' . a:type . '\>\s*\<' . escape(a:name, '*') . '\>\s*\(<\s*.*\s*\)\?'
let [lnum,lcol] = searchpos( crex, 'w' ) let [lnum,lcol] = searchpos( crex, 'w' )
"let [lnum,lcol] = searchpairpos( crex . '\zs', '', '\(end\|}\)', 'w' ) "let [lnum,lcol] = searchpairpos( crex . '\zs', '', '\(end\|}\)', 'w' )
@@ -149,7 +149,7 @@ function! s:GetRubyVarType(v)
let ctors = ctors.'\)' let ctors = ctors.'\)'
let fstr = '=\s*\([^ \t]\+.' . ctors .'\>\|[\[{"''/]\|%[xwQqr][(\[{@]\|[A-Za-z0-9@:\-()\.]\+...\?\|lambda\|&\)' let fstr = '=\s*\([^ \t]\+.' . ctors .'\>\|[\[{"''/]\|%[xwQqr][(\[{@]\|[A-Za-z0-9@:\-()\.]\+...\?\|lambda\|&\)'
let sstr = ''.a:v.'\>\s*[+\-*/]*'.fstr let sstr = ''.escape(a:v, '*').'\>\s*[+\-*/]*'.fstr
let [lnum,lcol] = searchpos(sstr,'nb',stopline) let [lnum,lcol] = searchpos(sstr,'nb',stopline)
if lnum != 0 && lcol != 0 if lnum != 0 && lcol != 0
let str = matchstr(getline(lnum),fstr,lcol) let str = matchstr(getline(lnum),fstr,lcol)
@@ -196,7 +196,7 @@ function! rubycomplete#Complete(findstart, base)
if c =~ '\w' if c =~ '\w'
continue continue
elseif ! c =~ '\.' elseif ! c =~ '\.'
idx = -1 let idx = -1
break break
else else
break break
@@ -266,6 +266,28 @@ class VimRubyCompletion
end end
end end
def load_gems
fpath = VIM::evaluate("get(g:, 'rubycomplete_gemfile_path', 'Gemfile')")
return unless File.file?(fpath) && File.readable?(fpath)
want_bundler = VIM::evaluate("get(g:, 'rubycomplete_use_bundler')")
parse_file = !want_bundler
begin
require 'bundler'
Bundler.setup
Bundler.require
rescue Exception
parse_file = true
end
if parse_file
File.new(fpath).each_line do |line|
begin
require $1 if /\s*gem\s*['"]([^'"]+)/.match(line)
rescue Exception
end
end
end
end
def load_buffer_class(name) def load_buffer_class(name)
dprint "load_buffer_class(%s) START" % name dprint "load_buffer_class(%s) START" % name
classdef = get_buffer_entity(name, 's:GetBufferRubyClass("%s")') classdef = get_buffer_entity(name, 's:GetBufferRubyClass("%s")')
@@ -588,6 +610,10 @@ class VimRubyCompletion
load_rails load_rails
end end
want_gems = VIM::evaluate("get(g:, 'rubycomplete_load_gemfile')")
load_gems unless want_gems.to_i.zero?
input = VIM::Buffer.current.line input = VIM::Buffer.current.line
cpos = VIM::Window.current.cursor[1] - 1 cpos = VIM::Window.current.cursor[1] - 1
input = input[0..cpos] input = input[0..cpos]
@@ -678,7 +704,9 @@ class VimRubyCompletion
cv = eval("self.class.constants") cv = eval("self.class.constants")
vartype = get_var_type( receiver ) vartype = get_var_type( receiver )
dprint "vartype: %s" % vartype dprint "vartype: %s" % vartype
if vartype != ''
invalid_vartype = ['', "gets"]
if !invalid_vartype.include?(vartype)
load_buffer_class( vartype ) load_buffer_class( vartype )
begin begin
@@ -706,7 +734,7 @@ class VimRubyCompletion
methods.concat m.instance_methods(false) methods.concat m.instance_methods(false)
} }
end end
variables += add_rails_columns( "#{vartype}" ) if vartype && vartype.length > 0 variables += add_rails_columns( "#{vartype}" ) if vartype && !invalid_vartype.include?(vartype)
when /^\(?\s*[A-Za-z0-9:^@.%\/+*\(\)]+\.\.\.?[A-Za-z0-9:^@.%\/+*\(\)]+\s*\)?\.([^.]*)/ when /^\(?\s*[A-Za-z0-9:^@.%\/+*\(\)]+\.\.\.?[A-Za-z0-9:^@.%\/+*\(\)]+\s*\)?\.([^.]*)/
message = $1 message = $1

View File

@@ -241,8 +241,6 @@ function s:shada_check_type(type, val) abort
if msg isnot# 0 if msg isnot# 0
return msg return msg
endif endif
if a:val > 0 || a:val < 1
endif
return 0 return 0
elseif a:type is# 'binarray' elseif a:type is# 'binarray'
if type isnot# 'array' if type isnot# 'array'
@@ -359,9 +357,14 @@ function s:shada_string(type, v) abort
if (has_key(s:SHADA_ENUMS, a:type) && type(a:v) == type(0) if (has_key(s:SHADA_ENUMS, a:type) && type(a:v) == type(0)
\&& has_key(s:SHADA_REV_ENUMS[a:type], a:v)) \&& has_key(s:SHADA_REV_ENUMS[a:type], a:v))
return s:SHADA_REV_ENUMS[a:type][a:v] return s:SHADA_REV_ENUMS[a:type][a:v]
elseif (a:type is# 'intchar' && type(a:v) == type(0) " Restricting a:v to be <= 127 is not necessary, but intchar constants are
\&& strtrans(nr2char(a:v)) is# nr2char(a:v)) " normally expected to be either ASCII printable characters or NUL.
elseif a:type is# 'intchar' && type(a:v) == type(0) && a:v >= 0 && a:v <= 127
if a:v > 0 && strtrans(nr2char(a:v)) is# nr2char(a:v)
return "'" . nr2char(a:v) . "'" return "'" . nr2char(a:v) . "'"
else
return "'\\" . a:v . "'"
endif
else else
return msgpack#string(a:v) return msgpack#string(a:v)
endif endif

View File

@@ -117,7 +117,7 @@ fun! tar#Browse(tarfile)
if !filereadable(a:tarfile) if !filereadable(a:tarfile)
" call Decho('a:tarfile<'.a:tarfile.'> not filereadable') " call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
if a:tarfile !~# '^\a\+://' if a:tarfile !~# '^\a\+://'
" if its an url, don't complain, let url-handlers such as vim do its thing " if it's an url, don't complain, let url-handlers such as vim do its thing
redraw! redraw!
echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
endif endif

View File

@@ -140,7 +140,7 @@ endfunction
" Job handler that simply forwards lines to the parser. " Job handler that simply forwards lines to the parser.
function! s:JobOutput(id, lines) function! s:JobOutput(_id, lines, _event) dict
call self._parser.feed(a:lines) call self._parser.feed(a:lines)
endfunction endfunction

View File

@@ -1,7 +1,7 @@
" zip.vim: Handles browsing zipfiles " zip.vim: Handles browsing zipfiles
" AUTOLOAD PORTION " AUTOLOAD PORTION
" Date: Jul 02, 2013 " Date: Sep 13, 2016
" Version: 27 " Version: 28
" Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM> " Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
" License: Vim License (see vim's :help license) " License: Vim License (see vim's :help license)
" Copyright: Copyright (C) 2005-2013 Charles E. Campbell {{{1 " Copyright: Copyright (C) 2005-2013 Charles E. Campbell {{{1
@@ -20,10 +20,10 @@
if &cp || exists("g:loaded_zip") if &cp || exists("g:loaded_zip")
finish finish
endif endif
let g:loaded_zip= "v27" let g:loaded_zip= "v28"
if v:version < 702 if v:version < 702
echohl WarningMsg echohl WarningMsg
echo "***warning*** this version of zip needs vim 7.2" echo "***warning*** this version of zip needs vim 7.2 or later"
echohl Normal echohl Normal
finish finish
endif endif
@@ -53,6 +53,9 @@ endif
if !exists("g:zip_unzipcmd") if !exists("g:zip_unzipcmd")
let g:zip_unzipcmd= "unzip" let g:zip_unzipcmd= "unzip"
endif endif
if !exists("g:zip_extractcmd")
let g:zip_extractcmd= g:zip_unzipcmd
endif
" ---------------- " ----------------
" Functions: {{{1 " Functions: {{{1
@@ -62,14 +65,14 @@ endif
" zip#Browse: {{{2 " zip#Browse: {{{2
fun! zip#Browse(zipfile) fun! zip#Browse(zipfile)
" call Dfunc("zip#Browse(zipfile<".a:zipfile.">)") " call Dfunc("zip#Browse(zipfile<".a:zipfile.">)")
" sanity check: insure that the zipfile has "PK" as its first two letters " sanity check: ensure that the zipfile has "PK" as its first two letters
" (zipped files have a leading PK as a "magic cookie") " (zipped files have a leading PK as a "magic cookie")
if !filereadable(a:zipfile) || readfile(a:zipfile, "", 1)[0] !~ '^PK' if !filereadable(a:zipfile) || readfile(a:zipfile, "", 1)[0] !~ '^PK'
exe "noautocmd e ".fnameescape(a:zipfile) exe "noautocmd e ".fnameescape(a:zipfile)
" call Dret("zip#Browse : not a zipfile<".a:zipfile.">") " call Dret("zip#Browse : not a zipfile<".a:zipfile.">")
return return
" else " Decho " else " Decho
" call Decho("zip#Browse: a:zipfile<".a:zipfile."> passed PK test - its a zip file") " call Decho("zip#Browse: a:zipfile<".a:zipfile."> passed PK test - it's a zip file")
endif endif
let repkeep= &report let repkeep= &report
@@ -92,7 +95,7 @@ fun! zip#Browse(zipfile)
endif endif
if !filereadable(a:zipfile) if !filereadable(a:zipfile)
if a:zipfile !~# '^\a\+://' if a:zipfile !~# '^\a\+://'
" if its an url, don't complain, let url-handlers such as vim do its thing " if it's an url, don't complain, let url-handlers such as vim do its thing
redraw! redraw!
echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore() " call inputsave()|call input("Press <cr> to continue")|call inputrestore()
@@ -136,8 +139,10 @@ fun! zip#Browse(zipfile)
return return
endif endif
" Maps associated with zip plugin
setlocal noma nomod ro setlocal noma nomod ro
noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr> noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
noremap <silent> <buffer> x :call zip#Extract()<cr>
let &report= repkeep let &report= repkeep
" call Dret("zip#Browse") " call Dret("zip#Browse")
@@ -204,6 +209,15 @@ fun! zip#Read(fname,mode)
endif endif
" call Decho("zipfile<".zipfile.">") " call Decho("zipfile<".zipfile.">")
" call Decho("fname <".fname.">") " call Decho("fname <".fname.">")
" sanity check
if !executable(substitute(g:zip_unzipcmd,'\s\+.*$','',''))
redraw!
echohl Error | echo "***error*** (zip#Read) sorry, your system doesn't appear to have the ".g:zip_unzipcmd." program" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("zip#Write")
return
endif
" the following code does much the same thing as " the following code does much the same thing as
" exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1) " exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1)
@@ -236,9 +250,9 @@ fun! zip#Write(fname)
set report=10 set report=10
" sanity checks " sanity checks
if !executable(g:zip_zipcmd) if !executable(substitute(g:zip_zipcmd,'\s\+.*$','',''))
redraw! redraw!
echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the zip pgm" | echohl None echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the ".g:zip_zipcmd." program" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore() " call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep let &report= repkeep
" call Dret("zip#Write") " call Dret("zip#Write")
@@ -344,6 +358,48 @@ fun! zip#Write(fname)
" call Dret("zip#Write") " call Dret("zip#Write")
endfun endfun
" ---------------------------------------------------------------------
" zip#Extract: extract a file from a zip archive {{{2
fun! zip#Extract()
" call Dfunc("zip#Extract()")
let repkeep= &report
set report=10
let fname= getline(".")
" call Decho("fname<".fname.">")
" sanity check
if fname =~ '^"'
let &report= repkeep
" call Dret("zip#Extract")
return
endif
if fname =~ '/$'
redraw!
echohl Error | echo "***error*** (zip#Extract) Please specify a file, not a directory" | echohl None
let &report= repkeep
" call Dret("zip#Extract")
return
endif
" extract the file mentioned under the cursor
" call Decho("system(".g:zip_extractcmd." ".shellescape(b:zipfile)." ".shellescape(shell).")")
call system(g:zip_extractcmd." ".shellescape(b:zipfile)." ".shellescape(shell))
" call Decho("zipfile<".b:zipfile.">")
if v:shell_error != 0
echohl Error | echo "***error*** ".g:zip_extractcmd." ".b:zipfile." ".fname.": failed!" | echohl NONE
elseif !filereadable(fname)
echohl Error | echo "***error*** attempted to extract ".fname." but it doesn't appear to be present!"
else
echo "***note*** successfully extracted ".fname
endif
" restore option
let &report= repkeep
" call Dret("zip#Extract")
endfun
" --------------------------------------------------------------------- " ---------------------------------------------------------------------
" s:Escape: {{{2 " s:Escape: {{{2
fun! s:Escape(fname,isfilt) fun! s:Escape(fname,isfilt)

View File

@@ -41,9 +41,16 @@ this autocmd might be useful:
autocmd SourcePre */colors/blue_sky.vim set background=dark autocmd SourcePre */colors/blue_sky.vim set background=dark
Replace "blue_sky" with the name of the colorscheme. Replace "blue_sky" with the name of the colorscheme.
In case you want to tweak a colorscheme after it was loaded, check out that In case you want to tweak a colorscheme after it was loaded, check out the
ColorScheme autocmd event. ColorScheme autocmd event.
To customize a colorscheme use another name, e.g. "~/.vim/colors/mine.vim",
and use `:runtime` to load the original colorscheme:
" load the "evening" colorscheme
runtime colors/evening.vim
" change the color of statements
hi Statement ctermfg=Blue guifg=Blue
To see which highlight group is used where, find the help for To see which highlight group is used where, find the help for
"highlight-groups" and "group-name". "highlight-groups" and "group-name".

View File

@@ -1,6 +1,6 @@
" Vim color file " Vim color file
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2006 Apr 14 " Last Change: 2016 Oct 10
" This color scheme uses a dark grey background. " This color scheme uses a dark grey background.
@@ -45,8 +45,8 @@ hi CursorColumn term=reverse ctermbg=Black guibg=grey40
hi CursorLine term=underline cterm=underline guibg=grey40 hi CursorLine term=underline cterm=underline guibg=grey40
" Groups for syntax highlighting " Groups for syntax highlighting
hi Constant term=underline ctermfg=Magenta guifg=#ffa0a0 guibg=grey5 hi Constant term=underline ctermfg=Magenta guifg=#ffa0a0
hi Special term=bold ctermfg=LightRed guifg=Orange guibg=grey5 hi Special term=bold ctermfg=LightRed guifg=Orange
if &t_Co > 8 if &t_Co > 8
hi Statement term=bold cterm=bold ctermfg=Yellow guifg=#ffff60 gui=bold hi Statement term=bold cterm=bold ctermfg=Yellow guifg=#ffff60 gui=bold
endif endif

View File

@@ -2,7 +2,7 @@
" vim: tw=0 ts=4 sw=4 " vim: tw=0 ts=4 sw=4
" Vim color file " Vim color file
" Maintainer: Ron Aaron <ron@ronware.org> " Maintainer: Ron Aaron <ron@ronware.org>
" Last Change: 2013 May 23 " Last Change: 2016 Sep 04
hi clear hi clear
set background=dark set background=dark
@@ -45,6 +45,7 @@ hi TabLineFill term=bold,reverse cterm=bold ctermfg=lightblue ctermbg=white g
hi TabLineSel term=reverse ctermfg=white ctermbg=lightblue guifg=white guibg=blue hi TabLineSel term=reverse ctermfg=white ctermbg=lightblue guifg=white guibg=blue
hi Underlined term=underline cterm=bold,underline ctermfg=lightblue guifg=lightblue gui=bold,underline hi Underlined term=underline cterm=bold,underline ctermfg=lightblue guifg=lightblue gui=bold,underline
hi Ignore ctermfg=black ctermbg=black guifg=black guibg=black hi Ignore ctermfg=black ctermbg=black guifg=black guibg=black
hi EndOfBuffer term=bold cterm=bold ctermfg=darkred guifg=#cc0000 gui=bold
hi link IncSearch Visual hi link IncSearch Visual
hi link String Constant hi link String Constant
hi link Character Constant hi link Character Constant

View File

@@ -0,0 +1,54 @@
" Vim compiler file
" Compiler: ConTeXt typesetting engine
" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
" Last Change: 2016 Oct 21
if exists("current_compiler")
finish
endif
let s:keepcpo= &cpo
set cpo&vim
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
" If makefile exists and we are not asked to ignore it, we use standard make
" (do not redefine makeprg)
if get(b:, 'context_ignore_makefile', get(g:, 'context_ignore_makefile', 0)) ||
\ (!filereadable('Makefile') && !filereadable('makefile'))
let current_compiler = 'context'
" The following assumes that the current working directory is set to the
" directory of the file to be typeset
let &l:makeprg = get(b:, 'context_mtxrun', get(g:, 'context_mtxrun', 'mtxrun'))
\ . ' --script context --autogenerate --nonstopmode --synctex='
\ . (get(b:, 'context_synctex', get(g:, 'context_synctex', 0)) ? '1' : '0')
\ . ' ' . get(b:, 'context_extra_options', get(g:, 'context_extra_options', ''))
\ . ' ' . shellescape(expand('%:p:t'))
else
let current_compiler = 'make'
endif
let b:context_errorformat = ''
\ . '%-Popen source%.%#> %f,'
\ . '%-Qclose source%.%#> %f,'
\ . "%-Popen source%.%#name '%f',"
\ . "%-Qclose source%.%#name '%f',"
\ . '%Etex %trror%.%#mp error on line %l in file %f:%.%#,'
\ . 'tex %trror%.%#error on line %l in file %f: %m,'
\ . '%Elua %trror%.%#error on line %l in file %f:,'
\ . '%+Emetapost %#> error: %#,'
\ . '! error: %#%m,'
\ . '%-C %#,'
\ . '%C! %m,'
\ . '%Z[ctxlua]%m,'
\ . '%+C<*> %.%#,'
\ . '%-C%.%#,'
\ . '%Z...%m,'
\ . '%-Zno-error,'
\ . '%-G%.%#' " Skip remaining lines
execute 'CompilerSet errorformat=' . escape(b:context_errorformat, ' ')
let &cpo = s:keepcpo
unlet s:keepcpo

View File

@@ -0,0 +1,16 @@
" Vim compiler file
" Compiler: csslint for CSS
" Maintainer: Daniel Moch <daniel@danielmoch.com>
" Last Change: 2016 May 21
if exists("current_compiler")
finish
endif
let current_compiler = "csslint"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=csslint\ --format=compact
CompilerSet errorformat=%-G,%-G%f:\ lint\ free!,%f:\ line\ %l\\,\ col\ %c\\,\ %trror\ -\ %m,%f:\ line\ %l\\,\ col\ %c\\,\ %tarning\ -\ %m,%f:\ line\ %l\\,\ col\ %c\\,\ %m

View File

@@ -1,7 +1,7 @@
" Vim compiler file " Vim compiler file
" Compiler: Cucumber " Compiler: Cucumber
" Maintainer: Tim Pope <vimNOSPAM@tpope.org> " Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2010 Aug 09 " Last Change: 2016 Aug 29
if exists("current_compiler") if exists("current_compiler")
finish finish
@@ -19,7 +19,7 @@ CompilerSet makeprg=cucumber
CompilerSet errorformat= CompilerSet errorformat=
\%W%m\ (Cucumber::Undefined), \%W%m\ (Cucumber::Undefined),
\%E%m\ (%.%#), \%E%m\ (%\\S%#),
\%Z%f:%l, \%Z%f:%l,
\%Z%f:%l:%.%# \%Z%f:%l:%.%#

26
runtime/compiler/ghc.vim Normal file
View File

@@ -0,0 +1,26 @@
" Vim compiler file
" Compiler: GHC Haskell Compiler
" Maintainer: Daniel Campoverde <alx@sillybytes.net>
" Latest Revision: 2016-11-29
if exists("current_compiler")
finish
endif
let current_compiler = "ghc"
let s:cpo_save = &cpo
set cpo&vim
CompilerSet errorformat=
\%-G%.%#:\ build,
\%-G%.%#preprocessing\ library\ %.%#,
\%-G[%.%#]%.%#,
\%E%f:%l:%c:\ %m,
\%-G--%.%#
if exists('g:compiler_ghc_ignore_unmatched_lines')
CompilerSet errorformat+=%-G%.%#
endif
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,7 +1,7 @@
" Vim compiler file " Vim compiler file
" Compiler: Haml " Compiler: Haml
" Maintainer: Tim Pope <vimNOSPAM@tpope.org> " Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2013 May 30 " Last Change: 2016 Aug 29
if exists("current_compiler") if exists("current_compiler")
finish finish
@@ -15,7 +15,7 @@ endif
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo-=C set cpo-=C
CompilerSet makeprg=haml\ -c CompilerSet makeprg=haml
CompilerSet errorformat= CompilerSet errorformat=
\Haml\ %trror\ on\ line\ %l:\ %m, \Haml\ %trror\ on\ line\ %l:\ %m,

View File

@@ -0,0 +1,16 @@
" Vim compiler file
" Compiler: Pylint for Python
" Maintainer: Daniel Moch <daniel@danielmoch.com>
" Last Change: 2016 May 20
if exists("current_compiler")
finish
endif
let current_compiler = "pylint"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=pylint\ --output-format=text\ --msg-template=\"{path}:{line}:{column}:{C}:\ [{symbol}]\ {msg}\"\ --reports=no
CompilerSet errorformat=%A%f:%l:%c:%t:\ %m,%A%f:%l:\ %m,%A%f:(%l):\ %m,%-Z%p^%.%#,%-G%.%#

View File

@@ -27,7 +27,11 @@ CompilerSet errorformat=
\%\\s%#[%f:%l:\ %#%m, \%\\s%#[%f:%l:\ %#%m,
\%\\s%#%f:%l:\ %#%m, \%\\s%#%f:%l:\ %#%m,
\%\\s%#%f:%l:, \%\\s%#%f:%l:,
\%m\ [%f:%l]: \%m\ [%f:%l]:,
\%+Erake\ aborted!,
\%+EDon't\ know\ how\ to\ build\ task\ %.%#,
\%+Einvalid\ option:%.%#,
\%+Irake\ %\\S%\\+%\\s%\\+#\ %.%#
let &cpo = s:cpo_save let &cpo = s:cpo_save
unlet s:cpo_save unlet s:cpo_save

View File

@@ -22,9 +22,10 @@ CompilerSet errorformat=
\%f:%l:\ %tarning:\ %m, \%f:%l:\ %tarning:\ %m,
\%E%.%#:in\ `load':\ %f:%l:%m, \%E%.%#:in\ `load':\ %f:%l:%m,
\%E%f:%l:in\ `%*[^']':\ %m, \%E%f:%l:in\ `%*[^']':\ %m,
\%-Z\ \ \ \ \ \#\ %f:%l:%.%#, \%-Z\ \ \ \ \ %\\+\#\ %f:%l:%.%#,
\%E\ \ %\\d%\\+)%.%#, \%E\ \ %\\d%\\+)%.%#,
\%C\ \ \ \ \ %m, \%C\ \ \ \ \ %m,
\%C%\\s%#,
\%-G%.%# \%-G%.%#
let &cpo = s:cpo_save let &cpo = s:cpo_save

View File

@@ -17,6 +17,8 @@ let s:cpo_save = &cpo
set cpo-=C set cpo-=C
CompilerSet makeprg=testrb CompilerSet makeprg=testrb
" CompilerSet makeprg=ruby\ -Itest
" CompilerSet makeprg=m
CompilerSet errorformat=\%W\ %\\+%\\d%\\+)\ Failure:, CompilerSet errorformat=\%W\ %\\+%\\d%\\+)\ Failure:,
\%C%m\ [%f:%l]:, \%C%m\ [%f:%l]:,

View File

@@ -1,7 +1,7 @@
" Vim compiler file " Vim compiler file
" Compiler: Sass " Compiler: Sass
" Maintainer: Tim Pope <vimNOSPAM@tpope.org> " Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2013 May 30 " Last Change: 2016 Aug 29
if exists("current_compiler") if exists("current_compiler")
finish finish
@@ -15,7 +15,7 @@ endif
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo-=C set cpo-=C
CompilerSet makeprg=sass\ -c CompilerSet makeprg=sass
CompilerSet errorformat= CompilerSet errorformat=
\%f:%l:%m\ (Sass::Syntax%trror), \%f:%l:%m\ (Sass::Syntax%trror),

View File

@@ -36,5 +36,5 @@ tags.ref tags.html: tags
$(AWK) -f maketags.awk tags >tags.html $(AWK) -f maketags.awk tags >tags.html
clean: clean:
-rm -f *.html tags.ref $(HTMLS) errors.log -rm -f *.html tags.ref $(HTMLS) errors.log tags

View File

@@ -1,29 +1,20 @@
*api.txt* {Nvim} *api.txt* Nvim
NVIM REFERENCE MANUAL by Thiago de Arruda NVIM REFERENCE MANUAL by Thiago de Arruda
C API for Nvim *API* *api* Nvim API *API* *api*
1. Introduction |api-intro| Nvim exposes a powerful API that can be used by plugins and external processes
2. API Types |api-types| via |msgpack-rpc|, Lua and VimL (|eval-api|).
3. API metadata |api-metadata|
4. Buffer highlighting |api-highlights| Applications can also embed libnvim to work with the C API directly.
Type <M-]> to see the table of contents.
============================================================================== ==============================================================================
1. Introduction *api-intro* API Types *api-types*
Nvim exposes a public API for external code to interact with the Nvim core.
The API is used by external processes to interact with Nvim using the
msgpack-rpc protocol, see |msgpack-rpc|. The API is used from vimscript to
access some new Nvim core features. See |eval-api| for how api functions are
called from vimscript. Later on, Nvim might be embeddable in C applications as
libnvim, and the application will then control the embedded instance by calling
the C API directly.
==============================================================================
2. API Types *api-types*
Nvim's C API uses custom types for all functions. Some are just typedefs Nvim's C API uses custom types for all functions. Some are just typedefs
around C99 standard types, and some are Nvim-defined data structures. around C99 standard types, and some are Nvim-defined data structures.
@@ -47,20 +38,47 @@ Window -> enum value kObjectTypeWindow
Tabpage -> enum value kObjectTypeTabpage Tabpage -> enum value kObjectTypeTabpage
============================================================================== ==============================================================================
3. API metadata *api-metadata* API metadata *api-metadata*
Nvim exposes metadata about the API as a Dictionary with the following keys: Nvim exposes API metadata as a Dictionary. Some items are described below:
version Nvim version, API level/compatibility version Nvim version, API level/compatibility
version.api_level Current API level
version.api_compatible API is backwards-compatible with this level
version.api_prerelease Declares the current API level as unstable >
(version.api_prerelease && fn.since == version.api_level)
functions API function signatures functions API function signatures
{fn}.since API level where function {fn} was introduced
{fn}.deprecated_since API level where function {fn} was deprecated
types Custom handle types defined by Nvim types Custom handle types defined by Nvim
error_types Possible error types returned by API functions error_types Possible error types returned by API functions
This metadata is mostly useful for external programs accessing the API via External programs ("clients") can use the metadata to discover the |rpc-api|.
RPC, see |rpc-api|.
============================================================================== ==============================================================================
4. Buffer highlighting *api-highlights* API contract *api-contract*
The API is made of functions and events. Clients call functions like those
described at |api-global|, and may "attach" in order to receive rich events,
described at |rpc-remote-ui|.
As Nvim develops, its API may change only according the following "contract":
- New functions and events may be added.
- Any such extensions are OPTIONAL: old clients may ignore them.
- Function signatures will NOT CHANGE (after release).
- Functions introduced in the development (unreleased) version MAY CHANGE.
(Clients can dynamically check `api_prerelease`, etc. |api-metadata|)
- Event parameters will not be removed or reordered (after release).
- Events may be EXTENDED: new parameters may be added.
- New items may be ADDED to map/list parameters/results of functions and
events.
- Any such new items are OPTIONAL: old clients may ignore them.
- Existing items will not be removed (after release).
- Deprecated functions will not be removed until Nvim version 2.0
==============================================================================
Buffer highlighting *api-highlights*
Nvim allows plugins to add position-based highlights to buffers. This is Nvim allows plugins to add position-based highlights to buffers. This is
similar to |matchaddpos()| but with some key differences. The added highlights similar to |matchaddpos()| but with some key differences. The added highlights
@@ -107,4 +125,723 @@ An example of calling the api from vimscript: >
call nvim_buf_clear_highlight(0, src, 0, -1) call nvim_buf_clear_highlight(0, src, 0, -1)
> >
============================================================================== ==============================================================================
vim:tw=78:ts=8:noet:ft=help:norl: Global Functions *api-global*
nvim_command({command}) *nvim_command()*
Executes an ex-command. On VimL error: Returns the VimL error;
v:errmsg is not updated.
Parameters:~
{command} Ex-command string
nvim_feedkeys({keys}, {mode}, {escape_csi}) *nvim_feedkeys()*
Passes input keys to Nvim. On VimL error: Does not fail, but
updates v:errmsg.
Parameters:~
{keys} to be typed
{mode} mapping options
{escape_csi} If true, escape K_SPECIAL/CSI bytes in
`keys`
nvim_input({keys}) *nvim_input()*
Passes keys to Nvim as raw user-input. On VimL error: Does not
fail, but updates v:errmsg.
Unlike `nvim_feedkeys`, this uses a lower-level input buffer
and the call is not deferred. This is the most reliable way to
emulate real user input.
Attributes:~
{async}
Parameters:~
{keys} to be typed
Return:~
Number of bytes actually written (can be fewer than
requested if the buffer becomes full).
*nvim_replace_termcodes()*
nvim_replace_termcodes({str}, {from_part}, {do_lt}, {special})
Replaces any terminal codes with the internal representation
nvim_command_output({str}) *nvim_command_output()*
TODO: Documentation
nvim_eval({expr}) *nvim_eval()*
Evaluates a VimL expression (:help expression). Dictionaries
and Lists are recursively expanded. On VimL error: Returns a
generic error; v:errmsg is not updated.
Parameters:~
{expr} VimL expression string
Return:~
Evaluation result or expanded object
nvim_call_function({fname}, {args}) *nvim_call_function()*
Calls a VimL function with the given arguments. On VimL error:
Returns a generic error; v:errmsg is not updated.
Parameters:~
{fname} Function to call
{args} Function arguments packed in an Array
Return:~
Result of the function call
nvim_strwidth({str}) *nvim_strwidth()*
Calculates the number of display cells occupied by `text`.
<Tab> counts as one cell.
Parameters:~
{text} Some text
Return:~
Number of cells
nvim_list_runtime_paths() *nvim_list_runtime_paths()*
Gets the paths contained in 'runtimepath'.
Return:~
List of paths
nvim_set_current_dir({dir}) *nvim_set_current_dir()*
Changes the global working directory.
Parameters:~
{dir} Directory path
nvim_get_current_line() *nvim_get_current_line()*
Gets the current line
Parameters:~
Return:~
Current line string
nvim_set_current_line({line}) *nvim_set_current_line()*
Sets the current line
Parameters:~
{line} Line contents
nvim_del_current_line() *nvim_del_current_line()*
Deletes the current line
Parameters:~
nvim_get_var({name}) *nvim_get_var()*
Gets a global (g:) variable
Parameters:~
{name} Variable name
Return:~
Variable value
nvim_set_var({name}, {value}) *nvim_set_var()*
Sets a global (g:) variable
Parameters:~
{name} Variable name
{value} Variable value
nvim_del_var({name}) *nvim_del_var()*
Removes a global (g:) variable
Parameters:~
{name} Variable name
nvim_get_vvar({name}) *nvim_get_vvar()*
Gets a v: variable
Parameters:~
{name} Variable name
Return:~
Variable value
nvim_get_option({name}) *nvim_get_option()*
Gets an option value string
Parameters:~
{name} Option name
Return:~
Option value (global)
nvim_set_option({name}, {value}) *nvim_set_option()*
Sets an option value
Parameters:~
{name} Option name
{value} New option value
nvim_out_write({str}) *nvim_out_write()*
Writes a message to vim output buffer
Parameters:~
{str} Message
nvim_err_write({str}) *nvim_err_write()*
Writes a message to vim error buffer
Parameters:~
{str} Message
nvim_err_writeln({str}) *nvim_err_writeln()*
Writes a message to vim error buffer. Appends a linefeed to
ensure all contents are written.
Parameters:~
{str} Message
nvim_list_bufs() *nvim_list_bufs()*
Gets the current list of buffer handles
Return:~
List of buffer handles
nvim_get_current_buf() *nvim_get_current_buf()*
Gets the current buffer
Return:~
Buffer handle
nvim_set_current_buf({buffer}) *nvim_set_current_buf()*
Sets the current buffer
Parameters:~
{id} Buffer handle
nvim_list_wins() *nvim_list_wins()*
Gets the current list of window handles
Return:~
List of window handles
nvim_get_current_win() *nvim_get_current_win()*
Gets the current window
Return:~
Window handle
nvim_set_current_win({window}) *nvim_set_current_win()*
Sets the current window
Parameters:~
{handle} Window handle
nvim_list_tabpages() *nvim_list_tabpages()*
Gets the current list of tabpage handles
Return:~
List of tabpage handles
nvim_get_current_tabpage() *nvim_get_current_tabpage()*
Gets the current tabpage
Return:~
Tabpage handle
nvim_set_current_tabpage({tabpage}) *nvim_set_current_tabpage()*
Sets the current tabpage
Parameters:~
{handle} Tabpage handle
nvim_subscribe({event}) *nvim_subscribe()*
Subscribes to event broadcasts
Parameters:~
{event} Event type string
nvim_unsubscribe({event}) *nvim_unsubscribe()*
Unsubscribes to event broadcasts
Parameters:~
{event} Event type string
nvim_get_color_by_name({name}) *nvim_get_color_by_name()*
TODO: Documentation
nvim_get_color_map() *nvim_get_color_map()*
TODO: Documentation
nvim_get_mode() *nvim_get_mode()*
Gets the current mode.
mode: Mode string. |mode()|
blocking: true if Nvim is waiting for input.
Attributes:~
{async}
Return:~
Dictionary { "mode": String, "blocking": Boolean }
nvim_get_api_info() *nvim_get_api_info()*
TODO: Documentation
Attributes:~
{async}
nvim_call_atomic({calls}) *nvim_call_atomic()*
Call many api methods atomically
This has two main usages: Firstly, to perform several requests
from an async context atomically, i.e. without processing
requests from other rpc clients or redrawing or allowing user
interaction in between. Note that api methods that could fire
autocommands or do event processing still might do so. For
instance invoking the :sleep command might call timer
callbacks. Secondly, it can be used to reduce rpc overhead
(roundtrips) when doing many requests in sequence.
Parameters:~
{calls} an array of calls, where each call is described
by an array with two elements: the request name,
and an array of arguments.
Return:~
an array with two elements. The first is an array of
return values. The second is NIL if all calls succeeded.
If a call resulted in an error, it is a three-element
array with the zero-based index of the call which resulted
in an error, the error type and the error message. If an
error ocurred, the values from all preceding calls will
still be returned.
==============================================================================
Buffer Functions *api-buffer*
nvim_buf_line_count({buffer}) *nvim_buf_line_count()*
Gets the buffer line count
Parameters:~
{buffer} Buffer handle
Return:~
Line count
*nvim_buf_get_lines()*
nvim_buf_get_lines({buffer}, {start}, {end}, {strict_indexing})
Retrieves a line range from the buffer
Indexing is zero-based, end-exclusive. Negative indices are
interpreted as length+1+index, i e -1 refers to the index past
the end. So to get the last element set start=-2 and end=-1.
Out-of-bounds indices are clamped to the nearest valid value,
unless `strict_indexing` is set.
Parameters:~
{buffer} Buffer handle
{start} First line index
{end} Last line index (exclusive)
{strict_indexing} Whether out-of-bounds should be an
error.
Return:~
Array of lines
*nvim_buf_set_lines()*
nvim_buf_set_lines({buffer}, {start}, {end}, {strict_indexing},
{replacement})
Replaces line range on the buffer
Indexing is zero-based, end-exclusive. Negative indices are
interpreted as length+1+index, i e -1 refers to the index past
the end. So to change or delete the last element set start=-2
and end=-1.
To insert lines at a given index, set both start and end to
the same index. To delete a range of lines, set replacement to
an empty array.
Out-of-bounds indices are clamped to the nearest valid value,
unless `strict_indexing` is set.
Parameters:~
{buffer} Buffer handle
{start} First line index
{end} Last line index (exclusive)
{strict_indexing} Whether out-of-bounds should be an
error.
{replacement} Array of lines to use as replacement
nvim_buf_get_var({buffer}, {name}) *nvim_buf_get_var()*
Gets a buffer-scoped (b:) variable.
Parameters:~
{buffer} Buffer handle
{name} Variable name
Return:~
Variable value
nvim_buf_get_changedtick({buffer}) *nvim_buf_get_changedtick()*
Gets a changed tick of a buffer
Parameters:~
{buffer} Buffer handle.
Return:~
b:changedtickvalue.
nvim_buf_set_var({buffer}, {name}, {value}) *nvim_buf_set_var()*
Sets a buffer-scoped (b:) variable
Parameters:~
{buffer} Buffer handle
{name} Variable name
{value} Variable value
nvim_buf_del_var({buffer}, {name}) *nvim_buf_del_var()*
Removes a buffer-scoped (b:) variable
Parameters:~
{buffer} Buffer handle
{name} Variable name
nvim_buf_get_option({buffer}, {name}) *nvim_buf_get_option()*
Gets a buffer option value
Parameters:~
{buffer} Buffer handle
{name} Option name
Return:~
Option value
nvim_buf_set_option({buffer}, {name}, {value}) *nvim_buf_set_option()*
Sets a buffer option value. Passing 'nil' as value deletes the
option (only works if there's a global fallback)
Parameters:~
{buffer} Buffer handle
{name} Option name
{value} Option value
nvim_buf_get_name({buffer}) *nvim_buf_get_name()*
Gets the full file name for the buffer
Parameters:~
{buffer} Buffer handle
Return:~
Buffer name
nvim_buf_set_name({buffer}, {name}) *nvim_buf_set_name()*
Sets the full file name for a buffer
Parameters:~
{buffer} Buffer handle
{name} Buffer name
nvim_buf_is_valid({buffer}) *nvim_buf_is_valid()*
Checks if a buffer is valid
Parameters:~
{buffer} Buffer handle
Return:~
true if the buffer is valid, false otherwise
nvim_buf_get_mark({buffer}, {name}) *nvim_buf_get_mark()*
Return a tuple (row,col) representing the position of the
named mark
Parameters:~
{buffer} Buffer handle
{name} Mark name
Return:~
(row, col) tuple
*nvim_buf_add_highlight()*
nvim_buf_add_highlight({buffer}, {src_id}, {hl_group}, {line},
{col_start}, {col_end})
Adds a highlight to buffer.
This can be used for plugins which dynamically generate
highlights to a buffer (like a semantic highlighter or
linter). The function adds a single highlight to a buffer.
Unlike matchaddpos() highlights follow changes to line
numbering (as lines are inserted/removed above the highlighted
line), like signs and marks do.
"src_id" is useful for batch deletion/updating of a set of
highlights. When called with src_id = 0, an unique source id
is generated and returned. Succesive calls can pass in it as
"src_id" to add new highlights to the same source group. All
highlights in the same group can then be cleared with
nvim_buf_clear_highlight. If the highlight never will be
manually deleted pass in -1 for "src_id".
If "hl_group" is the empty string no highlight is added, but a
new src_id is still returned. This is useful for an external
plugin to synchrounously request an unique src_id at
initialization, and later asynchronously add and clear
highlights in response to buffer changes.
Parameters:~
{buffer} Buffer handle
{src_id} Source group to use or 0 to use a new group,
or -1 for ungrouped highlight
{hl_group} Name of the highlight group to use
{line} Line to highlight
{col_start} Start of range of columns to highlight
{col_end} End of range of columns to highlight, or -1
to highlight to end of line
Return:~
The src_id that was used
*nvim_buf_clear_highlight()*
nvim_buf_clear_highlight({buffer}, {src_id}, {line_start}, {line_end})
Clears highlights from a given source group and a range of
lines
To clear a source group in the entire buffer, pass in 1 and -1
to line_start and line_end respectively.
Parameters:~
{buffer} Buffer handle
{src_id} Highlight source group to clear, or -1 to
clear all.
{line_start} Start of range of lines to clear
{line_end} End of range of lines to clear (exclusive)
or -1 to clear to end of file.
==============================================================================
Window Functions *api-window*
nvim_win_get_buf({window}) *nvim_win_get_buf()*
Gets the current buffer in a window
Parameters:~
{window} Window handle
Return:~
Buffer handle
nvim_win_get_cursor({window}) *nvim_win_get_cursor()*
Gets the cursor position in the window
Parameters:~
{window} Window handle
Return:~
(row, col) tuple
nvim_win_set_cursor({window}, {pos}) *nvim_win_set_cursor()*
Sets the cursor position in the window
Parameters:~
{window} Window handle
{pos} (row, col) tuple representing the new position
nvim_win_get_height({window}) *nvim_win_get_height()*
Gets the window height
Parameters:~
{window} Window handle
Return:~
Height as a count of rows
nvim_win_set_height({window}, {height}) *nvim_win_set_height()*
Sets the window height. This will only succeed if the screen
is split horizontally.
Parameters:~
{window} Window handle
{height} Height as a count of rows
nvim_win_get_width({window}) *nvim_win_get_width()*
Gets the window width
Parameters:~
{window} Window handle
Return:~
Width as a count of columns
nvim_win_set_width({window}, {width}) *nvim_win_set_width()*
Sets the window width. This will only succeed if the screen is
split vertically.
Parameters:~
{window} Window handle
{width} Width as a count of columns
nvim_win_get_var({window}, {name}) *nvim_win_get_var()*
Gets a window-scoped (w:) variable
Parameters:~
{window} Window handle
{name} Variable name
Return:~
Variable value
nvim_win_set_var({window}, {name}, {value}) *nvim_win_set_var()*
Sets a window-scoped (w:) variable
Parameters:~
{window} Window handle
{name} Variable name
{value} Variable value
nvim_win_del_var({window}, {name}) *nvim_win_del_var()*
Removes a window-scoped (w:) variable
Parameters:~
{window} Window handle
{name} Variable name
nvim_win_get_option({window}, {name}) *nvim_win_get_option()*
Gets a window option value
Parameters:~
{window} Window handle
{name} Option name
Return:~
Option value
nvim_win_set_option({window}, {name}, {value}) *nvim_win_set_option()*
Sets a window option value. Passing 'nil' as value deletes the
option(only works if there's a global fallback)
Parameters:~
{window} Window handle
{name} Option name
{value} Option value
nvim_win_get_position({window}) *nvim_win_get_position()*
Gets the window position in display cells. First position is
zero.
Parameters:~
{window} Window handle
Return:~
(row, col) tuple with the window position
nvim_win_get_tabpage({window}) *nvim_win_get_tabpage()*
Gets the window tabpage
Parameters:~
{window} Window handle
Return:~
Tabpage that contains the window
nvim_win_get_number({window}) *nvim_win_get_number()*
Gets the window number
Parameters:~
{window} Window handle
Return:~
Window number
nvim_win_is_valid({window}) *nvim_win_is_valid()*
Checks if a window is valid
Parameters:~
{window} Window handle
Return:~
true if the window is valid, false otherwise
==============================================================================
Tabpage Functions *api-tabpage*
nvim_tabpage_list_wins({tabpage}) *nvim_tabpage_list_wins()*
Gets the windows in a tabpage
Parameters:~
{tabpage} Tabpage
Return:~
List of windows in tabpage
nvim_tabpage_get_var({tabpage}, {name}) *nvim_tabpage_get_var()*
Gets a tab-scoped (t:) variable
Parameters:~
{tabpage} Tabpage handle
{name} Variable name
Return:~
Variable value
nvim_tabpage_set_var({tabpage}, {name}, {value}) *nvim_tabpage_set_var()*
Sets a tab-scoped (t:) variable
Parameters:~
{tabpage} Tabpage handle
{name} Variable name
{value} Variable value
nvim_tabpage_del_var({tabpage}, {name}) *nvim_tabpage_del_var()*
Removes a tab-scoped (t:) variable
Parameters:~
{tabpage} Tabpage handle
{name} Variable name
nvim_tabpage_get_win({tabpage}) *nvim_tabpage_get_win()*
Gets the current window in a tabpage
Parameters:~
{tabpage} Tabpage handle
Return:~
Window handle
nvim_tabpage_get_number({tabpage}) *nvim_tabpage_get_number()*
Gets the tabpage number
Parameters:~
{tabpage} Tabpage handle
Return:~
Tabpage number
nvim_tabpage_is_valid({tabpage}) *nvim_tabpage_is_valid()*
Checks if a tabpage is valid
Parameters:~
{tabpage} Tabpage handle
Return:~
true if the tabpage is valid, false otherwise
==============================================================================
UI Functions *api-ui*
remote_ui_disconnect() *remote_ui_disconnect()*
TODO: Documentation
nvim_ui_attach({width}, {height}, {options}) *nvim_ui_attach()*
TODO: Documentation
nvim_ui_detach() *nvim_ui_detach()*
TODO: Documentation
nvim_ui_try_resize({width}, {height}) *nvim_ui_try_resize()*
TODO: Documentation
nvim_ui_set_option({name}, {value}) *nvim_ui_set_option()*
TODO: Documentation
vim:tw=78:ts=8:ft=help:norl:

View File

@@ -1,4 +1,4 @@
*arabic.txt* For Vim version 7.4. Last change: 2010 Nov 13 *arabic.txt* Nvim
VIM REFERENCE MANUAL by Nadim Shaikli VIM REFERENCE MANUAL by Nadim Shaikli

View File

@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 7.4. Last change: 2016 Mar 26 *autocmd.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -8,17 +8,7 @@ Automatic commands *autocommand*
For a basic explanation, see section |40.3| in the user manual. For a basic explanation, see section |40.3| in the user manual.
1. Introduction |autocmd-intro| Type <M-]> to see the table of contents.
2. Defining autocommands |autocmd-define|
3. Removing autocommands |autocmd-remove|
4. Listing autocommands |autocmd-list|
5. Events |autocmd-events|
6. Patterns |autocmd-patterns|
7. Buffer-local autocommands |autocmd-buflocal|
8. Groups |autocmd-groups|
9. Executing autocommands |autocmd-execute|
10. Using autocommands |autocmd-use|
11. Disabling autocommands |autocmd-disable|
============================================================================== ==============================================================================
1. Introduction *autocmd-intro* 1. Introduction *autocmd-intro*
@@ -30,7 +20,7 @@ files matching *.c. You can also use autocommands to implement advanced
features, such as editing compressed files (see |gzip-example|). The usual features, such as editing compressed files (see |gzip-example|). The usual
place to put autocommands is in your vimrc file. place to put autocommands is in your vimrc file.
*E203* *E204* *E143* *E855* *E203* *E204* *E143* *E855* *E937*
WARNING: Using autocommands is very powerful, and may lead to unexpected side WARNING: Using autocommands is very powerful, and may lead to unexpected side
effects. Be careful not to destroy your text. effects. Be careful not to destroy your text.
- It's a good idea to do some testing on an expendable copy of a file first. - It's a good idea to do some testing on an expendable copy of a file first.
@@ -49,9 +39,6 @@ effects. Be careful not to destroy your text.
============================================================================== ==============================================================================
2. Defining autocommands *autocmd-define* 2. Defining autocommands *autocmd-define*
Note: The ":autocmd" command cannot be followed by another command, since any
'|' is considered part of the command.
*:au* *:autocmd* *:au* *:autocmd*
:au[tocmd] [group] {event} {pat} [nested] {cmd} :au[tocmd] [group] {event} {pat} [nested] {cmd}
Add {cmd} to the list of commands that Vim will Add {cmd} to the list of commands that Vim will
@@ -64,6 +51,12 @@ Note: The ":autocmd" command cannot be followed by another command, since any
The special pattern <buffer> or <buffer=N> defines a buffer-local autocommand. The special pattern <buffer> or <buffer=N> defines a buffer-local autocommand.
See |autocmd-buflocal|. See |autocmd-buflocal|.
Note: The ":autocmd" command can only be followed by another command when the
'|' appears before {cmd}. This works: >
:augroup mine | au! BufRead | augroup END
But this sees "augroup" as part of the defined command: >
:augroup mine | au BufRead * set tw=70 | augroup END
Note that special characters (e.g., "%", "<cword>") in the ":autocmd" Note that special characters (e.g., "%", "<cword>") in the ":autocmd"
arguments are not expanded when the autocommand is defined. These will be arguments are not expanded when the autocommand is defined. These will be
expanded when the Event is recognized, and the {cmd} is executed. The only expanded when the Event is recognized, and the {cmd} is executed. The only
@@ -73,11 +66,15 @@ exception is that "<sfile>" is expanded when the autocmd is defined. Example:
Here Vim expands <sfile> to the name of the file containing this line. Here Vim expands <sfile> to the name of the file containing this line.
When your vimrc file is sourced twice, the autocommands will appear twice. `:autocmd` adds to the list of autocommands regardless of whether they are
To avoid this, put this command in your vimrc file, before defining already present. When your .vimrc file is sourced twice, the autocommands
autocommands: > will appear twice. To avoid this, define your autocommands in a group, so
that you can easily clear them: >
:autocmd! " Remove ALL autocommands for the current group. augroup vimrc
autocmd! " Remove all vimrc autocommands
au BufNewFile,BufRead *.html so <sfile>:h/html.vim
augroup END
If you don't want to remove all autocommands, you can instead use a variable If you don't want to remove all autocommands, you can instead use a variable
to ensure that Vim includes the autocommands only once: > to ensure that Vim includes the autocommands only once: >
@@ -124,8 +121,13 @@ prompt. When one command outputs two messages this can happen anyway.
:au[tocmd]! [group] {event} :au[tocmd]! [group] {event}
Remove ALL autocommands for {event}. Remove ALL autocommands for {event}.
Warning: You should not do this without a group for
|BufRead| and other common events, it can break
plugins, syntax highlighting, etc.
:au[tocmd]! [group] Remove ALL autocommands. :au[tocmd]! [group] Remove ALL autocommands.
Warning: You should normally not do this without a
group, it breaks plugins, syntax highlighting, etc.
When the [group] argument is not given, Vim uses the current group (as defined When the [group] argument is not given, Vim uses the current group (as defined
with ":augroup"); otherwise, Vim uses the group defined with [group]. with ":augroup"); otherwise, Vim uses the group defined with [group].
@@ -270,8 +272,10 @@ Name triggered by ~
|VimLeave| before exiting Vim, after writing the shada file |VimLeave| before exiting Vim, after writing the shada file
Various Various
|DirChanged| after the |current-directory| was changed
|FileChangedShell| Vim notices that a file changed since editing started |FileChangedShell| Vim notices that a file changed since editing started
|FileChangedShellPost| After handling a file changed since editing started |FileChangedShellPost| after handling a file changed since editing started
|FileChangedRO| before making the first change to a read-only file |FileChangedRO| before making the first change to a read-only file
|ShellCmdPost| after executing a shell command |ShellCmdPost| after executing a shell command
@@ -291,6 +295,7 @@ Name triggered by ~
|CursorMoved| the cursor was moved in Normal mode |CursorMoved| the cursor was moved in Normal mode
|CursorMovedI| the cursor was moved in Insert mode |CursorMovedI| the cursor was moved in Insert mode
|WinNew| after creating a new window
|WinEnter| after entering another window |WinEnter| after entering another window
|WinLeave| before leaving a window |WinLeave| before leaving a window
|TabEnter| after entering another tab page |TabEnter| after entering another tab page
@@ -416,8 +421,8 @@ BufUnload Before unloading a buffer. This is when the
NOTE: When this autocommand is executed, the NOTE: When this autocommand is executed, the
current buffer "%" may be different from the current buffer "%" may be different from the
buffer being unloaded "<afile>". buffer being unloaded "<afile>".
Don't change to another buffer, it will cause Don't change to another buffer or window, it
problems. will cause problems!
When exiting and v:dying is 2 or more this When exiting and v:dying is 2 or more this
event is not triggered. event is not triggered.
*BufWinEnter* *BufWinEnter*
@@ -541,6 +546,9 @@ CursorHold When the user doesn't press a key for the time
*CursorHoldI* *CursorHoldI*
CursorHoldI Just like CursorHold, but in Insert mode. CursorHoldI Just like CursorHold, but in Insert mode.
Not triggered when waiting for another key,
e.g. after CTRL-V, and not when in CTRL-X mode
|insert_expand|.
*CursorMoved* *CursorMoved*
CursorMoved After the cursor was moved in Normal or Visual CursorMoved After the cursor was moved in Normal or Visual
@@ -556,6 +564,12 @@ CursorMoved After the cursor was moved in Normal or Visual
CursorMovedI After the cursor was moved in Insert mode. CursorMovedI After the cursor was moved in Insert mode.
Not triggered when the popup menu is visible. Not triggered when the popup menu is visible.
Otherwise the same as CursorMoved. Otherwise the same as CursorMoved.
*DirChanged*
DirChanged After the |current-directory| was changed.
Sets these |v:event| keys:
cwd: current working directory
scope: "global", "tab", "window"
Recursion is ignored.
*FileAppendCmd* *FileAppendCmd*
FileAppendCmd Before appending to a file. Should do the FileAppendCmd Before appending to a file. Should do the
appending to the file. Use the '[ and '] appending to the file. Use the '[ and ']
@@ -720,8 +734,7 @@ InsertCharPre When a character is typed in Insert mode,
*TextYankPost* *TextYankPost*
TextYankPost Just after a |yank| or |deleting| command, but not TextYankPost Just after a |yank| or |deleting| command, but not
if the black hole register |quote_| is used nor if the black hole register |quote_| is used nor
for |setreg()|. Pattern must be * because its for |setreg()|. Pattern must be *.
meaning may change in the future.
Sets these |v:event| keys: Sets these |v:event| keys:
operator operator
regcontents regcontents
@@ -780,7 +793,9 @@ QuickFixCmdPre Before a quickfix command is run (|:make|,
|:vimgrepadd|, |:lvimgrepadd|, |:cscope|, |:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
|:cfile|, |:cgetfile|, |:caddfile|, |:lfile|, |:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
|:lgetfile|, |:laddfile|, |:helpgrep|, |:lgetfile|, |:laddfile|, |:helpgrep|,
|:lhelpgrep|). |:lhelpgrep|, |:cexpr|, |:cgetexpr|,
|:caddexpr|, |:cbuffer|, |:cgetbuffer|,
|:caddbuffer|).
The pattern is matched against the command The pattern is matched against the command
being run. When |:grep| is used but 'grepprg' being run. When |:grep| is used but 'grepprg'
is set to "internal" it still matches "grep". is set to "internal" it still matches "grep".
@@ -940,7 +955,15 @@ VimEnter After doing all the startup stuff, including
loading vimrc files, executing the "-c cmd" loading vimrc files, executing the "-c cmd"
arguments, creating all windows and loading arguments, creating all windows and loading
the buffers in them. the buffers in them.
*VimLeave* Just before this event is triggered the
|v:vim_did_enter| variable is set, so that you
can do: >
if v:vim_did_enter
call s:init()
else
au VimEnter * call s:init()
endif
< *VimLeave*
VimLeave Before exiting Vim, just after writing the VimLeave Before exiting Vim, just after writing the
.shada file. Executed only once, like .shada file. Executed only once, like
VimLeavePre. VimLeavePre.
@@ -978,6 +1001,11 @@ WinLeave Before leaving a window. If the window to be
WinLeave autocommands (but not for ":new"). WinLeave autocommands (but not for ":new").
Not used for ":qa" or ":q" when exiting Vim. Not used for ":qa" or ":q" when exiting Vim.
*WinNew*
WinNew When a new window was created. Not done for
the first window, when Vim has just started.
Before a WinEnter event.
============================================================================== ==============================================================================
6. Patterns *autocmd-patterns* *{pat}* 6. Patterns *autocmd-patterns* *{pat}*
@@ -1059,6 +1087,9 @@ Note that for all systems the '/' character is used for path separator (even
Windows). This was done because the backslash is difficult to use in a pattern Windows). This was done because the backslash is difficult to use in a pattern
and to make the autocommands portable across different systems. and to make the autocommands portable across different systems.
It is possible to use |pattern| items, but they may not work as expected,
because of the translation done for the above.
*autocmd-changes* *autocmd-changes*
Matching with the pattern is done when an event is triggered. Changing the Matching with the pattern is done when an event is triggered. Changing the
buffer name in one of the autocommands, or even deleting the buffer, does not buffer name in one of the autocommands, or even deleting the buffer, does not
@@ -1157,10 +1188,12 @@ name!
different from existing {event} names, as this different from existing {event} names, as this
most likely will not do what you intended. most likely will not do what you intended.
*:augroup-delete* *E367* *:augroup-delete* *E367* *W19* *E936*
:aug[roup]! {name} Delete the autocmd group {name}. Don't use :aug[roup]! {name} Delete the autocmd group {name}. Don't use
this if there is still an autocommand using this if there is still an autocommand using
this group! This is not checked. this group! You will get a warning if doing
it anyway. when the group is the current group
you will get error E936.
To enter autocommands for a specific group, use this method: To enter autocommands for a specific group, use this method:
1. Select the group with ":augroup {name}". 1. Select the group with ":augroup {name}".
@@ -1215,6 +1248,8 @@ option will not cause any commands to be executed.
argument is present. You probably want to use argument is present. You probably want to use
<nomodeline> for events that are not used when loading <nomodeline> for events that are not used when loading
a buffer, such as |User|. a buffer, such as |User|.
Processing modelines is also skipped when no
matching autocommands were executed.
*:doautoa* *:doautoall* *:doautoa* *:doautoall*
:doautoa[ll] [<nomodeline>] [group] {event} [fname] :doautoa[ll] [<nomodeline>] [group] {event} [fname]

View File

@@ -1,4 +1,4 @@
*change.txt* For Vim version 7.4. Last change: 2016 Mar 08 *change.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -9,20 +9,10 @@ changing text means deleting the text and replacing it with other text using
one command. You can undo all of these commands. You can repeat the non-Ex one command. You can undo all of these commands. You can repeat the non-Ex
commands with the "." command. commands with the "." command.
1. Deleting text |deleting|
2. Delete and insert |delete-insert|
3. Simple changes |simple-change| *changing*
4. Complex changes |complex-change|
4.1 Filter commands |filter|
4.2 Substitute |:substitute|
4.3 Search and replace |search-replace|
4.4 Changing tabs |change-tabs|
5. Copying and moving text |copy-move|
6. Formatting text |formatting|
7. Sorting text |sorting|
For inserting text see |insert.txt|. For inserting text see |insert.txt|.
Type <M-]> to see the table of contents.
============================================================================== ==============================================================================
1. Deleting text *deleting* *E470* 1. Deleting text *deleting* *E470*
@@ -259,7 +249,7 @@ Or use "caw" (see |aw|).
command is executed. command is executed.
============================================================================== ==============================================================================
3. Simple changes *simple-change* 3. Simple changes *simple-change* *changing*
*r* *r*
r{char} Replace the character under the cursor with {char}. r{char} Replace the character under the cursor with {char}.
@@ -398,11 +388,6 @@ CTRL-X Subtract [count] from the number or alphabetic
{Visual}CTRL-X Subtract [count] from the number or alphabetic {Visual}CTRL-X Subtract [count] from the number or alphabetic
character in the highlighted text. {not in Vi} character in the highlighted text. {not in Vi}
On MS-Windows, this is mapped to cut Visual text
|dos-standard-mappings|. If you want to disable the
mapping, use this: >
silent! vunmap <C-X>
<
*v_g_CTRL-X* *v_g_CTRL-X*
{Visual}g CTRL-X Subtract [count] from the number or alphabetic {Visual}g CTRL-X Subtract [count] from the number or alphabetic
character in the highlighted text. If several lines character in the highlighted text. If several lines
@@ -601,8 +586,8 @@ all files in it are deleted. When Vim has the setuid bit set this may cause
problems, the temp file is owned by the setuid user but the filter command problems, the temp file is owned by the setuid user but the filter command
probably runs as the original user. probably runs as the original user.
Directory for temporary files is created in the first suitable directory of: Directory for temporary files is created in the first suitable directory of:
For Unix: $TMPDIR, /tmp, current-dir, $HOME. Unix: $TMPDIR, /tmp, current-dir, $HOME.
For MS-Windows: $TMP, $TEMP, $USERPROFILE, current-dir. Windows: $TMPDIR, $TMP, $TEMP, $USERPROFILE, current-dir.
@@ -614,12 +599,14 @@ For MS-Windows: $TMP, $TEMP, $USERPROFILE, current-dir.
For the {pattern} see |pattern|. For the {pattern} see |pattern|.
{string} can be a literal string, or something {string} can be a literal string, or something
special; see |sub-replace-special|. special; see |sub-replace-special|.
*E939*
When [range] and [count] are omitted, replace in the When [range] and [count] are omitted, replace in the
current line only. current line only. When [count] is given, replace in
When [count] is given, replace in [count] lines, [count] lines, starting with the last line in [range].
starting with the last line in [range]. When [range] When [range] is omitted start in the current line.
is omitted start in the current line. [count] must be a positive number. Also see
Also see |cmdline-ranges|. |cmdline-ranges|.
See |:s_flags| for [flags]. See |:s_flags| for [flags].
:[range]s[ubstitute] [flags] [count] :[range]s[ubstitute] [flags] [count]
@@ -813,7 +800,7 @@ Examples: >
:s/abcde/abc^Mde/ modifies "abcde" to "abc", "de" (two lines) :s/abcde/abc^Mde/ modifies "abcde" to "abc", "de" (two lines)
:s/$/\^M/ modifies "abcde" to "abcde^M" :s/$/\^M/ modifies "abcde" to "abcde^M"
:s/\w\+/\u\0/g modifies "bla bla" to "Bla Bla" :s/\w\+/\u\0/g modifies "bla bla" to "Bla Bla"
:s/\w\+/\L\u/g modifies "BLA bla" to "Bla Bla" :s/\w\+/\L\u\0/g modifies "BLA bla" to "Bla Bla"
Note: "\L\u" can be used to capitalize the first letter of a word. This is Note: "\L\u" can be used to capitalize the first letter of a word. This is
not compatible with Vi and older versions of Vim, where the "\u" would cancel not compatible with Vi and older versions of Vim, where the "\u" would cancel
@@ -833,6 +820,7 @@ The numbering of "\1", "\2" etc. is done based on which "\(" comes first in
the pattern (going left to right). When a parentheses group matches several the pattern (going left to right). When a parentheses group matches several
times, the last one will be used for "\1", "\2", etc. Example: > times, the last one will be used for "\1", "\2", etc. Example: >
:s/\(\(a[a-d] \)*\)/\2/ modifies "aa ab x" to "ab x" :s/\(\(a[a-d] \)*\)/\2/ modifies "aa ab x" to "ab x"
The "\2" is for "\(a[a-d] \)". At first it matches "aa ", secondly "ab ".
When using parentheses in combination with '|', like in \([ab]\)\|\([cd]\), When using parentheses in combination with '|', like in \([ab]\)\|\([cd]\),
either the first or second pattern in parentheses did not match, so either either the first or second pattern in parentheses did not match, so either

View File

@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 7.4. Last change: 2015 Dec 17 *cmdline.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -13,13 +13,7 @@ Command-line mode is used to enter Ex commands (":"), search patterns
Basic command line editing is explained in chapter 20 of the user manual Basic command line editing is explained in chapter 20 of the user manual
|usr_20.txt|. |usr_20.txt|.
1. Command-line editing |cmdline-editing| Type <M-]> to see the table of contents.
2. Command-line completion |cmdline-completion|
3. Ex command-lines |cmdline-lines|
4. Ex command-line ranges |cmdline-ranges|
5. Ex command-line flags |ex-flags|
6. Ex special characters |cmdline-special|
7. Command-line window |cmdline-window|
============================================================================== ==============================================================================
1. Command-line editing *cmdline-editing* 1. Command-line editing *cmdline-editing*
@@ -219,9 +213,10 @@ CTRL-Y When there is a modeless selection, copy the selection into
the clipboard. |modeless-selection| the clipboard. |modeless-selection|
If there is no selection CTRL-Y is inserted as a character. If there is no selection CTRL-Y is inserted as a character.
CTRL-J *c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR* CTRL-M or CTRL-J *c_CTRL-M* *c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR*
<CR> or <NL> start entered command <CR> or <NL> start entered command
*c_<Esc>* *c_Esc*
CTRL-[ *c_CTRL-[* *c_<Esc>* *c_Esc*
<Esc> When typed and 'x' not present in 'cpoptions', quit <Esc> When typed and 'x' not present in 'cpoptions', quit
Command-line mode without executing. In macros or when 'x' Command-line mode without executing. In macros or when 'x'
present in 'cpoptions', start entered command. present in 'cpoptions', start entered command.
@@ -999,10 +994,10 @@ There are several ways to leave the command-line window:
Insert and in Normal mode. Insert and in Normal mode.
CTRL-C Continue in Command-line mode. The command-line under the CTRL-C Continue in Command-line mode. The command-line under the
cursor is used as the command-line. Works both in Insert and cursor is used as the command-line. Works both in Insert and
in Normal mode. ":close" also works. There is no redraw, in Normal mode. There is no redraw, thus the window will
thus the window will remain visible. remain visible.
:quit Discard the command line and go back to Normal mode. :quit Discard the command line and go back to Normal mode.
":exit", ":xit" and CTRL-\ CTRL-N also work. ":close", ":exit", ":xit" and CTRL-\ CTRL-N also work.
:qall Quit Vim, unless there are changes in some buffer. :qall Quit Vim, unless there are changes in some buffer.
:qall! Quit Vim, discarding changes to any buffer. :qall! Quit Vim, discarding changes to any buffer.

View File

@@ -1,4 +1,4 @@
*debug.txt* For Vim version 7.4. Last change: 2012 Feb 11 *debug.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -9,9 +9,7 @@ Debugging Vim *debug-vim*
This is for debugging Vim itself, when it doesn't work properly. This is for debugging Vim itself, when it doesn't work properly.
For debugging Vim scripts, functions, etc. see |debug-scripts| For debugging Vim scripts, functions, etc. see |debug-scripts|
1. Location of a crash, using gcc and gdb |debug-gcc| Type <M-]> to see the table of contents.
2. Locating memory leaks |debug-leaks|
3. Windows Bug Reporting |debug-win32|
============================================================================== ==============================================================================

View File

@@ -1,4 +1,4 @@
*deprecated.txt* {Nvim} *deprecated.txt* Nvim
NVIM REFERENCE MANUAL NVIM REFERENCE MANUAL
@@ -16,14 +16,12 @@ Normal commands ~
*]f* *]f*
*[f* Same as "gf". *[f* Same as "gf".
Commands ~ Commands ~
*:rv* *:rv*
*:rviminfo* Deprecated alias to |:rshada| command. *:rviminfo* Deprecated alias to |:rshada| command.
*:wv* *:wv*
*:wviminfo* Deprecated alias to |:wshada| command. *:wviminfo* Deprecated alias to |:wshada| command.
Events ~ Events ~
*EncodingChanged* Never fired; 'encoding' is always "utf-8". *EncodingChanged* Never fired; 'encoding' is always "utf-8".
*FileEncoding* Never fired; equivalent to |EncodingChanged|. *FileEncoding* Never fired; equivalent to |EncodingChanged|.
@@ -31,6 +29,10 @@ Events ~
Highlight groups ~ Highlight groups ~
*hl-VisualNOS* Obsolete. |vim-differences| {Nvim} *hl-VisualNOS* Obsolete. |vim-differences| {Nvim}
Keycodes ~
*<MouseDown>* Use <ScrollWheelUp> instead.
*<MouseUp>* Use <ScrollWheelDown> instead.
Functions ~ Functions ~
*buffer_exists()* Obsolete name for |bufexists()|. *buffer_exists()* Obsolete name for |bufexists()|.
*buffer_name()* Obsolete name for |bufname()|. *buffer_name()* Obsolete name for |bufname()|.
@@ -42,6 +44,7 @@ Functions ~
Options ~ Options ~
*'fe'* 'fenc'+'enc' before Vim 6.0; no longer used. *'fe'* 'fenc'+'enc' before Vim 6.0; no longer used.
*'langnoremap'* Deprecated alias to 'nolangremap'.
*'vi'* *'vi'*
*'viminfo'* Deprecated alias to 'shada' option. *'viminfo'* Deprecated alias to 'shada' option.

View File

@@ -1,4 +1,4 @@
*develop.txt* *develop.txt* Nvim
NVIM REFERENCE MANUAL NVIM REFERENCE MANUAL
@@ -6,22 +6,19 @@
Development of Nvim. *development* Development of Nvim. *development*
1. Design goals |design-goals|
2. Design decisions |design-decisions|
Nvim is open source software. Everybody is encouraged to contribute. Nvim is open source software. Everybody is encouraged to contribute.
https://github.com/neovim/neovim/blob/master/CONTRIBUTING.md https://github.com/neovim/neovim/blob/master/CONTRIBUTING.md
See src/nvim/README.md for a high-level overview of the source code: See src/nvim/README.md for an overview of the source code.
https://github.com/neovim/neovim/blob/master/src/nvim/README.md
Type <M-]> to see the table of contents.
============================================================================== ==============================================================================
1. Design goals *design-goals* Design goals *design-goals*
Most important things come first (roughly). Most important things come first (roughly).
Note that quite a few items are contradicting. This is intentional. A Note that some items conflict; this is intentional. A balance must be found.
balance must be found between them.
NVIM IS... IMPROVED *design-improved* NVIM IS... IMPROVED *design-improved*
@@ -41,7 +38,7 @@ completely different editor. Extensions are done with a "Vi spirit".
- There are many first-time and inexperienced Vim users. Make it easy for - There are many first-time and inexperienced Vim users. Make it easy for
them to start using Vim and learn more over time. them to start using Vim and learn more over time.
- There is no limit to the features that can be added. Selecting new features - There is no limit to the features that can be added. Selecting new features
is one based on (1) what users ask for, (2) how much effort it takes to is based on (1) what users ask for, (2) how much effort it takes to
implement and (3) someone actually implementing it. implement and (3) someone actually implementing it.
@@ -56,20 +53,14 @@ Vim tries to help as many users on as many platforms as possible.
- Support many compilers and libraries. Not everybody is able or allowed to - Support many compilers and libraries. Not everybody is able or allowed to
install another compiler or GUI library. install another compiler or GUI library.
- People switch from one platform to another, and from GUI to terminal - People switch from one platform to another, and from GUI to terminal
version. Features should be present in all versions, or at least in as many version. Features should be present in all versions.
as possible with a reasonable effort. Try to avoid that users must switch
between platforms to accomplish their work efficiently.
- That a feature is not possible on some platforms, or only possible on one
platform, does not mean it cannot be implemented. [This intentionally
contradicts the previous item, these two must be balanced.]
NVIM IS... WELL DOCUMENTED *design-documented* NVIM IS... WELL DOCUMENTED *design-documented*
- A feature that isn't documented is a useless feature. A patch for a new - A feature that isn't documented is a useless feature. A patch for a new
feature must include the documentation. feature must include the documentation.
- Documentation should be comprehensive and understandable. Using examples is - Documentation should be comprehensive and understandable. Use examples.
recommended.
- Don't make the text unnecessarily long. Less documentation means that an - Don't make the text unnecessarily long. Less documentation means that an
item is easier to find. item is easier to find.
- Do not prefix doc-tags with "nvim-". Use |vim_diff.txt| to document - Do not prefix doc-tags with "nvim-". Use |vim_diff.txt| to document
@@ -77,12 +68,12 @@ NVIM IS... WELL DOCUMENTED *design-documented*
to mark a specific feature. No other distinction is necessary. to mark a specific feature. No other distinction is necessary.
- If a feature is removed, delete its doc entry and move its tag to - If a feature is removed, delete its doc entry and move its tag to
|vim_diff.txt|. |vim_diff.txt|.
- Move deprecated features to |deprecated.txt|.
NVIM IS... HIGH SPEED AND SMALL IN SIZE *design-speed-size* NVIM IS... HIGH SPEED AND SMALL IN SIZE *design-speed-size*
Using Vim must not be a big attack on system resources. Keep it small and Keep Nvim small and fast.
fast.
- Computers are becoming faster and bigger each year. Vim can grow too, but - Computers are becoming faster and bigger each year. Vim can grow too, but
no faster than computers are growing. Keep Vim usable on older systems. no faster than computers are growing. Keep Vim usable on older systems.
- Many users start Vim from a shell very often. Startup time must be short. - Many users start Vim from a shell very often. Startup time must be short.
@@ -118,11 +109,12 @@ NVIM IS... NOT *design-not*
Nvim is not an operating system; instead it should be composed with other Nvim is not an operating system; instead it should be composed with other
tools or hosted as a component. Marvim once said: "Unlike Emacs, Nvim does not tools or hosted as a component. Marvim once said: "Unlike Emacs, Nvim does not
include the kitchen sink... but you can use it for plumbing." include the kitchen sink... but it's good for plumbing."
============================================================================== ==============================================================================
2. Design decisions *design-decisions* Developer guidelines *dev-help*
JARGON *dev-jargon* JARGON *dev-jargon*
@@ -150,8 +142,7 @@ the xterm window, a window inside Vim to view a buffer.
To avoid confusion, other items that are sometimes called window have been To avoid confusion, other items that are sometimes called window have been
given another name. Here is an overview of the related items: given another name. Here is an overview of the related items:
screen The whole display. For the GUI it's something like 1024x768 screen The whole display.
pixels. The Vim shell can use the whole screen or part of it.
shell The Vim application. This can cover the whole screen (e.g., shell The Vim application. This can cover the whole screen (e.g.,
when running in a console) or part of it (xterm or GUI). when running in a console) or part of it (xterm or GUI).
window View on a buffer. There can be several windows in Vim, window View on a buffer. There can be several windows in Vim,
@@ -233,4 +224,23 @@ _not_ a Buffer). The common {action} "list" indicates that it lists all
bufs (plural) in the global context. bufs (plural) in the global context.
EXTERNAL UI *dev-ui*
External UIs should be aware of the |api-contract|. In particular, future
versions of Nvim may add optional, new items to existing events. The API is
strongly backwards-compatible, but clients must not break if new fields are
added to existing events.
External UIs are expected to implement some common features.
- Users may want to configure UI-specific options. The UI should publish the
|GUIEnter| autocmd after attaching to Nvim: >
doautocmd GUIEnter
- 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)
- cursor-shape change: 'guicursor' properties are sent in the mode_info_set UI
event.
vim:tw=78:ts=8:ft=help:norl: vim:tw=78:ts=8:ft=help:norl:

View File

@@ -1,20 +1,16 @@
*diff.txt* For Vim version 7.4. Last change: 2015 Nov 01 *diff.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
*diff* *diff-mode* *diff* *diff-mode*
This file describes |diff-mode|, which shows the differences between two, This file describes the |+diff| feature: Showing differences between two to
three, or four versions of the same file. eight versions of the same file.
The basics are explained in section |08.7| of the user manual. The basics are explained in section |08.7| of the user manual.
1. Starting diff mode |diff-mode| Type <M-]> to see the table of contents.
2. Viewing diffs |view-diffs|
3. Jumping to diffs |jumpto-diffs|
4. Copying diffs |copy-diffs|
5. Diff options |diff-options|
============================================================================== ==============================================================================
1. Starting diff mode 1. Starting diff mode
@@ -109,7 +105,7 @@ To make these commands use a vertical split, prepend |:vertical|. Examples: >
If you always prefer a vertical split include "vertical" in 'diffopt'. If you always prefer a vertical split include "vertical" in 'diffopt'.
*E96* *E96*
There can be up to four buffers with 'diff' set. There can be up to eight buffers with 'diff' set.
Since the option values are remembered with the buffer, you can edit another Since the option values are remembered with the buffer, you can edit another
file for a moment and come back to the same file and be in diff mode again. file for a moment and come back to the same file and be in diff mode again.
@@ -123,6 +119,8 @@ file for a moment and come back to the same file and be in diff mode again.
related options only happens in a window that has 'diff' set, related options only happens in a window that has 'diff' set,
if the current window does not have 'diff' set then no options if the current window does not have 'diff' set then no options
in it are changed. in it are changed.
Hidden buffers are also removed from the list of diff'ed
buffers.
The `:diffoff` command resets the relevant options to the values they had when The `:diffoff` command resets the relevant options to the values they had when
using `:diffsplit`, `:diffpatch` , `:diffthis`. or starting Vim in diff mode. using `:diffsplit`, `:diffpatch` , `:diffthis`. or starting Vim in diff mode.
@@ -156,7 +154,8 @@ The alignment of text will go wrong when:
All the buffers edited in a window where the 'diff' option is set will join in All the buffers edited in a window where the 'diff' option is set will join in
the diff. This is also possible for hidden buffers. They must have been the diff. This is also possible for hidden buffers. They must have been
edited in a window first for this to be possible. edited in a window first for this to be possible. To get rid of the hidden
buffers use `:diffoff!`.
*:DiffOrig* *diff-original-file* *:DiffOrig* *diff-original-file*
Since 'diff' is a window-local option, it's possible to view the same buffer Since 'diff' is a window-local option, it's possible to view the same buffer

View File

@@ -1,4 +1,4 @@
*digraph.txt* For Vim version 7.4. Last change: 2014 Jun 19 *digraph.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -14,9 +14,7 @@ with CTRL-V (see |i_CTRL-V|).
There is a brief introduction on digraphs in the user manual: |24.9| There is a brief introduction on digraphs in the user manual: |24.9|
An alternative is using the 'keymap' option. An alternative is using the 'keymap' option.
1. Defining digraphs |digraphs-define| Type <M-]> to see the table of contents.
2. Using digraphs |digraphs-use|
3. Default digraphs |digraphs-default|
============================================================================== ==============================================================================
1. Defining digraphs *digraphs-define* 1. Defining digraphs *digraphs-define*

View File

@@ -1,4 +1,4 @@
*editing.txt* For Vim version 7.4. Last change: 2016 Mar 28 *editing.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -6,17 +6,7 @@
Editing files *edit-files* Editing files *edit-files*
1. Introduction |edit-intro| Type <M-]> to see the table of contents.
2. Editing a file |edit-a-file|
3. The argument list |argument-list|
4. Writing |writing|
5. Writing and quitting |write-quit|
6. Dialogs |edit-dialogs|
7. The current directory |current-directory|
8. Editing binary files |edit-binary|
9. Encryption |encryption|
10. Timestamps |timestamps|
11. File Searching |file-searching|
============================================================================== ==============================================================================
1. Introduction *edit-intro* 1. Introduction *edit-intro*
@@ -160,7 +150,8 @@ start editing another file, Vim will refuse this. In order to overrule this
protection, add a '!' to the command. The changes will then be lost. For protection, add a '!' to the command. The changes will then be lost. For
example: ":q" will not work if the buffer was changed, but ":q!" will. To see example: ":q" will not work if the buffer was changed, but ":q!" will. To see
whether the buffer was changed use the "CTRL-G" command. The message includes whether the buffer was changed use the "CTRL-G" command. The message includes
the string "[Modified]" if the buffer has been changed. the string "[Modified]" if the buffer has been changed, or "+" if the 'm' flag
is in 'shortmess'.
If you want to automatically save the changes without asking, switch on the If you want to automatically save the changes without asking, switch on the
'autowriteall' option. 'autowrite' is the associated Vi-compatible option 'autowriteall' option. 'autowrite' is the associated Vi-compatible option
@@ -1046,10 +1037,12 @@ The names can be in upper- or lowercase.
edited. See |:confirm| and 'confirm'. edited. See |:confirm| and 'confirm'.
:q[uit]! Quit without writing, also when the current buffer has :q[uit]! Quit without writing, also when the current buffer has
changes. If this is the last window and there is a changes. The buffer is unloaded, also when it has
modified hidden buffer, the current buffer is 'hidden' set.
abandoned and the first changed hidden buffer becomes If this is the last window and there is a modified
the current buffer. hidden buffer, the current buffer is abandoned and the
first changed hidden buffer becomes the current
buffer.
Use ":qall!" to exit always. Use ":qall!" to exit always.
:cq[uit] Quit always, without writing, and return an error :cq[uit] Quit always, without writing, and return an error
@@ -1150,7 +1143,7 @@ Examples: >
If you want to always use ":confirm", set the 'confirm' option. If you want to always use ":confirm", set the 'confirm' option.
*:browse* *:bro* *E338* *E614* *E615* *E616* *E578* *:browse* *:bro* *E338* *E614* *E615* *E616*
:bro[wse] {command} Open a file selection dialog for an argument to :bro[wse] {command} Open a file selection dialog for an argument to
{command}. At present this works for |:e|, |:w|, {command}. At present this works for |:e|, |:w|,
|:wall|, |:wq|, |:wqall|, |:x|, |:xall|, |:exit|, |:wall|, |:wq|, |:wqall|, |:x|, |:xall|, |:exit|,

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
*farsi.txt* For Vim version 7.4. Last change: 2010 Aug 07 *farsi.txt* Nvim
VIM REFERENCE MANUAL by Mortaza Ghassab Shiran VIM REFERENCE MANUAL by Mortaza Ghassab Shiran

View File

@@ -1,4 +1,4 @@
*filetype.txt* For Vim version 7.4. Last change: 2015 Dec 06 *filetype.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -6,12 +6,10 @@
Filetypes *filetype* *file-type* Filetypes *filetype* *file-type*
1. Filetypes |filetypes|
2. Filetype plugin |filetype-plugins|
3. Docs for the default filetype plugins. |ftplugin-docs|
Also see |autocmd.txt|. Also see |autocmd.txt|.
Type <M-]> to see the table of contents.
============================================================================== ==============================================================================
1. Filetypes *filetypes* *file-types* 1. Filetypes *filetypes* *file-types*
@@ -521,6 +519,8 @@ To use Nvim as a manpager: >
man.vim will always attempt to reuse the closest man window (above/left) but man.vim will always attempt to reuse the closest man window (above/left) but
otherwise create a split. otherwise create a split.
The case sensitivity of completion is controlled by 'fileignorecase'.
Commands: Commands:
Man {name} Display the manpage for {name}. Man {name} Display the manpage for {name}.
Man {sect} {name} Display the manpage for {name} and section {sect}. Man {sect} {name} Display the manpage for {name} and section {sect}.
@@ -540,6 +540,7 @@ K or CTRL-] Jump to the manpage for the <cWORD> under the
cursor. Takes a count for the section. cursor. Takes a count for the section.
CTRL-T Jump back to the location that the manpage was CTRL-T Jump back to the location that the manpage was
opened from. opened from.
META-] Show the manpage outline in the |location-list|.
q :quit if invoked as $MANPAGER, otherwise :close. q :quit if invoked as $MANPAGER, otherwise :close.
Variables: Variables:
@@ -563,6 +564,17 @@ These maps can be disabled with >
:let g:no_pdf_maps = 1 :let g:no_pdf_maps = 1
< <
PYTHON *ft-python-plugin* *PEP8*
By default the following options are set, in accordance with PEP8: >
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
To disable this behaviour, set the following variable in your vimrc: >
let g:python_recommended_style = 0
RPM SPEC *ft-spec-plugin* RPM SPEC *ft-spec-plugin*
Since the text for this plugin is rather long it has been put in a separate Since the text for this plugin is rather long it has been put in a separate

View File

@@ -1,4 +1,4 @@
*fold.txt* For Vim version 7.4. Last change: 2016 Jan 02 *fold.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -9,10 +9,7 @@ Folding *Folding* *folding* *folds*
You can find an introduction on folding in chapter 28 of the user manual. You can find an introduction on folding in chapter 28 of the user manual.
|usr_28.txt| |usr_28.txt|
1. Fold methods |fold-methods| Type <M-]> to see the table of contents.
2. Fold commands |fold-commands|
3. Fold options |fold-options|
4. Behavior of folds |fold-behavior|
============================================================================== ==============================================================================
1. Fold methods *fold-methods* 1. Fold methods *fold-methods*

View File

@@ -1,4 +1,4 @@
*ft_ada.txt* For Vim version 7.4. Last change: 2010 Jul 20 *ft_ada.txt* Nvim
ADA FILE TYPE PLUG-INS REFERENCE MANUAL~ ADA FILE TYPE PLUG-INS REFERENCE MANUAL~

View File

@@ -1,4 +1,4 @@
*ft_sql.txt* For Vim version 7.4. Last change: 2013 May 15 *ft_sql.txt* Nvim
by David Fishburn by David Fishburn

View File

@@ -1,4 +1,4 @@
*gui.txt* For Vim version 7.4. Last change: 2014 Mar 08 *gui.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -6,34 +6,17 @@
Vim's Graphical User Interface *gui* *GUI* Vim's Graphical User Interface *gui* *GUI*
1. Starting the GUI |gui-start| Type <M-]> to see the table of contents.
2. Scrollbars |gui-scrollbars|
3. Mouse Control |gui-mouse|
4. Making GUI Selections |gui-selections|
5. Menus |menus|
6. Extras |gui-extras|
Other GUI documentation:
|gui_w32.txt| For specific items of the Win32 GUI.
============================================================================== ==============================================================================
1. Starting the GUI *gui-start* *E229* *E233* 1. Starting the GUI *gui-start* *E229* *E233*
First you must make sure you actually have a version of Vim with the GUI code
included.
How to start the GUI depends on the system used. Mostly you can run the
GUI version of Vim with:
gvim [options] [files...]
*ginit.vim* *gui-init* *gvimrc* *$MYGVIMRC* *ginit.vim* *gui-init* *gvimrc* *$MYGVIMRC*
The gvimrc file is where GUI-specific startup commands should be placed. It The gvimrc file is where GUI-specific startup commands should be placed. It
is always sourced after the |init.vim| file. If you have one then the is always sourced after the |init.vim| file. If you have one then the
$MYGVIMRC environment variable has its name. $MYGVIMRC environment variable has its name.
When the GUI starts up initializations are carried out, in this order: When the GUI starts up initializations are carried out, in this order:
- The 'term' option is set to "builtin_gui" and terminal options are reset to
their default value for the GUI |terminal-options|.
- If the system menu file exists, it is sourced. The name of this file is - If the system menu file exists, it is sourced. The name of this file is
normally "$VIMRUNTIME/menu.vim". You can check this with ":version". Also normally "$VIMRUNTIME/menu.vim". You can check this with ":version". Also
see |$VIMRUNTIME|. To skip loading the system menu include 'M' in see |$VIMRUNTIME|. To skip loading the system menu include 'M' in
@@ -83,28 +66,6 @@ Recommended place for your personal GUI initializations:
The personal initialization files are searched in the order specified above The personal initialization files are searched in the order specified above
and only the first one that is found is read. and only the first one that is found is read.
There are a number of options which only have meaning in the GUI version of
Vim. These are 'guicursor', 'guifont', and 'guioptions'. They are
documented in |options.txt| with all the other options.
Another way to set the colors for different occasions is with highlight
groups. The "Normal" group is used to set the background and foreground
colors. Example (which looks nice): >
:highlight Normal guibg=grey90
The "guibg" and "guifg" settings override the normal background and
foreground settings. The other settings for the Normal highlight group are
not used. Use the 'guifont' option to set the font.
Also check out the 'guicursor' option, to set the colors for the cursor in
various modes.
Vim tries to make the window fit on the screen when it starts up. This avoids
that you can't see part of it. On the X Window System this requires a bit of
guesswork. You can change the height that is used for the window title and a
task bar with the 'guiheadroom' option.
*:winp* *:winpos* *E188* *:winp* *:winpos* *E188*
:winp[os] :winp[os]
Display current position of the top left corner of the GUI vim Display current position of the top left corner of the GUI vim
@@ -114,8 +75,7 @@ task bar with the 'guiheadroom' option.
:winp[os] {X} {Y} *E466* :winp[os] {X} {Y} *E466*
Put the GUI vim window at the given {X} and {Y} coordinates. Put the GUI vim window at the given {X} and {Y} coordinates.
The coordinates should specify the position in pixels of the The coordinates should specify the position in pixels of the
top left corner of the window. Does not work in all versions. top left corner of the window.
Does work in an (new) xterm |xterm-color|.
When the GUI window has not been opened yet, the values are When the GUI window has not been opened yet, the values are
remembered until the window is opened. The position is remembered until the window is opened. The position is
adjusted to make the window fit on the screen (if possible). adjusted to make the window fit on the screen (if possible).
@@ -124,21 +84,6 @@ task bar with the 'guiheadroom' option.
:win[size] {width} {height} :win[size] {width} {height}
Set the window height to {width} by {height} characters. Set the window height to {width} by {height} characters.
Obsolete, use ":set lines=11 columns=22". Obsolete, use ":set lines=11 columns=22".
If you get less lines than expected, check the 'guiheadroom'
option.
If you are running the X Window System, you can get information about the
window Vim is running in with these commands: >
:!xwininfo -id $WINDOWID
:!xprop -id $WINDOWID
:execute '!xwininfo -id ' . v:windowid
:execute '!xprop -id ' . v:windowid
<
*gui-IME* *iBus*
Input methods for international characters in X that rely on the XIM
framework, most notably iBus, have been known to produce undesirable results
in gVim. These may include an inability to enter spaces, or long delays
between typing a character and it being recognized by the application.
============================================================================== ==============================================================================
2. Scrollbars *gui-scrollbars* 2. Scrollbars *gui-scrollbars*

View File

@@ -1,4 +1,4 @@
*hebrew.txt* For Vim version 7.4. Last change: 2007 Jun 14 *hebrew.txt* Nvim
VIM REFERENCE MANUAL by Ron Aaron (and Avner Lottem) VIM REFERENCE MANUAL by Ron Aaron (and Avner Lottem)

View File

@@ -1,4 +1,4 @@
*help.txt* For Vim version 7.4. Last change: 2016 Mar 31 *help.txt* Nvim
VIM - main help file VIM - main help file
k k
@@ -96,7 +96,6 @@ General subjects ~
|howto.txt| how to do the most common editing tasks |howto.txt| how to do the most common editing tasks
|tips.txt| various tips on using Vim |tips.txt| various tips on using Vim
|message.txt| (error) messages and explanations |message.txt| (error) messages and explanations
|quotes.txt| remarks from users of Vim
|develop.txt| development of Vim |develop.txt| development of Vim
|debug.txt| debugging Vim itself |debug.txt| debugging Vim itself
|uganda.txt| Vim distribution conditions and what to do with your money |uganda.txt| Vim distribution conditions and what to do with your money
@@ -149,28 +148,22 @@ Special issues ~
GUI ~ GUI ~
|gui.txt| Graphical User Interface (GUI) |gui.txt| Graphical User Interface (GUI)
|gui_w32.txt| Win32 GUI
Interfaces ~ Interfaces ~
|if_cscop.txt| using Cscope with Vim |if_cscop.txt| using Cscope with Vim
|if_pyth.txt| Python interface |if_pyth.txt| Python interface
|if_ruby.txt| Ruby interface |if_ruby.txt| Ruby interface
|debugger.txt| Interface with a debugger
|sign.txt| debugging signs |sign.txt| debugging signs
Versions ~ Versions ~
|vim_diff.txt| Main differences between Nvim and Vim |vim_diff.txt| Main differences between Nvim and Vim
|vi_diff.txt| Main differences between Vim and Vi |vi_diff.txt| Main differences between Vim and Vi
*sys-file-list*
Remarks about specific systems ~
|os_win32.txt| MS-Windows
*standard-plugin-list* *standard-plugin-list*
Standard plugins ~ Standard plugins ~
|pi_gzip.txt| Reading and writing compressed files |pi_gzip.txt| Reading and writing compressed files
|pi_netrw.txt| Reading and writing files over a network |pi_netrw.txt| Reading and writing files over a network
|pi_paren.txt| Highlight matching parens |pi_paren.txt| Highlight matching parens
|pi_tar.txt| Tar file explorer |pi_tar.txt| Tar file explorer
|pi_vimball.txt| Create a self-installing Vim script
|pi_zip.txt| Zip archive explorer |pi_zip.txt| Zip archive explorer
LOCAL ADDITIONS: *local-additions* LOCAL ADDITIONS: *local-additions*

View File

@@ -1,4 +1,4 @@
*helphelp.txt* For Vim version 7.4. Last change: 2016 Apr 01 *helphelp.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -6,9 +6,7 @@
Help on help files *helphelp* Help on help files *helphelp*
1. Help commands |online-help| Type <M-]> to see the table of contents.
2. Translated help files |help-translated|
3. Writing help files |help-writing|
============================================================================== ==============================================================================
1. Help commands *online-help* 1. Help commands *online-help*
@@ -25,12 +23,20 @@ Help on help files *helphelp*
The 'helplang' option is used to select a language, if The 'helplang' option is used to select a language, if
the main help file is available in several languages. the main help file is available in several languages.
Type <M-]> to see the table of contents.
*{subject}* *E149* *E661* *{subject}* *E149* *E661*
:h[elp] {subject} Like ":help", additionally jump to the tag {subject}. :h[elp] {subject} Like ":help", additionally jump to the tag {subject}.
{subject} can include wildcards like "*", "?" and For example: >
:help options
< {subject} can include wildcards such as "*", "?" and
"[a-z]": "[a-z]":
:help z? jump to help for any "z" command :help z? jump to help for any "z" command
:help z. jump to the help for "z." :help z. jump to the help for "z."
But when a tag exists it is taken literally:
:help :? jump to help for ":?"
If there is no full match for the pattern, or there If there is no full match for the pattern, or there
are several matches, the "best" match will be used. are several matches, the "best" match will be used.
A sophisticated algorithm is used to decide which A sophisticated algorithm is used to decide which
@@ -67,18 +73,19 @@ Help on help files *helphelp*
example to find help for CTRL-V in Insert mode: > example to find help for CTRL-V in Insert mode: >
:help i^V :help i^V
< <
To use a regexp |pattern|, first do ":help" and then It is also possible to first do ":help" and then
use ":tag {pattern}" in the help window. The use ":tag {pattern}" in the help window. The
":tnext" command can then be used to jump to other ":tnext" command can then be used to jump to other
matches, "tselect" to list matches and choose one. > matches, "tselect" to list matches and choose one. >
:help index| :tse z. :help index
:tselect /.*mode
< When there is no argument you will see matches for < When there is no argument you will see matches for
"help", to avoid listing all possible matches (that "help", to avoid listing all possible matches (that
would be very slow). would be very slow).
The number of matches displayed is limited to 300. The number of matches displayed is limited to 300.
This command can be followed by '|' and another The `:help` command can be followed by '|' and another
command, but you don't need to escape the '|' inside a command, but you don't need to escape the '|' inside a
help command. So these both work: > help command. So these both work: >
:help | :help |
@@ -185,7 +192,7 @@ command: >
< <
*:helpt* *:helptags* *:helpt* *:helptags*
*E154* *E150* *E151* *E152* *E153* *E670* *E154* *E150* *E151* *E152* *E153* *E670* *E856*
:helpt[ags] [++t] {dir} :helpt[ags] [++t] {dir}
Generate the help tags file(s) for directory {dir}. Generate the help tags file(s) for directory {dir}.
When {dir} is ALL then all "doc" directories in When {dir} is ALL then all "doc" directories in

View File

@@ -1,4 +1,4 @@
*howto.txt* For Vim version 7.4. Last change: 2006 Apr 02 *howto.txt* Nvim
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar

View File

@@ -1,4 +1,4 @@
*if_cscop.txt* For Vim version 7.4. Last change: 2011 Jun 12 *if_cscop.txt* Nvim
VIM REFERENCE MANUAL by Andy Kahn VIM REFERENCE MANUAL by Andy Kahn
@@ -12,15 +12,7 @@ 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 so that with the right keyboard mappings, you can jump back and forth between
functions as you normally would with |tags|. functions as you normally would with |tags|.
1. Cscope introduction |cscope-intro| Type <M-]> to see the table of contents.
2. Cscope related commands |cscope-commands|
3. Cscope options |cscope-options|
4. How to use cscope in Vim |cscope-howtouse|
5. Limitations |cscope-limitations|
6. Suggested usage |cscope-suggestions|
7. Availability & Information |cscope-info|
This is currently for Unix and Win32 only.
============================================================================== ==============================================================================
1. Cscope introduction *cscope-intro* 1. Cscope introduction *cscope-intro*
@@ -96,8 +88,8 @@ command does the same and also splits the window (short: "scs").
The available subcommands are: The available subcommands are:
*E563* *E564* *E566* *E568* *E569* *E622* *E623* *E563* *E564* *E566* *E568* *E622* *E623* *E625*
*E625* *E626* *E609* *E626* *E609*
add : Add a new cscope database/connection. add : Add a new cscope database/connection.
USAGE :cs add {file|dir} [pre-path] [flags] USAGE :cs add {file|dir} [pre-path] [flags]

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