Support UTF-8 with choose-buffer, from Kosuke ASAMI. Also make

buffer_sample bigger to let it trim at window right edge.
This commit is contained in:
nicm
2014-04-02 18:12:18 +00:00
parent 82f3e0e9e6
commit 252a7373d6
7 changed files with 70 additions and 21 deletions

43
utf8.c
View File

@ -19,6 +19,7 @@
#include <sys/types.h>
#include <string.h>
#include <vis.h>
#include "tmux.h"
@ -350,3 +351,45 @@ utf8_width(const struct utf8_data *utf8data)
}
return (1);
}
/*
* Encode len characters from src into dst, which is guaranteed to have four
* bytes available for each character from src (for \abc or UTF-8) plus space
* for \0.
*/
int
utf8_strvis(char *dst, const char *src, size_t len, int flag)
{
struct utf8_data utf8data;
const char *start, *end;
int more;
size_t i;
start = dst;
end = src + len;
while (src < end) {
if (utf8_open(&utf8data, *src)) {
more = 1;
while (++src < end && more)
more = utf8_append(&utf8data, *src);
if (!more) {
/* UTF-8 character finished. */
for (i = 0; i < utf8data.size; i++)
*dst++ = utf8data.data[i];
continue;
} else if (utf8data.have > 0) {
/* Not a complete UTF-8 character. */
src -= utf8data.have;
}
}
if (src < end - 1)
dst = vis(dst, src[0], flag, src[1]);
else if (src < end)
dst = vis(dst, src[0], flag, '\0');
src++;
}
*dst = '\0';
return (dst - start);
}