aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vis-cmds.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/vis-cmds.c b/vis-cmds.c
index a5c9f77..48a5091 100644
--- a/vis-cmds.c
+++ b/vis-cmds.c
@@ -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) {