commit a63aac0b11c1bc8e54eed95f2fce6fd6dbb41ca8
parent 6735c1f9796a5d06d39ed78538d64a6ba26008f9
Author: sin <sin@2f30.org>
Date: Sat, 31 Jan 2015 22:02:59 +0000
Add 't' command to sort output by entry's mtime
Diffstat:
3 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/config.def.h b/config.def.h
@@ -47,4 +47,5 @@ struct key bindings[] = {
{ '!', SEL_SH },
/* Change dir */
{ 'c', SEL_CD },
+ { 't', SEL_MTIME },
};
diff --git a/noice.1 b/noice.1
@@ -47,6 +47,8 @@ Change filter (see below for more information).
Enter filter-as-you-type mode.
.It Ic c
Change into the given directory.
+.It Ic t
+Sort by time modified.
.It Ic !
Spawn shell in current directory.
.It Ic q
diff --git a/noice.c b/noice.c
@@ -56,6 +56,7 @@ enum action {
SEL_PGUP,
SEL_SH,
SEL_CD,
+ SEL_MTIME,
};
struct key {
@@ -68,8 +69,11 @@ struct key {
struct entry {
char *name;
mode_t mode;
+ time_t t;
};
+int mtimeorder;
+
/*
* Layout:
* .---------
@@ -231,6 +235,8 @@ entrycmp(const void *va, const void *vb)
a = (struct entry *)va;
b = (struct entry *)vb;
+ if (mtimeorder)
+ return b->t - a->t;
return strcmp(a->name, b->name);
}
@@ -487,6 +493,7 @@ dentfill(char *path, struct entry **dents,
if (r == -1)
printerr(1, "lstat");
(*dents)[n].mode = sb.st_mode;
+ (*dents)[n].t = sb.st_mtime;
n++;
}
@@ -809,6 +816,9 @@ moretyping:
filter = xstrdup(ifilter); /* Reset filter */
DPRINTF_S(path);
goto out;
+ case SEL_MTIME:
+ mtimeorder = !mtimeorder;
+ goto out;
}
}