aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/api/keysets.h1
-rw-r--r--src/nvim/api/vim.c1
-rw-r--r--src/nvim/highlight_group.c8
3 files changed, 9 insertions, 1 deletions
diff --git a/src/nvim/api/keysets.h b/src/nvim/api/keysets.h
index 1f5c7069a9..0a07e8c16f 100644
--- a/src/nvim/api/keysets.h
+++ b/src/nvim/api/keysets.h
@@ -181,6 +181,7 @@ typedef struct {
Integer id;
String name;
Boolean link;
+ Boolean create;
} Dict(get_highlight);
typedef struct {
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 411d63b921..da10ab5bd4 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -96,6 +96,7 @@ Integer nvim_get_hl_id_by_name(String name)
/// - name: (string) Get a highlight definition by name.
/// - id: (integer) Get a highlight definition by id.
/// - link: (boolean, default true) Show linked group name instead of effective definition |:hi-link|.
+/// - create: (boolean, default true) When highlight group doesn't exist create it.
///
/// @param[out] err Error details, if any.
/// @return Highlight groups as a map from group name to a highlight definition map as in |nvim_set_hl()|,
diff --git a/src/nvim/highlight_group.c b/src/nvim/highlight_group.c
index c4d140d1e1..b970e752bb 100644
--- a/src/nvim/highlight_group.c
+++ b/src/nvim/highlight_group.c
@@ -1569,7 +1569,13 @@ Dictionary ns_get_hl_defs(NS ns_id, Dict(get_highlight) *opts, Arena *arena, Err
Boolean link = GET_BOOL_OR_TRUE(opts, get_highlight, link);
int id = -1;
if (HAS_KEY(opts, get_highlight, name)) {
- id = syn_check_group(opts->name.data, opts->name.size);
+ Boolean create = GET_BOOL_OR_TRUE(opts, get_highlight, create);
+ id = create ? syn_check_group(opts->name.data, opts->name.size)
+ : syn_name2id_len(opts->name.data, opts->name.size);
+ if (id == 0 && !create) {
+ Dictionary attrs = ARRAY_DICT_INIT;
+ return attrs;
+ }
} else if (HAS_KEY(opts, get_highlight, id)) {
id = (int)opts->id;
}