Make the completions for the ls, sed and df commands have the correct switches on BSD systems

darcs-hash:20060114131607-ac50b-479f7ff34019f5487125321443027cc0a77eec93.gz
This commit is contained in:
axel 2006-01-14 23:16:07 +10:00
parent 6d6644b907
commit 9942e2f19f
6 changed files with 212 additions and 99 deletions

View file

@ -1111,8 +1111,7 @@ g++, javac, java, gcj, lpr, doxygen, whois, find)
\subsection bugs Known bugs
- Completion for gcc -\#\#\# option doesn't work.
- Many completions are made specifically for the GNU
version of a POSIX command
- Many completions are made specifically for the GNU version of a POSIX command
- Yanking weird characters from clipboard prints Unicode escapes
- Suspending and then resuming pipelines containing a builtin seems to be broken.
- Interactive input seems broken inside blocks. Is local echo and other terminal values not restored when in an interactive block?

View file

@ -1,18 +1,43 @@
#
# Completions for df
#
#
# Completions for mount define the $__fish_filesystems variable
#
complete -y mount
complete -c df -s a -l all -d (_ "Include empty filesystems")
complete -c df -s B -l block-size -r -d (_ "Block size")
complete -c df -s h -l human-readable -d (_ "Human readable sizes")
complete -c df -s H -l si -d (_ "Human readable sizes, powers of 1000")
complete -c df -s i -l inodes -d (_ "List inode information")
complete -c df -s k -d (_ "Use 1kB block size")
complete -c df -s l -l local -d (_ "List only local filesystems")
complete -c df -l no-sync -d (_ "Do not sync before getting usage info")
complete -c df -s P -l portability -d (_ "Use Posix format")
complete -c df -l sync -d (_ "Sync before getting usage info")
complete -c df -s t -l type -r -d (_ "Filesystem type") -x -a $__fish_filesystems
complete -c df -s T -l print-type -d (_ "Print filesystem type")
complete -c df -s x -l exclude-type -d (_ "Excluded filesystem type") -r -x -a $__fish_filesystems
complete -c df -l help -d (_ "Display help and exit")
complete -c df -l version -d (_ "Display version and exit")
#
# Test if we are using GNU sed
#
set -l is_gnu
df --version >/dev/null ^/dev/null; and set is_gnu --is-gnu
__fish_gnu_complete -c df -s h -l human-readable -d (_ "Human readable sizes") $is_gnu
__fish_gnu_complete -c df -s i -l inodes -d (_ "List inode information") $is_gnu
__fish_gnu_complete -c df -s k -d (_ "Use 1kB block size") $is_gnu
__fish_gnu_complete -c df -s l -l local -d (_ "List only local filesystems") $is_gnu
__fish_gnu_complete -c df -s P -l portability -d (_ "Use Posix format") $is_gnu
__fish_gnu_complete -c df -s t -l type -r -d (_ "Show filesystems of specified type") $is_gnu -x -a $__fish_filesystems
if test -n "$is_gnu"
complete -c df -s a -l all -d (_ "Include empty filesystems")
complete -c df -s B -l block-size -r -d (_ "Block size")
complete -c df -s H -l si -d (_ "Human readable sizes, powers of 1000")
complete -c df -l no-sync -d (_ "Do not sync before getting usage info")
complete -c df -l sync -d (_ "Sync before getting usage info")
complete -c df -s T -l print-type -d (_ "Print filesystem type")
complete -c df -s x -l exclude-type -d (_ "Excluded filesystem type") -r -x -a $__fish_filesystems
complete -c df -l help -d (_ "Display help and exit")
complete -c df -l version -d (_ "Display version and exit")
else
complete -c df -s a -d (_ "Show all filesystems")
complete -c df -s g -d (_ "Show sizes in gigabytes")
complete -c df -s m -d (_ "Show sizes in megabytes")
complete -c df -s n -d (_ "Print out the previously obtained statistics from the file systems")
end

View file

@ -1,3 +1,6 @@
#
# Completions for the grep command
#
complete -c grep -s A -l after-context -d (_ "Print NUM lines of trailing context")
complete -c grep -s a -l text -d (_ "Process binary file as text")

View file

