To: vim_dev@googlegroups.com Subject: Patch 8.1.0586 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.0586 Problem: :digraph output is not easy to read. Solution: Add highlighting for :digraphs. (Marcin Szamotulski, closes #3572) Also add section headers for :digraphs!. Files: src/ex_docmd.c, src/digraph.c, src/proto/digraph.pro, src/ex_cmds.h, runtime/doc/digraph.txt *** ../vim-8.1.0585/src/ex_docmd.c 2018-12-08 16:03:18.656085902 +0100 --- src/ex_docmd.c 2018-12-14 15:56:54.547772454 +0100 *************** *** 12413,12419 **** if (*eap->arg != NUL) putdigraph(eap->arg); else ! listdigraphs(); #else EMSG(_("E196: No digraphs in this version")); #endif --- 12413,12419 ---- if (*eap->arg != NUL) putdigraph(eap->arg); else ! listdigraphs(eap->forceit); #else EMSG(_("E196: No digraphs in this version")); #endif *** ../vim-8.1.0585/src/digraph.c 2018-09-30 21:43:17.179693404 +0200 --- src/digraph.c 2018-12-14 18:49:37.198827111 +0100 *************** *** 28,34 **** result_T result; } digr_T; ! static void printdigraph(digr_T *); /* digraphs added by the user */ static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL}; --- 28,34 ---- result_T result; } 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,743 **** --- 643,796 ---- {'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,920 **** --- 968,974 ---- {'\'', '0', 0x02da}, {'\'', ';', 0x02db}, {'\'', '"', 0x02dd}, + #define DG_START_GREEK 0x0386 {'A', '%', 0x0386}, {'E', '%', 0x0388}, {'Y', '%', 0x0389}, *************** *** 996,1001 **** --- 1050,1056 ---- {'p', '3', 0x03e1}, {'\'', '%', 0x03f4}, {'j', '3', 0x03f5}, + #define DG_START_CYRILLIC 0x0401 {'I', 'O', 0x0401}, {'D', '%', 0x0402}, {'G', '%', 0x0403}, *************** *** 1100,1105 **** --- 1155,1161 ---- {'c', '3', 0x0481}, {'G', '3', 0x0490}, {'g', '3', 0x0491}, + #define DG_START_HEBREW 0x05d0 {'A', '+', 0x05d0}, {'B', '+', 0x05d1}, {'G', '+', 0x05d2}, *************** *** 1127,1132 **** --- 1183,1189 ---- {'R', '+', 0x05e8}, {'S', 'h', 0x05e9}, {'T', '+', 0x05ea}, + #define DG_START_ARABIC 0x060c {',', '+', 0x060c}, {';', '+', 0x061b}, {'?', '+', 0x061f}, *************** *** 1189,1194 **** --- 1246,1252 ---- {'7', 'a', 0x06f7}, {'8', 'a', 0x06f8}, {'9', 'a', 0x06f9}, + #define DG_START_LATIN_EXTENDED 0x1e02 {'B', '.', 0x1e02}, {'b', '.', 0x1e03}, {'B', '_', 0x1e06}, *************** *** 1240,1246 **** --- 1298,1306 ---- {'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,1284 **** --- 1334,1347 ---- {'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,1292 **** --- 1350,1356 ---- {'?', ',', 0x1f05}, {'!', ':', 0x1f06}, {'?', ':', 0x1f07}, + #define DG_START_PUNCTUATION 0x2002 {'1', 'N', 0x2002}, {'1', 'M', 0x2003}, {'3', 'M', 0x2004}, *************** *** 1325,1330 **** --- 1389,1395 ---- {':', 'X', 0x203b}, {'\'', '-', 0x203e}, {'/', 'f', 0x2044}, + #define DG_START_SUB_SUPER 0x2070 {'0', 'S', 0x2070}, {'4', 'S', 0x2074}, {'5', 'S', 0x2075}, *************** *** 1353,1358 **** --- 1418,1424 ---- {'=', 's', 0x208c}, {'(', 's', 0x208d}, {')', 's', 0x208e}, + #define DG_START_CURRENCY 0x20a4 {'L', 'i', 0x20a4}, {'P', 't', 0x20a7}, {'W', '=', 0x20a9}, *************** *** 1360,1365 **** --- 1426,1432 ---- {'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,1387 **** --- 1449,1455 ---- {'3', '8', 0x215c}, {'5', '8', 0x215d}, {'7', '8', 0x215e}, + #define DG_START_ROMAN 0x2160 {'1', 'R', 0x2160}, {'2', 'R', 0x2161}, {'3', 'R', 0x2162}, *************** *** 1406,1411 **** --- 1474,1480 ---- {'a', 'r', 0x2179}, {'b', 'r', 0x217a}, {'c', 'r', 0x217b}, + #define DG_START_ARROWS 0x2190 {'<', '-', 0x2190}, {'-', '!', 0x2191}, {'-', '>', 0x2192}, *************** *** 1415,1420 **** --- 1484,1490 ---- {'<', '=', 0x21d0}, {'=', '>', 0x21d2}, {'=', '=', 0x21d4}, + #define DG_START_MATH 0x2200 {'F', 'A', 0x2200}, {'d', 'P', 0x2202}, {'T', 'E', 0x2203}, *************** *** 1472,1477 **** --- 1542,1548 ---- {'.', 'P', 0x22c5}, {':', '3', 0x22ee}, {'.', '3', 0x22ef}, + #define DG_START_TECHNICAL 0x2302 {'E', 'h', 0x2302}, {'<', '7', 0x2308}, {'>', '7', 0x2309}, *************** *** 1484,1489 **** --- 1555,1561 ---- {'I', 'l', 0x2321}, {'<', '/', 0x2329}, {'/', '>', 0x232a}, + #define DG_START_OTHER2 0x2423 {'V', 's', 0x2423}, {'1', 'h', 0x2440}, {'3', 'h', 0x2441}, *************** *** 1502,1507 **** --- 1574,1580 ---- {'7', '.', 0x248e}, {'8', '.', 0x248f}, {'9', '.', 0x2490}, + #define DG_START_DRAWING 0x2500 {'h', 'h', 0x2500}, {'H', 'H', 0x2501}, {'v', 'v', 0x2502}, *************** *** 1552,1557 **** --- 1625,1631 ---- {'V', 'H', 0x254b}, {'F', 'D', 0x2571}, {'B', 'D', 0x2572}, + #define DG_START_BLOCK 0x2580 {'T', 'B', 0x2580}, {'L', 'B', 0x2584}, {'F', 'B', 0x2588}, *************** *** 1560,1565 **** --- 1634,1640 ---- {'.', 'S', 0x2591}, {':', 'S', 0x2592}, {'?', 'S', 0x2593}, + #define DG_START_SHAPES 0x25a0 {'f', 'S', 0x25a0}, {'O', 'S', 0x25a1}, {'R', 'O', 0x25a2}, *************** *** 1593,1598 **** --- 1668,1674 ---- {'I', 'c', 0x25d9}, {'F', 'd', 0x25e2}, {'B', 'd', 0x25e3}, + #define DG_START_SYMBOLS 0x2605 {'*', '2', 0x2605}, {'*', '1', 0x2606}, {'<', 'H', 0x261c}, *************** *** 1612,1620 **** --- 1688,1698 ---- {'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,1643 **** --- 1716,1722 ---- {'(', 'I', 0x3016}, {')', 'I', 0x3017}, {'-', '?', 0x301c}, + #define DG_START_HIRAGANA 0x3041 {'A', '5', 0x3041}, {'a', '5', 0x3042}, {'I', '5', 0x3043}, *************** *** 1726,1731 **** --- 1805,1811 ---- {'0', '5', 0x309c}, {'*', '5', 0x309d}, {'+', '5', 0x309e}, + #define DG_START_KATAKANA 0x30a1 {'a', '6', 0x30a1}, {'A', '6', 0x30a2}, {'i', '6', 0x30a3}, *************** *** 1820,1825 **** --- 1900,1906 ---- {'-', '6', 0x30fc}, {'*', '6', 0x30fd}, {'+', '6', 0x30fe}, + #define DG_START_BOPOMOFO 0x3105 {'b', '4', 0x3105}, {'p', '4', 0x3106}, {'m', '4', 0x3107}, *************** *** 1859,1864 **** --- 1940,1946 ---- {'v', '4', 0x312a}, {'n', 'G', 0x312b}, {'g', 'n', 0x312c}, + #define DG_START_OTHER3 0x3220 {'1', 'c', 0x3220}, {'2', 'c', 0x3221}, {'3', 'c', 0x3222}, *************** *** 1875,1943 **** {'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} }; --- 1957,1964 ---- *************** *** 1986,1992 **** digr_T *dp; static char_u r[3]; ! #if defined(FEAT_MBYTE) && defined(USE_UNICODE_DIGRAPHS) if (!enc_utf8) { char_u buf[6], *to; --- 2007,2013 ---- digr_T *dp; static char_u r[3]; ! #if defined(USE_UNICODE_DIGRAPHS) if (!enc_utf8) { char_u buf[6], *to; *************** *** 2240,2257 **** } } void ! listdigraphs(void) { int i; digr_T *dp; msg_putchar('\n'); dp = digraphdefault; for (i = 0; dp->char1 != NUL && !got_int; ++i) { ! #if defined(USE_UNICODE_DIGRAPHS) && defined(FEAT_MBYTE) digr_T tmp; /* May need to convert the result to 'encoding'. */ --- 2261,2290 ---- } } + #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(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) digr_T tmp; /* May need to convert the result to 'encoding'. */ *************** *** 2260,2266 **** tmp.result = getexactdigraph(tmp.char1, tmp.char2, FALSE); if (tmp.result != 0 && tmp.result != tmp.char2 && (has_mbyte || tmp.result <= 255)) ! printdigraph(&tmp); #else if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result --- 2293,2299 ---- tmp.result = getexactdigraph(tmp.char1, tmp.char2, FALSE); if (tmp.result != 0 && tmp.result != tmp.char2 && (has_mbyte || tmp.result <= 255)) ! printdigraph(&tmp, use_headers ? &previous : NULL); #else if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result *************** *** 2268,2274 **** && (has_mbyte || dp->result <= 255) # endif ) ! printdigraph(dp); #endif ++dp; ui_breakcheck(); --- 2301,2307 ---- && (has_mbyte || dp->result <= 255) # endif ) ! printdigraph(dp, use_headers ? &previous : NULL); #endif ++dp; ui_breakcheck(); *************** *** 2277,2283 **** dp = (digr_T *)user_digraphs.ga_data; for (i = 0; i < user_digraphs.ga_len && !got_int; ++i) { ! printdigraph(dp); ui_breakcheck(); ++dp; } --- 2310,2321 ---- dp = (digr_T *)user_digraphs.ga_data; for (i = 0; i < user_digraphs.ga_len && !got_int; ++i) { ! #if defined(USE_UNICODE_DIGRAPHS) ! if (previous >= 0 && use_headers) ! digraph_header(_("Custom")); ! previous = -1; ! #endif ! printdigraph(dp, NULL); ui_breakcheck(); ++dp; } *************** *** 2285,2292 **** wrong, in which case we messed up ScreenLines */ } static void ! printdigraph(digr_T *dp) { char_u buf[30]; char_u *p; --- 2323,2363 ---- 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, result_T *previous) { char_u buf[30]; char_u *p; *************** *** 2304,2309 **** --- 2375,2396 ---- 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,2319 **** --- 2401,2409 ---- *p++ = dp->char1; *p++ = dp->char2; *p++ = ' '; + *p = NUL; + msg_outtrans(buf); + p = buf; #ifdef FEAT_MBYTE if (has_mbyte) { *************** *** 2325,2330 **** --- 2415,2423 ---- 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); *** ../vim-8.1.0585/src/proto/digraph.pro 2018-09-13 17:26:31.091401618 +0200 --- src/proto/digraph.pro 2018-12-14 15:58:50.914970163 +0100 *************** *** 4,10 **** int get_digraph(int cmdline); int getdigraph(int char1, int char2, int meta_char); void putdigraph(char_u *str); ! void listdigraphs(void); char_u *keymap_init(void); void ex_loadkeymap(exarg_T *eap); void keymap_clear(garray_T *kmap); --- 4,10 ---- int get_digraph(int cmdline); int getdigraph(int char1, int char2, int meta_char); void putdigraph(char_u *str); ! void listdigraphs(int use_headers); char_u *keymap_init(void); void ex_loadkeymap(exarg_T *eap); void keymap_clear(garray_T *kmap); *** ../vim-8.1.0585/src/ex_cmds.h 2018-11-30 22:40:09.098211991 +0100 --- src/ex_cmds.h 2018-12-14 15:59:49.330567980 +0100 *************** *** 456,462 **** TRLBAR, ADDR_LINES), EX(CMD_digraphs, "digraphs", ex_digraphs, ! EXTRA|TRLBAR|CMDWIN, ADDR_LINES), EX(CMD_djump, "djump", ex_findpat, BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA, --- 456,462 ---- TRLBAR, ADDR_LINES), EX(CMD_digraphs, "digraphs", ex_digraphs, ! BANG|EXTRA|TRLBAR|CMDWIN, ADDR_LINES), EX(CMD_djump, "djump", ex_findpat, BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA, *** ../vim-8.1.0585/runtime/doc/digraph.txt 2018-05-17 13:40:51.000000000 +0200 --- runtime/doc/digraph.txt 2018-12-14 15:56:25.435973424 +0100 *************** *** 24,30 **** 1. Defining digraphs *digraphs-define* *:dig* *:digraphs* ! :dig[raphs] show currently defined digraphs. *E104* *E39* :dig[raphs] {char1}{char2} {number} ... Add digraph {char1}{char2} to the list. {number} is --- 24,32 ---- 1. Defining digraphs *digraphs-define* *:dig* *: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 *** ../vim-8.1.0585/src/version.c 2018-12-14 15:48:44.259178570 +0100 --- src/version.c 2018-12-14 18:41:39.921914267 +0100 *************** *** 801,802 **** --- 801,804 ---- { /* Add new patch number below this line */ + /**/ + 586, /**/ -- Contrary to popular belief, it's often your clothing that gets promoted, not you. (Scott Adams - The Dilbert principle) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///