This commit is contained in:
Justin M. Keyes
2017-08-19 14:13:14 +02:00
parent 04b3c32772
commit 842a54a1bb
13 changed files with 121 additions and 63 deletions

View File

@@ -34,6 +34,11 @@ Install from source
make CMAKE_BUILD_TYPE=RelWithDebInfo make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install sudo make install
To install to a non-default location, specify `CMAKE_INSTALL_PREFIX`:
make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=/full/path/"
make install
See [the wiki](https://github.com/neovim/neovim/wiki/Building-Neovim) for details. See [the wiki](https://github.com/neovim/neovim/wiki/Building-Neovim) for details.
Install from package Install from package

View File

@@ -7,7 +7,7 @@
Nvim API *API* *api* Nvim API *API* *api*
Nvim exposes a powerful API that can be used by plugins and external processes Nvim exposes a powerful API that can be used by plugins and external processes
via |msgpack-rpc|, Lua and VimL (|eval-api|). via |RPC|, |Lua| and VimL (|eval-api|).
Applications can also embed libnvim to work with the C API directly. Applications can also embed libnvim to work with the C API directly.

View File

@@ -142,6 +142,8 @@ shell The Vim application. This can cover the whole screen (e.g.,
window View on a buffer. There can be several windows in Vim, window View on a buffer. There can be several windows in Vim,
together with the command line, menubar, toolbar, etc. they together with the command line, menubar, toolbar, etc. they
fit in the shell. fit in the shell.
frame Windows are kept in a tree of frames. Each frame contains
a column, row, or window ("leaf" frame).
PROVIDERS *dev-provider* PROVIDERS *dev-provider*
@@ -230,23 +232,47 @@ _not_ a Buffer). The common {action} "list" indicates that it lists all
bufs (plural) in the global context. bufs (plural) in the global context.
API-CLIENT *dev-api-client*
Package Naming ~
API client packages should NOT be named something ambiguous like "neovim" or
"python-client". Use "nvim" as a prefix/suffix to some other identifier
following ecosystem conventions.
For example, Python packages tend to have "py" in the name, so "pynvim" is
a good name: it's idiomatic and unambiguous. If the package is named "neovim",
it confuses users, and complicates documentation and discussions.
Examples of API-client package names:
GOOD: nvim-racket
GOOD: pynvim
BAD: python-client
BAD: neovim
Implementation ~
Consider using libmpack instead of the msgpack.org C/C++ library. libmpack is
small, efficient, and C89-compatible. It can be easily inlined in your
C project source, too. https://github.com/libmpack/libmpack/
EXTERNAL UI *dev-ui* EXTERNAL UI *dev-ui*
Compatibility ~
External UIs should be aware of the |api-contract|. In particular, future 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 versions of Nvim may add new items to existing events. The API is strongly
strongly backwards-compatible, but clients must not break if new fields are backwards-compatible, but clients must not break if new fields are added to
added to existing events. existing events.
External UIs are expected to implement some common features. Common Features ~
External UIs are expected to implement these common features:
- Cursor style (shape, color) should respond to the 'guicursor' properties
delivered with the mode_info_set UI event.
- Send the "super" key (Windows key, Apple key) as a |<D-| chord.
- Users may want to configure UI-specific options. The UI should publish the Implementation ~
|GUIEnter| autocmd after attaching to Nvim: >
doautocmd GUIEnter
- Options can be monitored for changes by the |OptionSet| autocmd. E.g. if the - Options can be monitored for changes by the |OptionSet| autocmd. E.g. if the
user sets the 'guifont' option, this autocmd notifies channel 42: > user sets the 'guifont' option, this autocmd notifies channel 42: >
autocmd OptionSet guifont call rpcnotify(42, 'option-changed', 'guifont', &guifont) 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

@@ -24,7 +24,7 @@ the existing `package.cpath` are used. Example:
1. Given that 1. Given that
- 'runtimepath' contains `/foo/bar,/xxx;yyy/baz,/abc`; - 'runtimepath' contains `/foo/bar,/xxx;yyy/baz,/abc`;
- initial (defined at compile time or derived from - initial (defined at compile-time or derived from
`$LUA_CPATH`/`$LUA_INIT`) `package.cpath` contains `$LUA_CPATH`/`$LUA_INIT`) `package.cpath` contains
`./?.so;/def/ghi/a?d/j/g.elf;/def/?.so`. `./?.so;/def/ghi/a?d/j/g.elf;/def/?.so`.
2. It finds `?`-containing suffixes `/?.so`, `/a?d/j/g.elf` and `/?.so`, in 2. It finds `?`-containing suffixes `/?.so`, `/a?d/j/g.elf` and `/?.so`, in
@@ -159,14 +159,17 @@ Examples:
> >
:lua vim.api.nvim_command('echo "Hello, Nvim!"') :lua vim.api.nvim_command('echo "Hello, Nvim!"')
< <
To see the Lua version: >
:lua print(_VERSION)
To see the LuaJIT version: >
:lua print(jit.version)
<
:[range]lua << {endmarker} :[range]lua << {endmarker}
{script} {script}
{endmarker} {endmarker}
Execute Lua script {script}. Execute Lua script {script}.
Note: This command doesn't work when the Lua
feature wasn't compiled in. To avoid errors, see
|script-here|.
{endmarker} must NOT be preceded by any white space. If {endmarker} is {endmarker} must NOT be preceded by any white space. If {endmarker} is
omitted from after the "<<", a dot '.' must be used after {script}, like omitted from after the "<<", a dot '.' must be used after {script}, like
@@ -186,15 +189,8 @@ Example:
EOF EOF
endfunction endfunction
Note that the variables are prefixed with `local`: they will disappear when Note that the `local` variables will disappear when block finishes. This is
block finishes. This is not the case for globals. not the case for globals.
To see what version of Lua you have: >
:lua print(_VERSION)
If you use LuaJIT you can also use this: >
:lua print(jit.version)
<
*:luado* *:luado*
:[range]luado {body} Execute Lua function "function (line, linenr) {body} :[range]luado {body} Execute Lua function "function (line, linenr) {body}

View File

@@ -373,8 +373,7 @@ CTRL-{char} {char} typed as a control character; that is, typing {char}
*key-notation* *key-codes* *keycodes* *key-notation* *key-codes* *keycodes*
These names for keys are used in the documentation. They can also be used These names for keys are used in the documentation. They can also be used
with the ":map" command (insert the key name by pressing CTRL-K and then the with the ":map" command.
key you want the name for).
notation meaning equivalent decimal value(s) ~ notation meaning equivalent decimal value(s) ~
----------------------------------------------------------------------- -----------------------------------------------------------------------

View File

@@ -175,7 +175,7 @@ contains information that makes this task easier (see also |rpc-types|):
even more strongly-typed APIs. even more strongly-typed APIs.
- Functions that are considered to be methods that operate on instances of - Functions that are considered to be methods that operate on instances of
Nvim special types (msgpack EXT) will have the `"method"` attribute set to Nvim special types (msgpack EXT) will have the `"method"` attribute set to
`true`. The reciever type is the type of the first argument. The method `true`. The receiver type is the type of the first argument. The method
names are prefixed with `nvim_` plus a shortened type name, e.g. names are prefixed with `nvim_` plus a shortened type name, e.g.
`nvim_buf_get_lines` represents the `get_lines` method of a Buffer instance. `nvim_buf_get_lines` represents the `get_lines` method of a Buffer instance.
- Global functions have `"method"` set to `false` and are prefixed with just - Global functions have `"method"` set to `false` and are prefixed with just

View File

@@ -6759,7 +6759,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Highlights of vertical separators are determined by the window to the Highlights of vertical separators are determined by the window to the
left of the separator. The highlight of a tabpage in |tabline| is left of the separator. The highlight of a tabpage in |tabline| is
determine by the last-focused window of the tabpage. Highlights of determined by the last-focused window of the tabpage. Highlights of
the popupmenu are determined by the current window. Highlights in the the popupmenu are determined by the current window. Highlights in the
message area cannot be overridden. message area cannot be overridden.

View File

@@ -133,8 +133,8 @@ registers. Nvim looks for these clipboard tools, in order of priority:
- |g:clipboard| - |g:clipboard|
- pbcopy/pbpaste (macOS) - pbcopy/pbpaste (macOS)
- xclip - xsel (if $DISPLAY is set)
- xsel (newer alternative to xclip) - xclip (if $DISPLAY is set)
- lemonade (for SSH) https://github.com/pocke/lemonade - lemonade (for SSH) https://github.com/pocke/lemonade
- doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/ - doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
- win32yank (Windows) - win32yank (Windows)
@@ -162,13 +162,11 @@ process has not died, the cached selection is applied.
============================================================================== ==============================================================================
X11 selection mechanism *clipboard-x11* *x11-selection* X11 selection mechanism *clipboard-x11* *x11-selection*
The clipboard providers for X11 store text in what is known as "selections". X11 clipboard providers store text in "selections". Selections are owned by an
Selections are "owned" by an application, so when the application is closed, application, so when the application gets closed, the selection text is lost.
the selection text is lost.
The contents of selections are held by the originating application (e.g., upon The contents of selections are held by the originating application (e.g., upon
a copy), and only passed on to another application when that other application a copy), and only passed to another application when that other application
asks for them (e.g., upon a paste). requests them (e.g., upon a paste).
*quoteplus* *quote+* *quoteplus* *quote+*

View File

@@ -60,14 +60,17 @@ a complete and centralized reference of those differences.
MAJOR COMPONENTS ~ MAJOR COMPONENTS ~
Embedded terminal emulator |terminal| API |API|
RPC API |RPC| Lua scripting |lua|
Shared data |shada|
XDG base directories |xdg|
Job control |job-control| Job control |job-control|
Remote plugins |remote-plugin| Remote plugins |remote-plugin|
Python plugins |provider-python| Providers
Clipboard integration |provider-clipboard| Clipboard |provider-clipboard|
Python plugins |provider-python|
Ruby plugins |provider-ruby|
Shared data |shada|
Embedded terminal |terminal|
XDG base directories |xdg|
USER EXPERIENCE ~ USER EXPERIENCE ~
@@ -87,6 +90,16 @@ Working intuitively and consistently is a major goal of Nvim.
- Vim's internal test functions (test_autochdir(), test_settime(), etc.) are - Vim's internal test functions (test_autochdir(), test_settime(), etc.) are
not exposed (nor implemented); instead Nvim has a robust API. not exposed (nor implemented); instead Nvim has a robust API.
- Behaviors, options, documentation are removed if they cost users more time
than they save.
Usability details have been improved where the benefit outweighs any
backwards-compatibility cost. Some examples:
- |K| in help documents can be used like |CTRL-]|.
- Directories for 'directory' and 'undodir' are auto-created.
- Terminal features such as 'guicursor' are enabled where possible.
ARCHITECTURE ~ ARCHITECTURE ~
External plugins run in separate processes. |remote-plugin| This improves External plugins run in separate processes. |remote-plugin| This improves
@@ -130,6 +143,7 @@ Commands:
|:checkhealth| |:checkhealth|
|:drop| is available on all platforms |:drop| is available on all platforms
|:Man| is available by default, with many improvements such as completion |:Man| is available by default, with many improvements such as completion
|:tchdir| tab-local |current-directory|
Functions: Functions:
|dictwatcheradd()| notifies a callback whenever a |Dict| is modified |dictwatcheradd()| notifies a callback whenever a |Dict| is modified

