diff --git a/config.def.h b/config.def.h index 996436f3..3b12199e 100644 --- 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 index 61669e5f..d3d08790 100644 --- 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 index 5358111f..04115cf5 100644 --- 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; } }