diff options
author | Clement Tsang <34804052+ClementTsang@users.noreply.github.com> | 2023-06-19 05:37:22 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-19 01:37:22 -0400 |
commit | 594e091a937e43397e06191783050fcefab2beaf (patch) | |
tree | 2b1c2aff94abf0b12a9a8afe109977ad9d7e5520 | |
parent | 22d0d49984d8c6cf51db697028b964618eed173c (diff) |
bug: fix arguments being unsorted (#1216)
clap v4 apparently changed it so arguments are not sorted by default
like before - this manually sorts the arguments beforehand to achieve
the same effect.
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | src/clap.rs | 178 |
2 files changed, 87 insertions, 95 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 819abcf7..49901965 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.9.3]/[0.10.0] - Unreleased +## Bug Fixes + +- [https://github.com/ClementTsang/bottom/pull/1216](https://github.com/ClementTsang/bottom/pull/1216): Fix arguments not being sorted alphabetically. + ## [0.9.2] - 2023-06-11 ## Bug Fixes diff --git a/src/clap.rs b/src/clap.rs index 36b4c0d8..cd159357 100644 --- a/src/clap.rs +++ b/src/clap.rs @@ -255,7 +255,8 @@ pub fn build_app() -> Command { .long_help( "Sets the location of the config file. Expects a config file in the TOML format. \ If it doesn't exist, one is created.", - ); + ) + .value_hint(ValueHint::AnyPath); // TODO: File an issue with manpage, it cannot render charts correctly. let color = Arg::new("color") @@ -270,29 +271,7 @@ pub fn build_app() -> Command { "nord", "nord-light", ])) - .hide_possible_values(true) - .help("Use a color scheme, use --help for info.") - .long_help( - "\ -Use a pre-defined color scheme. Currently supported values are: - -+------------------------------------------------------------+ -| default | -+------------------------------------------------------------+ -| default-light (default but for use with light backgrounds) | -+------------------------------------------------------------+ -| gruvbox (a bright theme with 'retro groove' colors) | -+------------------------------------------------------------+ -| gruvbox-light (gruvbox but for use with light backgrounds) | -+------------------------------------------------------------+ -| nord (an arctic, north-bluish color palette) | -+------------------------------------------------------------+ -| nord-light (nord but for use with light backgrounds) | -+------------------------------------------------------------+ - -Defaults to \"default\". -", - ); + .help("Use a pre-defined color scheme."); let mem_as_value = Arg::new("mem_as_value") .long("mem_as_value") @@ -410,8 +389,84 @@ use CPU (3) as the default instead. None => crate_version!(), }; - #[allow(unused_mut)] - let mut app = Command::new(crate_name!()) + let temperature_group = ArgGroup::new("TEMPERATURE_TYPE").args([ + kelvin.get_id(), + fahrenheit.get_id(), + celsius.get_id(), + ]); + + let mut args = [ + version, + kelvin, + fahrenheit, + celsius, + autohide_time, + basic, + case_sensitive, + process_command, + config_location, + color, + mem_as_value, + default_time_value, + default_widget_count, + default_widget_type, + disable_click, + dot_marker, + group, + hide_avg_cpu, + hide_table_gap, + hide_time, + show_table_scroll_position, + left_legend, + disable_advanced_kill, + rate, + regex, + time_delta, + tree, + network_use_bytes, + network_use_log, + network_use_binary_prefix, + current_usage, + unnormalized_cpu, + use_old_network_legend, + whole_word, + retention, + expanded_on_startup, + #[cfg(feature = "battery")] + { + Arg::new("battery") + .long("battery") + .action(ArgAction::SetTrue) + .help("Shows the battery widget.") + .long_help( + "Shows the battery widget in default or basic mode. No effect on custom layouts.", + ) + }, + #[cfg(feature = "gpu")] + { + Arg::new("enable_gpu_memory") + .long("enable_gpu_memory") + .action(ArgAction::SetTrue) + .help("Enable collecting and displaying GPU memory usage.") + }, + #[cfg(not(target_os = "windows"))] + { + Arg::new("enable_cache_memory") + .long("enable_cache_memory") + .action(ArgAction::SetTrue) + .help("Enable collecting and displaying cache and buffer memory.") + }, + ]; + + // Manually sort the arguments. + args.sort_by(|a, b| { + let a = a.get_long().unwrap_or(a.get_id().as_str()); + let b = b.get_long().unwrap_or(b.get_id().as_str()); + + a.cmp(b) + }); + + Command::new(crate_name!()) .version(VERSION) .author(crate_authors!()) .about(crate_description!()) @@ -419,75 +474,8 @@ use CPU (3) as the default instead. .override_usage(USAGE) .help_template(TEMPLATE) .disable_version_flag(true) - .arg(version) - .arg(kelvin) - .arg(fahrenheit) - .arg(celsius) - .group(ArgGroup::new("TEMPERATURE_TYPE").args(["kelvin", "fahrenheit", "celsius"])) - .arg(autohide_time) - .arg(basic) - .arg(case_sensitive) - .arg(process_command) - .arg(config_location) - .arg(color) - .arg(mem_as_value) - .arg(default_time_value) - .arg(default_widget_count) - .arg(default_widget_type) - .arg(disable_click) - .arg(dot_marker) - .arg(group) - .arg(hide_avg_cpu) - .arg(hide_table_gap) - .arg(hide_time) - .arg(show_table_scroll_position) - .arg(left_legend) - .arg(disable_advanced_kill) - .arg(rate) - .arg(regex) - .arg(time_delta) - .arg(tree) - .arg(network_use_bytes) - .arg(network_use_log) - .arg(network_use_binary_prefix) - .arg(current_usage) - .arg(unnormalized_cpu) - .arg(use_old_network_legend) - .arg(whole_word) - .arg(retention) - .arg(expanded_on_startup); - - #[cfg(feature = "battery")] - { - let battery = Arg::new("battery") - .long("battery") - .action(ArgAction::SetTrue) - .help("Shows the battery widget.") - .long_help( - "Shows the battery widget in default or basic mode. No effect on custom layouts.", - ); - app = app.arg(battery); - } - - #[cfg(feature = "gpu")] - { - let enable_gpu_memory = Arg::new("enable_gpu_memory") - .long("enable_gpu_memory") - .action(ArgAction::SetTrue) - .help("Enable collecting and displaying GPU memory usage."); - app = app.arg(enable_gpu_memory); - } - - #[cfg(not(target_os = "windows"))] - { - let cache = Arg::new("enable_cache_memory") - .long("enable_cache_memory") - .action(ArgAction::SetTrue) - .help("Enable collecting and displaying cache and buffer memory."); - app = app.arg(cache); - } - - app + .args(args) + .group(temperature_group) } #[cfg(test)] |