|
38 | 38 | * in tl_scrollback are no longer used. |
39 | 39 | * |
40 | 40 | * TODO: |
| 41 | + * - better check for blinking - reply from Thomas Dickey Aug 22 |
41 | 42 | * - test for writing lines to terminal job does not work on MS-Windows |
42 | 43 | * - implement term_setsize() |
43 | 44 | * - add test for giving error for invalid 'termsize' value. |
44 | 45 | * - support minimal size when 'termsize' is "rows*cols". |
45 | 46 | * - support minimal size when 'termsize' is empty? |
46 | 47 | * - do not set bufhidden to "hide"? works like a buffer with changes. |
47 | 48 | * document that CTRL-W :hide can be used. |
| 49 | + * - GUI: when using tabs, focus in terminal, click on tab does not work. |
| 50 | + * - GUI: when 'confirm' is set and trying to exit Vim, dialog offers to save |
| 51 | + * changes to "!shell". |
| 52 | + * (justrajdeep, 2017 Aug 22) |
48 | 53 | * - command argument with spaces doesn't work #1999 |
49 | 54 | * :terminal ls dir\ with\ spaces |
50 | 55 | * - implement job options when starting a terminal. Allow: |
@@ -945,7 +950,7 @@ move_terminal_to_buffer(term_T *term) |
945 | 950 | width = 1; |
946 | 951 | vim_memset(p + pos.col, 0, sizeof(cellattr_T)); |
947 | 952 | if (ga_grow(&ga, 1) == OK) |
948 | | - ga.ga_len += mb_char2bytes(' ', |
| 953 | + ga.ga_len += utf_char2bytes(' ', |
949 | 954 | (char_u *)ga.ga_data + ga.ga_len); |
950 | 955 | } |
951 | 956 | else |
@@ -1266,9 +1271,31 @@ term_paste_register(int prev_c UNUSED) |
1266 | 1271 | for (item = l->lv_first; item != NULL; item = item->li_next) |
1267 | 1272 | { |
1268 | 1273 | char_u *s = get_tv_string(&item->li_tv); |
| 1274 | +#ifdef WIN3264 |
| 1275 | + char_u *tmp = s; |
| 1276 | + |
| 1277 | + if (!enc_utf8 && enc_codepage > 0) |
| 1278 | + { |
| 1279 | + WCHAR *ret = NULL; |
| 1280 | + int length = 0; |
1269 | 1281 |
|
| 1282 | + MultiByteToWideChar_alloc(enc_codepage, 0, (char*)s, STRLEN(s), |
| 1283 | + &ret, &length); |
| 1284 | + if (ret != NULL) |
| 1285 | + { |
| 1286 | + WideCharToMultiByte_alloc(CP_UTF8, 0, |
| 1287 | + ret, length, (char **)&s, &length, 0, 0); |
| 1288 | + vim_free(ret); |
| 1289 | + } |
| 1290 | + } |
| 1291 | +#endif |
1270 | 1292 | channel_send(curbuf->b_term->tl_job->jv_channel, PART_IN, |
1271 | 1293 | s, STRLEN(s), NULL); |
| 1294 | +#ifdef WIN3264 |
| 1295 | + if (tmp != s) |
| 1296 | + vim_free(s); |
| 1297 | +#endif |
| 1298 | + |
1272 | 1299 | if (item->li_next != NULL || type == MLINE) |
1273 | 1300 | channel_send(curbuf->b_term->tl_job->jv_channel, PART_IN, |
1274 | 1301 | (char_u *)"\r", 1, NULL); |
@@ -1815,6 +1842,24 @@ handle_settermprop( |
1815 | 1842 | * displayed */ |
1816 | 1843 | if (*skipwhite((char_u *)value->string) == NUL) |
1817 | 1844 | term->tl_title = NULL; |
| 1845 | +#ifdef WIN3264 |
| 1846 | + else if (!enc_utf8 && enc_codepage > 0) |
| 1847 | + { |
| 1848 | + WCHAR *ret = NULL; |
| 1849 | + int length = 0; |
| 1850 | + |
| 1851 | + MultiByteToWideChar_alloc(CP_UTF8, 0, |
| 1852 | + (char*)value->string, STRLEN(value->string), |
| 1853 | + &ret, &length); |
| 1854 | + if (ret != NULL) |
| 1855 | + { |
| 1856 | + WideCharToMultiByte_alloc(enc_codepage, 0, |
| 1857 | + ret, length, (char**)&term->tl_title, |
| 1858 | + &length, 0, 0); |
| 1859 | + vim_free(ret); |
| 1860 | + } |
| 1861 | + } |
| 1862 | +#endif |
1818 | 1863 | else |
1819 | 1864 | term->tl_title = vim_strsave((char_u *)value->string); |
1820 | 1865 | vim_free(term->tl_status_text); |
@@ -1921,7 +1966,7 @@ handle_pushline(int cols, const VTermScreenCell *cells, void *user) |
1921 | 1966 | break; |
1922 | 1967 | } |
1923 | 1968 | for (i = 0; (c = cells[col].chars[i]) > 0 || i == 0; ++i) |
1924 | | - ga.ga_len += mb_char2bytes(c == NUL ? ' ' : c, |
| 1969 | + ga.ga_len += utf_char2bytes(c == NUL ? ' ' : c, |
1925 | 1970 | (char_u *)ga.ga_data + ga.ga_len); |
1926 | 1971 | p[col].width = cells[col].width; |
1927 | 1972 | p[col].attrs = cells[col].attrs; |
|
0 commit comments