View File

@@ -166,7 +166,10 @@ void nvim_feedkeys(String keys, String mode, Boolean escape_csi)
/// On VimL error: Does not fail, but updates v:errmsg. /// On VimL error: Does not fail, but updates v:errmsg.
/// ///
/// Unlike `nvim_feedkeys`, this uses a lower-level input buffer and the call /// 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. /// is not deferred. This is the most reliable way to send real user input.
///
/// @note |keycodes| like <CR> are translated, so `<` is special.
/// To input a literal `<`, send `<LT>`.
/// ///
/// @param keys to be typed /// @param keys to be typed
/// @return Number of bytes actually written (can be fewer than /// @return Number of bytes actually written (can be fewer than

View File

@@ -336,8 +336,8 @@ static lua_State *nlua_init(void)
/// Calls nlua_init() if needed. Is responsible for pre-lua call initalization /// Calls nlua_init() if needed. Is responsible for pre-lua call initalization
/// like updating `package.[c]path` with directories derived from &runtimepath. /// like updating `package.[c]path` with directories derived from &runtimepath.
/// ///
/// @return Interprter instance to use. Will either be initialized now or taken /// @return Interpreter instance to use. Will either be initialized now or
/// from previous initalization. /// taken from previous initialization.
static lua_State *nlua_enter(void) static lua_State *nlua_enter(void)
FUNC_ATTR_NONNULL_RET FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET FUNC_ATTR_WARN_UNUSED_RESULT
{ {

View File

@@ -2735,7 +2735,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
// Autocommands may be executed when saving lines for undo, which may make // Autocommands may be executed when saving lines for undo, which may make
// y_array invalid. Start undo now to avoid that. // y_array invalid. Start undo now to avoid that.
if (u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1) == FAIL) { if (u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1) == FAIL) {
ELOG(_("Failed to save undo information")); ELOG("Failed to save undo information");
return; return;
} }
} }

