aboutsummaryrefslogtreecommitdiff
path: root/utf8.c
diff options
context:
space:
mode:
authornicm <nicm>2019-05-23 14:03:44 +0000
committernicm <nicm>2019-05-23 14:03:44 +0000
commit27bfb56ad5e19afa686ed6a99bf8b205fac98aef (patch)
tree9d7eafe33dfe96c3194bbce93d43013e3565af39 /utf8.c
parent3e3eb1dd0faa707fa6bdfd12d455ad711d775241 (diff)
downloadrtmux-27bfb56ad5e19afa686ed6a99bf8b205fac98aef.tar.gz
rtmux-27bfb56ad5e19afa686ed6a99bf8b205fac98aef.tar.bz2
rtmux-27bfb56ad5e19afa686ed6a99bf8b205fac98aef.zip
Break the argument escaping code into a separate function and use it to
escape key bindings in list-keys. Also escape ~ and ; and $ properly.
Diffstat (limited to 'utf8.c')
-rw-r--r--utf8.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/utf8.c b/utf8.c
index 08990634..29bbfa9e 100644
--- a/utf8.c
+++ b/utf8.c
@@ -18,6 +18,7 @@
#include <sys/types.h>
+#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
@@ -182,7 +183,11 @@ utf8_strvis(char *dst, const char *src, size_t len, int flag)
/* Not a complete, valid UTF-8 character. */
src -= ud.have;
}
- if (src < end - 1)
+ if (src[0] == '$' && src < end - 1) {
+ if (isalpha((u_char)src[1]) || src[1] == '_')
+ *dst++ = '\\';
+ *dst++ = '$';
+ } else if (src < end - 1)
dst = vis(dst, src[0], flag, src[1]);
else if (src < end)
dst = vis(dst, src[0], flag, '\0');