@ -1,75 +1,106 @@
#
# Completions for the ls command and its aliases
#
# Test if we are using GNU ls
set -l is_gnu
ls --version >/dev/null ^/dev/null; and set is_gnu --is-gnu
for i in ls ll la
complete -c $i -s a -l all -d (_ "Show hidden")
complete -c $i -s A -l almost-all -d (_ "Show hidden except . and ..")
complete -c $i -l author -d (_ "Print author")
complete -c $i -s b -l escape -d (_ "Octal escapes for non graphic")
complete -c $i -l blocksize -x -d (_ "Set block size")
complete -c $i -s B -l ignore-backups -d (_ "Ignore files ending with ~")
complete -c $i -s c -d (_ "Show and sort by ctime")
complete -c $i -s C -d (_ "List by columns")
complete -c $i -l color -f -a "never always auto" -d (_ "Use colors")
complete -c $i -s d -l directory -d (_ "List directories, not their content")
complete -c $i -s D -l dired -d (_ "Generate dired output")
complete -c $i -s f -d (_ "Don't sort")
complete -c $i -s F -l classify -d (_ "Append filetype indicator")
complete -c $i -l format -x -a "across commas horizontal long single-column verbose vertical" -d (_ "List format")
complete -c $i -l full-time -d (_ "Long format, full-iso time")
complete -c $i -s g -d (_ "Long format without owner")
complete -c $i -s G -l no-group -d (_ "Don't print group information")
complete -c $i -s h -l human-readable -d (_ "Human readable sizes")
complete -c $i -l si -d (_ "Human readable sizes, powers of 1000")
complete -c $i -s H -l dereference-command-line -d (_ "Follow symlinks")
complete -c $i -l dereference-command-line-symlink-to-dir #-d (_ "Follow directory symlinks from command line")
complete -c $i -l indicator-style -x -a "none classify file-type" -d (_ "Append filetype indicator")
complete -c $i -s i -l inode -d (_ "Print inode number of files")
complete -c $i -s I -l ignore -r -d (_ "Skip entries matching pattern")
complete -c $i -s k -d (_ "Like --block-size=1K")
complete -c $i -s l -d (_ "Long format")
complete -c $i -s L -l dereference -d (_ "Follow symlinks")
complete -c $i -s m -d (_ "Comma separated format")
complete -c $i -s n -l numeric-uid-gid -d (_ "Long format, numeric IDs")
complete -c $i -s N -l literal -d (_ "Print raw entry names")
complete -c $i -s o -d (_ "Long format without groups")
complete -c $i -s p -l file-type -d (_ "Append filetype indicator")
complete -c $i -s q -l hide-control-chars -d (_ "Replace non-graphic characters with '?'")
complete -c $i -l show-control-chars -d (_ "Non graphic as-is")
complete -c $i -s Q -l quote-name -d (_ "Enclose entry in quotes")
complete -c $i -l quoting-style -x -a "literal locale shell shell-always c escape" -d (_ "Select quoting style")
complete -c $i -s r -l reverse -d (_ "Reverse sort order")
complete -c $i -s R -l recursive -d (_ "List subdirectory recursively")
complete -c $i -s s -l size -d (_ "Print size of files")
complete -c $i -s S -d (_ "Sort by size")
complete -c $i -l sort -x -d (_ "Sort criteria") -a "
extension\t'Sort by file extension'
none\tDon't\ sort
size\t'Sort by size'
time\t'Sort by modification time'
version\t'Sort by version'
status\t'Sort by file status modification time'
atime\t'Sort by access time'
access\t'Sort by access time'
use\t'Sort by access time'
"
complete -c $i -l time -x -d (_ "Show time type") -a "
time\t'Sort by modification time'
access\t'Sort by access time'
use\t'Sort by use time'
ctime\t'Sort by file status modification time'
status\t'Sort by status time'
"
complete -c $i -l time-style -x -a "full-iso long-iso iso locale" -d (_ "Select time style")
complete -c $i -s t -d (_ "Sort by modification time")
complete -c $i -s T -l tabsize -x -a "1 2 3 4 5 6 7 8 9 10 11 12" -d (_ "Assume tab stops at each COLS")
complete -c $i -s u -d (_ "Show access time")
complete -c $i -s U -d (_ "Do not sort")
complete -c $i -s v -d (_ "Sort by version")
complete -c $i -s w -l width -x -d (_ "Assume screen width")
complete -c $i -s x -d (_ "List entries by lines")
complete -c $i -s X -d (_ "Sort by extension")
complete -c $i -s 1 -d (_ "List one file per line")
complete -c $i -l help -d (_ "Display help and exit")
complete -c $i -l version -d (_ "Display version and exit")
# Shared ls switches
__fish_gnu_complete -c $i -s a -l all -d (_ "Show hidden") $is_gnu
__fish_gnu_complete -c $i -s A -l almost-all -d (_ "Show hidden except . and ..") $is_gnu
__fish_gnu_complete -c $i -s F -l classify -d (_ "Append filetype indicator") $is_gnu
__fish_gnu_complete -c $i -s H -l dereference-command-line -d (_ "Follow symlinks") $is_gnu
__fish_gnu_complete -c $i -s L -l dereference -d (_ "Follow symlinks") $is_gnu
__fish_gnu_complete -c $i -s R -l recursive -d (_ "List subdirectory recursively") $is_gnu
__fish_gnu_complete -c $i -s b -l escape -d (_ "Octal escapes for non graphic characters") $is_gnu
__fish_gnu_complete -c $i -s d -l directory -d (_ "List directories, not their content") $is_gnu
__fish_gnu_complete -c $i -s h -l human-readable -d (_ "Human readable sizes") $is_gnu
__fish_gnu_complete -c $i -s i -l inode -d (_ "Print inode number of files") $is_gnu
__fish_gnu_complete -c $i -s n -l numeric-uid-gid -d (_ "Long format, numeric IDs") $is_gnu
__fish_gnu_complete -c $i -s p -l file-type -d (_ "Append filetype indicator") $is_gnu
__fish_gnu_complete -c $i -s q -l hide-control-chars -d (_ "Replace non-graphic characters with '?'") $is_gnu
__fish_gnu_complete -c $i -s r -l reverse -d (_ "Reverse sort order") $is_gnu
__fish_gnu_complete -c $i -s s -l size -d (_ "Print size of files") $is_gnu
complete -c $i -s C -d (_ "List by columns")
complete -c $i -s S -d (_ "Sort by size")
complete -c $i -s c -d (_ "Show and sort by ctime")
complete -c $i -s f -d (_ "Don't sort")
complete -c $i -s g -d (_ "Long format without owner")
complete -c $i -s k -d (_ "Set blocksize to 1kB")
complete -c $i -s l -d (_ "Long format")
complete -c $i -s m -d (_ "Comma separated format")
complete -c $i -s t -d (_ "Sort by modification time")
complete -c $i -s u -d (_ "Show access time")
complete -c $i -s x -d (_ "List entries by lines")
complete -c $i -s 1 -d (_ "List one file per line")
if test -n "$is_gnu"
# GNU specific features
complete -c $i -l author -d (_ "Print author")
complete -c $i -l blocksize -x -d (_ "Set block size")
complete -c $i -s B -l ignore-backups -d (_ "Ignore files ending with ~")
complete -c $i -l color -f -a "never always auto" -d (_ "Use colors")
complete -c $i -s D -l dired -d (_ "Generate dired output")
complete -c $i -l format -x -a "across commas horizontal long single-column verbose vertical" -d (_ "List format")
complete -c $i -l full-time -d (_ "Long format, full-iso time")
complete -c $i -s G -l no-group -d (_ "Don't print group information")
complete -c $i -l si -d (_ "Human readable sizes, powers of 1000")
complete -c $i -l dereference-command-line-symlink-to-dir #-d (_ "Follow directory symlinks from command line")
complete -c $i -l indicator-style -x -a "none classify file-type" -d (_ "Append filetype indicator")
complete -c $i -s I -l ignore -r -d (_ "Skip entries matching pattern")
complete -c $i -s N -l literal -d (_ "Print raw entry names")
complete -c $i -s o -d (_ "Long format without groups")
complete -c $i -l show-control-chars -d (_ "Non graphic as-is")
complete -c $i -s Q -l quote-name -d (_ "Enclose entry in quotes")
complete -c $i -l quoting-style -x -a "literal locale shell shell-always c escape" -d (_ "Select quoting style")
complete -c $i -l sort -x -d (_ "Sort criteria") -a "
extension\t'Sort by file extension'
none\tDon't\ sort
size\t'Sort by size'
time\t'Sort by modification time'
version\t'Sort by version'
status\t'Sort by file status modification time'
atime\t'Sort by access time'
access\t'Sort by access time'
use\t'Sort by access time'
"
complete -c $i -l time -x -d (_ "Show time type") -a "
time\t'Sort by modification time'
access\t'Sort by access time'
use\t'Sort by use time'
ctime\t'Sort by file status modification time'
status\t'Sort by status time'
"
complete -c $i -l time-style -x -a "full-iso long-iso iso locale" -d (_ "Select time style")
complete -c $i -s T -l tabsize -x -a "1 2 3 4 5 6 7 8 9 10 11 12" -d (_ "Assume tab stops at each COLS")
complete -c $i -s U -d (_ "Do not sort")
complete -c $i -s v -d (_ "Sort by version")
complete -c $i -s w -l width -x -d (_ "Assume screen width")
complete -c $i -s X -d (_ "Sort by extension")
complete -c $i -l help -d (_ "Display help and exit")
complete -c $i -l version -d (_ "Display version and exit")
else
# If not a GNU system, assume we have standard BSD ls features instead
complete -c $i -s B -d (_ "Octal escapes for non graphic characters")
complete -c $i -s G -d (_ "Use colors")
complete -c $i -s I -d (_ "Prevent -A from being automatically set for root")
complete -c $i -s P -d (_ "Don't follow symlinks")
complete -c $i -s T -d (_ "Show modification time")
complete -c $i -s W -d (_ "Show whiteouts when scanning directories")
complete -c $i -s Z -d (_ "Display each file's MAC label")
complete -c $i -s o -d (_ "Include the file flags in a long (-l) output")
complete -c $i -s w -d (_ "Print raw entry names")
end
end