View File

@@ -1,31 +1,48 @@
# Tests Tests
=====
Tests are run by `/cmake/RunTests.cmake` file, using busted. Tests are run by `/cmake/RunTests.cmake` file, using busted.
For some failures, `.nvimlog` (or `$NVIM_LOG_FILE`) may provide insight. For some failures, `.nvimlog` (or `$NVIM_LOG_FILE`) may provide insight.
## Directory structure Lint
----
Directories with tests: `/test/benchmark` for benchmarks, `/test/functional` for `make lint` (and `make testlint`) runs [luacheck](https://github.com/mpeterv/luacheck)
functional tests, `/test/unit` for unit tests. `/test/config` contains `*.in` on the test code.
files (currently a single one) which are transformed into `*.lua` files using
`configure_file` CMake command: this is for acessing CMake variables in lua
tests. `/test/includes` contains include files for use by luajit `ffi.cdef`
C definitions parser: normally used to make macros not accessible via this
mechanism accessible the other way.
Files `/test/*/preload.lua` contain modules which will be preloaded by busted, If a luacheck warning must be ignored, specify the warning code. Example:
via `--helper` option. `/test/**/helpers.lua` contain various “library”
functions, (intended to be) used by a number of tests and not just a single one.
`/test/*/**/*_spec.lua` are files containing actual tests. Files that do not end -- luacheck: ignore 621
with a `_spec.lua` are libraries like `/test/**/helpers.lua`, except that they
have some common topic.
Tests inside `/test/unit` and `/test/functional` are normally divided into http://luacheck.readthedocs.io/en/stable/warnings.html
groups by the semantic component they are testing.
## Environment variables Ignore the smallest applicable scope (e.g. inside a function, not at the top of
the file).
Layout
------
- `/test/benchmark` : benchmarks
- `/test/functional` : functional tests
- `/test/unit` : unit tests
- `/test/config` : contains `*.in` files which are transformed into `*.lua`
files using `configure_file` CMake command: this is for acessing CMake
variables in lua tests.
- `/test/includes` : include-files for use by luajit `ffi.cdef` C definitions
parser: normally used to make macros not accessible via this mechanism
accessible the other way.
- `/test/*/preload.lua` : modules preloaded by busted `--helper` option
- `/test/**/helpers.lua` : common utility functions for test code
- `/test/*/**/*_spec.lua` : actual tests. Files that do not end with
`_spec.lua` are libraries like `/test/**/helpers.lua`, except that they have
some common topic.
Tests in `/test/unit` and `/test/functional` are normally divided into groups
by the semantic component they are testing.
Environment variables
---------------------
Test behaviour is affected by environment variables. Currently supported Test behaviour is affected by environment variables. Currently supported
(Functional, Unit, Benchmarks) (when Defined; when set to _1_; when defined, (Functional, Unit, Benchmarks) (when Defined; when set to _1_; when defined,