mirror of
https://github.com/bootandy/dust.git
synced 2026-06-08 11:29:05 +03:00
Support for completions
This commit is contained in:
Generated
+10
-1
@@ -84,12 +84,20 @@ dependencies = [
|
|||||||
"bitflags",
|
"bitflags",
|
||||||
"clap_lex",
|
"clap_lex",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"once_cell",
|
|
||||||
"strsim",
|
"strsim",
|
||||||
"termcolor",
|
"termcolor",
|
||||||
"textwrap",
|
"textwrap",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_complete"
|
||||||
|
version = "3.2.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e4179da71abd56c26b54dd0c248cc081c1f43b0a1a7e8448e28e57a29baa993d"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_lex"
|
name = "clap_lex"
|
||||||
version = "0.2.4"
|
version = "0.2.4"
|
||||||
@@ -194,6 +202,7 @@ dependencies = [
|
|||||||
"ansi_term",
|
"ansi_term",
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
"clap",
|
"clap",
|
||||||
|
"clap_complete",
|
||||||
"config-file",
|
"config-file",
|
||||||
"directories",
|
"directories",
|
||||||
"lscolors",
|
"lscolors",
|
||||||
|
|||||||
+6
-2
@@ -3,7 +3,7 @@ name = "du-dust"
|
|||||||
description = "A more intuitive version of du"
|
description = "A more intuitive version of du"
|
||||||
version = "0.8.1"
|
version = "0.8.1"
|
||||||
authors = ["bootandy <bootandy@gmail.com>", "nebkor <code@ardent.nebcorp.com>"]
|
authors = ["bootandy <bootandy@gmail.com>", "nebkor <code@ardent.nebcorp.com>"]
|
||||||
edition = "2018"
|
edition = "2021"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|
||||||
documentation = "https://github.com/bootandy/dust"
|
documentation = "https://github.com/bootandy/dust"
|
||||||
@@ -28,7 +28,7 @@ strip = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
ansi_term = "0.12"
|
ansi_term = "0.12"
|
||||||
clap = { version = "=3", features = ["cargo"] }
|
clap = "3.2.17"
|
||||||
lscolors = "0.7"
|
lscolors = "0.7"
|
||||||
terminal_size = "0.1"
|
terminal_size = "0.1"
|
||||||
unicode-width = "0.1"
|
unicode-width = "0.1"
|
||||||
@@ -47,6 +47,10 @@ winapi-util = "0.1"
|
|||||||
assert_cmd = "1"
|
assert_cmd = "1"
|
||||||
tempfile = "=3"
|
tempfile = "=3"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
clap = "3.2.17"
|
||||||
|
clap_complete = "3.2.4"
|
||||||
|
|
||||||
[[test]]
|
[[test]]
|
||||||
name = "integration"
|
name = "integration"
|
||||||
path = "tests/tests.rs"
|
path = "tests/tests.rs"
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
use clap_complete::{generate_to, shells::*};
|
||||||
|
use std::io::Error;
|
||||||
|
|
||||||
|
include!("src/cli.rs");
|
||||||
|
|
||||||
|
fn main() -> Result<(), Error> {
|
||||||
|
let outdir = "completions";
|
||||||
|
let app_name = "dust";
|
||||||
|
let mut cmd = build_cli();
|
||||||
|
|
||||||
|
generate_to(Bash, &mut cmd, app_name, outdir)?;
|
||||||
|
generate_to(Zsh, &mut cmd, app_name, outdir)?;
|
||||||
|
generate_to(Fish, &mut cmd, app_name, outdir)?;
|
||||||
|
generate_to(PowerShell, &mut cmd, app_name, outdir)?;
|
||||||
|
generate_to(Elvish, &mut cmd, app_name, outdir)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#compdef dust
|
||||||
|
|
||||||
|
autoload -U is-at-least
|
||||||
|
|
||||||
|
_dust() {
|
||||||
|
typeset -A opt_args
|
||||||
|
typeset -a _arguments_options
|
||||||
|
local ret=1
|
||||||
|
|
||||||
|
if is-at-least 5.2; then
|
||||||
|
_arguments_options=(-s -S -C)
|
||||||
|
else
|
||||||
|
_arguments_options=(-s -C)
|
||||||
|
fi
|
||||||
|
|
||||||
|
local context curcontext="$curcontext" state line
|
||||||
|
_arguments "${_arguments_options[@]}" \
|
||||||
|
'-d+[Depth to show]: : ' \
|
||||||
|
'--depth=[Depth to show]: : ' \
|
||||||
|
'-n+[Number of lines of output to show. (Default is terminal_height - 10)]: : ' \
|
||||||
|
'--number-of-lines=[Number of lines of output to show. (Default is terminal_height - 10)]: : ' \
|
||||||
|
'*-X+[Exclude any file or directory with this name]: : ' \
|
||||||
|
'*--ignore-directory=[Exclude any file or directory with this name]: : ' \
|
||||||
|
'(-e --filter -t --file_types)*-v+[Exclude filepaths matching this regex. To ignore png files type: -v "\\.png$" ]: : ' \
|
||||||
|
'(-e --filter -t --file_types)*--invert-filter=[Exclude filepaths matching this regex. To ignore png files type: -v "\\.png$" ]: : ' \
|
||||||
|
'(-t --file_types)*-e+[Only include filepaths matching this regex. For png files type: -e "\\.png$" ]: : ' \
|
||||||
|
'(-t --file_types)*--filter=[Only include filepaths matching this regex. For png files type: -e "\\.png$" ]: : ' \
|
||||||
|
'-w+[Specify width of output overriding the auto detection of terminal width]: : ' \
|
||||||
|
'--terminal_width=[Specify width of output overriding the auto detection of terminal width]: : ' \
|
||||||
|
'-h[Print help information]' \
|
||||||
|
'--help[Print help information]' \
|
||||||
|
'-V[Print version information]' \
|
||||||
|
'--version[Print version information]' \
|
||||||
|
'-p[Subdirectories will not have their path shortened]' \
|
||||||
|
'--full-paths[Subdirectories will not have their path shortened]' \
|
||||||
|
'-x[Only count the files and directories on the same filesystem as the supplied directory]' \
|
||||||
|
'--limit-filesystem[Only count the files and directories on the same filesystem as the supplied directory]' \
|
||||||
|
'-s[Use file length instead of blocks]' \
|
||||||
|
'--apparent-size[Use file length instead of blocks]' \
|
||||||
|
'-r[Print tree upside down (biggest highest)]' \
|
||||||
|
'--reverse[Print tree upside down (biggest highest)]' \
|
||||||
|
'-c[No colors will be printed (Useful for commands like: watch)]' \
|
||||||
|
'--no-colors[No colors will be printed (Useful for commands like: watch)]' \
|
||||||
|
'-b[No percent bars or percentages will be displayed]' \
|
||||||
|
'--no-percent-bars[No percent bars or percentages will be displayed]' \
|
||||||
|
'--skip-total[No total row will be displayed]' \
|
||||||
|
'-f[Directory '\''size'\'' is number of child files/dirs not disk size]' \
|
||||||
|
'--filecount[Directory '\''size'\'' is number of child files/dirs not disk size]' \
|
||||||
|
'-i[Do not display hidden files]' \
|
||||||
|
'--ignore_hidden[Do not display hidden files]' \
|
||||||
|
'(-d --depth)-t[show only these file types]' \
|
||||||
|
'(-d --depth)--file_types[show only these file types]' \
|
||||||
|
'-H[print sizes in powers of 1000 (e.g., 1.1G)]' \
|
||||||
|
'--si[print sizes in powers of 1000 (e.g., 1.1G)]' \
|
||||||
|
'*::inputs:' \
|
||||||
|
&& ret=0
|
||||||
|
}
|
||||||
|
|
||||||
|
(( $+functions[_dust_commands] )) ||
|
||||||
|
_dust_commands() {
|
||||||
|
local commands; commands=()
|
||||||
|
_describe -t commands 'dust commands' commands "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
_dust "$@"
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
using namespace System.Management.Automation
|
||||||
|
using namespace System.Management.Automation.Language
|
||||||
|
|
||||||
|
Register-ArgumentCompleter -Native -CommandName 'dust' -ScriptBlock {
|
||||||
|
param($wordToComplete, $commandAst, $cursorPosition)
|
||||||
|
|
||||||
|
$commandElements = $commandAst.CommandElements
|
||||||
|
$command = @(
|
||||||
|
'dust'
|
||||||
|
for ($i = 1; $i -lt $commandElements.Count; $i++) {
|
||||||
|
$element = $commandElements[$i]
|
||||||
|
if ($element -isnot [StringConstantExpressionAst] -or
|
||||||
|
$element.StringConstantType -ne [StringConstantType]::BareWord -or
|
||||||
|
$element.Value.StartsWith('-') -or
|
||||||
|
$element.Value -eq $wordToComplete) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
$element.Value
|
||||||
|
}) -join ';'
|
||||||
|
|
||||||
|
$completions = @(switch ($command) {
|
||||||
|
'dust' {
|
||||||
|
[CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'Depth to show')
|
||||||
|
[CompletionResult]::new('--depth', 'depth', [CompletionResultType]::ParameterName, 'Depth to show')
|
||||||
|
[CompletionResult]::new('-n', 'n', [CompletionResultType]::ParameterName, 'Number of lines of output to show. (Default is terminal_height - 10)')
|
||||||
|
[CompletionResult]::new('--number-of-lines', 'number-of-lines', [CompletionResultType]::ParameterName, 'Number of lines of output to show. (Default is terminal_height - 10)')
|
||||||
|
[CompletionResult]::new('-X', 'X', [CompletionResultType]::ParameterName, 'Exclude any file or directory with this name')
|
||||||
|
[CompletionResult]::new('--ignore-directory', 'ignore-directory', [CompletionResultType]::ParameterName, 'Exclude any file or directory with this name')
|
||||||
|
[CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Exclude filepaths matching this regex. To ignore png files type: -v "\.png$" ')
|
||||||
|
[CompletionResult]::new('--invert-filter', 'invert-filter', [CompletionResultType]::ParameterName, 'Exclude filepaths matching this regex. To ignore png files type: -v "\.png$" ')
|
||||||
|
[CompletionResult]::new('-e', 'e', [CompletionResultType]::ParameterName, 'Only include filepaths matching this regex. For png files type: -e "\.png$" ')
|
||||||
|
[CompletionResult]::new('--filter', 'filter', [CompletionResultType]::ParameterName, 'Only include filepaths matching this regex. For png files type: -e "\.png$" ')
|
||||||
|
[CompletionResult]::new('-w', 'w', [CompletionResultType]::ParameterName, 'Specify width of output overriding the auto detection of terminal width')
|
||||||
|
[CompletionResult]::new('--terminal_width', 'terminal_width', [CompletionResultType]::ParameterName, 'Specify width of output overriding the auto detection of terminal width')
|
||||||
|
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help information')
|
||||||
|
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help information')
|
||||||
|
[CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Print version information')
|
||||||
|
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version information')
|
||||||
|
[CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Subdirectories will not have their path shortened')
|
||||||
|
[CompletionResult]::new('--full-paths', 'full-paths', [CompletionResultType]::ParameterName, 'Subdirectories will not have their path shortened')
|
||||||
|
[CompletionResult]::new('-x', 'x', [CompletionResultType]::ParameterName, 'Only count the files and directories on the same filesystem as the supplied directory')
|
||||||
|
[CompletionResult]::new('--limit-filesystem', 'limit-filesystem', [CompletionResultType]::ParameterName, 'Only count the files and directories on the same filesystem as the supplied directory')
|
||||||
|
[CompletionResult]::new('-s', 's', [CompletionResultType]::ParameterName, 'Use file length instead of blocks')
|
||||||
|
[CompletionResult]::new('--apparent-size', 'apparent-size', [CompletionResultType]::ParameterName, 'Use file length instead of blocks')
|
||||||
|
[CompletionResult]::new('-r', 'r', [CompletionResultType]::ParameterName, 'Print tree upside down (biggest highest)')
|
||||||
|
[CompletionResult]::new('--reverse', 'reverse', [CompletionResultType]::ParameterName, 'Print tree upside down (biggest highest)')
|
||||||
|
[CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'No colors will be printed (Useful for commands like: watch)')
|
||||||
|
[CompletionResult]::new('--no-colors', 'no-colors', [CompletionResultType]::ParameterName, 'No colors will be printed (Useful for commands like: watch)')
|
||||||
|
[CompletionResult]::new('-b', 'b', [CompletionResultType]::ParameterName, 'No percent bars or percentages will be displayed')
|
||||||
|
[CompletionResult]::new('--no-percent-bars', 'no-percent-bars', [CompletionResultType]::ParameterName, 'No percent bars or percentages will be displayed')
|
||||||
|
[CompletionResult]::new('--skip-total', 'skip-total', [CompletionResultType]::ParameterName, 'No total row will be displayed')
|
||||||
|
[CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Directory ''size'' is number of child files/dirs not disk size')
|
||||||
|
[CompletionResult]::new('--filecount', 'filecount', [CompletionResultType]::ParameterName, 'Directory ''size'' is number of child files/dirs not disk size')
|
||||||
|
[CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Do not display hidden files')
|
||||||
|
[CompletionResult]::new('--ignore_hidden', 'ignore_hidden', [CompletionResultType]::ParameterName, 'Do not display hidden files')
|
||||||
|
[CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'show only these file types')
|
||||||
|
[CompletionResult]::new('--file_types', 'file_types', [CompletionResultType]::ParameterName, 'show only these file types')
|
||||||
|
[CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'print sizes in powers of 1000 (e.g., 1.1G)')
|
||||||
|
[CompletionResult]::new('--si', 'si', [CompletionResultType]::ParameterName, 'print sizes in powers of 1000 (e.g., 1.1G)')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
$completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
|
||||||
|
Sort-Object -Property ListItemText
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
_dust() {
|
||||||
|
local i cur prev opts cmds
|
||||||
|
COMPREPLY=()
|
||||||
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
cmd=""
|
||||||
|
opts=""
|
||||||
|
|
||||||
|
for i in ${COMP_WORDS[@]}
|
||||||
|
do
|
||||||
|
case "${i}" in
|
||||||
|
"$1")
|
||||||
|
cmd="dust"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
case "${cmd}" in
|
||||||
|
dust)
|
||||||
|
opts="-h -V -d -n -p -X -x -s -r -c -b -f -i -v -e -t -w -H --help --version --depth --number-of-lines --full-paths --ignore-directory --limit-filesystem --apparent-size --reverse --no-colors --no-percent-bars --skip-total --filecount --ignore_hidden --invert-filter --filter --file_types --terminal_width --si <inputs>..."
|
||||||
|
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
case "${prev}" in
|
||||||
|
--depth)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-d)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--number-of-lines)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-n)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--ignore-directory)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-X)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--invert-filter)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-v)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--filter)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-e)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--terminal_width)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-w)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -F _dust -o bashdefault -o default dust
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
use builtin;
|
||||||
|
use str;
|
||||||
|
|
||||||
|
set edit:completion:arg-completer[dust] = {|@words|
|
||||||
|
fn spaces {|n|
|
||||||
|
builtin:repeat $n ' ' | str:join ''
|
||||||
|
}
|
||||||
|
fn cand {|text desc|
|
||||||
|
edit:complex-candidate $text &display=$text' '(spaces (- 14 (wcswidth $text)))$desc
|
||||||
|
}
|
||||||
|
var command = 'dust'
|
||||||
|
for word $words[1..-1] {
|
||||||
|
if (str:has-prefix $word '-') {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
set command = $command';'$word
|
||||||
|
}
|
||||||
|
var completions = [
|
||||||
|
&'dust'= {
|
||||||
|
cand -d 'Depth to show'
|
||||||
|
cand --depth 'Depth to show'
|
||||||
|
cand -n 'Number of lines of output to show. (Default is terminal_height - 10)'
|
||||||
|
cand --number-of-lines 'Number of lines of output to show. (Default is terminal_height - 10)'
|
||||||
|
cand -X 'Exclude any file or directory with this name'
|
||||||
|
cand --ignore-directory 'Exclude any file or directory with this name'
|
||||||
|
cand -v 'Exclude filepaths matching this regex. To ignore png files type: -v "\.png$" '
|
||||||
|
cand --invert-filter 'Exclude filepaths matching this regex. To ignore png files type: -v "\.png$" '
|
||||||
|
cand -e 'Only include filepaths matching this regex. For png files type: -e "\.png$" '
|
||||||
|
cand --filter 'Only include filepaths matching this regex. For png files type: -e "\.png$" '
|
||||||
|
cand -w 'Specify width of output overriding the auto detection of terminal width'
|
||||||
|
cand --terminal_width 'Specify width of output overriding the auto detection of terminal width'
|
||||||
|
cand -h 'Print help information'
|
||||||
|
cand --help 'Print help information'
|
||||||
|
cand -V 'Print version information'
|
||||||
|
cand --version 'Print version information'
|
||||||
|
cand -p 'Subdirectories will not have their path shortened'
|
||||||
|
cand --full-paths 'Subdirectories will not have their path shortened'
|
||||||
|
cand -x 'Only count the files and directories on the same filesystem as the supplied directory'
|
||||||
|
cand --limit-filesystem 'Only count the files and directories on the same filesystem as the supplied directory'
|
||||||
|
cand -s 'Use file length instead of blocks'
|
||||||
|
cand --apparent-size 'Use file length instead of blocks'
|
||||||
|
cand -r 'Print tree upside down (biggest highest)'
|
||||||
|
cand --reverse 'Print tree upside down (biggest highest)'
|
||||||
|
cand -c 'No colors will be printed (Useful for commands like: watch)'
|
||||||
|
cand --no-colors 'No colors will be printed (Useful for commands like: watch)'
|
||||||
|
cand -b 'No percent bars or percentages will be displayed'
|
||||||
|
cand --no-percent-bars 'No percent bars or percentages will be displayed'
|
||||||
|
cand --skip-total 'No total row will be displayed'
|
||||||
|
cand -f 'Directory ''size'' is number of child files/dirs not disk size'
|
||||||
|
cand --filecount 'Directory ''size'' is number of child files/dirs not disk size'
|
||||||
|
cand -i 'Do not display hidden files'
|
||||||
|
cand --ignore_hidden 'Do not display hidden files'
|
||||||
|
cand -t 'show only these file types'
|
||||||
|
cand --file_types 'show only these file types'
|
||||||
|
cand -H 'print sizes in powers of 1000 (e.g., 1.1G)'
|
||||||
|
cand --si 'print sizes in powers of 1000 (e.g., 1.1G)'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
$completions[$command]
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
complete -c dust -s d -l depth -d 'Depth to show' -r
|
||||||
|
complete -c dust -s n -l number-of-lines -d 'Number of lines of output to show. (Default is terminal_height - 10)' -r
|
||||||
|
complete -c dust -s X -l ignore-directory -d 'Exclude any file or directory with this name' -r
|
||||||
|
complete -c dust -s v -l invert-filter -d 'Exclude filepaths matching this regex. To ignore png files type: -v "\\.png$" ' -r
|
||||||
|
complete -c dust -s e -l filter -d 'Only include filepaths matching this regex. For png files type: -e "\\.png$" ' -r
|
||||||
|
complete -c dust -s w -l terminal_width -d 'Specify width of output overriding the auto detection of terminal width' -r
|
||||||
|
complete -c dust -s h -l help -d 'Print help information'
|
||||||
|
complete -c dust -s V -l version -d 'Print version information'
|
||||||
|
complete -c dust -s p -l full-paths -d 'Subdirectories will not have their path shortened'
|
||||||
|
complete -c dust -s x -l limit-filesystem -d 'Only count the files and directories on the same filesystem as the supplied directory'
|
||||||
|
complete -c dust -s s -l apparent-size -d 'Use file length instead of blocks'
|
||||||
|
complete -c dust -s r -l reverse -d 'Print tree upside down (biggest highest)'
|
||||||
|
complete -c dust -s c -l no-colors -d 'No colors will be printed (Useful for commands like: watch)'
|
||||||
|
complete -c dust -s b -l no-percent-bars -d 'No percent bars or percentages will be displayed'
|
||||||
|
complete -c dust -l skip-total -d 'No total row will be displayed'
|
||||||
|
complete -c dust -s f -l filecount -d 'Directory \'size\' is number of child files/dirs not disk size'
|
||||||
|
complete -c dust -s i -l ignore_hidden -d 'Do not display hidden files'
|
||||||
|
complete -c dust -s t -l file_types -d 'show only these file types'
|
||||||
|
complete -c dust -s H -l si -d 'print sizes in powers of 1000 (e.g., 1.1G)'
|
||||||
+128
@@ -0,0 +1,128 @@
|
|||||||
|
use clap::{Arg, Command};
|
||||||
|
|
||||||
|
pub(crate) fn build_cli() -> Command<'static> {
|
||||||
|
Command::new("Dust")
|
||||||
|
.about("Like du but more intuitive")
|
||||||
|
.version(env!("CARGO_PKG_VERSION"))
|
||||||
|
.trailing_var_arg(true)
|
||||||
|
.arg(
|
||||||
|
Arg::new("depth")
|
||||||
|
.short('d')
|
||||||
|
.long("depth")
|
||||||
|
.help("Depth to show")
|
||||||
|
.takes_value(true)
|
||||||
|
.default_value("18446744073709551615")
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("number_of_lines")
|
||||||
|
.short('n')
|
||||||
|
.long("number-of-lines")
|
||||||
|
.help("Number of lines of output to show. (Default is terminal_height - 10)")
|
||||||
|
.takes_value(true)
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("display_full_paths")
|
||||||
|
.short('p')
|
||||||
|
.long("full-paths")
|
||||||
|
.help("Subdirectories will not have their path shortened"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("ignore_directory")
|
||||||
|
.short('X')
|
||||||
|
.long("ignore-directory")
|
||||||
|
.takes_value(true)
|
||||||
|
.number_of_values(1)
|
||||||
|
.multiple_occurrences(true)
|
||||||
|
.help("Exclude any file or directory with this name"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("limit_filesystem")
|
||||||
|
.short('x')
|
||||||
|
.long("limit-filesystem")
|
||||||
|
.help("Only count the files and directories on the same filesystem as the supplied directory"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("display_apparent_size")
|
||||||
|
.short('s')
|
||||||
|
.long("apparent-size")
|
||||||
|
.help("Use file length instead of blocks"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("reverse")
|
||||||
|
.short('r')
|
||||||
|
.long("reverse")
|
||||||
|
.help("Print tree upside down (biggest highest)"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("no_colors")
|
||||||
|
.short('c')
|
||||||
|
.long("no-colors")
|
||||||
|
.help("No colors will be printed (Useful for commands like: watch)"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("no_bars")
|
||||||
|
.short('b')
|
||||||
|
.long("no-percent-bars")
|
||||||
|
.help("No percent bars or percentages will be displayed"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("skip_total")
|
||||||
|
.long("skip-total")
|
||||||
|
.help("No total row will be displayed"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("by_filecount")
|
||||||
|
.short('f')
|
||||||
|
.long("filecount")
|
||||||
|
.help("Directory 'size' is number of child files/dirs not disk size"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("ignore_hidden")
|
||||||
|
.short('i') // Do not use 'h' this is used by 'help'
|
||||||
|
.long("ignore_hidden")
|
||||||
|
.help("Do not display hidden files"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("invert_filter")
|
||||||
|
.short('v')
|
||||||
|
.long("invert-filter")
|
||||||
|
.takes_value(true)
|
||||||
|
.number_of_values(1)
|
||||||
|
.multiple_occurrences(true)
|
||||||
|
.conflicts_with("filter")
|
||||||
|
.conflicts_with("types")
|
||||||
|
.help("Exclude filepaths matching this regex. To ignore png files type: -v \"\\.png$\" "),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("filter")
|
||||||
|
.short('e')
|
||||||
|
.long("filter")
|
||||||
|
.takes_value(true)
|
||||||
|
.number_of_values(1)
|
||||||
|
.multiple_occurrences(true)
|
||||||
|
.conflicts_with("types")
|
||||||
|
.help("Only include filepaths matching this regex. For png files type: -e \"\\.png$\" "),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("types")
|
||||||
|
.short('t')
|
||||||
|
.long("file_types")
|
||||||
|
.conflicts_with("depth")
|
||||||
|
.help("show only these file types"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("width")
|
||||||
|
.short('w')
|
||||||
|
.long("terminal_width")
|
||||||
|
.takes_value(true)
|
||||||
|
.number_of_values(1)
|
||||||
|
.help("Specify width of output overriding the auto detection of terminal width"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::new("iso")
|
||||||
|
.short('H')
|
||||||
|
.long("si")
|
||||||
|
.help("print sizes in powers of 1000 (e.g., 1.1G)")
|
||||||
|
)
|
||||||
|
.arg(Arg::new("inputs").multiple_occurrences(true).default_value("."))
|
||||||
|
}
|
||||||
+3
-11
@@ -1,8 +1,6 @@
|
|||||||
extern crate ansi_term;
|
|
||||||
|
|
||||||
use crate::display_node::DisplayNode;
|
use crate::display_node::DisplayNode;
|
||||||
|
|
||||||
use self::ansi_term::Colour::Red;
|
use ansi_term::Colour::Red;
|
||||||
use lscolors::{LsColors, Style};
|
use lscolors::{LsColors, Style};
|
||||||
|
|
||||||
use unicode_width::UnicodeWidthStr;
|
use unicode_width::UnicodeWidthStr;
|
||||||
@@ -215,20 +213,14 @@ fn display_node(node: &DisplayNode, draw_data: &DrawData, is_biggest: bool, is_l
|
|||||||
let level = ((indent.chars().count() - 1) / 2) - 1;
|
let level = ((indent.chars().count() - 1) / 2) - 1;
|
||||||
let bar_text = draw_data.generate_bar(node, level);
|
let bar_text = draw_data.generate_bar(node, level);
|
||||||
|
|
||||||
let to_print = format_string(
|
let to_print = format_string(node, &indent, &bar_text, is_biggest, draw_data.display_data);
|
||||||
node,
|
|
||||||
&*indent,
|
|
||||||
&*bar_text,
|
|
||||||
is_biggest,
|
|
||||||
draw_data.display_data,
|
|
||||||
);
|
|
||||||
|
|
||||||
if !draw_data.display_data.is_reversed {
|
if !draw_data.display_data.is_reversed {
|
||||||
println!("{}", to_print)
|
println!("{}", to_print)
|
||||||
}
|
}
|
||||||
|
|
||||||
let dd = DrawData {
|
let dd = DrawData {
|
||||||
indent: clean_indentation_string(&*indent),
|
indent: clean_indentation_string(&indent),
|
||||||
percent_bar: bar_text,
|
percent_bar: bar_text,
|
||||||
display_data: draw_data.display_data,
|
display_data: draw_data.display_data,
|
||||||
};
|
};
|
||||||
|
|||||||
+13
-141
@@ -1,14 +1,20 @@
|
|||||||
extern crate clap;
|
mod cli;
|
||||||
extern crate rayon;
|
mod config;
|
||||||
extern crate regex;
|
mod dir_walker;
|
||||||
extern crate unicode_width;
|
mod display;
|
||||||
|
mod display_node;
|
||||||
|
mod filter;
|
||||||
|
mod filter_type;
|
||||||
|
mod node;
|
||||||
|
mod platform;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
|
use crate::cli::build_cli;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::process;
|
use std::process;
|
||||||
|
|
||||||
use self::display::draw_it;
|
use self::display::draw_it;
|
||||||
use clap::{crate_version, Arg};
|
use clap::Values;
|
||||||
use clap::{Command, Values};
|
|
||||||
use config::get_config;
|
use config::get_config;
|
||||||
use dir_walker::{walk_it, WalkData};
|
use dir_walker::{walk_it, WalkData};
|
||||||
use filter::get_biggest;
|
use filter::get_biggest;
|
||||||
@@ -20,16 +26,6 @@ use terminal_size::{terminal_size, Height, Width};
|
|||||||
use utils::get_filesystem_devices;
|
use utils::get_filesystem_devices;
|
||||||
use utils::simplify_dir_names;
|
use utils::simplify_dir_names;
|
||||||
|
|
||||||
mod config;
|
|
||||||
mod dir_walker;
|
|
||||||
mod display;
|
|
||||||
mod display_node;
|
|
||||||
mod filter;
|
|
||||||
mod filter_type;
|
|
||||||
mod node;
|
|
||||||
mod platform;
|
|
||||||
mod utils;
|
|
||||||
|
|
||||||
static DEFAULT_NUMBER_OF_LINES: usize = 30;
|
static DEFAULT_NUMBER_OF_LINES: usize = 30;
|
||||||
static DEFAULT_TERMINAL_WIDTH: usize = 80;
|
static DEFAULT_TERMINAL_WIDTH: usize = 80;
|
||||||
|
|
||||||
@@ -94,131 +90,7 @@ fn get_regex_value(maybe_value: Option<Values>) -> Vec<Regex> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let options = Command::new("Dust")
|
let options = build_cli().get_matches();
|
||||||
.about("Like du but more intuitive")
|
|
||||||
.version(crate_version!())
|
|
||||||
.trailing_var_arg(true)
|
|
||||||
.arg(
|
|
||||||
Arg::new("depth")
|
|
||||||
.short('d')
|
|
||||||
.long("depth")
|
|
||||||
.help("Depth to show")
|
|
||||||
.takes_value(true)
|
|
||||||
.default_value(usize::MAX.to_string().as_ref())
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("number_of_lines")
|
|
||||||
.short('n')
|
|
||||||
.long("number-of-lines")
|
|
||||||
.help("Number of lines of output to show. (Default is terminal_height - 10)")
|
|
||||||
.takes_value(true)
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("display_full_paths")
|
|
||||||
.short('p')
|
|
||||||
.long("full-paths")
|
|
||||||
.help("Subdirectories will not have their path shortened"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("ignore_directory")
|
|
||||||
.short('X')
|
|
||||||
.long("ignore-directory")
|
|
||||||
.takes_value(true)
|
|
||||||
.number_of_values(1)
|
|
||||||
.multiple_occurrences(true)
|
|
||||||
.help("Exclude any file or directory with this name"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("limit_filesystem")
|
|
||||||
.short('x')
|
|
||||||
.long("limit-filesystem")
|
|
||||||
.help("Only count the files and directories on the same filesystem as the supplied directory"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("display_apparent_size")
|
|
||||||
.short('s')
|
|
||||||
.long("apparent-size")
|
|
||||||
.help("Use file length instead of blocks"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("reverse")
|
|
||||||
.short('r')
|
|
||||||
.long("reverse")
|
|
||||||
.help("Print tree upside down (biggest highest)"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("no_colors")
|
|
||||||
.short('c')
|
|
||||||
.long("no-colors")
|
|
||||||
.help("No colors will be printed (Useful for commands like: watch)"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("no_bars")
|
|
||||||
.short('b')
|
|
||||||
.long("no-percent-bars")
|
|
||||||
.help("No percent bars or percentages will be displayed"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("skip_total")
|
|
||||||
.long("skip-total")
|
|
||||||
.help("No total row will be displayed"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("by_filecount")
|
|
||||||
.short('f')
|
|
||||||
.long("filecount")
|
|
||||||
.help("Directory 'size' is number of child files/dirs not disk size"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("ignore_hidden")
|
|
||||||
.short('i') // Do not use 'h' this is used by 'help'
|
|
||||||
.long("ignore_hidden")
|
|
||||||
.help("Do not display hidden files"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("invert_filter")
|
|
||||||
.short('v')
|
|
||||||
.long("invert-filter")
|
|
||||||
.takes_value(true)
|
|
||||||
.number_of_values(1)
|
|
||||||
.multiple_occurrences(true)
|
|
||||||
.conflicts_with("filter")
|
|
||||||
.conflicts_with("types")
|
|
||||||
.help("Exclude filepaths matching this regex. To ignore png files type: -v \"\\.png$\" "),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("filter")
|
|
||||||
.short('e')
|
|
||||||
.long("filter")
|
|
||||||
.takes_value(true)
|
|
||||||
.number_of_values(1)
|
|
||||||
.multiple_occurrences(true)
|
|
||||||
.conflicts_with("types")
|
|
||||||
.help("Only include filepaths matching this regex. For png files type: -e \"\\.png$\" "),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("types")
|
|
||||||
.short('t')
|
|
||||||
.long("file_types")
|
|
||||||
.conflicts_with("depth")
|
|
||||||
.help("show only these file types"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("width")
|
|
||||||
.short('w')
|
|
||||||
.long("terminal_width")
|
|
||||||
.takes_value(true)
|
|
||||||
.number_of_values(1)
|
|
||||||
.help("Specify width of output overriding the auto detection of terminal width"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::new("iso")
|
|
||||||
.short('H')
|
|
||||||
.long("si")
|
|
||||||
.help("print sizes in powers of 1000 (e.g., 1.1G)")
|
|
||||||
)
|
|
||||||
.arg(Arg::new("inputs").multiple_occurrences(true).default_value("."))
|
|
||||||
.get_matches();
|
|
||||||
|
|
||||||
let config = get_config();
|
let config = get_config();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user