diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-05-25 16:51:11 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-05-25 16:51:11 +0000 |
commit | bebbfbcf65120b91c8551bbe1c2bc8d91f7d0882 (patch) | |
tree | 2f3e826e50ee0608b488b68de86c87e61eb3d70d | |
parent | a468e06f0203fe5991fa869c27eb5782394fa80f (diff) |
Add <, >, <=, >= for formats, GitHub issue 1747.
-rw-r--r-- | usr.bin/tmux/format.c | 41 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.1 | 12 |
2 files changed, 41 insertions, 12 deletions
diff --git a/usr.bin/tmux/format.c b/usr.bin/tmux/format.c index 9cf76987eef..7060a911077 100644 --- a/usr.bin/tmux/format.c +++ b/usr.bin/tmux/format.c @@ -1,4 +1,4 @@ -/* $OpenBSD: format.c,v 1.194 2019/05/13 20:07:02 nicm Exp $ */ +/* $OpenBSD: format.c,v 1.195 2019/05/25 16:51:10 nicm Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -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/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index d51a84bb201..8896ea9ad4a 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.651 2019/05/23 11:13:30 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.652 2019/05/25 16:51:10 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: May 23 2019 $ +.Dd $Mdocdate: May 25 2019 $ .Dt TMUX 1 .Os .Sh NAME @@ -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} |