noice

small file browser
git clone git://git.2f30.org/noice
Log | Files | Refs | README | LICENSE

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:
Mconfig.def.h | 1+
Mnoice.1 | 2++
Mnoice.c | 10++++++++++
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; } }