aboutsummaryrefslogtreecommitdiff
path: root/vis-cmds.c
diff options
context:
space:
mode:
authorMax Schillinger <maxschillinger@web.de>2023-07-08 19:47:51 +0200
committerRandy Palamar <palamar@ualberta.ca>2023-07-17 21:16:40 -0600
commit6be370defdede80b300aa0b9b39e25276628e158 (patch)
tree15deb6d07f8620664bb9f9d344c5a3418ea2cd7c /vis-cmds.c
parente728898cbb68f43472befc52b24318372b2e6159 (diff)
downloadvis-6be370defdede80b300aa0b9b39e25276628e158.tar.gz
vis-6be370defdede80b300aa0b9b39e25276628e158.tar.xz
Print keybindings containing space correctly
Fixes #1060 - :help doesn't display mappings starting with <Space> correctly Co-authored-by: Randy Palamar <palamar@ualberta.ca>
Diffstat (limited to 'vis-cmds.c')
-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) {