mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Add <, >, <=, >= for formats, GitHub issue 1747.
This commit is contained in:
		
							
								
								
									
										39
									
								
								format.c
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user