version 1.271, 2021/01/29 09:48:43 |
version 1.272, 2021/02/05 12:23:49 |
|
|
#define FORMAT_LENGTH 0x800 |
#define FORMAT_LENGTH 0x800 |
#define FORMAT_WIDTH 0x1000 |
#define FORMAT_WIDTH 0x1000 |
#define FORMAT_QUOTE_STYLE 0x2000 |
#define FORMAT_QUOTE_STYLE 0x2000 |
|
#define FORMAT_WINDOW_NAME 0x4000 |
|
#define FORMAT_SESSION_NAME 0x8000 |
|
|
/* Limit on recursion. */ |
/* Limit on recursion. */ |
#define FORMAT_LOOP_LIMIT 10 |
#define FORMAT_LOOP_LIMIT 10 |
|
|
} |
} |
|
|
/* Now try single character with arguments. */ |
/* Now try single character with arguments. */ |
if (strchr("mCst=peq", cp[0]) == NULL) |
if (strchr("mCNst=peq", cp[0]) == NULL) |
break; |
break; |
c = cp[0]; |
c = cp[0]; |
|
|
|
|
return (value); |
return (value); |
} |
} |
|
|
|
/* Does session name exist? */ |
|
static char * |
|
format_session_name(struct format_expand_state *es, const char *fmt) |
|
{ |
|
char *name; |
|
struct session *s; |
|
|
|
name = format_expand1(es, fmt); |
|
RB_FOREACH(s, sessions, &sessions) { |
|
if (strcmp(s->name, name) == 0) { |
|
free(name); |
|
return (xstrdup("1")); |
|
} |
|
} |
|
free(name); |
|
return (xstrdup("0")); |
|
} |
|
|
/* Loop over sessions. */ |
/* Loop over sessions. */ |
static char * |
static char * |
format_loop_sessions(struct format_expand_state *es, const char *fmt) |
format_loop_sessions(struct format_expand_state *es, const char *fmt) |
|
|
return (value); |
return (value); |
} |
} |
|
|
|
/* Does window name exist? */ |
|
static char * |
|
format_window_name(struct format_expand_state *es, const char *fmt) |
|
{ |
|
struct format_tree *ft = es->ft; |
|
char *name; |
|
struct winlink *wl; |
|
|
|
if (ft->s == NULL) { |
|
format_log(es, "window name but no session"); |
|
return (NULL); |
|
} |
|
|
|
name = format_expand1(es, fmt); |
|
RB_FOREACH(wl, winlinks, &ft->s->windows) { |
|
if (strcmp(wl->window->name, name) == 0) { |
|
free(name); |
|
return (xstrdup("1")); |
|
} |
|
} |
|
free(name); |
|
return (xstrdup("0")); |
|
} |
|
|
/* Loop over windows. */ |
/* Loop over windows. */ |
static char * |
static char * |
format_loop_windows(struct format_expand_state *es, const char *fmt) |
format_loop_windows(struct format_expand_state *es, const char *fmt) |
|
|
case 'T': |
case 'T': |
modifiers |= FORMAT_EXPANDTIME; |
modifiers |= FORMAT_EXPANDTIME; |
break; |
break; |
|
case 'N': |
|
if (fm->argc < 1 || |
|
strchr(fm->argv[0], 'w') != NULL) |
|
modifiers |= FORMAT_WINDOW_NAME; |
|
else if (strchr(fm->argv[0], 's') != NULL) |
|
modifiers |= FORMAT_SESSION_NAME; |
|
break; |
case 'S': |
case 'S': |
modifiers |= FORMAT_SESSIONS; |
modifiers |= FORMAT_SESSIONS; |
break; |
break; |
|
|
goto fail; |
goto fail; |
} else if (modifiers & FORMAT_PANES) { |
} else if (modifiers & FORMAT_PANES) { |
value = format_loop_panes(es, copy); |
value = format_loop_panes(es, copy); |
|
if (value == NULL) |
|
goto fail; |
|
} else if (modifiers & FORMAT_WINDOW_NAME) { |
|
value = format_window_name(es, copy); |
|
if (value == NULL) |
|
goto fail; |
|
} else if (modifiers & FORMAT_SESSION_NAME) { |
|
value = format_session_name(es, copy); |
if (value == NULL) |
if (value == NULL) |
goto fail; |
goto fail; |
} else if (search != NULL) { |
} else if (search != NULL) { |