Add m: for fnmatch(3) format matching.

pull/615/merge
nicm 2017-05-29 15:43:48 +00:00
parent 1883d299bf
commit 1257501499
2 changed files with 16 additions and 0 deletions

View File

@ -21,6 +21,7 @@
#include <ctype.h>
#include <errno.h>
#include <fnmatch.h>
#include <libgen.h>
#include <netdb.h>
#include <stdarg.h>
@ -868,6 +869,12 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
/* Is there a length limit or whatnot? */
switch (copy[0]) {
case 'm':
if (copy[1] != ':')
break;
compare = -2;
copy += 2;
break;
case '!':
if (copy[1] == '=' && copy[2] == ':') {
compare = -1;
@ -943,6 +950,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
value = xstrdup("1");
else if (compare == -1 && strcmp(left, right) != 0)
value = xstrdup("1");
else if (compare == -2 && fnmatch(left, right, 0) == 0)
value = xstrdup("1");
else
value = xstrdup("0");
free(right);

7
tmux.1
View File

@ -3444,6 +3444,13 @@ if running on
.Ql myhost ,
otherwise by
.Ql 0.
An
.Ql m
specifies a
.Xr fnmatch 3
comparison - the first argument is the pattern and the second the string to
compare. For example,
.Ql #{m:*foo*,#{host}} .
.Pp
A limit may be placed on the length of the resultant string by prefixing it
by an