mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
docs: api events
This commit is contained in:
@@ -254,19 +254,6 @@ The idea is "versionless evolution", in the words of Rich Hickey:
|
|||||||
- Relaxing a requirement should be a compatible change.
|
- Relaxing a requirement should be a compatible change.
|
||||||
- Strengthening a promise should be a compatible change.
|
- Strengthening a promise should be a compatible change.
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Global events *api-global-events*
|
|
||||||
|
|
||||||
When a client invokes an API request as an async notification, it is not
|
|
||||||
possible for Nvim to send an error response. Instead, in case of error, the
|
|
||||||
following notification will be sent to the client:
|
|
||||||
|
|
||||||
*nvim_error_event*
|
|
||||||
nvim_error_event[{type}, {message}]
|
|
||||||
|
|
||||||
{type} is a numeric id as defined by `api_info().error_types`, and {message} is
|
|
||||||
a string with the error message.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Buffer update events *api-buffer-updates*
|
Buffer update events *api-buffer-updates*
|
||||||
|
|
||||||
@@ -553,6 +540,38 @@ Extmark positions changed by an edit will be restored on undo/redo. Creating
|
|||||||
and deleting extmarks is not a buffer change, thus new undo states are not
|
and deleting extmarks is not a buffer change, thus new undo states are not
|
||||||
created for extmark changes.
|
created for extmark changes.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Global Events *api-events*
|
||||||
|
|
||||||
|
nvim_error_event({type}, {msg}) *nvim_error_event*
|
||||||
|
Emitted on the client channel if an async API request responds with an
|
||||||
|
error.
|
||||||
|
|
||||||
|
Attributes: ~
|
||||||
|
|RPC| only
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
• {type} (`integer`) Error type id as defined by
|
||||||
|
`api_info().error_types`.
|
||||||
|
• {msg} (`string`) Error message.
|
||||||
|
|
||||||
|
nvim_ui_term_event({event}, {value}) *nvim_ui_term_event*
|
||||||
|
Emitted by the TUI client to signal when a host-terminal event occurred.
|
||||||
|
|
||||||
|
Supports these events:
|
||||||
|
• "termresponse": The host-terminal sent a DA1, OSC, DCS, or APC response
|
||||||
|
sequence to Nvim. The payload is the received response. Sets
|
||||||
|
|v:termresponse| and fires |TermResponse|.
|
||||||
|
|
||||||
|
Attributes: ~
|
||||||
|
|RPC| only
|
||||||
|
Since: 0.10.0
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
• {event} (`string`) Event name
|
||||||
|
• {value} (`any`) Event payload
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Global Functions *api-global*
|
Global Functions *api-global*
|
||||||
|
|
||||||
@@ -3660,22 +3679,6 @@ nvim_ui_set_option({name}, {value}) *nvim_ui_set_option()*
|
|||||||
• {name} (`string`)
|
• {name} (`string`)
|
||||||
• {value} (`any`)
|
• {value} (`any`)
|
||||||
|
|
||||||
nvim_ui_term_event({event}, {value}) *nvim_ui_term_event()*
|
|
||||||
Tells Nvim when a host-terminal event occurred.
|
|
||||||
|
|
||||||
Supports these events:
|
|
||||||
• "termresponse": The host-terminal sent a DA1, OSC, DCS, or APC response
|
|
||||||
sequence to Nvim. The payload is the received response. Sets
|
|
||||||
|v:termresponse| and fires |TermResponse|.
|
|
||||||
|
|
||||||
Attributes: ~
|
|
||||||
|RPC| only
|
|
||||||
Since: 0.10.0
|
|
||||||
|
|
||||||
Parameters: ~
|
|
||||||
• {event} (`string`) Event name
|
|
||||||
• {value} (`any`) Event payload
|
|
||||||
|
|
||||||
nvim_ui_try_resize({width}, {height}) *nvim_ui_try_resize()*
|
nvim_ui_try_resize({width}, {height}) *nvim_ui_try_resize()*
|
||||||
|
|
||||||
Attributes: ~
|
Attributes: ~
|
||||||
|
@@ -395,6 +395,7 @@ output:write([[
|
|||||||
#include "nvim/api/buffer.h"
|
#include "nvim/api/buffer.h"
|
||||||
#include "nvim/api/command.h"
|
#include "nvim/api/command.h"
|
||||||
#include "nvim/api/deprecated.h"
|
#include "nvim/api/deprecated.h"
|
||||||
|
#include "nvim/api/events.h"
|
||||||
#include "nvim/api/extmark.h"
|
#include "nvim/api/extmark.h"
|
||||||
#include "nvim/api/options.h"
|
#include "nvim/api/options.h"
|
||||||
#include "nvim/api/tabpage.h"
|
#include "nvim/api/tabpage.h"
|
||||||
|
@@ -1,5 +1,8 @@
|
|||||||
#!/usr/bin/env -S nvim -l
|
#!/usr/bin/env -S nvim -l
|
||||||
--- Generates Nvim :help docs from Lua/C docstrings
|
--- Generates Nvim :help docs from Lua/C docstrings.
|
||||||
|
---
|
||||||
|
--- Usage:
|
||||||
|
--- make doc
|
||||||
---
|
---
|
||||||
--- The generated :help text for each function is formatted as follows:
|
--- The generated :help text for each function is formatted as follows:
|
||||||
--- - Max width of 78 columns (`TEXT_WIDTH`).
|
--- - Max width of 78 columns (`TEXT_WIDTH`).
|
||||||
@@ -106,6 +109,7 @@ local config = {
|
|||||||
filename = 'api.txt',
|
filename = 'api.txt',
|
||||||
section_order = {
|
section_order = {
|
||||||
-- Sections at the top, in a specific order:
|
-- Sections at the top, in a specific order:
|
||||||
|
'events.c',
|
||||||
'vim.c',
|
'vim.c',
|
||||||
'vimscript.c',
|
'vimscript.c',
|
||||||
|
|
||||||
@@ -126,11 +130,22 @@ local config = {
|
|||||||
['vim.c'] = 'Global',
|
['vim.c'] = 'Global',
|
||||||
},
|
},
|
||||||
section_fmt = function(name)
|
section_fmt = function(name)
|
||||||
|
if name == 'Events' then
|
||||||
|
return 'Global Events'
|
||||||
|
end
|
||||||
|
|
||||||
return name .. ' Functions'
|
return name .. ' Functions'
|
||||||
end,
|
end,
|
||||||
helptag_fmt = function(name)
|
helptag_fmt = function(name)
|
||||||
return fmt('api-%s', name:lower())
|
return fmt('api-%s', name:lower())
|
||||||
end,
|
end,
|
||||||
|
fn_helptag_fmt = function(fun)
|
||||||
|
local name = fun.name
|
||||||
|
if vim.endswith(name, '_event') then
|
||||||
|
return name
|
||||||
|
end
|
||||||
|
return fn_helptag_fmt_common(fun)
|
||||||
|
end,
|
||||||
},
|
},
|
||||||
lua = {
|
lua = {
|
||||||
filename = 'lua.txt',
|
filename = 'lua.txt',
|
||||||
|
76
src/nvim/api/events.c
Normal file
76
src/nvim/api/events.c
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
#include <assert.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "klib/kvec.h"
|
||||||
|
#include "nvim/api/events.h"
|
||||||
|
#include "nvim/api/private/converter.h"
|
||||||
|
#include "nvim/api/private/defs.h"
|
||||||
|
#include "nvim/api/private/helpers.h"
|
||||||
|
#include "nvim/api/private/validate.h"
|
||||||
|
#include "nvim/api/ui.h"
|
||||||
|
#include "nvim/assert_defs.h"
|
||||||
|
#include "nvim/autocmd.h"
|
||||||
|
#include "nvim/autocmd_defs.h"
|
||||||
|
#include "nvim/channel.h"
|
||||||
|
#include "nvim/channel_defs.h"
|
||||||
|
#include "nvim/eval.h"
|
||||||
|
#include "nvim/globals.h"
|
||||||
|
#include "nvim/main.h"
|
||||||
|
#include "nvim/map_defs.h"
|
||||||
|
#include "nvim/memory.h"
|
||||||
|
#include "nvim/memory_defs.h"
|
||||||
|
#include "nvim/msgpack_rpc/channel.h"
|
||||||
|
#include "nvim/msgpack_rpc/channel_defs.h"
|
||||||
|
#include "nvim/msgpack_rpc/packer.h"
|
||||||
|
#include "nvim/msgpack_rpc/packer_defs.h"
|
||||||
|
#include "nvim/types_defs.h"
|
||||||
|
#include "nvim/ui.h"
|
||||||
|
|
||||||
|
/// Emitted on the client channel if an async API request responds with an error.
|
||||||
|
///
|
||||||
|
/// @param channel_id
|
||||||
|
/// @param type Error type id as defined by `api_info().error_types`.
|
||||||
|
/// @param msg Error message.
|
||||||
|
void nvim_error_event(uint64_t channel_id, Integer type, String msg)
|
||||||
|
FUNC_API_REMOTE_ONLY
|
||||||
|
{
|
||||||
|
// TODO(bfredl): consider printing message to user, as will be relevant
|
||||||
|
// if we fork nvim processes as async workers
|
||||||
|
ELOG("async error on channel %" PRId64 ": %s", channel_id, msg.size ? msg.data : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Emitted by the TUI client to signal when a host-terminal event occurred.
|
||||||
|
///
|
||||||
|
/// Supports these events:
|
||||||
|
///
|
||||||
|
/// - "termresponse": The host-terminal sent a DA1, OSC, DCS, or APC response sequence to Nvim.
|
||||||
|
/// The payload is the received response. Sets |v:termresponse| and fires
|
||||||
|
/// |TermResponse|.
|
||||||
|
///
|
||||||
|
/// @param channel_id
|
||||||
|
/// @param event Event name
|
||||||
|
/// @param value Event payload
|
||||||
|
/// @param[out] err Error details, if any.
|
||||||
|
void nvim_ui_term_event(uint64_t channel_id, String event, Object value, Error *err)
|
||||||
|
FUNC_API_SINCE(12) FUNC_API_REMOTE_ONLY
|
||||||
|
{
|
||||||
|
if (strequal("termresponse", event.data)) {
|
||||||
|
if (value.type != kObjectTypeString) {
|
||||||
|
api_set_error(err, kErrorTypeValidation, "termresponse must be a string");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const String termresponse = value.data.string;
|
||||||
|
set_vim_var_string(VV_TERMRESPONSE, termresponse.data, (ptrdiff_t)termresponse.size);
|
||||||
|
|
||||||
|
MAXSIZE_TEMP_DICT(data, 1);
|
||||||
|
PUT_C(data, "sequence", value);
|
||||||
|
apply_autocmds_group(EVENT_TERMRESPONSE, NULL, NULL, true, AUGROUP_ALL, NULL, NULL,
|
||||||
|
&DICT_OBJ(data));
|
||||||
|
}
|
||||||
|
}
|
8
src/nvim/api/events.h
Normal file
8
src/nvim/api/events.h
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h> // IWYU pragma: keep
|
||||||
|
|
||||||
|
#include "nvim/api/keysets_defs.h" // IWYU pragma: keep
|
||||||
|
#include "nvim/api/private/defs.h" // IWYU pragma: keep
|
||||||
|
|
||||||
|
#include "api/events.h.generated.h"
|
@@ -567,37 +567,6 @@ void nvim_ui_pum_set_bounds(uint64_t channel_id, Float width, Float height, Floa
|
|||||||
ui->pum_pos = true;
|
ui->pum_pos = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tells Nvim when a host-terminal event occurred.
|
|
||||||
///
|
|
||||||
/// Supports these events:
|
|
||||||
///
|
|
||||||
/// - "termresponse": The host-terminal sent a DA1, OSC, DCS, or APC response sequence to Nvim.
|
|
||||||
/// The payload is the received response. Sets |v:termresponse| and fires
|
|
||||||
/// |TermResponse|.
|
|
||||||
///
|
|
||||||
/// @param channel_id
|
|
||||||
/// @param event Event name
|
|
||||||
/// @param value Event payload
|
|
||||||
/// @param[out] err Error details, if any.
|
|
||||||
void nvim_ui_term_event(uint64_t channel_id, String event, Object value, Error *err)
|
|
||||||
FUNC_API_SINCE(12) FUNC_API_REMOTE_ONLY
|
|
||||||
{
|
|
||||||
if (strequal("termresponse", event.data)) {
|
|
||||||
if (value.type != kObjectTypeString) {
|
|
||||||
api_set_error(err, kErrorTypeValidation, "termresponse must be a string");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const String termresponse = value.data.string;
|
|
||||||
set_vim_var_string(VV_TERMRESPONSE, termresponse.data, (ptrdiff_t)termresponse.size);
|
|
||||||
|
|
||||||
MAXSIZE_TEMP_DICT(data, 1);
|
|
||||||
PUT_C(data, "sequence", value);
|
|
||||||
apply_autocmds_group(EVENT_TERMRESPONSE, NULL, NULL, true, AUGROUP_ALL, NULL, NULL,
|
|
||||||
&DICT_OBJ(data));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void flush_event(RemoteUI *ui)
|
static void flush_event(RemoteUI *ui)
|
||||||
{
|
{
|
||||||
if (ui->cur_event) {
|
if (ui->cur_event) {
|
||||||
|
@@ -2222,15 +2222,6 @@ DictAs(eval_statusline_ret) nvim_eval_statusline(String str, Dict(eval_statuslin
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
|
||||||
void nvim_error_event(uint64_t channel_id, Integer lvl, String data)
|
|
||||||
FUNC_API_REMOTE_ONLY
|
|
||||||
{
|
|
||||||
// TODO(bfredl): consider printing message to user, as will be relevant
|
|
||||||
// if we fork nvim processes as async workers
|
|
||||||
ELOG("async error on channel %" PRId64 ": %s", channel_id, data.size ? data.data : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// EXPERIMENTAL: this API may change in the future.
|
/// EXPERIMENTAL: this API may change in the future.
|
||||||
///
|
///
|
||||||
/// Sets info for the completion item at the given index. If the info text was shown in a window,
|
/// Sets info for the completion item at the given index. If the info text was shown in a window,
|
||||||
|
Reference in New Issue
Block a user