summaryrefslogtreecommitdiff
path: root/src/idx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/idx.c')
-rw-r--r--src/idx.c60
1 files changed, 42 insertions, 18 deletions
diff --git a/src/idx.c b/src/idx.c
index 8a74754..bd1286f 100644
--- a/src/idx.c
+++ b/src/idx.c
@@ -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) {

Return to:

Send suggestions and report system problems to the System administrator.