View file

@ -1,12 +1,38 @@
complete -c sed -s n -l quiet -d (_ "Silent mode")
complete -c sed -l silent -d (_ "Silent mode")
complete -c sed -s e -l expression -x -d (_ "Evaluate expression")
complete -c sed -s f -l file -r -d (_ "Evalute file")
complete -c sed -s i -l in-place -d (_ "Edit files in place")
complete -c sed -s l -l line-length -x -d (_ "Specify line-length")
complete -c sed -l posix -d (_ "Disable all GNU extensions")
complete -c sed -s r -l regexp-extended -d (_ "Use extended regexp")
complete -c sed -s s -l separate -d (_ "Consider files as separate")
complete -c sed -s u -l unbuffered -d (_ "Use minimal IO buffers")
complete -c sed -l help -d (_ "Display help and exit")
complete -c sed -s V -l version -d (_ "Display version and exit")
#
# Completions for sed
#
# Test if we are using GNU sed
set -l is_gnu
sed --vvversion >/dev/null ^/dev/null; and set is_gnu --is-gnu
# Shared ls switches
__fish_gnu_complete -c sed -s n -l quiet -d (_ "Silent mode") $is_gnu
__fish_gnu_complete -c sed -s e -l expression -x -d (_ "Evaluate expression") $is_gnu
__fish_gnu_complete -c sed -s f -l file -r -d (_ "Evalute file") $is_gnu
__fish_gnu_complete -c sed -s i -l in-place -d (_ "Edit files in place") $is_gnu
if test -n "$is_gnu"
# GNU specific features
complete -c sed -l silent -d (_ "Silent mode")
complete -c sed -s l -l line-length -x -d (_ "Specify line-length")
complete -c sed -l posix -d (_ "Disable all GNU extensions")
complete -c sed -s r -l regexp-extended -d (_ "Use extended regexp")
complete -c sed -s s -l separate -d (_ "Consider files as separate")
complete -c sed -s u -l unbuffered -d (_ "Use minimal IO buffers")
complete -c sed -l help -d (_ "Display help and exit")
complete -c sed -s V -l version -d (_ "Display version and exit")
else
# If not a GNU system, assume we have standard BSD ls features instead
complete -c sed -s E -d (_ "Use extended regexp")
complete -c sed -s a -d (_ "Delay opening files until a command containing the related 'w' function is applied")
complete -c sed -s l -d (_ "Use line buffering")
end

View file

@ -237,6 +237,35 @@ function __fish_append -d "Internal completion function for appending string to
printf "%s\n" "$str"$argv "$str"(printf "%s\n" $argv|sed -e "s/\(\t\|\$\)/,\1/")
end
function __fish_gnu_complete -d "Wrapper for the complete builtin. Skips the long completions on non-GNU systems"
set is_gnu 0
# Check if we are using a gnu system
for i in (seq (count $argv))
switch $argv[$i]
case -g --is-gnu
set -e argv[$i]
set is_gnu 1
break
end
end
# Remove long option if not on a gnu system
if test $is_gnu = 0
for i in (seq (count $argv))
if test $argv[$i] = -l
set -e argv[$i]
set -e argv[$i]
break
end
end
end
complete $argv
end
#
# Completions for SysV startup scripts
#