diff options
author | Christian Neukirchen <chneukirchen@gmail.com> | 2015-10-26 14:40:49 +0100 |
---|---|---|
committer | Christian Neukirchen <chneukirchen@gmail.com> | 2015-10-26 14:40:49 +0100 |
commit | c500373deff3f2bf94bf30a720bc52b569743d68 (patch) | |
tree | f297ee483533f5fd416fe5b45ec0df3a9dc8b543 | |
parent | 929fb5bd5b5ecebb6a3619cb4fa8446a3dd14275 (diff) | |
download | lr-c500373deff3f2bf94bf30a720bc52b569743d68.tar.gz lr-c500373deff3f2bf94bf30a720bc52b569743d68.tar.xz lr-c500373deff3f2bf94bf30a720bc52b569743d68.zip |
sort by extension
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | lr.c | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/README.md b/README.md index 248af49..d5ebc2d 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,7 @@ Default: `n`. * `a`: atime. * `c`: ctime. * `d`: path depth. +* `e`: file extension. * `i`: inode number. * `m`: mtime. * `n`: file name. diff --git a/lr.c b/lr.c index e1a13df..30be4d4 100644 --- a/lr.c +++ b/lr.c @@ -533,6 +533,16 @@ basenam(const char *s) } static const char * +extnam(const char *s) +{ + char *r = strrchr(s, '/'); + char *e = strrchr(s, '.'); + if (!r || r < e) + return e ? e + 1 : ""; + return ""; +} + +static const char * readlin(const char *p, const char *alt) { static char b[PATH_MAX]; @@ -740,6 +750,8 @@ order(const void *a, const void *b) "ZZZZAZZZZZZZZZZZ"[(fa->sb.st_mode >> 12) & 0x0f]); case 'n': STRCMP(fa->fpath, fb->fpath); case 'N': STRCMP(fb->fpath, fa->fpath); + case 'e': STRCMP(extnam(fa->fpath), extnam(fb->fpath)); + case 'E': STRCMP(extnam(fb->fpath), extnam(fa->fpath)); default: STRCMP(fa->fpath, fb->fpath); } } |