diff options
author | nicm <nicm> | 2018-06-27 17:36:10 +0000 |
---|---|---|
committer | nicm <nicm> | 2018-06-27 17:36:10 +0000 |
commit | a14aa788d4e8b1155107a2b82bf60177b0c8e3bb (patch) | |
tree | 2101a3998a8063e0f7604cc1663536cc5e73dc2d | |
parent | 97738921cda24dd9444f4f94c0fef8a2d2ddec22 (diff) | |
download | rtmux-a14aa788d4e8b1155107a2b82bf60177b0c8e3bb.tar.gz rtmux-a14aa788d4e8b1155107a2b82bf60177b0c8e3bb.tar.bz2 rtmux-a14aa788d4e8b1155107a2b82bf60177b0c8e3bb.zip |
Allow any punctuation (except :) as separator in s/x/y/, not only
/. From JINNOUCHI Yasushi in GitHub issue 1386.
-rw-r--r-- | format.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -19,6 +19,7 @@ #include <sys/types.h> #include <sys/wait.h> +#include <ctype.h> #include <errno.h> #include <fnmatch.h> #include <libgen.h> @@ -891,7 +892,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, char **buf, size_t *len, size_t *off) { struct window_pane *wp = ft->wp; - char *copy, *copy0, *endptr, *ptr, *found, *new; + char *copy, *copy0, *endptr, *ptr, *found, *new, sep; char *value, *from = NULL, *to = NULL, *left, *right; size_t valuelen, newlen, fromlen, tolen, used; long limit = 0; @@ -975,20 +976,21 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, copy += 2; break; case 's': - if (copy[1] != '/') + sep = copy[1]; + if (sep == ':' || !ispunct((u_char)sep)) break; from = copy + 2; - for (copy = from; *copy != '\0' && *copy != '/'; copy++) + for (copy = from; *copy != '\0' && *copy != sep; copy++) /* nothing */; - if (copy[0] != '/' || copy == from) { + if (copy[0] != sep || copy == from) { copy = copy0; break; } copy[0] = '\0'; to = copy + 1; - for (copy = to; *copy != '\0' && *copy != '/'; copy++) + for (copy = to; *copy != '\0' && *copy != sep; copy++) /* nothing */; - if (copy[0] != '/' || copy[1] != ':') { + if (copy[0] != sep || copy[1] != ':') { copy = copy0; break; } |