aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/CMakeLists.txt3
-rw-r--r--src/nvim/mbyte.c3
-rw-r--r--src/nvim/option.c2
-rw-r--r--src/nvim/option_defs.h1
-rw-r--r--src/nvim/options.lua8
-rw-r--r--src/nvim/version.c2
6 files changed, 17 insertions, 2 deletions
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt
index 7c2c2feebc..64e99fb475 100644
--- a/src/nvim/CMakeLists.txt
+++ b/src/nvim/CMakeLists.txt
@@ -39,6 +39,7 @@ set(UNICODE_DIR ${PROJECT_SOURCE_DIR}/unicode)
set(UNICODEDATA_FILE ${UNICODE_DIR}/UnicodeData.txt)
set(CASEFOLDING_FILE ${UNICODE_DIR}/CaseFolding.txt)
set(EASTASIANWIDTH_FILE ${UNICODE_DIR}/EastAsianWidth.txt)
+set(EMOJI_FILE ${UNICODE_DIR}/emoji-data.txt)
set(GENERATED_UNICODE_TABLES ${GENERATED_DIR}/unicode_tables.generated.h)
include_directories(${GENERATED_DIR})
@@ -195,12 +196,14 @@ add_custom_command(OUTPUT ${GENERATED_UNICODE_TABLES}
${UNICODEDATA_FILE}
${CASEFOLDING_FILE}
${EASTASIANWIDTH_FILE}
+ ${EMOJI_FILE}
${GENERATED_UNICODE_TABLES}
DEPENDS
${UNICODE_TABLES_GENERATOR}
${UNICODEDATA_FILE}
${CASEFOLDING_FILE}
${EASTASIANWIDTH_FILE}
+ ${EMOJI_FILE}
)
add_custom_command(OUTPUT ${GENERATED_API_DISPATCH} ${API_METADATA}
diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c
index f577fd847e..e05b3f3a37 100644
--- a/src/nvim/mbyte.c
+++ b/src/nvim/mbyte.c
@@ -949,6 +949,9 @@ int utf_char2cells(int c)
if (intable(doublewidth, ARRAY_SIZE(doublewidth), c))
return 2;
#endif
+ if (p_emoji && intable(emoji, ARRAY_SIZE(emoji), c)) {
+ return 2;
+ }
}
/* Characters below 0x100 are influenced by 'isprint' option */
else if (c >= 0x80 && !vim_isprintc(c))
diff --git a/src/nvim/option.c b/src/nvim/option.c
index d8908cca90..acefe5b4aa 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -2520,7 +2520,7 @@ did_set_string_option (
errmsg = e_invarg;
}
/* 'ambiwidth' */
- else if (varp == &p_ambw) {
+ else if (varp == &p_ambw || (bool *)varp == &p_emoji) {
if (check_opt_strings(p_ambw, p_ambw_values, FALSE) != OK)
errmsg = e_invarg;
else if (set_chars_option(&p_lcs) != NULL)
diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h
index e36cceaaf4..00ab25c406 100644
--- a/src/nvim/option_defs.h
+++ b/src/nvim/option_defs.h
@@ -402,6 +402,7 @@ static char *(p_dy_values[]) = {"lastline", "uhex", NULL};
#define DY_LASTLINE 0x001
#define DY_UHEX 0x002
EXTERN int p_ed; /* 'edcompatible' */
+EXTERN bool p_emoji; // 'emoji'
EXTERN char_u *p_ead; /* 'eadirection' */
EXTERN bool p_ea; /* 'equalalways' */
EXTERN char_u *p_ep; /* 'equalprg' */
diff --git a/src/nvim/options.lua b/src/nvim/options.lua
index 060ec8c1e1..583c63614a 100644
--- a/src/nvim/options.lua
+++ b/src/nvim/options.lua
@@ -644,6 +644,14 @@ return {
defaults={if_true={vi=false}}
},
{
+ full_name='emoji', abbreviation='emo',
+ type='bool', scope={'global'},
+ vi_def=true,
+ redraw={'everything'},
+ varname='p_emoji',
+ defaults={if_true={vi=true}}
+ },
+ {
full_name='encoding', abbreviation='enc',
type='string', scope={'global'},
deny_in_modelines=true,
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 685a2a843b..0106185d13 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -839,7 +839,7 @@ static int included_patches[] = {
// 1607,
// 1606,
// 1605,
- // 1604,
+ 1604,
1603,
// 1602 NA
// 1601 NA