const char * cmd_set_option_print( const struct set_option_entry *entry, struct options_entry *o) { static char out[BUFSIZ]; const char *s; struct keylist *keylist; u_int i; *out = '\0'; switch (entry->type) { case SET_OPTION_STRING: xsnprintf(out, sizeof out, "\"%s\"", o->str); break; case SET_OPTION_NUMBER: xsnprintf(out, sizeof out, "%lld", o->num); break; case SET_OPTION_KEYS: keylist = o->data; for (i = 0; i < ARRAY_LENGTH(keylist); i++) { strlcat(out, key_string_lookup_key( ARRAY_ITEM(keylist, i)), sizeof out); if (i != ARRAY_LENGTH(keylist) - 1) strlcat(out, ",", sizeof out); } break; case SET_OPTION_COLOUR: s = colour_tostring(o->num); xsnprintf(out, sizeof out, "%s", s); break; case SET_OPTION_ATTRIBUTES: s = attributes_tostring(o->num); xsnprintf(out, sizeof out, "%s", s); break; case SET_OPTION_FLAG: if (o->num) strlcpy(out, "on", sizeof out); else strlcpy(out, "off", sizeof out); break; case SET_OPTION_CHOICE: s = entry->choices[o->num]; xsnprintf(out, sizeof out, "%s", s); break; } return (out); }
/* Print an option using its type from the table. */ const char * options_table_print_entry(const struct options_table_entry *oe, struct options_entry *o, int no_quotes) { static char out[BUFSIZ]; const char *s; *out = '\0'; switch (oe->type) { case OPTIONS_TABLE_STRING: if (no_quotes) xsnprintf(out, sizeof out, "%s", o->str); else xsnprintf(out, sizeof out, "\"%s\"", o->str); break; case OPTIONS_TABLE_NUMBER: xsnprintf(out, sizeof out, "%lld", o->num); break; case OPTIONS_TABLE_KEY: xsnprintf(out, sizeof out, "%s", key_string_lookup_key(o->num)); break; case OPTIONS_TABLE_COLOUR: s = colour_tostring(o->num); xsnprintf(out, sizeof out, "%s", s); break; case OPTIONS_TABLE_ATTRIBUTES: s = attributes_tostring(o->num); xsnprintf(out, sizeof out, "%s", s); break; case OPTIONS_TABLE_FLAG: if (o->num) strlcpy(out, "on", sizeof out); else strlcpy(out, "off", sizeof out); break; case OPTIONS_TABLE_CHOICE: s = oe->choices[o->num]; xsnprintf(out, sizeof out, "%s", s); break; case OPTIONS_TABLE_STYLE: s = style_tostring(&o->style); xsnprintf(out, sizeof out, "%s", s); break; } return (out); }
/* Convert style to a string. */ const char * style_tostring(struct grid_cell *gc) { int c, off = 0, comma = 0; static char s[256]; *s = '\0'; if (gc->fg != 8 || gc->flags & GRID_FLAG_FG256) { if (gc->flags & GRID_FLAG_FG256) c = gc->fg | 0x100; else c = gc->fg; off += xsnprintf(s, sizeof s, "fg=%s", colour_tostring(c)); comma = 1; } if (gc->bg != 8 || gc->flags & GRID_FLAG_BG256) { if (gc->flags & GRID_FLAG_BG256) c = gc->bg | 0x100; else c = gc->bg; off += xsnprintf(s + off, sizeof s - off, "%sbg=%s", comma ? "," : "", colour_tostring(c)); comma = 1; } if (gc->attr != 0 && gc->attr != GRID_ATTR_CHARSET) { xsnprintf(s + off, sizeof s - off, "%s%s", comma ? "," : "", attributes_tostring(gc->attr)); } if (*s == '\0') return ("default"); return (s); }
int cmd_show_options_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct session *s; struct options *oo; const struct set_option_entry *entry; u_int i; char *vs; long long vn; if (data->flags & CMD_GFLAG) oo = &global_options; else { if ((s = cmd_find_session(ctx, data->target)) == NULL) return (-1); oo = &s->options; } for (i = 0; i < NSETOPTION; i++) { entry = &set_option_table[i]; if (options_find1(oo, entry->name) == NULL) continue; switch (entry->type) { case SET_OPTION_STRING: vs = options_get_string(oo, entry->name); ctx->print(ctx, "%s \"%s\"", entry->name, vs); break; case SET_OPTION_NUMBER: vn = options_get_number(oo, entry->name); ctx->print(ctx, "%s %lld", entry->name, vn); break; case SET_OPTION_KEY: vn = options_get_number(oo, entry->name); ctx->print(ctx, "%s %s", entry->name, key_string_lookup_key(vn)); break; case SET_OPTION_COLOUR: vn = options_get_number(oo, entry->name); ctx->print(ctx, "%s %s", entry->name, colour_tostring(vn)); break; case SET_OPTION_ATTRIBUTES: vn = options_get_number(oo, entry->name); ctx->print(ctx, "%s %s", entry->name, attributes_tostring(vn)); break; case SET_OPTION_FLAG: vn = options_get_number(oo, entry->name); if (vn) ctx->print(ctx, "%s on", entry->name); else ctx->print(ctx, "%s off", entry->name); break; case SET_OPTION_CHOICE: vn = options_get_number(oo, entry->name); ctx->print(ctx, "%s %s", entry->name, entry->choices[vn]); break; } } return (0); }