aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorckelsel <ckelsel@hotmail.com>2017-08-05 09:56:31 +0800
committerckelsel <ckelsel@hotmail.com>2017-08-05 09:56:31 +0800
commit0743684199238006331032ca26a947c579c59a5e (patch)
tree1d5bb4969bcf901e9d1ecd8472856f9c93883c66
parent9b3ed62b5a841c24f798f1fcc4adb3cfe7667b5b (diff)
parent37dd5ded7c74d70358ab0539d6ed978816b778f5 (diff)
downloadrneovim-0743684199238006331032ca26a947c579c59a5e.tar.gz
rneovim-0743684199238006331032ca26a947c579c59a5e.tar.bz2
rneovim-0743684199238006331032ca26a947c579c59a5e.zip
Merge remote-tracking branch 'upstream/master'
-rw-r--r--runtime/doc/autocmd.txt14
-rw-r--r--runtime/doc/develop.txt20
-rw-r--r--runtime/doc/eval.txt2
-rw-r--r--runtime/doc/help.txt3
-rw-r--r--runtime/doc/nvim_terminal_emulator.txt40
-rw-r--r--runtime/doc/options.txt2
-rw-r--r--runtime/doc/os_win32.txt179
-rw-r--r--runtime/doc/term.txt22
-rw-r--r--runtime/doc/various.txt15
-rw-r--r--runtime/doc/vim_diff.txt2
-rw-r--r--runtime/doc/windows.txt3
-rwxr-xr-xscripts/vim-patch.sh2
-rw-r--r--src/nvim/ex_cmds.lua8
-rw-r--r--src/nvim/ex_docmd.c2
-rw-r--r--src/nvim/if_cscope.c302
-rw-r--r--src/nvim/testdir/test49.vim3
-rw-r--r--src/nvim/version.c2
-rw-r--r--test/functional/core/job_spec.lua4
18 files changed, 171 insertions, 454 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 2a98d08c4e..fd2a7c2641 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -920,7 +920,7 @@ TermClose When a terminal buffer ends.
{Nvim} *TermOpen*
TermOpen When a terminal buffer is starting. This can
be used to configure the terminal emulator by
- setting buffer variables. |terminal-emulator|
+ setting buffer variables. |terminal|
*TermResponse*
TermResponse After the response to |t_RV| is received from
the terminal. The value of |v:termresponse|
@@ -967,9 +967,9 @@ VimEnter After doing all the startup stuff, including
VimLeave Before exiting Vim, just after writing the
.shada file. Executed only once, like
VimLeavePre.
- To detect an abnormal exit use |v:dying|.
- When v:dying is 2 or more this event is not
- triggered.
+< Use |v:dying| to detect an abnormal exit.
+ Use |v:exiting| to get the exit code.
+ Not triggered if |v:dying| is 2 or more.
*VimLeavePre*
VimLeavePre Before exiting Vim, just before writing the
.shada file. This is executed only once,
@@ -977,9 +977,9 @@ VimLeavePre Before exiting Vim, just before writing the
happens to be the current buffer when exiting.
Mostly useful with a "*" pattern. >
:autocmd VimLeavePre * call CleanupStuff()
-< To detect an abnormal exit use |v:dying|.
- When v:dying is 2 or more this event is not
- triggered.
+< Use |v:dying| to detect an abnormal exit.
+ Use |v:exiting| to get the exit code.
+ Not triggered if |v:dying| is 2 or more.
*VimResized*
VimResized After the Vim window was resized, thus 'lines'
and/or 'columns' changed. Not when starting
diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt
index 7fd1f90173..5d5523e73f 100644
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -63,12 +63,6 @@ NVIM IS... WELL DOCUMENTED *design-documented*
- Documentation should be comprehensive and understandable. Use examples.
- Don't make the text unnecessarily long. Less documentation means that an
item is easier to find.
-- Do not prefix doc-tags with "nvim-". Use |vim_diff.txt| to document
- differences from Vim. The {Nvim} annotation is also available
- to mark a specific feature. No other distinction is necessary.
-- If a feature is removed, delete its doc entry and move its tag to
- |vim_diff.txt|.
-- Move deprecated features to |deprecated.txt|.
NVIM IS... HIGH SPEED AND SMALL IN SIZE *design-speed-size*
@@ -113,7 +107,7 @@ include the kitchen sink... but it's good for plumbing."
==============================================================================
-Developer guidelines *dev-help*
+Developer guidelines *dev*
JARGON *dev-jargon*
@@ -192,6 +186,18 @@ defined if a valid external Python host is found. That works well with the
Python host isn't installed then the plugin will "think" it is running in
a Vim compiled without the |+python| feature.
+DOCUMENTATION *dev-doc*
+
+- Do not prefix help tags with "nvim-". Use |vim_diff.txt| to document
+ differences from Vim; no other distinction is necessary.
+- If a Vim feature is removed, delete its help section and move its tag to
+ |vim_diff.txt|.
+- Move deprecated features to |deprecated.txt|.
+- Use consistent language.
+ - "terminal" in a help tag always means "the embedded terminal emulator", not
+ "the user host terminal".
+ - Use "tui-" to prefix help tags related to the host terminal, and "TUI"
+ in prose if possible.
API *dev-api*
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index f4573d7617..dd8aec895d 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -7641,7 +7641,7 @@ termopen({cmd}[, {opts}]) {Nvim} *termopen()*
and `$TERM` is set to "xterm-256color".
Returns the same values as |jobstart()|.
- See |terminal-emulator| for more information.
+ See |terminal| for more information.
test_garbagecollect_now() *test_garbagecollect_now()*
Like garbagecollect(), but executed right away. This must
diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt
index 7cba0b9894..1eda111297 100644
--- a/runtime/doc/help.txt
+++ b/runtime/doc/help.txt
@@ -96,7 +96,7 @@ General subjects ~
|howto.txt| how to do the most common editing tasks
|tips.txt| various tips on using Vim
|message.txt| (error) messages and explanations
-|develop.txt| development of Vim
+|develop.txt| development of Nvim
|debug.txt| debugging Vim itself
|uganda.txt| Vim distribution conditions and what to do with your money
@@ -134,7 +134,6 @@ Advanced editing ~
Special issues ~
|print.txt| printing
|remote.txt| using Vim as a server or client
-|term.txt| using different terminals and mice
|digraph.txt| list of available digraphs
|mbyte.txt| multi-byte text support
|mlang.txt| non-English language support
diff --git a/runtime/doc/nvim_terminal_emulator.txt b/runtime/doc/nvim_terminal_emulator.txt
index 801ff75647..4527a14710 100644
--- a/runtime/doc/nvim_terminal_emulator.txt
+++ b/runtime/doc/nvim_terminal_emulator.txt
@@ -10,15 +10,18 @@ Nvim embeds a VT220/xterm terminal emulator based on libvterm. The terminal is
presented as a special buffer type, asynchronously updated from the virtual
terminal as data is received from the program connected to it.
-Terminal buffers behave mostly like normal 'nomodifiable' buffers, except:
-- Plugins can set 'modifiable' to modify text, but lines cannot be deleted.
-- 'scrollback' controls how many off-screen lines are kept.
-- Terminal output is followed if the cursor is on the last line.
+Terminal buffers behave like normal buffers, except:
+- With 'modifiable', lines can be edited but not deleted.
+- 'scrollback' controls how many lines are kept.
+- Output is followed if the cursor is on the last line.
+- 'modified' is the default. You can set 'nomodified' to avoid a warning when
+ closing the terminal buffer.
+- 'bufhidden' defaults to "hide".
Type <M-]> to see the table of contents.
==============================================================================
-Spawning *terminal-emulator-spawning*
+Start *terminal-start*
There are 3 ways to create a terminal buffer:
@@ -35,13 +38,12 @@ There are 3 ways to create a terminal buffer:
autocmd VimEnter * nested split term://sh
< This is only mentioned for reference; use |:terminal| instead.
-When the terminal spawns the program, the buffer will start to mirror the
-terminal display and change its name to `term://{cwd}//{pid}:{cmd}`.
-The "term://..." scheme enables |:mksession| to "restore" a terminal buffer by
-restarting the {cmd} when the session is loaded.
+When the terminal starts, the buffer contents are updated and the buffer is
+named in the form of `term://{cwd}//{pid}:{cmd}`. This naming scheme is used
+by |:mksession| to restore a terminal buffer (by restarting the {cmd}).
==============================================================================
-Input *terminal-emulator-input*
+Input *terminal-input*
To send input, enter |Terminal-mode| using any command that would enter "insert
mode" in a normal buffer, such as |i| or |:startinsert|. In this mode all keys
@@ -83,9 +85,9 @@ Mouse input has the following behavior:
the terminal wont lose focus and the hovered window will be scrolled.
==============================================================================
-Configuration *terminal-emulator-configuration*
+Configuration *terminal-configuration*
-Options: 'scrollback'
+Options: 'modified', 'scrollback'
Events: |TermOpen|, |TermClose|
Highlight groups: |hl-TermCursor|, |hl-TermCursorNC|
@@ -99,17 +101,15 @@ global configuration.
You can change the defaults with a TermOpen autocommand: >
au TermOpen * setlocal list
-Terminal colors can be customized with these variables:
+TERMINAL COLORS ~
-- `{g,b}:terminal_color_$NUM`: The terminal color palette, where `$NUM` is the
- color index, between 0 and 255 inclusive. This setting only affects UIs with
- RGB capabilities; for normal terminals the color index is simply forwarded.
-
-The `{g,b}:terminal_color_$NUM` variables are processed only when the terminal
-starts (after |TermOpen|).
+The `{g,b}:terminal_color_$NUM` variables control the terminal color palette,
+where `$NUM` is the color index between 0 and 255 inclusive. This setting only
+affects UIs with RGB capabilities; for normal terminals the color index is
+just forwarded. The variables are read only during |TermOpen|.
==============================================================================
-Status Variables *terminal-emulator-status*
+Status Variables *terminal-status*
Terminal buffers maintain some information about the terminal in buffer-local
variables:
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 6406bfe03b..c6965648ef 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -4794,7 +4794,7 @@ A jump table for the options with a short description can be found at |Q_op|.
local to buffer
Maximum number of lines kept beyond the visible screen. Lines at the
top are deleted if new lines exceed this limit.
- Only in |terminal-emulator| buffers. 'buftype'
+ Only in |terminal| buffers.
-1 means "unlimited" for normal buffers, 100000 otherwise.
Minimum is 1.
diff --git a/runtime/doc/os_win32.txt b/runtime/doc/os_win32.txt
deleted file mode 100644
index 4b012712fc..0000000000
--- a/runtime/doc/os_win32.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-*os_win32.txt* Nvim
-
-
- NVIM REFERENCE MANUAL
-
-
- *win32* *Win32* *MS-Windows*
-This file documents the Win32 version of Nvim.
-
-==============================================================================
-1. Known problems *win32-problems*
-
-When doing file name completion, Vim also finds matches for the short file
-name. But Vim will still find and use the corresponding long file name. For
-example, if you have the long file name "this_is_a_test" with the short file
-name "this_i~1", the command ":e *1" will start editing "this_is_a_test".
-
-==============================================================================
-2. Startup *win32-startup*
-
-Current directory *win32-curdir*
-
-If Vim is started with a single file name argument, and it has a full path
-(starts with "x:\"), Vim assumes it was started from the file explorer and
-will set the current directory to where that file is. To avoid this when
-typing a command to start Vim, use a forward slash instead of a backslash.
-Example: >
-
- vim c:\text\files\foo.txt
-
-Will change to the "C:\text\files" directory. >
-
- vim c:/text\files\foo.txt
-
-Will use the current directory.
-
-
-Term option *win32-term*
-
-The only kind of terminal type that the Win32 version of Vim understands is
-"win32", which is built-in. If you set 'term' to anything else, you will
-probably get very strange behavior from Vim. Therefore Vim does not obtain
-the default value of 'term' from the environment variable "TERM".
-
-$PATH *win32-PATH*
-
-The directory of the Vim executable is appended to $PATH. This is mostly to
-make "!xxd" work, as it is in the Tools menu. And it also means that when
-executable() returns 1 the executable can actually be executed.
-
-Quotes in file names *win32-quotes*
-
-Quotes inside a file name (or any other command line argument) can be escaped
-with a backslash. E.g. >
- vim -c "echo 'foo\"bar'"
-
-Alternatively use three quotes to get one: >
- vim -c "echo 'foo"""bar'"
-
-The quotation rules are:
-
-1. A `"` starts quotation.
-2. Another `"` or `""` ends quotation. If the quotation ends with `""`, a `"`
- is produced at the end of the quoted string.
-
-Examples, with [] around an argument:
- "foo" -> [foo]
- "foo"" -> [foo"]
- "foo"bar -> [foobar]
- "foo" bar -> [foo], [bar]
- "foo""bar -> [foo"bar]
- "foo"" bar -> [foo"], [bar]
- "foo"""bar" -> [foo"bar]
-
-
-==============================================================================
-3. Using the mouse *win32-mouse*
-
-The Win32 version of Vim supports using the mouse. If you have a two-button
-mouse, the middle button can be emulated by pressing both left and right
-buttons simultaneously - but note that in the Win32 GUI, if you have the right
-mouse button pop-up menu enabled (see 'mouse'), you should err on the side of
-pressing the left button first. |mouse-using|
-
-When the mouse doesn't work, try disabling the "Quick Edit Mode" feature of
-the console.
-
-==============================================================================
-4. Win32 mini FAQ *win32-faq*
-
-Q. How do I change the font?
-A. In the GUI version, you can use the 'guifont' option. Example: >
- :set guifont=Lucida_Console:h15:cDEFAULT
-< In the console version, you need to set the font of the console itself.
- You cannot do this from within Vim.
-
-Q. I'm using Vim to edit a symbolically linked file on a Unix NFS file server.
- When I write the file, Vim does not "write through" the symlink. Instead,
- it deletes the symbolic link and creates a new file in its place. Why?
-A. On Unix, Vim is prepared for links (symbolic or hard). A backup copy of
- the original file is made and then the original file is overwritten. This
- assures that all properties of the file remain the same. On non-Unix
- systems, the original file is renamed and a new file is written. Only the
- protection bits are set like the original file. However, this doesn't work
- properly when working on an NFS-mounted file system where links and other
- things exist. The only way to fix this in the current version is not
- making a backup file, by ":set nobackup nowritebackup" |'writebackup'|
-
-Q. I'm using Vim to edit a file on a Unix file server through Samba. When I
- write the file, the owner of the file is changed. Why?
-A. When writing a file Vim renames the original file, this is a backup (in
- case writing the file fails halfway). Then the file is written as a new
- file. Samba then gives it the default owner for the file system, which may
- differ from the original owner.
- To avoid this set the 'backupcopy' option to "yes". Vim will then make a
- copy of the file for the backup, and overwrite the original file. The
- owner isn't changed then.
-
-Q. How do I get to see the output of ":make" while it's running?
-A. Basically what you need is to put a tee program that will copy its input
- (the output from make) to both stdout and to the errorfile. You can find a
- copy of tee (and a number of other GNU tools) at
- http://gnuwin32.sourceforge.net or http://unxutils.sourceforge.net
- Alternatively, try the more recent Cygnus version of the GNU tools at
- http://www.cygwin.com Other Unix-style tools for Win32 are listed at
- http://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/
- When you do get a copy of tee, you'll need to add >
- :set shellpipe=\|\ tee
-< to your _vimrc.
-
- *:!start*
-Q. How can I run an external command or program asynchronously?
-A. When using :! to run an external command, you can run it with "start": >
- :!start winfile.exe<CR>
-< Using "start" stops Vim switching to another screen, opening a new console,
- or waiting for the program to complete; it indicates that you are running a
- program that does not affect the files you are editing. Programs begun
- with :!start do not get passed Vim's open file handles, which means they do
- not have to be closed before Vim.
- To avoid this special treatment, use ":! start".
- There are two optional arguments (see the next Q):
- /min the window will be minimized
- /b no console window will be opened
- You can use only one of these flags at a time. A second one will be
- treated as the start of the command.
-
-Q. How do I avoid getting a window for programs that I run asynchronously?
-A. You have two possible solutions depending on what you want:
- 1) You may use the /min flag in order to run program in a minimized state
- with no other changes. It will work equally for console and GUI
- applications.
- 2) You can use the /b flag to run console applications without creating a
- console window for them (GUI applications are not affected). But you
- should use this flag only if the application you run doesn't require any
- input. Otherwise it will get an EOF error because its input stream
- (stdin) would be redirected to \\.\NUL (stdout and stderr too).
-
- Example for a console application, run Exuberant ctags: >
- :!start /min ctags -R .
-< When it has finished you should see file named "tags" in your current
- directory. You should notice the window title blinking on your taskbar.
- This is more noticeable for commands that take longer.
- Now delete the "tags" file and run this command: >
- :!start /b ctags -R .
-< You should have the same "tags" file, but this time there will be no
- blinking on the taskbar.
- Example for a GUI application: >
- :!start /min notepad
- :!start /b notepad
-< The first command runs notepad minimized and the second one runs it
- normally.
-
- *windows-icon*
-Q. I don't like the Vim icon, can I change it?
-A. Yes, place your favorite icon in bitmaps/vim.ico in a directory of
- 'runtimepath'. For example ~/vimfiles/bitmaps/vim.ico.
-
-
- vim:tw=78:fo=tcq2:ts=8:ft=help:norl:
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index 38900dd826..d99f9b7160 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -4,7 +4,7 @@
NVIM REFERENCE MANUAL
-Terminal information
+Terminal UI *tui*
Nvim (except in |--headless| mode) uses information about the terminal you are
using to present a built-in UI. If that information is not correct, the
@@ -225,14 +225,7 @@ On Unix systems, three methods are tried to get the window size:
If everything fails a default size of 24 lines and 80 columns is assumed. If
a window-resize signal is received the size will be set again. If the window
size is wrong you can use the 'lines' and 'columns' options to set the
-correct values.
-
-One command can be used to set the screen size:
-
- *:mod* *:mode*
-:mod[e]
-
-Detects the screen size and redraws the screen.
+correct values. See |:mode|.
==============================================================================
Slow and fast terminals *slow-fast-terminal*
@@ -343,13 +336,12 @@ before using the mouse:
"g<RightMouse>" is "<C-RightMouse> ("CTRL-T")
*bracketed-paste-mode*
-Bracketed paste mode allows terminal emulators to distinguish between typed
-text and pasted text.
+Bracketed paste mode allows terminal applications to distinguish between typed
+text and pasted text. Thus you can paste text without Nvim trying to format or
+indent the text. See also https://cirw.in/blog/bracketed-paste
-For terminal emulators that support it, this mode is enabled by default. Thus
-you can paste text without Nvim giving any special meaning to it, e.g. it will
-not auto-indent the pasted text. See https://cirw.in/blog/bracketed-paste for
-technical details.
+Nvim enables bracketed paste by default. If it does not work in your terminal,
+try the 'paste' option instead.
*mouse-mode-table* *mouse-overview*
A short overview of what the mouse buttons do, when 'mousemodel' is "extend":
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index 8880b625e9..f06c062ee3 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -276,6 +276,21 @@ g8 Print the hex values of the bytes used in the
< The screen is not redrawn then, thus you have to use
CTRL-L or ":redraw!" if the command did display
something.
+ *:!start*
+:!start {cmd} (Windows only). Special-case of |:!| which works
+ asynchronously, for running a program that does not
+ affect the files you are editing.
+ Optional arguments (can only use one at a time):
+ /min window will be minimized
+ /b no console window will be opened
+ Note: If the process requires input, /b will get an
+ EOF error because its input stream (stdin) would be
+ redirected to \\.\NUL (stdout and stderr too).
+
+ Programs begun with :!start do not get passed Vim's
+ open file handles, which means they do not have to be
+ closed before Vim. To avoid this special treatment,
+ use ":! start".
*:!!*
:!! Repeat last ":!{cmd}".
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 1f94a45c74..7f1e5ce543 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -61,7 +61,7 @@ these differences.
MAJOR COMPONENTS ~
-Embedded terminal emulator |terminal-emulator|
+Embedded terminal emulator |terminal|
RPC API |RPC|
Shared data |shada|
XDG base directories |xdg|
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index 651d617a76..f5d5321a5e 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -523,6 +523,9 @@ CTRL-W > Increase current window width by N (default 1).
:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
CTRL-W | Set current window width to N (default: widest possible).
+ *:mod* *:mode*
+:mod[e] Detects the screen size and redraws the screen.
+
You can also resize a window by dragging a status line up or down with the
mouse. Or by dragging a vertical separator line left or right. This only
works if the version of Vim that is being used supports the mouse and the
diff --git a/scripts/vim-patch.sh b/scripts/vim-patch.sh
index 37c472ce5b..5ebb6a38b3 100755
--- a/scripts/vim-patch.sh
+++ b/scripts/vim-patch.sh
@@ -135,7 +135,7 @@ preprocess_patch() {
local na_src='proto\|Make*\|gui_*\|if_lua\|if_mzsch\|if_olepp\|if_ole\|if_perl\|if_py\|if_ruby\|if_tcl\|if_xcmdsrv'
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/src/\S*\<\%('${na_src}'\)@norm! d/\v(^diff)|%$ ' +w +q "$file"
- # Remove channel.txt, netbeans.txt, os_*.txt, todo.txt, version*.txt, tags
+ # Remove channel.txt, netbeans.txt, os_*.txt, term.txt, todo.txt, version*.txt, tags
local na_doc='channel\.txt\|netbeans\.txt\|os_\w\+\.txt\|term\.txt\|todo\.txt\|version\d\.txt\|tags'
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/runtime/doc/\<\%('${na_doc}'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
diff --git a/src/nvim/ex_cmds.lua b/src/nvim/ex_cmds.lua
index 46f7a7bc40..5757964f0f 100644
--- a/src/nvim/ex_cmds.lua
+++ b/src/nvim/ex_cmds.lua
@@ -628,13 +628,13 @@ return {
command='cscope',
flags=bit.bor(EXTRA, NOTRLCOM, XFILE),
addr_type=ADDR_LINES,
- func='do_cscope',
+ func='ex_cscope',
},
{
command='cstag',
flags=bit.bor(BANG, TRLBAR, WORD1),
addr_type=ADDR_LINES,
- func='do_cstag',
+ func='ex_cstag',
},
{
command='cunmap',
@@ -1324,7 +1324,7 @@ return {
command='lcscope',
flags=bit.bor(EXTRA, NOTRLCOM, XFILE),
addr_type=ADDR_LINES,
- func='do_cscope',
+ func='ex_cscope',
},
{
command='ldo',
@@ -2334,7 +2334,7 @@ return {
command='scscope',
flags=bit.bor(EXTRA, NOTRLCOM),
addr_type=ADDR_LINES,
- func='do_scscope',
+ func='ex_scscope',
},
{
command='set',
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 80c75f24c4..d1ce589db1 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -8322,7 +8322,7 @@ static void ex_tag_cmd(exarg_T *eap, char_u *name)
break;
default: /* ":tag" */
if (p_cst && *eap->arg != NUL) {
- do_cstag(eap);
+ ex_cstag(eap);
return;
}
cmd = DT_TAG;
diff --git a/src/nvim/if_cscope.c b/src/nvim/if_cscope.c
index f7706f5a0d..0f9ecdf2d7 100644
--- a/src/nvim/if_cscope.c
+++ b/src/nvim/if_cscope.c
@@ -172,14 +172,10 @@ void set_context_in_cscope_cmd(expand_T *xp, const char *arg, cmdidx_T cmdidx)
}
-/*
- * PRIVATE: do_cscope_general
- *
- * Find the command, print help if invalid, and then call the corresponding
- * command function.
- */
-static void
-do_cscope_general (
+/// Find the command, print help if invalid, and then call the corresponding
+/// command function.
+static void
+do_cscope_general(
exarg_T *eap,
int make_split /* whether to split window */
)
@@ -208,29 +204,20 @@ do_cscope_general (
postponed_split_tab = 0;
}
-/*
- * PUBLIC: do_cscope
- */
-void do_cscope(exarg_T *eap)
+/// Implementation of ":cscope" and ":lcscope"
+void ex_cscope(exarg_T *eap)
{
do_cscope_general(eap, FALSE);
}
-/*
- * PUBLIC: do_scscope
- *
- * same as do_cscope, but splits window, too.
- */
-void do_scscope(exarg_T *eap)
+/// Implementation of ":scscope". Same as ex_cscope(), but splits window, too.
+void ex_scscope(exarg_T *eap)
{
do_cscope_general(eap, TRUE);
}
-/*
- * PUBLIC: do_cstag
- *
- */
-void do_cstag(exarg_T *eap)
+/// Implementation of ":cstag"
+void ex_cstag(exarg_T *eap)
{
int ret = FALSE;
@@ -285,18 +272,13 @@ void do_cstag(exarg_T *eap)
(void)EMSG(_("E257: cstag: tag not found"));
g_do_tagpreview = 0;
}
-
-} /* do_cscope */
+}
-/*
- * PUBLIC: cs_find
- *
- * this simulates a vim_fgets(), but for cscope, returns the next line
- * from the cscope output. should only be called from find_tags()
- *
- * returns TRUE if eof, FALSE otherwise
- */
+/// This simulates a vim_fgets(), but for cscope, returns the next line
+/// from the cscope output. should only be called from find_tags()
+///
+/// @return TRUE if eof, FALSE otherwise
int cs_fgets(char_u *buf, int size)
{
char *p;
@@ -309,21 +291,13 @@ int cs_fgets(char_u *buf, int size)
} /* cs_fgets */
-/*
- * PUBLIC: cs_free_tags
- *
- * called only from do_tag(), when popping the tag stack
- */
+/// Called only from do_tag(), when popping the tag stack.
void cs_free_tags(void)
{
cs_manage_matches(NULL, NULL, 0, Free);
}
-/*
- * PUBLIC: cs_print_tags
- *
- * called from do_tag()
- */
+/// Called from do_tag().
void cs_print_tags(void)
{
cs_manage_matches(NULL, NULL, 0, Print);
@@ -404,14 +378,8 @@ int cs_connection(int num, char_u *dbpath, char_u *ppath)
* PRIVATE functions
****************************************************************************/
-/*
- * PRIVATE: cs_add
- *
- * add cscope database or a directory name (to look for cscope.out)
- * to the cscope connection list
- *
- * MAXPATHL 256
- */
+/// Add cscope database or a directory name (to look for cscope.out)
+/// to the cscope connection list.
static int cs_add(exarg_T *eap)
{
char *fname, *ppath, *flags = NULL;
@@ -437,17 +405,13 @@ static void cs_stat_emsg(char *fname)
}
-/*
- * PRIVATE: cs_add_common
- *
- * the common routine to add a new cscope connection. called by
- * cs_add() and cs_reset(). i really don't like to do this, but this
- * routine uses a number of goto statements.
- */
-static int
-cs_add_common (
- char *arg1, /* filename - may contain environment variables */
- char *arg2, /* prepend path - may contain environment variables */
+/// The common routine to add a new cscope connection. Called by
+/// cs_add() and cs_reset(). I really don't like to do this, but this
+/// routine uses a number of goto statements.
+static int
+cs_add_common(
+ char *arg1, // filename - may contain environment variables
+ char *arg2, // prepend path - may contain environment variables
char *flags
)
{
@@ -561,11 +525,7 @@ static int cs_check_for_tags(void)
return p_tags[0] != NUL && curbuf->b_p_tags != NULL;
} /* cs_check_for_tags */
-/*
- * PRIVATE: cs_cnt_connections
- *
- * count the number of cscope connections
- */
+/// Count the number of cscope connections.
static size_t cs_cnt_connections(void)
{
size_t cnt = 0;
@@ -585,11 +545,7 @@ static void cs_reading_emsg(
}
#define CSREAD_BUFSIZE 2048
-/*
- * PRIVATE: cs_cnt_matches
- *
- * count the number of matches for a given cscope connection.
- */
+/// Count the number of matches for a given cscope connection.
static int cs_cnt_matches(size_t idx)
{
char *stok;
@@ -639,11 +595,7 @@ static int cs_cnt_matches(size_t idx)
} /* cs_cnt_matches */
-/*
- * PRIVATE: cs_create_cmd
- *
- * Creates the actual cscope command query from what the user entered.
- */
+/// Creates the actual cscope command query from what the user entered.
static char *cs_create_cmd(char *csoption, char *pattern)
{
char *cmd;
@@ -699,12 +651,8 @@ static char *cs_create_cmd(char *csoption, char *pattern)
} /* cs_create_cmd */
-/*
- * PRIVATE: cs_create_connection
- *
- * This piece of code was taken/adapted from nvi. do we need to add
- * the BSD license notice?
- */
+/// This piece of code was taken/adapted from nvi. do we need to add
+/// the BSD license notice?
static int cs_create_connection(size_t i)
{
#ifdef UNIX
@@ -893,14 +841,10 @@ err_closing:
} /* cs_create_connection */
-/*
- * PRIVATE: cs_find
- *
- * query cscope using command line interface. parse the output and use tselect
- * to allow choices. like Nvi, creates a pipe to send to/from query/cscope.
- *
- * returns TRUE if we jump to a tag or abort, FALSE if not.
- */
+/// Query cscope using command line interface. Parse the output and use tselect
+/// to allow choices. Like Nvi, creates a pipe to send to/from query/cscope.
+///
+/// @return TRUE if we jump to a tag or abort, FALSE if not.
static int cs_find(exarg_T *eap)
{
char *opt, *pat;
@@ -934,11 +878,7 @@ static int cs_find(exarg_T *eap)
} /* cs_find */
-/*
- * PRIVATE: cs_find_common
- *
- * common code for cscope find, shared by cs_find() and do_cstag()
- */
+/// Common code for cscope find, shared by cs_find() and ex_cstag().
static int cs_find_common(char *opt, char *pat, int forceit, int verbose,
int use_ll, char_u *cmdline)
{
@@ -1111,11 +1051,7 @@ static int cs_find_common(char *opt, char *pat, int forceit, int verbose,
} /* cs_find_common */
-/*
- * PRIVATE: cs_help
- *
- * print help
- */
+/// Print help.
static int cs_help(exarg_T *eap)
{
cscmd_T *cmdp = cs_cmds;
@@ -1163,11 +1099,7 @@ static void clear_csinfo(size_t i)
csinfo[i].to_fp = NULL;
}
-/*
- * PRIVATE: cs_insert_filelist
- *
- * insert a new cscope database filename into the filelist
- */
+/// Insert a new cscope database filename into the filelist.
static int cs_insert_filelist(char *fname, char *ppath, char *flags,
FileInfo *file_info)
{
@@ -1227,11 +1159,7 @@ static int cs_insert_filelist(char *fname, char *ppath, char *flags,
} /* cs_insert_filelist */
-/*
- * PRIVATE: cs_lookup_cmd
- *
- * find cscope command in command table
- */
+/// Find cscope command in command table.
static cscmd_T * cs_lookup_cmd(exarg_T *eap)
{
cscmd_T *cmdp;
@@ -1256,11 +1184,7 @@ static cscmd_T * cs_lookup_cmd(exarg_T *eap)
} /* cs_lookup_cmd */
-/*
- * PRIVATE: cs_kill
- *
- * nuke em
- */
+/// Nuke em.
static int cs_kill(exarg_T *eap)
{
char *stok;
@@ -1317,11 +1241,7 @@ static int cs_kill(exarg_T *eap)
} /* cs_kill */
-/*
- * PRIVATE: cs_kill_execute
- *
- * Actually kills a specific cscope connection.
- */
+/// Actually kills a specific cscope connection.
static void cs_kill_execute(
size_t i, /* cscope table index */
char *cname /* cscope database name */
@@ -1336,26 +1256,22 @@ static void cs_kill_execute(
}
-/*
- * PRIVATE: cs_make_vim_style_matches
- *
- * convert the cscope output into a ctags style entry (as might be found
- * in a ctags tags file). there's one catch though: cscope doesn't tell you
- * the type of the tag you are looking for. for example, in Darren Hiebert's
- * ctags (the one that comes with vim), #define's use a line number to find the
- * tag in a file while function definitions use a regexp search pattern.
- *
- * i'm going to always use the line number because cscope does something
- * quirky (and probably other things i don't know about):
- *
- * if you have "# define" in your source file, which is
- * perfectly legal, cscope thinks you have "#define". this
- * will result in a failed regexp search. :(
- *
- * besides, even if this particular case didn't happen, the search pattern
- * would still have to be modified to escape all the special regular expression
- * characters to comply with ctags formatting.
- */
+/// Convert the cscope output into a ctags style entry (as might be found
+/// in a ctags tags file). there's one catch though: cscope doesn't tell you
+/// the type of the tag you are looking for. for example, in Darren Hiebert's
+/// ctags (the one that comes with vim), #define's use a line number to find the
+/// tag in a file while function definitions use a regexp search pattern.
+///
+/// I'm going to always use the line number because cscope does something
+/// quirky (and probably other things i don't know about):
+///
+/// if you have "# define" in your source file, which is
+/// perfectly legal, cscope thinks you have "#define". this
+/// will result in a failed regexp search. :(
+///
+/// Besides, even if this particular case didn't happen, the search pattern
+/// would still have to be modified to escape all the special regular expression
+/// characters to comply with ctags formatting.
static char *cs_make_vim_style_matches(char *fname, char *slno, char *search,
char *tagstr)
{
@@ -1389,24 +1305,20 @@ static char *cs_make_vim_style_matches(char *fname, char *slno, char *search,
} /* cs_make_vim_style_matches */
-/*
- * PRIVATE: cs_manage_matches
- *
- * this is kind of hokey, but i don't see an easy way round this..
- *
- * Store: keep a ptr to the (malloc'd) memory of matches originally
- * generated from cs_find(). the matches are originally lines directly
- * from cscope output, but transformed to look like something out of a
- * ctags. see cs_make_vim_style_matches for more details.
- *
- * Get: used only from cs_fgets(), this simulates a vim_fgets() to return
- * the next line from the cscope output. it basically keeps track of which
- * lines have been "used" and returns the next one.
- *
- * Free: frees up everything and resets
- *
- * Print: prints the tags
- */
+/// This is kind of hokey, but i don't see an easy way round this.
+///
+/// Store: keep a ptr to the (malloc'd) memory of matches originally
+/// generated from cs_find(). the matches are originally lines directly
+/// from cscope output, but transformed to look like something out of a
+/// ctags. see cs_make_vim_style_matches for more details.
+///
+/// Get: used only from cs_fgets(), this simulates a vim_fgets() to return
+/// the next line from the cscope output. it basically keeps track of which
+/// lines have been "used" and returns the next one.
+///
+/// Free: frees up everything and resets
+///
+/// Print: prints the tags
static char *cs_manage_matches(char **matches, char **contexts,
size_t totmatches, mcmd_e cmd)
{
@@ -1461,11 +1373,7 @@ static char *cs_manage_matches(char **matches, char **contexts,
} /* cs_manage_matches */
-/*
- * PRIVATE: cs_parse_results
- *
- * parse cscope output
- */
+/// Parse cscope output.
static char *cs_parse_results(size_t cnumber, char *buf, int bufsize,
char **context, char **linenumber, char **search)
{
@@ -1515,11 +1423,7 @@ static char *cs_parse_results(size_t cnumber, char *buf, int bufsize,
return name;
}
-/*
- * PRIVATE: cs_file_results
- *
- * write cscope find results to file
- */
+/// Write cscope find results to file.
static void cs_file_results(FILE *f, int *nummatches_a)
{
char *search, *slno;
@@ -1560,13 +1464,9 @@ static void cs_file_results(FILE *f, int *nummatches_a)
xfree(buf);
}
-/*
- * PRIVATE: cs_fill_results
- *
- * get parsed cscope output and calls cs_make_vim_style_matches to convert
- * into ctags format
- * When there are no matches sets "*matches_p" to NULL.
- */
+/// Get parsed cscope output and calls cs_make_vim_style_matches to convert
+/// into ctags format.
+/// When there are no matches sets "*matches_p" to NULL.
static void cs_fill_results(char *tagstr, size_t totmatches, int *nummatches_a,
char ***matches_p, char ***cntxts_p,
size_t *matched)
@@ -1758,11 +1658,7 @@ static void cs_print_tags_priv(char **matches, char **cntxts,
xfree(buf);
}
-/*
- * PRIVATE: cs_read_prompt
- *
- * read a cscope prompt (basically, skip over the ">> ")
- */
+/// Read a cscope prompt (basically, skip over the ">> ").
static int cs_read_prompt(size_t i)
{
int ch;
@@ -1847,12 +1743,8 @@ static void sig_handler(int s) {
#endif
-/*
- * PRIVATE: cs_release_csp
- *
- * Does the actual free'ing for the cs ptr with an optional flag of whether
- * or not to free the filename. Called by cs_kill and cs_reset.
- */
+/// Does the actual free'ing for the cs ptr with an optional flag of whether
+/// or not to free the filename. Called by cs_kill and cs_reset.
static void cs_release_csp(size_t i, int freefnpp)
{
// Trying to exit normally (not sure whether it is fit to Unix cscope)
@@ -1964,11 +1856,7 @@ static void cs_release_csp(size_t i, int freefnpp)
} /* cs_release_csp */
-/*
- * PRIVATE: cs_reset
- *
- * calls cs_kill on all cscope connections then reinits
- */
+/// Calls cs_kill on all cscope connections then reinits.
static int cs_reset(exarg_T *eap)
{
char **dblist = NULL, **pplist = NULL, **fllist = NULL;
@@ -2018,17 +1906,13 @@ static int cs_reset(exarg_T *eap)
} /* cs_reset */
-/*
- * PRIVATE: cs_resolve_file
- *
- * Construct the full pathname to a file found in the cscope database.
- * (Prepends ppath, if there is one and if it's not already prepended,
- * otherwise just uses the name found.)
- *
- * We need to prepend the prefix because on some cscope's (e.g., the one that
- * ships with Solaris 2.6), the output never has the prefix prepended.
- * Contrast this with my development system (Digital Unix), which does.
- */
+/// Construct the full pathname to a file found in the cscope database.
+/// (Prepends ppath, if there is one and if it's not already prepended,
+/// otherwise just uses the name found.)
+///
+/// We need to prepend the prefix because on some cscope's (e.g., the one that
+/// ships with Solaris 2.6), the output never has the prefix prepended.
+/// Contrast this with my development system (Digital Unix), which does.
static char *cs_resolve_file(size_t i, char *name)
{
char *fullname;
@@ -2074,11 +1958,7 @@ static char *cs_resolve_file(size_t i, char *name)
}
-/*
- * PRIVATE: cs_show
- *
- * show all cscope connections
- */
+/// Show all cscope connections.
static int cs_show(exarg_T *eap)
{
if (cs_cnt_connections() == 0)
@@ -2106,11 +1986,7 @@ static int cs_show(exarg_T *eap)
} /* cs_show */
-/*
- * PUBLIC: cs_end
- *
- * Only called when VIM exits to quit any cscope sessions.
- */
+/// Only called when VIM exits to quit any cscope sessions.
void cs_end(void)
{
for (size_t i = 0; i < csinfo_size; i++)
diff --git a/src/nvim/testdir/test49.vim b/src/nvim/testdir/test49.vim
index 467abcd9b9..a0e170dea4 100644
--- a/src/nvim/testdir/test49.vim
+++ b/src/nvim/testdir/test49.vim
@@ -481,9 +481,12 @@ function! ExtraVim(...)
bwipeout
let g:Xpath = g:Xpath + sum
+ " FIXME(nvim): delete() of a file used by a subprocess hangs TSAN build on travis CI.
+ if !empty($TRAVIS)
" Delete the extra script and the resultfile.
call delete(extra_script)
call delete(resultfile)
+ endif
" Switch back to the buffer that was active when this function was entered.
exec "buffer" current_buffnr
diff --git a/src/nvim/version.c b/src/nvim/version.c
index a018585976..7f0b45e896 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -648,7 +648,7 @@ static const int included_patches[] = {
84,
83,
// 82 NA
- // 81,
+ 81,
// 80 NA
79,
78,
diff --git a/test/functional/core/job_spec.lua b/test/functional/core/job_spec.lua
index b98169b067..54e56f7f41 100644
--- a/test/functional/core/job_spec.lua
+++ b/test/functional/core/job_spec.lua
@@ -9,6 +9,7 @@ local command = helpers.command
local wait = helpers.wait
local iswin = helpers.iswin
local get_pathsep = helpers.get_pathsep
+local nvim_set = helpers.nvim_set
local Screen = require('test.functional.ui.screen')
describe('jobs', function()
@@ -669,9 +670,10 @@ describe("pty process teardown", function()
if helpers.pending_win32(pending) then return end
-- Use a nested nvim (in :term) to test without --headless.
feed_command(":terminal '"..helpers.nvim_prog
+ .."' -u NONE -i NONE --cmd '"..nvim_set.."' "
-- Use :term again in the _nested_ nvim to get a PTY process.
-- Use `sleep` to simulate a long-running child of the PTY.
- .."' +terminal +'!(sleep 300 &)' +qa")
+ .."+terminal +'!(sleep 300 &)' +qa")
-- Exiting should terminate all descendants (PTY, its children, ...).
screen:expect([[