On 06/08/2024 00:00, Tzvetelin Katchov wrote:
It has not way to restore default ls sorting by name, if it was changed.
Attached patch adds "name" for long option --sort.

ls: add option --sort=name

add "name" to sort_args and sort_name to sort_types

I've pushed the attached to implement this.

thank you,
Pádraig
From 84f820228708fbee53e2267e6d2ad805197df8be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Sun, 11 Aug 2024 20:34:08 +0100
Subject: [PATCH] ls: add support for explicit file name sorting

Support overriding previous sorting options
with an explicit --sort=name option.

* doc/coreutils.texi (ls invocation): Document the new option.
* src/ls.c (usage): Likewise.
(sort_args): Add the "name" entry, and sort to be consistent
with the ordering presented in --help.
* tests/ls/ls-time.sh: Add test cases.
* NEWS: Mention the new feature.
Suggested by: Tzvetelin Katchov
---
 NEWS                |  5 +++++
 doc/coreutils.texi  |  7 +++++++
 src/ls.c            | 12 +++++++-----
 tests/ls/ls-time.sh |  6 ++++--
 4 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/NEWS b/NEWS
index 8e65fbaf5..65cc3fde0 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,11 @@ GNU coreutils NEWS                                    -*- outline -*-
   stat -f -c%T now reports the "fuseblk" file system type as "fuse",
   given that there is no longer a distinct "ctl" fuse variant file system.
 
+** New Features
+
+  ls now supports the --sort=name option,
+  to explicitly select the default operation of sorting by file name.
+
 ** Improvements
 
   'head -c NUM', 'head -n NUM', 'nl -l NUM', 'nproc --ignore NUM',
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
index c1d0937af..58b425779 100644
--- a/doc/coreutils.texi
+++ b/doc/coreutils.texi
@@ -8251,6 +8251,13 @@ Sort by version name and number, lowest first.  It behaves like a default
 sort, except that each sequence of decimal digits is treated numerically
 as an index/version number.  @xref{Version sort ordering}.
 
+@item --sort=name
+@opindex --sort
+@opindex name@r{, sorting option for @command{ls}}
+Sort by file name.  This is the default operation of @command{ls},
+and can be explicitly specified to override any
+previously specified sorting option.
+
 @item --sort=width
 @opindex --sort
 @opindex width@r{, sorting option for @command{ls}}
diff --git a/src/ls.c b/src/ls.c
index de4b02a20..465f35d19 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -911,11 +911,13 @@ ARGMATCH_VERIFY (format_args, format_types);
 
 static char const *const sort_args[] =
 {
-  "none", "time", "size", "extension", "version", "width", nullptr
+  "none", "size", "time", "version", "extension",
+  "name", "width", nullptr
 };
 static enum sort_type const sort_types[] =
 {
-  sort_none, sort_time, sort_size, sort_extension, sort_version, sort_width
+  sort_none, sort_size, sort_time, sort_version, sort_extension,
+  sort_name, sort_width
 };
 ARGMATCH_VERIFY (sort_args, sort_types);
 
@@ -5570,9 +5572,9 @@ Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.\n\
   -S                         sort by file size, largest first\n\
 "), stdout);
       fputs (_("\
-      --sort=WORD            sort by WORD instead of name: none (-U), size (-S)\
-,\n\
-                             time (-t), version (-v), extension (-X), width\n\
+      --sort=WORD            change default 'name' sort to WORD:\n\
+                               none (-U), size (-S), time (-t),\n\
+                               version (-v), extension (-X), name, width\n\
 \n\
 "), stdout);
       fputs (_("\
diff --git a/tests/ls/ls-time.sh b/tests/ls/ls-time.sh
index be8a83556..09e92fbdb 100755
--- a/tests/ls/ls-time.sh
+++ b/tests/ls/ls-time.sh
@@ -37,8 +37,10 @@ touch -m -d "$t2" B || framework_failure_  # Capital to distinguish name sort
 touch -m -d "$t1" c || framework_failure_
 
 # Check default name sorting works
-set $(ls a B c)
-test "$*" = 'B a c' || fail=1
+for def_sort in '' '--sort=name' '-U --sort=name' '--sort-name -t'; do
+  set $(ls $def_sort a B c)
+  test "$*" = 'B a c' || fail=1
+done
 
 touch -a -d "$u3" c || framework_failure_
 touch -a -d "$u2" B || framework_failure_
-- 
2.45.2

Reply via email to