// This file is part of the uutils coreutils package.//
@@ -2045,6 +2184,11 @@
useuucore::libc::{S_IXGRP, S_IXOTH, S_IXUSR};
useuucore::{fs::display_permissions, version_cmp::version_cmp};
+#[cfg(not(feature="selinux"))]
+staticCONTEXT_HELP_TEXT: &str="print any security context of each file (not enabled)";
+#[cfg(feature="selinux")]
+staticCONTEXT_HELP_TEXT: &str="print any security context of each file";
+
fnusage() ->String {
format!("{0} [OPTION]... [FILE]...", uucore::execution_phrase())
}
@@ -2124,6 +2268,7 @@
pubstaticFULL_TIME: &str="full-time";
pubstaticHIDE: &str="hide";
pubstaticIGNORE: &str="ignore";
+ pubstaticCONTEXT: &str="context";
}
constDEFAULT_TERM_WIDTH: u16=80;
@@ -2234,6 +2379,8 @@
quoting_style: QuotingStyle,
indicator_style: IndicatorStyle,
time_style: TimeStyle,
+ context: bool,
+ selinux_supported: bool,
}
// Fields that can be removed or added to the long format
@@ -2245,9 +2392,18 @@
numeric_uid_gid: bool,
}
+structPaddingCollection {
+ longest_link_count_len: usize,
+ longest_uname_len: usize,
+ longest_group_len: usize,
+ longest_context_len: usize,
+ longest_size_len: usize,
+}
+
implConfig {
#[allow(clippy::cognitive_complexity)]fnfrom(options: &clap::ArgMatches) ->UResult<Config> {
+ letcontext=options.is_present(options::CONTEXT);
let (mutformat, opt) =ifletSome(format_) =options.value_of(options::FORMAT) {
(
matchformat_ {
@@ -2591,6 +2747,17 @@
quoting_style,
indicator_style,
time_style,
+ context,
+ selinux_supported: {
+ #[cfg(feature="selinux")]
+ {
+ selinux::kernel_support() !=selinux::KernelSupport::Unsupported
+ }
+ #[cfg(not(feature="selinux"))]
+ {
+ false
+ }
+ },
})
}
}
@@ -3152,6 +3319,12 @@ only ignore '.' and '..'.",
.overrides_with(options::FULL_TIME)
.help("like -l --time-style=full-iso"),
)
+ .arg(
+ Arg::with_name(options::CONTEXT)
+ .short("Z")
+ .long(options::CONTEXT)
+ .help(CONTEXT_HELP_TEXT),
+ )
// Positional arguments
.arg(
Arg::with_name(options::PATHS)
@@ -3176,6 +3349,7 @@ only ignore '.' and '..'.",
// PathBuf that all above data corresponds top_buf: PathBuf,
must_dereference: bool,
+ security_context: String,
}
implPathData {
@@ -3219,12 +3393,19 @@ only ignore '.' and '..'.",
None=>OnceCell::new(),
};
+ letsecurity_context=ifconfig.context {
+ get_security_context(config, &p_buf, must_dereference)
+ } else {
+ String::new()
+ };
+
Self {
md: OnceCell::new(),
ft,
display_name,
p_buf,
must_dereference,
+ security_context,
}
}
@@ -3393,7 +3574,7 @@ only ignore '.' and '..'.",
}
fndisplay_dir_entry_size(entry: &PathData, config: &Config) -> (usize, usize, usize, usize) {
- // TODO: Cache/memoize the display_* results so we don't have to recalculate them.
+ // TODO: Cache/memorize the display_* results so we don't have to recalculate them.ifletSome(md) =entry.md() {
(
display_symlink_count(md).len(),
@@ -3406,31 +3587,40 @@ only ignore '.' and '..'.",
}
}
-fnpad_left(string: String, count: usize) ->String {
+fnpad_left(string: &str, count: usize) ->String {
format!("{:>width$}", string, width=count)
}
-fnpad_right(string: String, count: usize) ->String {
+fnpad_right(string: &str, count: usize) ->String {
format!("{:<width$}", string, width=count)
}
fndisplay_items(items: &[PathData], config: &Config, out: &mutBufWriter<Stdout>) {
+ // `-Z`, `--context`:
+ // Display the SELinux security context or '?' if none is found. When used with the `-l`
+ // option, print the security context to the left of the size column.
+
ifconfig.format==Format::Long {
let (
mutlongest_link_count_len,
mutlongest_uname_len,
mutlongest_group_len,
+ mutlongest_context_len,
mutlongest_size_len,
- ) = (1, 1, 1, 1);
+ ) = (1, 1, 1, 1, 1);
letmuttotal_size=0;
foriteminitems {
+ letcontext_len=item.security_context.len();
let (link_count_len, uname_len, group_len, size_len) =display_dir_entry_size(item, config);
longest_link_count_len=link_count_len.max(longest_link_count_len);
longest_size_len=size_len.max(longest_size_len);
longest_uname_len=uname_len.max(longest_uname_len);
longest_group_len=group_len.max(longest_group_len);
+ ifconfig.context {
+ longest_context_len=context_len.max(longest_context_len);
+ }
longest_size_len=size_len.max(longest_size_len);
total_size+=item.md().map_or(0, |md|get_block_size(md, config));
}
@@ -3442,16 +3632,31 @@ only ignore '.' and '..'.",
foriteminitems {
display_item_long(
item,
- longest_link_count_len,
- longest_uname_len,
- longest_group_len,
- longest_size_len,
+ PaddingCollection {
+ longest_link_count_len,
+ longest_uname_len,
+ longest_group_len,
+ longest_context_len,
+ longest_size_len,
+ },
config,
out,
);
}
} else {
- letnames=items.iter().filter_map(|i|display_file_name(i, config));
+ letmutlongest_context_len=1;
+ letprefix_context=ifconfig.context {
+ foriteminitems {
+ letcontext_len=item.security_context.len();
+ longest_context_len=context_len.max(longest_context_len);
+ }
+ Some(longest_context_len)
+ } else {
+ None
+ };
+ letnames=items
+ .iter()
+ .filter_map(|i|display_file_name(i, config, prefix_context));
matchconfig.format {
Format::Columns=>display_grid(names, config.width, Direction::TopToBottom, out),
@@ -3576,15 +3781,13 @@ only ignore '.' and '..'.",
/// longest_link_count_len: usize,/// longest_uname_len: usize,/// longest_group_len: usize,
+/// longest_context_len: usize,/// longest_size_len: usize,/// ```/// that decide the maximum possible character count of each field.fndisplay_item_long(
item: &PathData,
- longest_link_count_len: usize,
- longest_uname_len: usize,
- longest_group_len: usize,
- longest_size_len: usize,
+ padding: PaddingCollection,
config: &Config,
out: &mutBufWriter<Stdout>,
) {
@@ -3605,16 +3808,23 @@ only ignore '.' and '..'.",
let_=write!(
out,
- "{} {}",
+ "{}{} {}",
display_permissions(md, true),
- pad_left(display_symlink_count(md), longest_link_count_len),
+ ifitem.security_context.len() >1 {
+ // GNU `ls` uses a "." character to indicate a file with a security context,
+ // but not other alternate access method.
+ "."
+ } else {
+ ""
+ },
+ pad_left(&display_symlink_count(md), padding.longest_link_count_len),
);
ifconfig.long.owner {
let_=write!(
out,
" {}",
- pad_right(display_uname(md, config), longest_uname_len)
+ pad_right(&display_uname(md, config), padding.longest_uname_len)
);
}
@@ -3622,7 +3832,15 @@ only ignore '.' and '..'.",
let_=write!(
out,
" {}",
- pad_right(display_group(md, config), longest_group_len)
+ pad_right(&display_group(md, config), padding.longest_group_len)
+ );
+ }
+
+ ifconfig.context {
+ let_=write!(
+ out,
+ " {}",
+ pad_right(&item.security_context, padding.longest_context_len)
);
}
@@ -3632,19 +3850,19 @@ only ignore '.' and '..'.",
let_=write!(
out,
" {}",
- pad_right(display_uname(md, config), longest_uname_len)
+ pad_right(&display_uname(md, config), padding.longest_uname_len)
);
}
let_=writeln!(
out,
" {} {} {}",
- pad_left(display_size_or_rdev(md, config), longest_size_len),
+ pad_left(&display_size_or_rdev(md, config), padding.longest_size_len),
display_date(md, config),
// unwrap is fine because it fails when metadata is not available// but we already know that it is because it's checked at the// start of the function.
- display_file_name(item, config).unwrap().contents,
+ display_file_name(item, config, None).unwrap().contents,
);
}
@@ -3868,10 +4086,15 @@ only ignore '.' and '..'.",
/// * `config.indicator_style` to append specific characters to `name` using [`classify_file`]./// * `config.format` to display symlink targets if `Format::Long`. This function is also/// responsible for coloring symlink target names if `config.color` is specified.
+/// * `config.context` to prepend security context to `name` if compiled with `feat_selinux`.////// Note that non-unicode sequences in symlink targets are dealt with using/// [`std::path::Path::to_string_lossy`].
-fndisplay_file_name(path: &PathData, config: &Config) ->Option<Cell> {
+fndisplay_file_name(
+ path: &PathData,
+ config: &Config,
+ prefix_context: Option<usize>,
+) ->Option<Cell> {
// This is our return value. We start by `&path.display_name` and modify it along the way.letmutname=escape_name(&path.display_name, &config.quoting_style);
@@ -3963,6 +4186,20 @@ only ignore '.' and '..'.",
}
}
+ // Prepend the security context to the `name` and adjust `width` in order
+ // to get correct alignment from later calls to`display_grid()`.
+ ifconfig.context {
+ ifletSome(pad_count) =prefix_context {
+ letsecurity_context=if!matches!(config.format, Format::Commas) {
+ pad_left(&path.security_context, pad_count)
+ } else {
+ path.security_context.to_owned()
+ };
+ name=format!("{} {}", security_context, name);
+ width+=security_context.len() +1;
+ }
+ }
+
Some(Cell {
contents: name,
width,
@@ -3987,6 +4224,47 @@ only ignore '.' and '..'.",
fndisplay_symlink_count(metadata: &Metadata) ->String {
metadata.nlink().to_string()
}
+
+// This returns the SELinux security context as UTF8 `String`.
+// In the long term this should be changed to `OsStr`, see discussions at #2621/#2656
+#[allow(unused_variables)]
+fnget_security_context(config: &Config, p_buf: &Path, must_dereference: bool) ->String {
+ letsubstitute_string="?".to_string();
+ ifconfig.selinux_supported {
+ #[cfg(feature="selinux")]
+ {
+ matchselinux::SecurityContext::of_path(p_buf, must_dereference, false) {
+ Err(_r) => {
+ // TODO: show the actual reason why it failed
+ show_warning!("failed to get security context of: {}", p_buf.quote());
+ substitute_string
+ }
+ Ok(None) =>substitute_string,
+ Ok(Some(context)) => {
+ letmutcontext=context.as_bytes();
+ ifcontext.ends_with(&[0]) {
+ // TODO: replace with `strip_prefix()` when MSRV >= 1.51
+ context=&context[..context.len() -1]
+ };
+ String::from_utf8(context.to_vec()).unwrap_or_else(|e| {
+ show_warning!(
+ "getting security context of: {}: {}",
+ p_buf.quote(),
+ e.to_string()
+ );
+ String::from_utf8_lossy(context).into_owned()
+ })
+ }
+ }
+ }
+ #[cfg(not(feature="selinux"))]
+ {
+ substitute_string
+ }
+ } else {
+ substitute_string
+ }
+}
diff --git a/uu_ls/all.html b/uu_ls/all.html
index b635e2a75..727c52173 100644
--- a/uu_ls/all.html
+++ b/uu_ls/all.html
@@ -1,5 +1,5 @@
List of all items in this crate
\ No newline at end of file
diff --git a/uu_ls/fn.uu_app.html b/uu_ls/fn.uu_app.html
index 995ff447c..bf85ffacc 100644
--- a/uu_ls/fn.uu_app.html
+++ b/uu_ls/fn.uu_app.html
@@ -1,3 +1,3 @@
-uu_app in uu_ls - Rust
\ No newline at end of file
diff --git a/uu_ls/fn.uumain.html b/uu_ls/fn.uumain.html
index 43da5ec2d..dc857d9b7 100644
--- a/uu_ls/fn.uumain.html
+++ b/uu_ls/fn.uumain.html
@@ -1,3 +1,3 @@
-uumain in uu_ls - Rust
\ No newline at end of file
diff --git a/uu_ls/index.html b/uu_ls/index.html
index 575b02e88..1bc42bd5d 100644
--- a/uu_ls/index.html
+++ b/uu_ls/index.html
@@ -1,4 +1,4 @@
-uu_ls - Rust
\ No newline at end of file
diff --git a/uu_ls/options/dereference/static.ALL.html b/uu_ls/options/dereference/static.ALL.html
index a25c9dd4a..c7d3e7803 100644
--- a/uu_ls/options/dereference/static.ALL.html
+++ b/uu_ls/options/dereference/static.ALL.html
@@ -1,3 +1,3 @@
-ALL in uu_ls::options::dereference - Rust
\ No newline at end of file
diff --git a/uu_ls/options/dereference/static.ARGS.html b/uu_ls/options/dereference/static.ARGS.html
index 53b05fd1c..265c0f973 100644
--- a/uu_ls/options/dereference/static.ARGS.html
+++ b/uu_ls/options/dereference/static.ARGS.html
@@ -1,3 +1,3 @@
-ARGS in uu_ls::options::dereference - Rust
\ No newline at end of file
diff --git a/uu_ls/options/dereference/static.DIR_ARGS.html b/uu_ls/options/dereference/static.DIR_ARGS.html
index 8573b96b2..566c6978a 100644
--- a/uu_ls/options/dereference/static.DIR_ARGS.html
+++ b/uu_ls/options/dereference/static.DIR_ARGS.html
@@ -1,3 +1,3 @@
-DIR_ARGS in uu_ls::options::dereference - Rust
\ No newline at end of file
diff --git a/uu_ls/options/files/index.html b/uu_ls/options/files/index.html
index 0b016d86a..6d0666bca 100644
--- a/uu_ls/options/files/index.html
+++ b/uu_ls/options/files/index.html
@@ -1,4 +1,4 @@
-uu_ls::options::files - Rust
\ No newline at end of file
diff --git a/uu_ls/options/files/static.ALL.html b/uu_ls/options/files/static.ALL.html
index a290270c4..eeeaea687 100644
--- a/uu_ls/options/files/static.ALL.html
+++ b/uu_ls/options/files/static.ALL.html
@@ -1,3 +1,3 @@
-ALL in uu_ls::options::files - Rust
\ No newline at end of file
diff --git a/uu_ls/options/files/static.ALMOST_ALL.html b/uu_ls/options/files/static.ALMOST_ALL.html
index bb1a843f9..64fcee39f 100644
--- a/uu_ls/options/files/static.ALMOST_ALL.html
+++ b/uu_ls/options/files/static.ALMOST_ALL.html
@@ -1,3 +1,3 @@
-ALMOST_ALL in uu_ls::options::files - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/index.html b/uu_ls/options/format/index.html
index 2ca95eb7b..c859e9250 100644
--- a/uu_ls/options/format/index.html
+++ b/uu_ls/options/format/index.html
@@ -1,4 +1,4 @@
-uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/static.ACROSS.html b/uu_ls/options/format/static.ACROSS.html
index c8368977c..4d4dacf2a 100644
--- a/uu_ls/options/format/static.ACROSS.html
+++ b/uu_ls/options/format/static.ACROSS.html
@@ -1,3 +1,3 @@
-ACROSS in uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/static.COLUMNS.html b/uu_ls/options/format/static.COLUMNS.html
index 8faa0c430..8ec6528b9 100644
--- a/uu_ls/options/format/static.COLUMNS.html
+++ b/uu_ls/options/format/static.COLUMNS.html
@@ -1,3 +1,3 @@
-COLUMNS in uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/static.COMMAS.html b/uu_ls/options/format/static.COMMAS.html
index 54717c4d8..38392e84d 100644
--- a/uu_ls/options/format/static.COMMAS.html
+++ b/uu_ls/options/format/static.COMMAS.html
@@ -1,3 +1,3 @@
-COMMAS in uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/static.LONG.html b/uu_ls/options/format/static.LONG.html
index 5ebc494eb..62d641546 100644
--- a/uu_ls/options/format/static.LONG.html
+++ b/uu_ls/options/format/static.LONG.html
@@ -1,3 +1,3 @@
-LONG in uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/static.LONG_NO_GROUP.html b/uu_ls/options/format/static.LONG_NO_GROUP.html
index c8fea2468..03c3bbd9f 100644
--- a/uu_ls/options/format/static.LONG_NO_GROUP.html
+++ b/uu_ls/options/format/static.LONG_NO_GROUP.html
@@ -1,3 +1,3 @@
-LONG_NO_GROUP in uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/static.LONG_NO_OWNER.html b/uu_ls/options/format/static.LONG_NO_OWNER.html
index cad67ada4..d461925fe 100644
--- a/uu_ls/options/format/static.LONG_NO_OWNER.html
+++ b/uu_ls/options/format/static.LONG_NO_OWNER.html
@@ -1,3 +1,3 @@
-LONG_NO_OWNER in uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/static.LONG_NUMERIC_UID_GID.html b/uu_ls/options/format/static.LONG_NUMERIC_UID_GID.html
index 638daa329..f927c3746 100644
--- a/uu_ls/options/format/static.LONG_NUMERIC_UID_GID.html
+++ b/uu_ls/options/format/static.LONG_NUMERIC_UID_GID.html
@@ -1,3 +1,3 @@
-LONG_NUMERIC_UID_GID in uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/format/static.ONE_LINE.html b/uu_ls/options/format/static.ONE_LINE.html
index 298d9831b..2695ef6b1 100644
--- a/uu_ls/options/format/static.ONE_LINE.html
+++ b/uu_ls/options/format/static.ONE_LINE.html
@@ -1,3 +1,3 @@
-ONE_LINE in uu_ls::options::format - Rust
\ No newline at end of file
diff --git a/uu_ls/options/index.html b/uu_ls/options/index.html
index c51a8acc1..f5412cf98 100644
--- a/uu_ls/options/index.html
+++ b/uu_ls/options/index.html
@@ -1,5 +1,5 @@
-uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/indicator_style/index.html b/uu_ls/options/indicator_style/index.html
index 482bddda0..01ced2bf4 100644
--- a/uu_ls/options/indicator_style/index.html
+++ b/uu_ls/options/indicator_style/index.html
@@ -1,4 +1,4 @@
-uu_ls::options::indicator_style - Rust
\ No newline at end of file
diff --git a/uu_ls/options/indicator_style/static.CLASSIFY.html b/uu_ls/options/indicator_style/static.CLASSIFY.html
index 58f41a4ce..90e963029 100644
--- a/uu_ls/options/indicator_style/static.CLASSIFY.html
+++ b/uu_ls/options/indicator_style/static.CLASSIFY.html
@@ -1,3 +1,3 @@
-CLASSIFY in uu_ls::options::indicator_style - Rust
\ No newline at end of file
diff --git a/uu_ls/options/indicator_style/static.FILE_TYPE.html b/uu_ls/options/indicator_style/static.FILE_TYPE.html
index 4c395ea88..f250571b9 100644
--- a/uu_ls/options/indicator_style/static.FILE_TYPE.html
+++ b/uu_ls/options/indicator_style/static.FILE_TYPE.html
@@ -1,3 +1,3 @@
-FILE_TYPE in uu_ls::options::indicator_style - Rust
\ No newline at end of file
diff --git a/uu_ls/options/indicator_style/static.SLASH.html b/uu_ls/options/indicator_style/static.SLASH.html
index 29bd88c4c..e5d187585 100644
--- a/uu_ls/options/indicator_style/static.SLASH.html
+++ b/uu_ls/options/indicator_style/static.SLASH.html
@@ -1,3 +1,3 @@
-SLASH in uu_ls::options::indicator_style - Rust
\ No newline at end of file
diff --git a/uu_ls/options/quoting/index.html b/uu_ls/options/quoting/index.html
index c758889dc..d60a6809d 100644
--- a/uu_ls/options/quoting/index.html
+++ b/uu_ls/options/quoting/index.html
@@ -1,4 +1,4 @@
-uu_ls::options::quoting - Rust
\ No newline at end of file
diff --git a/uu_ls/options/quoting/static.C.html b/uu_ls/options/quoting/static.C.html
index 3f1c261d9..e504381fd 100644
--- a/uu_ls/options/quoting/static.C.html
+++ b/uu_ls/options/quoting/static.C.html
@@ -1,3 +1,3 @@
-C in uu_ls::options::quoting - Rust
\ No newline at end of file
diff --git a/uu_ls/options/quoting/static.ESCAPE.html b/uu_ls/options/quoting/static.ESCAPE.html
index 64615c72d..ed0372352 100644
--- a/uu_ls/options/quoting/static.ESCAPE.html
+++ b/uu_ls/options/quoting/static.ESCAPE.html
@@ -1,3 +1,3 @@
-ESCAPE in uu_ls::options::quoting - Rust
\ No newline at end of file
diff --git a/uu_ls/options/quoting/static.LITERAL.html b/uu_ls/options/quoting/static.LITERAL.html
index 4bb9905e1..ab522551a 100644
--- a/uu_ls/options/quoting/static.LITERAL.html
+++ b/uu_ls/options/quoting/static.LITERAL.html
@@ -1,3 +1,3 @@
-LITERAL in uu_ls::options::quoting - Rust
\ No newline at end of file
diff --git a/uu_ls/options/sidebar-items.js b/uu_ls/options/sidebar-items.js
index 36d7118d4..489590d5a 100644
--- a/uu_ls/options/sidebar-items.js
+++ b/uu_ls/options/sidebar-items.js
@@ -1 +1 @@
-initSidebarItems({"mod":[["dereference",""],["files",""],["format",""],["indicator_style",""],["quoting",""],["size",""],["sort",""],["time",""]],"static":[["AUTHOR",""],["COLOR",""],["DIRECTORY",""],["FORMAT",""],["FULL_TIME",""],["HIDE",""],["HIDE_CONTROL_CHARS",""],["IGNORE",""],["IGNORE_BACKUPS",""],["INDICATOR_STYLE",""],["INODE",""],["NO_GROUP",""],["PATHS",""],["QUOTING_STYLE",""],["RECURSIVE",""],["REVERSE",""],["SHOW_CONTROL_CHARS",""],["SORT",""],["TIME",""],["TIME_STYLE",""],["WIDTH",""]]});
\ No newline at end of file
+initSidebarItems({"mod":[["dereference",""],["files",""],["format",""],["indicator_style",""],["quoting",""],["size",""],["sort",""],["time",""]],"static":[["AUTHOR",""],["COLOR",""],["CONTEXT",""],["DIRECTORY",""],["FORMAT",""],["FULL_TIME",""],["HIDE",""],["HIDE_CONTROL_CHARS",""],["IGNORE",""],["IGNORE_BACKUPS",""],["INDICATOR_STYLE",""],["INODE",""],["NO_GROUP",""],["PATHS",""],["QUOTING_STYLE",""],["RECURSIVE",""],["REVERSE",""],["SHOW_CONTROL_CHARS",""],["SORT",""],["TIME",""],["TIME_STYLE",""],["WIDTH",""]]});
\ No newline at end of file
diff --git a/uu_ls/options/size/index.html b/uu_ls/options/size/index.html
index 97f545ad3..15749839a 100644
--- a/uu_ls/options/size/index.html
+++ b/uu_ls/options/size/index.html
@@ -1,4 +1,4 @@
-uu_ls::options::size - Rust
\ No newline at end of file
diff --git a/uu_ls/options/size/static.HUMAN_READABLE.html b/uu_ls/options/size/static.HUMAN_READABLE.html
index 8cd5ff19e..50f51161f 100644
--- a/uu_ls/options/size/static.HUMAN_READABLE.html
+++ b/uu_ls/options/size/static.HUMAN_READABLE.html
@@ -1,3 +1,3 @@
-HUMAN_READABLE in uu_ls::options::size - Rust
\ No newline at end of file
diff --git a/uu_ls/options/size/static.SI.html b/uu_ls/options/size/static.SI.html
index 3a3af6906..42b23f17f 100644
--- a/uu_ls/options/size/static.SI.html
+++ b/uu_ls/options/size/static.SI.html
@@ -1,3 +1,3 @@
-SI in uu_ls::options::size - Rust
\ No newline at end of file
diff --git a/uu_ls/options/sort/index.html b/uu_ls/options/sort/index.html
index 3b186bf19..2422d89df 100644
--- a/uu_ls/options/sort/index.html
+++ b/uu_ls/options/sort/index.html
@@ -1,4 +1,4 @@
-uu_ls::options::sort - Rust
\ No newline at end of file
diff --git a/uu_ls/options/sort/static.EXTENSION.html b/uu_ls/options/sort/static.EXTENSION.html
index 3f84db7ab..7686aa9c0 100644
--- a/uu_ls/options/sort/static.EXTENSION.html
+++ b/uu_ls/options/sort/static.EXTENSION.html
@@ -1,3 +1,3 @@
-EXTENSION in uu_ls::options::sort - Rust
\ No newline at end of file
diff --git a/uu_ls/options/sort/static.NONE.html b/uu_ls/options/sort/static.NONE.html
index 1a34c850a..4f20d51e9 100644
--- a/uu_ls/options/sort/static.NONE.html
+++ b/uu_ls/options/sort/static.NONE.html
@@ -1,3 +1,3 @@
-NONE in uu_ls::options::sort - Rust
\ No newline at end of file
diff --git a/uu_ls/options/sort/static.SIZE.html b/uu_ls/options/sort/static.SIZE.html
index 2a6bd2698..430515ee8 100644
--- a/uu_ls/options/sort/static.SIZE.html
+++ b/uu_ls/options/sort/static.SIZE.html
@@ -1,3 +1,3 @@
-SIZE in uu_ls::options::sort - Rust
\ No newline at end of file
diff --git a/uu_ls/options/sort/static.TIME.html b/uu_ls/options/sort/static.TIME.html
index 67a196d54..935e1465a 100644
--- a/uu_ls/options/sort/static.TIME.html
+++ b/uu_ls/options/sort/static.TIME.html
@@ -1,3 +1,3 @@
-TIME in uu_ls::options::sort - Rust
\ No newline at end of file
diff --git a/uu_ls/options/sort/static.VERSION.html b/uu_ls/options/sort/static.VERSION.html
index 2bbc67478..17057bf36 100644
--- a/uu_ls/options/sort/static.VERSION.html
+++ b/uu_ls/options/sort/static.VERSION.html
@@ -1,3 +1,3 @@
-VERSION in uu_ls::options::sort - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.AUTHOR.html b/uu_ls/options/static.AUTHOR.html
index 24987513c..3e4fb0352 100644
--- a/uu_ls/options/static.AUTHOR.html
+++ b/uu_ls/options/static.AUTHOR.html
@@ -1,3 +1,3 @@
-AUTHOR in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.COLOR.html b/uu_ls/options/static.COLOR.html
index 23ad7fa3f..668af5164 100644
--- a/uu_ls/options/static.COLOR.html
+++ b/uu_ls/options/static.COLOR.html
@@ -1,3 +1,3 @@
-COLOR in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.CONTEXT.html b/uu_ls/options/static.CONTEXT.html
new file mode 100644
index 000000000..681b6e261
--- /dev/null
+++ b/uu_ls/options/static.CONTEXT.html
@@ -0,0 +1,3 @@
+CONTEXT in uu_ls::options - Rust
+
+
\ No newline at end of file
diff --git a/uu_ls/options/static.DIRECTORY.html b/uu_ls/options/static.DIRECTORY.html
index ed2587f7d..f48793389 100644
--- a/uu_ls/options/static.DIRECTORY.html
+++ b/uu_ls/options/static.DIRECTORY.html
@@ -1,3 +1,3 @@
-DIRECTORY in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.FORMAT.html b/uu_ls/options/static.FORMAT.html
index 6e3256e53..5e6f0838b 100644
--- a/uu_ls/options/static.FORMAT.html
+++ b/uu_ls/options/static.FORMAT.html
@@ -1,3 +1,3 @@
-FORMAT in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.FULL_TIME.html b/uu_ls/options/static.FULL_TIME.html
index b4406e499..3958a7c8b 100644
--- a/uu_ls/options/static.FULL_TIME.html
+++ b/uu_ls/options/static.FULL_TIME.html
@@ -1,3 +1,3 @@
-FULL_TIME in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.HIDE.html b/uu_ls/options/static.HIDE.html
index 7d4568fa8..f2a30d6b1 100644
--- a/uu_ls/options/static.HIDE.html
+++ b/uu_ls/options/static.HIDE.html
@@ -1,3 +1,3 @@
-HIDE in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.HIDE_CONTROL_CHARS.html b/uu_ls/options/static.HIDE_CONTROL_CHARS.html
index 764fd02b0..f6cf68139 100644
--- a/uu_ls/options/static.HIDE_CONTROL_CHARS.html
+++ b/uu_ls/options/static.HIDE_CONTROL_CHARS.html
@@ -1,3 +1,3 @@
-HIDE_CONTROL_CHARS in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.IGNORE.html b/uu_ls/options/static.IGNORE.html
index c485deaa9..f24bf6c9e 100644
--- a/uu_ls/options/static.IGNORE.html
+++ b/uu_ls/options/static.IGNORE.html
@@ -1,3 +1,3 @@
-IGNORE in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.IGNORE_BACKUPS.html b/uu_ls/options/static.IGNORE_BACKUPS.html
index 96d6303d1..b84e40a89 100644
--- a/uu_ls/options/static.IGNORE_BACKUPS.html
+++ b/uu_ls/options/static.IGNORE_BACKUPS.html
@@ -1,3 +1,3 @@
-IGNORE_BACKUPS in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.INDICATOR_STYLE.html b/uu_ls/options/static.INDICATOR_STYLE.html
index 28fd2b5ed..16b1d3992 100644
--- a/uu_ls/options/static.INDICATOR_STYLE.html
+++ b/uu_ls/options/static.INDICATOR_STYLE.html
@@ -1,3 +1,3 @@
-INDICATOR_STYLE in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.INODE.html b/uu_ls/options/static.INODE.html
index 2906bf169..cc93836da 100644
--- a/uu_ls/options/static.INODE.html
+++ b/uu_ls/options/static.INODE.html
@@ -1,3 +1,3 @@
-INODE in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.NO_GROUP.html b/uu_ls/options/static.NO_GROUP.html
index 8b6145552..1b1139451 100644
--- a/uu_ls/options/static.NO_GROUP.html
+++ b/uu_ls/options/static.NO_GROUP.html
@@ -1,3 +1,3 @@
-NO_GROUP in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.PATHS.html b/uu_ls/options/static.PATHS.html
index ee23fb815..347bc8cfd 100644
--- a/uu_ls/options/static.PATHS.html
+++ b/uu_ls/options/static.PATHS.html
@@ -1,3 +1,3 @@
-PATHS in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.QUOTING_STYLE.html b/uu_ls/options/static.QUOTING_STYLE.html
index 7d02a78ec..91bb1113a 100644
--- a/uu_ls/options/static.QUOTING_STYLE.html
+++ b/uu_ls/options/static.QUOTING_STYLE.html
@@ -1,3 +1,3 @@
-QUOTING_STYLE in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.RECURSIVE.html b/uu_ls/options/static.RECURSIVE.html
index c2250c899..35e4aafac 100644
--- a/uu_ls/options/static.RECURSIVE.html
+++ b/uu_ls/options/static.RECURSIVE.html
@@ -1,3 +1,3 @@
-RECURSIVE in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.REVERSE.html b/uu_ls/options/static.REVERSE.html
index 1d39cbca3..07edb3fde 100644
--- a/uu_ls/options/static.REVERSE.html
+++ b/uu_ls/options/static.REVERSE.html
@@ -1,3 +1,3 @@
-REVERSE in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.SHOW_CONTROL_CHARS.html b/uu_ls/options/static.SHOW_CONTROL_CHARS.html
index c26022dcc..eb0fa21ca 100644
--- a/uu_ls/options/static.SHOW_CONTROL_CHARS.html
+++ b/uu_ls/options/static.SHOW_CONTROL_CHARS.html
@@ -1,3 +1,3 @@
-SHOW_CONTROL_CHARS in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.SORT.html b/uu_ls/options/static.SORT.html
index e21b05f8e..1e803360b 100644
--- a/uu_ls/options/static.SORT.html
+++ b/uu_ls/options/static.SORT.html
@@ -1,3 +1,3 @@
-SORT in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.TIME.html b/uu_ls/options/static.TIME.html
index a3b3d1bc0..68d9883f0 100644
--- a/uu_ls/options/static.TIME.html
+++ b/uu_ls/options/static.TIME.html
@@ -1,3 +1,3 @@
-TIME in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.TIME_STYLE.html b/uu_ls/options/static.TIME_STYLE.html
index 4eb017c33..168432b11 100644
--- a/uu_ls/options/static.TIME_STYLE.html
+++ b/uu_ls/options/static.TIME_STYLE.html
@@ -1,3 +1,3 @@
-TIME_STYLE in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/static.WIDTH.html b/uu_ls/options/static.WIDTH.html
index 0bc96637e..a0f18991d 100644
--- a/uu_ls/options/static.WIDTH.html
+++ b/uu_ls/options/static.WIDTH.html
@@ -1,3 +1,3 @@
-WIDTH in uu_ls::options - Rust
\ No newline at end of file
diff --git a/uu_ls/options/time/index.html b/uu_ls/options/time/index.html
index f90bf8900..b0443bf0e 100644
--- a/uu_ls/options/time/index.html
+++ b/uu_ls/options/time/index.html
@@ -1,4 +1,4 @@
-uu_ls::options::time - Rust
\ No newline at end of file
diff --git a/uu_ls/options/time/static.ACCESS.html b/uu_ls/options/time/static.ACCESS.html
index dae9491b0..d4f016a50 100644
--- a/uu_ls/options/time/static.ACCESS.html
+++ b/uu_ls/options/time/static.ACCESS.html
@@ -1,3 +1,3 @@
-ACCESS in uu_ls::options::time - Rust
\ No newline at end of file
diff --git a/uu_ls/options/time/static.CHANGE.html b/uu_ls/options/time/static.CHANGE.html
index 6c833ad30..0ec4be562 100644
--- a/uu_ls/options/time/static.CHANGE.html
+++ b/uu_ls/options/time/static.CHANGE.html
@@ -1,3 +1,3 @@
-CHANGE in uu_ls::options::time - Rust