aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicm <nicm>2019-05-25 16:51:10 +0000
committernicm <nicm>2019-05-25 16:51:10 +0000
commita65a6d62d19136e20ce6e6ec72d676a334dcc914 (patch)
tree5350750427accbe1ab4b1f9da492b089959ef01d
parent207789dc2d02467a06df82ca9fd58a9ebd4279ba (diff)
downloadrtmux-a65a6d62d19136e20ce6e6ec72d676a334dcc914.tar.gz
rtmux-a65a6d62d19136e20ce6e6ec72d676a334dcc914.tar.bz2
rtmux-a65a6d62d19136e20ce6e6ec72d676a334dcc914.zip
Add <, >, <=, >= for formats, GitHub issue 1747.
-rw-r--r--format.c39
-rw-r--r--tmux.18
2 files changed, 38 insertions, 9 deletions
diff --git a/format.c b/format.c
index a99db16b..b1f82cc6 100644
--- a/format.c
+++ b/format.c
@@ -1136,13 +1136,13 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count)
/*
* Modifiers are a ; separated list of the forms:
- * l,m,C,b,d,t,q,E,T,S,W,P
+ * l,m,C,b,d,t,q,E,T,S,W,P,<,>
* =a
* =/a
* =/a/
* s/a/b/
* s/a/b
- * ||,&&,!=,==
+ * ||,&&,!=,==,<=,>=
*/
*count = 0;
@@ -1153,7 +1153,7 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count)
cp++;
/* Check single character modifiers with no arguments. */
- if (strchr("lmCbdtqETSWP", cp[0]) != NULL &&
+ if (strchr("lmCbdtqETSWP<>", cp[0]) != NULL &&
format_is_end(cp[1])) {
format_add_modifier(&list, count, cp, 1, NULL, 0);
cp++;
@@ -1164,7 +1164,9 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count)
if ((memcmp("||", cp, 2) == 0 ||
memcmp("&&", cp, 2) == 0 ||
memcmp("!=", cp, 2) == 0 ||
- memcmp("==", cp, 2) == 0) &&
+ memcmp("==", cp, 2) == 0 ||
+ memcmp("<=", cp, 2) == 0 ||
+ memcmp(">=", cp, 2) == 0) &&
format_is_end(cp[2])) {
format_add_modifier(&list, count, cp, 2, NULL, 0);
cp += 2;
@@ -1433,6 +1435,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
if (fm->size == 1) {
switch (fm->modifier[0]) {
case 'm':
+ case '<':
+ case '>':
cmp = fm;
break;
case 'C':
@@ -1486,7 +1490,9 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
if (strcmp(fm->modifier, "||") == 0 ||
strcmp(fm->modifier, "&&") == 0 ||
strcmp(fm->modifier, "==") == 0 ||
- strcmp(fm->modifier, "!=") == 0)
+ strcmp(fm->modifier, "!=") == 0 ||
+ strcmp(fm->modifier, ">=") == 0 ||
+ strcmp(fm->modifier, "<=") == 0)
cmp = fm;
}
}
@@ -1549,8 +1555,27 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
value = xstrdup("1");
else
value = xstrdup("0");
- }
- else if (strcmp(cmp->modifier, "m") == 0) {
+ } else if (strcmp(cmp->modifier, "<") == 0) {
+ if (strcmp(left, right) < 0)
+ value = xstrdup("1");
+ else
+ value = xstrdup("0");
+ } else if (strcmp(cmp->modifier, ">") == 0) {
+ if (strcmp(left, right) > 0)
+ value = xstrdup("1");
+ else
+ value = xstrdup("0");
+ } else if (strcmp(cmp->modifier, "<=") == 0) {
+ if (strcmp(left, right) <= 0)
+ value = xstrdup("1");
+ else
+ value = xstrdup("0");
+ } else if (strcmp(cmp->modifier, ">=") == 0) {
+ if (strcmp(left, right) >= 0)
+ value = xstrdup("1");
+ else
+ value = xstrdup("0");
+ } else if (strcmp(cmp->modifier, "m") == 0) {
if (fnmatch(left, right, 0) == 0)
value = xstrdup("1");
else
diff --git a/tmux.1 b/tmux.1
index 4c86ac95..5e1a223e 100644
--- a/tmux.1
+++ b/tmux.1
@@ -3946,9 +3946,13 @@ For example:
.Pp
Comparisons may be expressed by prefixing two comma-separated
alternatives by
-.Ql ==
+.Ql == ,
+.Ql != ,
+.Ql < ,
+.Ql > ,
+.Ql <=
or
-.Ql !=
+.Ql >=
and a colon.
For example
.Ql #{==:#{host},myhost}