From 3f81f5c7a451f93a48103af4f1c31fd5f31d687f Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Wed, 27 Jan 2021 15:09:02 +0100 Subject: feat: adds vim.notify Adds function to notify the user like this: `:lua vim.notify("hello user")` embeds log levels vim.log.levels. you can then reassign vim.notify to for instance ``` function notify_external(msg, log_level, opts) vim.fn.jobstart({"notify-send", msg }) end ``` --- src/nvim/log.h | 9 +++++---- src/nvim/lua/vim.lua | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) (limited to 'src/nvim') diff --git a/src/nvim/log.h b/src/nvim/log.h index f2e74df031..17d754c033 100644 --- a/src/nvim/log.h +++ b/src/nvim/log.h @@ -17,10 +17,11 @@ #endif -#define DEBUG_LOG_LEVEL 0 -#define INFO_LOG_LEVEL 1 -#define WARN_LOG_LEVEL 2 -#define ERROR_LOG_LEVEL 3 +#define TRACE_LOG_LEVEL 0 +#define DEBUG_LOG_LEVEL 1 +#define INFO_LOG_LEVEL 2 +#define WARN_LOG_LEVEL 3 +#define ERROR_LOG_LEVEL 4 #define DLOG(...) #define DLOGN(...) diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua index dbf4f6014c..00a4fe26d3 100644 --- a/src/nvim/lua/vim.lua +++ b/src/nvim/lua/vim.lua @@ -39,6 +39,16 @@ assert(vim) vim.inspect = package.loaded['vim.inspect'] assert(vim.inspect) +vim.log = { + levels = { + TRACE = 0; + DEBUG = 1; + INFO = 2; + WARN = 3; + ERROR = 4; + } +} + -- Internal-only until comments in #8107 are addressed. -- Returns: -- {errcode}, {output} @@ -478,6 +488,23 @@ function vim.defer_fn(fn, timeout) return timer end + +--- Notification provider +--- without a runtime, writes to :Messages +-- see :help nvim_notify +--@param msg Content of the notification to show to the user +--@param log_level Optional log level +--@param opts Dictionary with optional options (timeout, etc) +function vim.notify(msg, log_level, _opts) + + if log_level == vim.log.levels.ERROR then + vim.api.nvim_err_writeln(msg) + else + vim.api.nvim_echo(msg) + end +end + + local on_keystroke_callbacks = {} --- Register a lua {fn} with an {id} to be run after every keystroke. -- cgit From bb22c780445b2e62dc5e3a76e553020351c2de20 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Sat, 30 Jan 2021 23:08:19 +0100 Subject: api: add nvim_notify parameters are mandatory --- src/nvim/api/vim.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/nvim') diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 09895a2119..b94c99dc5e 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -545,6 +545,26 @@ Object nvim_exec_lua(String code, Array args, Error *err) return nlua_exec(code, args, err); } +/// Notify the user with a message +/// +/// Relays the call to vim.notify . By default forwards your message in the +/// echo area but can be overriden to trigger desktop notifications. +/// +/// @param msg Message to display to the user +/// @param log_level The log level +/// @param opts Reserved for future use. +/// @param[out] err Error details, if any +Object nvim_notify(String msg, Integer log_level, Dictionary opts, Error *err) + FUNC_API_SINCE(7) +{ + FIXED_TEMP_ARRAY(args, 3); + args.items[0] = STRING_OBJ(msg); + args.items[1] = INTEGER_OBJ(log_level); + args.items[2] = DICTIONARY_OBJ(opts); + + return nlua_exec(STATIC_CSTR_AS_STRING("return vim.notify(...)"), args, err); +} + /// Calls a VimL function. /// /// @param fn Function name -- cgit