diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2014-04-12 23:21:43 +0300 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2014-04-12 23:21:43 +0300 |
commit | d22612899a74005fd442d54710c86e677742c7f4 (patch) | |
tree | 71249835c9ec60cb793006b191256234c5c485c1 /lib/util.c | |
parent | f722f247fcd2d53c346cc99bba15c0d20a16c652 (diff) | |
download | bemenu-d22612899a74005fd442d54710c86e677742c7f4.tar.gz bemenu-d22612899a74005fd442d54710c86e677742c7f4.tar.bz2 bemenu-d22612899a74005fd442d54710c86e677742c7f4.zip |
Curses really does not like tabs.
Diffstat (limited to 'lib/util.c')
-rw-r--r-- | lib/util.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -130,16 +130,26 @@ int _bmUtf8StringScreenWidth(const char *string) { assert(string); - int num_char = mbstowcs(NULL, string, 0) + 1; + char *mstr = _bmStrdup(string); + if (!mstr) + return strlen(string); + + char *s; + for (s = mstr; *s; ++s) if (*s == '\t') *s = ' '; + + int num_char = mbstowcs(NULL, mstr, 0) + 1; wchar_t *wstring = malloc((num_char + 1) * sizeof (wstring[0])); - if (mbstowcs(wstring, string, num_char) == (size_t)(-1)) { + if (mbstowcs(wstring, mstr, num_char) == (size_t)(-1)) { free(wstring); - return strlen(string); + int len = strlen(mstr); + free(mstr); + return len; } int length = wcswidth(wstring, num_char); free(wstring); + free(mstr); return length; } |