summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/digraph.txt4
-rw-r--r--src/digraph.c231
-rw-r--r--src/ex_cmds.h2
-rw-r--r--src/ex_docmd.c2
-rw-r--r--src/proto/digraph.pro2
-rw-r--r--src/version.c2
6 files changed, 170 insertions, 73 deletions
diff --git a/runtime/doc/digraph.txt b/runtime/doc/digraph.txt
index 14a567651..3b6424a22 100644
--- a/runtime/doc/digraph.txt
+++ b/runtime/doc/digraph.txt
@@ -24,7 +24,9 @@ An alternative is using the 'keymap' option.
1. Defining digraphs *digraphs-define*
*:dig* *:digraphs*
-:dig[raphs] show currently defined digraphs.
+:dig[raphs][!] Show currently defined digraphs.
+ With [!] headers are used to make it a bit easier to
+ find a specific character.
*E104* *E39*
:dig[raphs] {char1}{char2} {number} ...
Add digraph {char1}{char2} to the list. {number} is
diff --git a/src/digraph.c b/src/digraph.c
index e707b058d..8a46b5b0d 100644
--- a/src/digraph.c
+++ b/src/digraph.c
@@ -28,7 +28,7 @@ typedef struct digraph
result_T result;
} digr_T;
-static void printdigraph(digr_T *);
+static void printdigraph(digr_T *dp, result_T *previous);
/* digraphs added by the user */
static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL};
@@ -643,101 +643,154 @@ static digr_T digraphdefault[] =
{'P', 'M', 0x9e},
{'A', 'C', 0x9f},
{'N', 'S', 0xa0},
+#define DG_START_LATIN 0xa1
{'!', 'I', 0xa1},
+ {'~', '!', 0xa1}, // ¡ Vim 5.x compatible
{'C', 't', 0xa2},
+ {'c', '|', 0xa2}, // ¢ Vim 5.x compatible
{'P', 'd', 0xa3},
+ {'$', '$', 0xa3}, // £ Vim 5.x compatible
{'C', 'u', 0xa4},
+ {'o', 'x', 0xa4}, // ¤ Vim 5.x compatible
{'Y', 'e', 0xa5},
+ {'Y', '-', 0xa5}, // ¥ Vim 5.x compatible
{'B', 'B', 0xa6},
+ {'|', '|', 0xa6}, // ¦ Vim 5.x compatible
{'S', 'E', 0xa7},
{'\'', ':', 0xa8},
{'C', 'o', 0xa9},
+ {'c', 'O', 0xa9}, // © Vim 5.x compatible
{'-', 'a', 0xaa},
{'<', '<', 0xab},
{'N', 'O', 0xac},
+ {'-', ',', 0xac}, // ¬ Vim 5.x compatible
{'-', '-', 0xad},
{'R', 'g', 0xae},
{'\'', 'm', 0xaf},
+ {'-', '=', 0xaf}, // ¯ Vim 5.x compatible
{'D', 'G', 0xb0},
+ {'~', 'o', 0xb0}, // ° Vim 5.x compatible
{'+', '-', 0xb1},
{'2', 'S', 0xb2},
+ {'2', '2', 0xb2}, // ² Vim 5.x compatible
{'3', 'S', 0xb3},
+ {'3', '3', 0xb3}, // ³ Vim 5.x compatible
{'\'', '\'', 0xb4},
{'M', 'y', 0xb5},
{'P', 'I', 0xb6},
+ {'p', 'p', 0xb6}, // ¶ Vim 5.x compatible
{'.', 'M', 0xb7},
+ {'~', '.', 0xb7}, // · Vim 5.x compatible
{'\'', ',', 0xb8},
{'1', 'S', 0xb9},
+ {'1', '1', 0xb9}, // ¹ Vim 5.x compatible
{'-', 'o', 0xba},
{'>', '>', 0xbb},
{'1', '4', 0xbc},
{'1', '2', 0xbd},
{'3', '4', 0xbe},
{'?', 'I', 0xbf},
+ {'~', '?', 0xbf}, // ¿ Vim 5.x compatible
{'A', '!', 0xc0},
+ {'A', '`', 0xc0}, // À Vim 5.x compatible
{'A', '\'', 0xc1},
{'A', '>', 0xc2},
+ {'A', '^', 0xc2}, // Â Vim 5.x compatible
{'A', '?', 0xc3},
+ {'A', '~', 0xc3}, // Ã Vim 5.x compatible
{'A', ':', 0xc4},
+ {'A', '"', 0xc4}, // Ä Vim 5.x compatible
{'A', 'A', 0xc5},
+ {'A', '@', 0xc5}, // Å Vim 5.x compatible
{'A', 'E', 0xc6},
{'C', ',', 0xc7},
{'E', '!', 0xc8},
+ {'E', '`', 0xc8}, // È Vim 5.x compatible
{'E', '\'', 0xc9},
{'E', '>', 0xca},
+ {'E', '^', 0xca}, // Ê Vim 5.x compatible
{'E', ':', 0xcb},
+ {'E', '"', 0xcb}, // Ë Vim 5.x compatible
{'I', '!', 0xcc},
+ {'I', '`', 0xcc}, // Ì Vim 5.x compatible
{'I', '\'', 0xcd},
{'I', '>', 0xce},
+ {'I', '^', 0xce}, // Î Vim 5.x compatible
{'I', ':', 0xcf},
+ {'I', '"', 0xcf}, // Ï Vim 5.x compatible
{'D', '-', 0xd0},
{'N', '?', 0xd1},
+ {'N', '~', 0xd1}, // Ñ Vim 5.x compatible
{'O', '!', 0xd2},
+ {'O', '`', 0xd2}, // Ò Vim 5.x compatible
{'O', '\'', 0xd3},
{'O', '>', 0xd4},
+ {'O', '^', 0xd4}, // Ô Vim 5.x compatible
{'O', '?', 0xd5},
+ {'O', '~', 0xd5}, // Õ Vim 5.x compatible
{'O', ':', 0xd6},
{'*', 'X', 0xd7},
+ {'/', '\\', 0xd7}, // × Vim 5.x compatible
{'O', '/', 0xd8},
{'U', '!', 0xd9},
+ {'U', '`', 0xd9}, // Ù Vim 5.x compatible
{'U', '\'', 0xda},
{'U', '>', 0xdb},
+ {'U', '^', 0xdb}, // Û Vim 5.x compatible
{'U', ':', 0xdc},
{'Y', '\'', 0xdd},
{'T', 'H', 0xde},
+ {'I', 'p', 0xde}, // Þ Vim 5.x compatible
{'s', 's', 0xdf},
{'a', '!', 0xe0},
+ {'a', '`', 0xe0}, // à Vim 5.x compatible
{'a', '\'', 0xe1},
{'a', '>', 0xe2},
+ {'a', '^', 0xe2}, // â Vim 5.x compatible
{'a', '?', 0xe3},
+ {'a', '~', 0xe3}, // ã Vim 5.x compatible
{'a', ':', 0xe4},
+ {'a', '"', 0xe4}, // ä Vim 5.x compatible
{'a', 'a', 0xe5},
+ {'a', '@', 0xe5}, // å Vim 5.x compatible
{'a', 'e', 0xe6},
{'c', ',', 0xe7},
{'e', '!', 0xe8},
+ {'e', '`', 0xe8}, // è Vim 5.x compatible
{'e', '\'', 0xe9},
{'e', '>', 0xea},
+ {'e', '^', 0xea}, // ê Vim 5.x compatible
{'e', ':', 0xeb},
+ {'e', '"', 0xeb}, // ë Vim 5.x compatible
{'i', '!', 0xec},
+ {'i', '`', 0xec}, // ì Vim 5.x compatible
{'i', '\'', 0xed},
{'i', '>', 0xee},
+ {'i', '^', 0xee}, // î Vim 5.x compatible
{'i', ':', 0xef},
{'d', '-', 0xf0},
{'n', '?', 0xf1},
+ {'n', '~', 0xf1}, // ñ Vim 5.x compatible
{'o', '!', 0xf2},
+ {'o', '`', 0xf2}, // ò Vim 5.x compatible
{'o', '\'', 0xf3},
{'o', '>', 0xf4},
+ {'o', '^', 0xf4}, // ô Vim 5.x compatible
{'o', '?', 0xf5},
+ {'o', '~', 0xf5}, // õ Vim 5.x compatible
{'o', ':', 0xf6},
{'-', ':', 0xf7},
{'o', '/', 0xf8},
{'u', '!', 0xf9},
+ {'u', '`', 0xf9}, // ù Vim 5.x compatible
{'u', '\'', 0xfa},
{'u', '>', 0xfb},
+ {'u', '^', 0xfb}, // û Vim 5.x compatible
{'u', ':', 0xfc},
{'y', '\'', 0xfd},
{'t', 'h', 0xfe},
{'y', ':', 0xff},
+ {'y', '"', 0xff}, // x XX Vim 5.x compatible
# ifdef FEAT_MBYTE
# define USE_UNICODE_DIGRAPHS
@@ -915,6 +968,7 @@ static digr_T digraphdefault[] =
{'\'', '0', 0x02da},
{'\'', ';', 0x02db},
{'\'', '"', 0x02dd},
+#define DG_START_GREEK 0x0386
{'A', '%', 0x0386},
{'E', '%', 0x0388},
{'Y', '%', 0x0389},
@@ -996,6 +1050,7 @@ static digr_T digraphdefault[] =
{'p', '3', 0x03e1},
{'\'', '%', 0x03f4},
{'j', '3', 0x03f5},
+#define DG_START_CYRILLIC 0x0401
{'I', 'O', 0x0401},
{'D', '%', 0x0402},
{'G', '%', 0x0403},
@@ -1100,6 +1155,7 @@ static digr_T digraphdefault[] =
{'c', '3', 0x0481},
{'G', '3', 0x0490},
{'g', '3', 0x0491},
+#define DG_START_HEBREW 0x05d0
{'A', '+', 0x05d0},
{'B', '+', 0x05d1},
{'G', '+', 0x05d2},
@@ -1127,6 +1183,7 @@ static digr_T digraphdefault[] =
{'R', '+', 0x05e8},
{'S', 'h', 0x05e9},
{'T', '+', 0x05ea},
+#define DG_START_ARABIC 0x060c
{',', '+', 0x060c},
{';', '+', 0x061b},
{'?', '+', 0x061f},
@@ -1189,6 +1246,7 @@ static digr_T digraphdefault[] =
{'7', 'a', 0x06f7},
{'8', 'a', 0x06f8},
{'9', 'a', 0x06f9},
+#define DG_START_LATIN_EXTENDED 0x1e02
{'B', '.', 0x1e02},
{'b', '.', 0x1e03},
{'B', '_', 0x1e06},
@@ -1240,7 +1298,9 @@ static digr_T digraphdefault[] =
{'V', '?', 0x1e7c},
{'v', '?', 0x1e7d},
{'W', '!', 0x1e80},
+ {'W', '`', 0x1e80}, // extra alternative, easier to remember
{'w', '!', 0x1e81},
+ {'w', '`', 0x1e81}, // extra alternative, easier to remember
{'W', '\'', 0x1e82},
{'w', '\'', 0x1e83},
{'W', ':', 0x1e84},
@@ -1274,11 +1334,14 @@ static digr_T digraphdefault[] =
{'U', '2', 0x1ee6},
{'u', '2', 0x1ee7},
{'Y', '!', 0x1ef2},
+ {'Y', '`', 0x1ef2}, // extra alternative, easier to remember
{'y', '!', 0x1ef3},
+ {'y', '`', 0x1ef3}, // extra alternative, easier to remember
{'Y', '2', 0x1ef6},
{'y', '2', 0x1ef7},
{'Y', '?', 0x1ef8},
{'y', '?', 0x1ef9},
+#define DG_START_GREEK_EXTENDED 0x1f00
{';', '\'', 0x1f00},
{',', '\'', 0x1f01},
{';', '!', 0x1f02},
@@ -1287,6 +1350,7 @@ static digr_T digraphdefault[] =
{'?', ',', 0x1f05},
{'!', ':', 0x1f06},
{'?', ':', 0x1f07},
+#define DG_START_PUNCTUATION 0x2002
{'1', 'N', 0x2002},
{'1', 'M', 0x2003},
{'3', 'M', 0x2004},
@@ -1325,6 +1389,7 @@ static digr_T digraphdefault[] =
{':', 'X', 0x203b},
{'\'', '-', 0x203e},
{'/', 'f', 0x2044},
+#define DG_START_SUB_SUPER 0x2070
{'0', 'S', 0x2070},
{'4', 'S', 0x2074},
{'5', 'S', 0x2075},
@@ -1353,6 +1418,7 @@ static digr_T digraphdefault[] =
{'=', 's', 0x208c},
{'(', 's', 0x208d},
{')', 's', 0x208e},
+#define DG_START_CURRENCY 0x20a4
{'L', 'i', 0x20a4},
{'P', 't', 0x20a7},
{'W', '=', 0x20a9},
@@ -1360,6 +1426,7 @@ static digr_T digraphdefault[] =
{'E', 'u', 0x20ac}, /* euro */
{'=', 'R', 0x20bd}, /* rouble */
{'=', 'P', 0x20bd}, /* rouble */
+#define DG_START_OTHER1 0x2103
{'o', 'C', 0x2103},
{'c', 'o', 0x2105},
{'o', 'F', 0x2109},
@@ -1382,6 +1449,7 @@ static digr_T digraphdefault[] =
{'3', '8', 0x215c},
{'5', '8', 0x215d},
{'7', '8', 0x215e},
+#define DG_START_ROMAN 0x2160
{'1', 'R', 0x2160},
{'2', 'R', 0x2161},
{'3', 'R', 0x2162},
@@ -1406,6 +1474,7 @@ static digr_T digraphdefault[] =
{'a', 'r', 0x2179},
{'b', 'r', 0x217a},
{'c', 'r', 0x217b},
+#define DG_START_ARROWS 0x2190
{'<', '-', 0x2190},
{'-', '!', 0x2191},
{'-', '>', 0x2192},
@@ -1415,6 +1484,7 @@ static digr_T digraphdefault[] =
{'<', '=', 0x21d0},
{'=', '>', 0x21d2},
{'=', '=', 0x21d4},
+#define DG_START_MATH 0x2200
{'F', 'A', 0x2200},
{'d', 'P', 0x2202},
{'T', 'E', 0x2203},
@@ -1472,6 +1542,7 @@ static digr_T digraphdefault[] =
{'.', 'P', 0x22c5},
{':', '3', 0x22ee},
{'.', '3', 0x22ef},
+#define DG_START_TECHNICAL 0x2302
{'E', 'h', 0x2302},
{'<', '7', 0x2308},
{'>', '7', 0x2309},
@@ -1484,6 +1555,7 @@ static digr_T digraphdefault[] =
{'I', 'l', 0x2321},
{'<', '/', 0x2329},
{'/', '>', 0x232a},
+#define DG_START_OTHER2 0x2423
{'V', 's', 0x2423},
{'1', 'h', 0x2440},
{'3', 'h', 0x2441},
@@ -1502,6 +1574,7 @@ static digr_T digraphdefault[] =
{'7', '.', 0x248e},
{'8', '.', 0x248f},
{'9', '.', 0x2490},
+#define DG_START_DRAWING 0x2500
{'h', 'h', 0x2500},
{'H', 'H', 0x2501},
{'v', 'v', 0x2502},
@@ -1552,6 +1625,7 @@ static digr_T digraphdefault[] =
{'V', 'H', 0x254b},
{'F', 'D', 0x2571},
{'B', 'D', 0x2572},
+#define DG_START_BLOCK 0x2580
{'T', 'B', 0x2580},
{'L', 'B', 0x2584},
{'F', 'B', 0x2588},
@@ -1560,6 +1634,7 @@ static digr_T digraphdefault[] =
{'.', 'S', 0x2591},
{':', 'S', 0x2592},
{'?', 'S', 0x2593},
+#define DG_START_SHAPES 0x25a0
{'f', 'S', 0x25a0},
{'O', 'S', 0x25a1},
{'R', 'O', 0x25a2},
@@ -1593,6 +1668,7 @@ static digr_T digraphdefault[] =
{'I', 'c', 0x25d9},
{'F', 'd', 0x25e2},
{'B', 'd', 0x25e3},
+#define DG_START_SYMBOLS 0x2605
{'*', '2', 0x2605},
{'*', '1', 0x2606},
{'<', 'H', 0x261c},
@@ -1612,9 +1688,11 @@ static digr_T digraphdefault[] =
{'M', 'b', 0x266d},
{'M', 'x', 0x266e},
{'M', 'X', 0x266f},
+#define DG_START_DINGBATS 0x2713
{'O', 'K', 0x2713},
{'X', 'X', 0x2717},
{'-', 'X', 0x2720},
+#define DG_START_CJK_SYMBOLS 0x3000
{'I', 'S', 0x3000},
{',', '_', 0x3001},
{'.', '_', 0x3002},
@@ -1638,6 +1716,7 @@ static digr_T digraphdefault[] =
{'(', 'I', 0x3016},
{')', 'I', 0x3017},
{'-', '?', 0x301c},
+#define DG_START_HIRAGANA 0x3041
{'A', '5', 0x3041},
{'a', '5', 0x3042},
{'I', '5', 0x3043},
@@ -1726,6 +1805,7 @@ static digr_T digraphdefault[] =
{'0', '5', 0x309c},
{'*', '5', 0x309d},
{'+', '5', 0x309e},
+#define DG_START_KATAKANA 0x30a1
{'a', '6', 0x30a1},
{'A', '6', 0x30a2},
{'i', '6', 0x30a3},
@@ -1820,6 +1900,7 @@ static digr_T digraphdefault[] =
{'-', '6', 0x30fc},
{'*', '6', 0x30fd},
{'+', '6', 0x30fe},
+#define DG_START_BOPOMOFO 0x3105
{'b', '4', 0x3105},
{'p', '4', 0x3106},
{'m', '4', 0x3107},
@@ -1859,6 +1940,7 @@ static digr_T digraphdefault[] =
{'v', '4', 0x312a},
{'n', 'G', 0x312b},
{'g', 'n', 0x312c},
+#define DG_START_OTHER3 0x3220
{'1', 'c', 0x3220},
{'2', 'c', 0x3221},
{'3', 'c', 0x3222},
@@ -1875,69 +1957,8 @@ static digr_T digraphdefault[] =
{'f', 'l', 0xfb02},
{'f', 't', 0xfb05},
{'s', 't', 0xfb06},
-
- /* extra alternatives, easier to remember */
- {'W', '`', 0x1e80},
- {'w', '`', 0x1e81},
- {'Y', '`', 0x1ef2},
- {'y', '`', 0x1ef3},
-
# endif /* FEAT_MBYTE */
- /* Vim 5.x compatible digraphs that don't conflict with the above */
- {'~', '!', 161}, /* ¡ */
- {'c', '|', 162}, /* ¢ */
- {'$', '$', 163}, /* £ */
- {'o', 'x', 164}, /* ¤ - currency symbol in ISO 8859-1 */
- {'Y', '-', 165}, /* ¥ */
- {'|', '|', 166}, /* ¦ */
- {'c', 'O', 169}, /* © */
- {'-', ',', 172}, /* ¬ */
- {'-', '=', 175}, /* ¯ */
- {'~', 'o', 176}, /* ° */
- {'2', '2', 178}, /* ² */
- {'3', '3', 179}, /* ³ */
- {'p', 'p', 182}, /* ¶ */
- {'~', '.', 183}, /* · */
- {'1', '1', 185}, /* ¹ */
- {'~', '?', 191}, /* ¿ */
- {'A', '`', 192}, /* À */
- {'A', '^', 194}, /* Â */
- {'A', '~', 195}, /* Ã */
- {'A', '"', 196}, /* Ä */
- {'A', '@', 197}, /* Å */
- {'E', '`', 200}, /* È */
- {'E', '^', 202}, /* Ê */
- {'E', '"', 203}, /* Ë */
- {'I', '`', 204}, /* Ì */
- {'I', '^', 206}, /* Î */
- {'I', '"', 207}, /* Ï */
- {'N', '~', 209}, /* Ñ */
- {'O', '`', 210}, /* Ò */
- {'O', '^', 212}, /* Ô */
- {'O', '~', 213}, /* Õ */
- {'/', '\\', 215}, /* × - multiplication symbol in ISO 8859-1 */
- {'U', '`', 217}, /* Ù */
- {'U', '^', 219}, /* Û */
- {'I', 'p', 222}, /* Þ */
- {'a', '`', 224}, /* à */
- {'a', '^', 226}, /* â */
- {'a', '~', 227}, /* ã */
- {'a', '"', 228}, /* ä */
- {'a', '@', 229}, /* å */
- {'e', '`', 232}, /* è */
- {'e', '^', 234}, /* ê */
- {'e', '"', 235}, /* ë */
- {'i', '`', 236}, /* ì */
- {'i', '^', 238}, /* î */
- {'n', '~', 241}, /* ñ */
- {'o', '`', 242}, /* ò */
- {'o', '^', 244}, /* ô */
- {'o', '~', 245}, /* õ */
- {'u', '`', 249}, /* ù */
- {'u', '^', 251}, /* û */
- {'y', '"', 255}, /* x XX */
-
{NUL, NUL, NUL}
};
@@ -1986,7 +2007,7 @@ get_digraph_for_char(int val_arg)
digr_T *dp;
static char_u r[3];
-#if defined(FEAT_MBYTE) && defined(USE_UNICODE_DIGRAPHS)
+#if defined(USE_UNICODE_DIGRAPHS)
if (!enc_utf8)
{
char_u buf[6], *to;
@@ -2240,18 +2261,30 @@ putdigraph(char_u *str)
}
}
+#if defined(USE_UNICODE_DIGRAPHS)
+ static void
+digraph_header(char *msg)
+{
+ if (msg_col > 0)
+ msg_putchar('\n');
+ msg_outtrans_attr((char_u *)msg, HL_ATTR(HLF_CM));
+ msg_putchar('\n');
+}
+#endif
+
void
-listdigraphs(void)
+listdigraphs(int use_headers)
{
int i;
digr_T *dp;
+ result_T previous = 0;
msg_putchar('\n');
dp = digraphdefault;
for (i = 0; dp->char1 != NUL && !got_int; ++i)
{
-#if defined(USE_UNICODE_DIGRAPHS) && defined(FEAT_MBYTE)
+#if defined(USE_UNICODE_DIGRAPHS)
digr_T tmp;
/* May need to convert the result to 'encoding'. */
@@ -2260,7 +2293,7 @@ listdigraphs(void)
tmp.result = getexactdigraph(tmp.char1, tmp.char2, FALSE);
if (tmp.result != 0 && tmp.result != tmp.char2
&& (has_mbyte || tmp.result <= 255))
- printdigraph(&tmp);
+ printdigraph(&tmp, use_headers ? &previous : NULL);
#else
if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result
@@ -2268,7 +2301,7 @@ listdigraphs(void)
&& (has_mbyte || dp->result <= 255)
# endif
)
- printdigraph(dp);
+ printdigraph(dp, use_headers ? &previous : NULL);
#endif
++dp;
ui_breakcheck();
@@ -2277,7 +2310,12 @@ listdigraphs(void)
dp = (digr_T *)user_digraphs.ga_data;
for (i = 0; i < user_digraphs.ga_len && !got_int; ++i)
{
- printdigraph(dp);
+#if defined(USE_UNICODE_DIGRAPHS)
+ if (previous >= 0 && use_headers)
+ digraph_header(_("Custom"));
+ previous = -1;
+#endif
+ printdigraph(dp, NULL);
ui_breakcheck();
++dp;
}
@@ -2285,8 +2323,41 @@ listdigraphs(void)
wrong, in which case we messed up ScreenLines */
}
+struct dg_header_entry {
+ int dg_start;
+ char *dg_header;
+} header_table[] = {
+ {DG_START_LATIN, N_("Latin supplement")},
+ {DG_START_GREEK, N_("Greek and Coptic")},
+ {DG_START_CYRILLIC, N_("Cyrillic")},
+ {DG_START_HEBREW, N_("Hebrew")},
+ {DG_START_ARABIC, N_("Arabic")},
+ {DG_START_LATIN_EXTENDED, N_("Latin extended")},
+ {DG_START_GREEK_EXTENDED, N_("Greek extended")},
+ {DG_START_PUNCTUATION, N_("Punctuation")},
+ {DG_START_SUB_SUPER, N_("Super- and subscripts")},
+ {DG_START_CURRENCY, N_("Currency")},
+ {DG_START_OTHER1, N_("Other")},
+ {DG_START_ROMAN, N_("Roman numbers")},
+ {DG_START_ARROWS, N_("Arrows")},
+ {DG_START_MATH, N_("Mathematical operators")},
+ {DG_START_TECHNICAL, N_("Technical")},
+ {DG_START_OTHER2, N_("Other")},
+ {DG_START_DRAWING, N_("Box drawing")},
+ {DG_START_BLOCK, N_("Block elements")},
+ {DG_START_SHAPES, N_("Geometric shapes")},
+ {DG_START_SYMBOLS, N_("Symbols")},
+ {DG_START_DINGBATS, N_("Dingbats")},
+ {DG_START_CJK_SYMBOLS, N_("CJK symbols and punctuation")},
+ {DG_START_HIRAGANA, N_("Hiragana")},
+ {DG_START_KATAKANA, N_("Katakana")},
+ {DG_START_BOPOMOFO, N_("Bopomofo")},
+ {DG_START_OTHER3, N_("Other")},
+ {0xfffffff, NULL},
+};
+
static void
-printdigraph(digr_T *dp)
+printdigraph(digr_T *dp, result_T *previous)
{
char_u buf[30];
char_u *p;
@@ -2304,6 +2375,22 @@ printdigraph(digr_T *dp)
if (dp->result != 0)
{
+#if defined(USE_UNICODE_DIGRAPHS)
+ if (previous != NULL)
+ {
+ int i;
+
+ for (i = 0; header_table[i].dg_header != NULL; ++i)
+ if (*previous < header_table[i].dg_start
+ && dp->result >= header_table[i].dg_start
+ && dp->result < header_table[i + 1].dg_start)
+ {
+ digraph_header(_(header_table[i].dg_header));
+ break;
+ }
+ *previous = dp->result;
+ }
+#endif
if (msg_col > Columns - list_width)
msg_putchar('\n');
if (msg_col)
@@ -2314,6 +2401,9 @@ printdigraph(digr_T *dp)
*p++ = dp->char1;
*p++ = dp->char2;
*p++ = ' ';
+ *p = NUL;
+ msg_outtrans(buf);
+ p = buf;
#ifdef FEAT_MBYTE
if (has_mbyte)
{
@@ -2325,6 +2415,9 @@ printdigraph(digr_T *dp)
else
#endif
*p++ = (char_u)dp->result;
+ *p = NUL;
+ msg_outtrans_attr(buf, HL_ATTR(HLF_8));
+ p = buf;
if (char2cells(dp->result) == 1)
*p++ = ' ';
vim_snprintf((char *)p, sizeof(buf) - (p - buf), " %3d", dp->result);
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 335871a01..49e7fc75d 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -456,7 +456,7 @@ EX(CMD_diffthis, "diffthis", ex_diffthis,
TRLBAR,
ADDR_LINES),
EX(CMD_digraphs, "digraphs", ex_digraphs,
- EXTRA|TRLBAR|CMDWIN,
+ BANG|EXTRA|TRLBAR|CMDWIN,
ADDR_LINES),
EX(CMD_djump, "djump", ex_findpat,
BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 99a06fc34..c738d0798 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -12413,7 +12413,7 @@ ex_digraphs(exarg_T *eap UNUSED)
if (*eap->arg != NUL)
putdigraph(eap->arg);
else
- listdigraphs();
+ listdigraphs(eap->forceit);
#else
EMSG(_("E196: No digraphs in this version"));
#endif
diff --git a/src/proto/digraph.pro b/src/proto/digraph.pro
index 4c12f5137..37dc2b291 100644
--- a/src/proto/digraph.pro
+++ b/src/proto/digraph.pro
@@ -4,7 +4,7 @@ char_u *get_digraph_for_char(int val_arg);
int get_digraph(int cmdline);
int getdigraph(int char1, int char2, int meta_char);
void putdigraph(char_u *str);
-void listdigraphs(void);
+void listdigraphs(int use_headers);
char_u *keymap_init(void);
void ex_loadkeymap(exarg_T *eap);
void keymap_clear(garray_T *kmap);
diff --git a/src/version.c b/src/version.c
index 2c8b3acc0..9e3f7208a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 586,
+/**/
585,
/**/
584,