diff options
Diffstat (limited to 'src/idx.c')
-rw-r--r-- | src/idx.c | 60 |
1 files changed, 42 insertions, 18 deletions
@@ -436,6 +436,7 @@ typedef struct { int wsflags; INDEX_SORT_COL col; INDEX_SORT_ORD ord; + ICON const *icon; #define expansion ws.ws_wordv[0] } EVAL_ENV; @@ -602,7 +603,7 @@ exp_filetype(char **ret, EVAL_ENV *env) { char const *s = " "; if (env->ent) - s = S_ISDIR(env->ent->st.st_mode) ? "DIR" : "FILE"; + s = S_ISDIR(env->ent->st.st_mode) ? "DIRECTORY" : "FILE"; *ret = xstrdup(s); return WRDSE_OK; } @@ -636,24 +637,43 @@ template_getvar(char **ret, const char *var, size_t len, void *clos) } static int -cmd_alt(char **ret, char **argv, EVAL_ENV *env) -{ - char *s = strdup(argv[1] ? argv[1] : ""); - if (!s) - return WRDSE_NOSPACE; - *ret = s; - for (; *s; s++) - *s = toupper(*s); - return WRDSE_OK; +cmd_iconlookup(char **ret, char **argv, EVAL_ENV *env) +{ + ICON const *icon = NULL; + if (argv[1]) { + icon = icon_by_name(argv[1]); + if (!icon && argv[2]) { + icon = icon_by_mime(argv[2]); + if (!icon && argv[3]) + icon = icon_by_type(argv[3]); + } + } + env->icon = icon; + *ret = strdup(icon ? icon->src : ""); + return *ret ? WRDSE_OK : WRDSE_NOSPACE; } static int -cmd_icon(char **ret, char **argv, EVAL_ENV *env) +cmd_iconsrc(char **ret, char **argv, EVAL_ENV *env) { - /* FIXME */ - *ret = strdup(""); + char const *s = ""; + if (env->icon) + s = env->icon->src; + + *ret = strdup(s); return *ret ? WRDSE_OK : WRDSE_NOSPACE; -} +} + +static int +cmd_iconalt(char **ret, char **argv, EVAL_ENV *env) +{ + char const *s = ""; + if (env->icon && env->icon->alt) + s = env->icon->alt; + + *ret = strdup(s); + return *ret ? WRDSE_OK : WRDSE_NOSPACE; +} static int cmd_updir(char **ret, char **argv, EVAL_ENV *env) @@ -695,12 +715,16 @@ static int template_command(char **ret, const char *cmd, size_t len, char **argv, void *clos) { - if (strcmp(argv[0], "icon") == 0) { - return cmd_icon(ret, argv, clos); + if (strcmp(argv[0], "iconlookup") == 0) { + return cmd_iconlookup(ret, argv, clos); + } + + if (strcmp(argv[0], "iconsrc") == 0) { + return cmd_iconsrc(ret, argv, clos); } - if (strcmp(argv[0], "alt") == 0) { - return cmd_alt(ret, argv, clos); + if (strcmp(argv[0], "iconalt") == 0) { + return cmd_iconalt(ret, argv, clos); } if (strcmp(argv[0], "updir") == 0) { |