blob: 4137d17e8b6946ce3acb7f02e2ad25058c586e2c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "nvim/lua/executor.h" // for LuaRef
#include "nvim/register_defs.h" // for yankreg_T, MotionType
#include "nvim/eval/typval_defs.h" // for typval_T, dict_T
#include "nvim/hashtab_defs.h" // for hashitem_T
typedef struct {
LuaRef text_yanked_cb; ///< Lua callback for yank operations
LuaRef text_put_cb; ///< Lua callback for put operations
yankreg_T yreg; ///< Owned yank register storage
bool registered; ///< Is provider currently active
uint64_t recursion_id; ///< Recursion guard (os_time())
char name[]; ///< Provider name. Used intrusively in a hashmap
} extreg_provider_t;
#define HASH_ITEM_TO_EXTREG_PROVIDER(hi) \
((extreg_provider_t*)((hi)->hi_key - offsetof(extreg_provider_t, name)))
// Global storage maps
extern dict_T extreg_aliases; ///< alias (1-char string) -> provider_name (string)
extern hashtab_T extreg_providers; ///< intrusive hash map of extreg_provider_t's;
// Active provider for ~ register
extern extreg_provider_t *active_extreg; ///< Currently selected extreg provider
// Provider management
extern int extreg_register(const char *name, LuaRef text_yanked_cb, LuaRef text_put_cb);
extern int extreg_unregister(const char *name);
extern int extreg_bind(int alias_codepoint, const char *provider_name);
extern int extreg_unbind(int alias_codepoint);
extern bool extreg_is_alias(int alias_codepoint);
extern extreg_provider_t *extreg_get_provider_for_alias(int alias_codepoint);
extern const char *extreg_get_provider_name_for_alias(int alias_codepoint);
extern extreg_provider_t *extreg_get_provider(const char *name);
extern char *extreg_parse_provider(char *in_arg, char **out);
extern void extreg_free_provider(extreg_provider_t* prov);
// Callback execution
extern bool extreg_materialize(extreg_provider_t *prov);
extern bool extreg_commit(extreg_provider_t *prov);
// Yank register population from string
extern void extreg_yreg_from_string(extreg_provider_t *prov, const char *str, size_t len);
// Register prompt
extern int get_extreg_register(void);
extern int get_alias_register(int reg);
extern int get_extreg_or_alias_register(int reg);
// Recursion guard
extern bool extreg_is_recursing(extreg_provider_t *prov);
// Initialization
extern void extreg_init(void);
extern void extreg_clear_all(void);
// Data conversion
static inline bool yankreg_to_lua_tv(yankreg_T *reg, typval_T *tv);
static inline bool lua_tv_to_yankreg(typval_T *tv, yankreg_T *reg);
// Lua bindings
extern int nlua_extregs_register(lua_State *lstate);
extern int nlua_extregs_unregister(lua_State *lstate);
extern int nlua_extregs_bind(lua_State *lstate);
extern int nlua_extregs_unbind(lua_State *lstate);
extern int nlua_extregs_is_alias(lua_State *lstate);
extern int nlua_extregs_get_provider_name_for_alias(lua_State *lstate);
extern int nlua_extregs_get_provider(lua_State *lstate);
extern int nlua_extregs_get_provider_names(lua_State *lstate);
|