diff --git a/share/completions/ls.fish b/share/completions/ls.fish index 418a67a90..4fe28951e 100644 --- a/share/completions/ls.fish +++ b/share/completions/ls.fish @@ -3,32 +3,32 @@ # # Shared ls switches -complete -c ls -s C -d "List by columns" +complete -c ls -s C -d "Force multi-column output" complete -c ls -s S -d "Sort by size" -complete -c ls -s c -d "Show and sort by ctime" -complete -c ls -s f -d "Don't sort" -complete -c ls -s g -d "Long format without owner" -complete -c ls -s k -d "Set blocksize to 1kB" -complete -c ls -s l -d "Long format" -complete -c ls -s m -d "Comma separated format" -complete -c ls -s t -d "Sort by modification time" -complete -c ls -s u -d "Show access time" -complete -c ls -s x -d "List entries by lines" -complete -c ls -s 1 -d "List one file per line" +complete -c ls -s m -d "Comma-separated format, fills across screen" +complete -c ls -s x -d "Multi-column output, horizontally listed" +complete -c ls -s 1 -d "List one entry per line" + +complete -c ls -s f -d "Unsorted output, enables -a" +complete -c ls -s t -d "Sort by modification time, most recent first" + +complete -c ls -s c -d "Sort (-t) by modified time and show time (-l)" +complete -c ls -s u -d "Sort (-t) by access time and show time (-l)" # Test if we are using GNU ls if command ls --version >/dev/null 2>/dev/null + complete -c ls -s k -d "Set blocksize to 1kB" # BSD ls -k enables blocksize *output* complete -c ls -s a -l all -d "Show hidden" complete -c ls -s A -l almost-all -d "Show hidden except . and .." - complete -c ls -s F -l classify -d "Append filetype indicator" + complete -c ls -s F -l classify -d "Append filetype indicator (*/=>@|)" complete -c ls -s H -l dereference-command-line -d "Follow symlinks" complete -c ls -s L -l dereference -d "Follow symlinks" complete -c ls -s R -l recursive -d "List subdirectory recursively" - complete -c ls -s b -l escape -d "Octal escapes for non graphic characters" + complete -c ls -s b -l escape -d "Octal escapes for non-graphic characters" complete -c ls -s d -l directory -d "List directories, not their content" complete -c ls -s h -l human-readable -d "Human readable sizes" complete -c ls -s i -l inode -d "Print inode number of files" - complete -c ls -s n -l numeric-uid-gid -d "Long format, numeric IDs" + complete -c ls -s n -l numeric-uid-gid -d "Long format, numeric UIDs and GIDs" complete -c ls -s p -l file-type -d "Append filetype indicator" complete -c ls -s q -l hide-control-chars -d "Replace non-graphic characters with '?'" complete -c ls -s r -l reverse -d "Reverse sort order" @@ -38,7 +38,7 @@ if command ls --version >/dev/null 2>/dev/null complete -c ls -l group-directories-first -d "Group directories before files" -r complete -c ls -l hide -d "Do not list implied entries matching specified shell pattern" -r complete -c ls -l lcontext -d "Display security context" - complete -c ls -l context -s Z -d "Display security context so it fits on most displays" + complete -c ls -l context -s Z -d "Display security context so it fits on most displays" complete -c ls -l scontext -d "Display only security context and file name" complete -c ls -l author -d "Print author" complete -c ls -l block-size -x -d "Set block size" @@ -54,7 +54,7 @@ if command ls --version >/dev/null 2>/dev/null complete -c ls -s I -l ignore -r -d "Skip entries matching pattern" complete -c ls -s N -l literal -d "Print raw entry names" complete -c ls -s o -d "Long format without groups" - complete -c ls -l show-control-chars -d "Non graphic as-is" + complete -c ls -l show-control-chars -d "Non-graphic characters printed as-is" complete -c ls -s Q -l quote-name -d "Enclose entry in quotes" complete -c ls -l quoting-style -x -a "literal locale shell shell-always c escape" -d "Select quoting style" complete -c ls -l sort -x -d "Sort criteria" -a " @@ -84,30 +84,91 @@ if command ls --version >/dev/null 2>/dev/null complete -c ls -l help -d "Display help and exit" complete -c ls -l version -d "Display version and exit" else - # If not a GNU system, assume we have standard BSD ls features instead - complete -c ls -s B -d "Octal escapes for non graphic characters" - complete -c ls -s G -d "Use colors" - complete -c ls -s I -d "Prevent -A from being automatically set for root" - complete -c ls -s P -d "Don't follow symlinks" - complete -c ls -s T -d "Show modification time" - complete -c ls -s W -d "Show whiteouts when scanning directories" - complete -c ls -s Z -d "Display each file's MAC label" - complete -c ls -s o -d "Include the file flags in a long (-l) output" - complete -c ls -s w -d "Print raw entry names" + set -l uname (uname -s) + #### ls on the BSDs #### + # From latest checked-in man pages as of Nov 2018. + # Reformatted with Open Group's ordering and spacing, + # then sorted by prevelance, consolidating option + # matches. - complete -c ls -s a -d "Show hidden" - complete -c ls -s A -d "Show hidden except . and .." - complete -c ls -s F -d "Append filetype indicator" - complete -c ls -s H -d "Follow symlinks" - complete -c ls -s L -d "Follow symlinks" - complete -c ls -s R -d "List subdirectory recursively" - complete -c ls -s b -d "Octal escapes for non graphic characters" - complete -c ls -s d -d "List directories, not their content" - complete -c ls -s h -d "Human readable sizes" - complete -c ls -s i -d "Print inode number of files" - complete -c ls -s n -d "Long format, numeric IDs" - complete -c ls -s p -d "Append filetype indicator" + # [ IEEE 1003.1-2017 options ] [ extension options ] + # freebsd: ls -[ikqrs][glno][Aa][Cmx1][Fp][LH][Rd][Sft][cu] [ThBbWwPUG ZyI, ] [-D format] [--color=when] [file ...] + # netbsd: ls -[ikqrs][glno][Aa][Cmx1][Fp][L ][Rd][Sft][cu] [ThBbWwP XMO ] [file ...] + # macOS: ls -[ikqrs][glno][Aa][Cmx1][Fp][LH][Rd][Sft][cu] [ThBbWwPUG Oe@] [file ...] + # openbsd: ls -[ikqrs][glno][Aa][Cmx1][Fp][LH][Rd][Sft][cu] [Th ] [file ...] + + # netbsd ls -O: only leaf files, no dirs | macos ls -O: include file flags in -l output + # so: don't complete -H for netbsd, and return early after the ls -P completion. + # But not before adding their -B, -X, -M, -O options. Same kind of thing for the other OSes. + + ## IEEE 1003.1-2017 standard options: + + complete -c ls -s i -d "Show inode numbers for files" + complete -c ls -s k -d "for -s: Display sizes in kB, not blocks" # GNU sets block size with -k complete -c ls -s q -d "Replace non-graphic characters with '?'" complete -c ls -s r -d "Reverse sort order" - complete -c ls -s s -d "Print size of files" + complete -c ls -s s -d "Show file sizes" + + complete -c ls -s g -d "Show group instead of owner in long format" + complete -c ls -s l -d "Long listing format" + complete -c ls -s n -d "Long format, numerical UIDs and GIDs" + complete -c ls -s o -d "Long format, omit group names" # POSIX. FreeBSD enables file flags! + + complete -c ls -s A -d "Show hidden except . and .." + complete -c ls -s a -d "Show hidden entries" + + # -C in common, -m in common, -x in common, -1 in common + + complete -c ls -s F -d "Append indicators. dir/ exec* link@ socket= fifo| whiteout%" + complete -c ls -s p -d "Append directory indicators" + + complete -c ls -s L -d "Follow all symlinks Cancels -P option" + test "$uname" != NetBSD + and complete -c ls -s H -d "Follow symlink given on commandline" # not present on netbsd + + complete -c ls -s R -d "Recursively list subdirectories" + complete -c ls -s d -d "List directories, not their content" + + # -S in common, -f in common, -t in common + + # -c in common, -u in common + + ## These options are not standardized, but seem supported everywhere: + complete -c ls -s T -d "for -l: Show complete date and time" + complete -c ls -s h -d "Human-readable sizes" + + if [ "$uname" = OpenBSD ] # no arguments supported after -h on OpenBSD. See table above + exit 0 + end + + complete -c ls -s B -d "Octal escapes for non-graphic characters" + complete -c ls -s b -d "C escapes for non-graphic characters" + complete -c ls -s W -d "Display whiteouts when scanning directories" + complete -c ls -s w -d "Force raw printing of non-printable characters" + complete -c ls -s P -d "Don't follow symlinks" + if [ "$uname" = NetBSD ] + complete -c ls -s X -d "Don't cross mount points when recursing" + complete -c ls -s M -d "for -l, -s: Format size/count with commas" + complete -c ls -s O -d "Show only leaf files (not dirs), eliding other output" + exit 0 + end + complete -c ls -s U -d "Sort (-t) by creation time and show time (-l)" + complete -c ls -s G -d "Enable colorized output" # macos, freebsd. + + switch "$uname" + case Darwin: + complete -c ls -s O -d "for -l: Show file flags" + complete -c ls -s e -d "for -l: Print ACL associated with file, if present" + complete -c ls -s @ -d "for -l: Display extended attribute keys and sizes" + exit 0 + case FreeBSD: + complete -c ls -s Z -d "Display each file's MAC label" + complete -c ls -s y -d "for -t: Sort A-Z output in same order as time output" + complete -c ls -s I -d "Prevent -A from being automatically set for root" + complete -c ls -s , -d "for -l: Format size/count number groups with ,/locale" + + complete -r -c ls -s D -d "for -l: Format date with strptime string" + complete -c ls -l color -f -a "auto always never" -d "Enable color output" + exit 0 + end end