diff options
Diffstat (limited to 'vis-cmds.c')
| -rw-r--r-- | vis-cmds.c | 24 |
1 files changed, 22 insertions, 2 deletions
@@ -632,8 +632,26 @@ static bool cmd_earlier_later(Vis *vis, Win *win, Command *cmd, const char *argv return pos != EPOS; } +static size_t space_replace(char *dest, const char *src, size_t dlen) { + size_t i, invisiblebytes = 0, size = strlen("␣"); + for (i = 0; *src && i < dlen; src++) { + if (*src == ' ' && i < dlen - size - 1) { + memcpy(&dest[i], "␣", size); + i += size; + invisiblebytes += size - 1; + } else { + dest[i] = *src; + i++; + } + } + dest[i] = '\0'; + return invisiblebytes; +} + static bool print_keylayout(const char *key, void *value, void *data) { - return text_appendf(data, " %-18s\t%s\n", key[0] == ' ' ? "␣" : key, (char*)value); + char buf[64]; + size_t invisiblebytes = space_replace(buf, key, sizeof(buf)); + return text_appendf(data, " %-*s\t%s\n", 18+invisiblebytes, buf, (char*)value); } static bool print_keybinding(const char *key, void *value, void *data) { @@ -641,7 +659,9 @@ static bool print_keybinding(const char *key, void *value, void *data) { const char *desc = binding->alias; if (!desc && binding->action) desc = VIS_HELP_USE(binding->action->help); - return text_appendf(data, " %-18s\t%s\n", key[0] == ' ' ? "␣" : key, desc ? desc : ""); + char buf[64]; + size_t invisiblebytes = space_replace(buf, key, sizeof(buf)); + return text_appendf(data, " %-*s\t%s\n", 18+invisiblebytes, buf, desc ? desc : ""); } static void print_mode(Mode *mode, Text *txt) { |
