Revert "test"

This reverts commit 017a1702b3.
This commit is contained in:
ClementTsang 2024-01-10 23:35:54 -05:00
parent 017a1702b3
commit 23c09d3828
No known key found for this signature in database
GPG Key ID: DC3B7867D8D97095

View File

@ -109,79 +109,107 @@ macro_rules! args {
}; };
} }
fn general_args(cmd: Command) -> Command { /// Workaround trait to add builder methods.
let cmd = cmd.next_help_heading("General Options"); trait CommandBuilder {
fn general_args(self) -> Self;
let autohide_time = Arg::new("autohide_time") fn style_args(self) -> Self;
.long("autohide_time")
.action(ArgAction::SetTrue) fn temperature_args(self) -> Self;
.help("Temporarily shows the time scale in graphs.")
.long_help( fn process_args(self) -> Self;
"Automatically hides the time scale in graphs after being shown for \
fn cpu_args(self) -> Self;
fn mem_args(self) -> Self;
fn network_args(self) -> Self;
fn battery_args(self) -> Self;
fn gpu_args(self) -> Self;
fn other(self) -> Self;
fn add_args(self) -> Self;
}
impl CommandBuilder for Command {
fn general_args(self) -> Command {
let cmd = self.next_help_heading("General Options");
let autohide_time = Arg::new("autohide_time")
.long("autohide_time")
.action(ArgAction::SetTrue)
.help("Temporarily shows the time scale in graphs.")
.long_help(
"Automatically hides the time scale in graphs after being shown for \
a brief moment when zoomed in/out. If time is disabled via --hide_time \ a brief moment when zoomed in/out. If time is disabled via --hide_time \
then this will have no effect.", then this will have no effect.",
); );
let basic = Arg::new("basic") let basic = Arg::new("basic")
.short('b') .short('b')
.long("basic") .long("basic")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Hides graphs and uses a more basic look.") .help("Hides graphs and uses a more basic look.")
.long_help( .long_help(
"Hides graphs and uses a more basic look. Design is largely inspired by htop's.", "Hides graphs and uses a more basic look. Design is largely inspired by htop's.",
); );
let disable_click = Arg::new("disable_click") let disable_click = Arg::new("disable_click")
.long("disable_click") .long("disable_click")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Disables mouse clicks.") .help("Disables mouse clicks.")
.long_help("Disables mouse clicks from interacting with the program."); .long_help("Disables mouse clicks from interacting with the program.");
let dot_marker = Arg::new("dot_marker") let dot_marker = Arg::new("dot_marker")
.short('m') .short('m')
.long("dot_marker") .long("dot_marker")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Uses a dot marker for graphs.") .help("Uses a dot marker for graphs.")
.long_help("Uses a dot marker for graphs as opposed to the default braille marker."); .long_help("Uses a dot marker for graphs as opposed to the default braille marker.");
let hide_table_gap = Arg::new("hide_table_gap") let hide_table_gap = Arg::new("hide_table_gap")
.long("hide_table_gap") .long("hide_table_gap")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Hides spacing between table headers and entries.") .help("Hides spacing between table headers and entries.")
.long_help("Hides the spacing between table headers and entries."); .long_help("Hides the spacing between table headers and entries.");
let hide_time = Arg::new("hide_time") let hide_time = Arg::new("hide_time")
.long("hide_time") .long("hide_time")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Hides the time scale.") .help("Hides the time scale.")
.long_help("Completely hides the time scale from being shown."); .long_help("Completely hides the time scale from being shown.");
let left_legend = Arg::new("left_legend") let left_legend = Arg::new("left_legend")
.short('l') .short('l')
.long("left_legend") .long("left_legend")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Puts the CPU chart legend to the left side.") .help("Puts the CPU chart legend to the left side.")
.long_help("Puts the CPU chart legend to the left side rather than the right side."); .long_help("Puts the CPU chart legend to the left side rather than the right side.");
let show_table_scroll_position = Arg::new("show_table_scroll_position") let show_table_scroll_position = Arg::new("show_table_scroll_position")
.long("show_table_scroll_position") .long("show_table_scroll_position")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Shows the scroll position tracker in table widgets.") .help("Shows the scroll position tracker in table widgets.")
.long_help("Shows the list scroll position tracker in the widget title for table widgets."); .long_help(
"Shows the list scroll position tracker in the widget title for table widgets.",
);
let config_location = Arg::new("config_location") let config_location = Arg::new("config_location")
.short('C') .short('C')
.long("config") .long("config")
.action(ArgAction::Set) .action(ArgAction::Set)
.value_name("CONFIG PATH") .value_name("CONFIG PATH")
.help("Sets the location of the config file.") .help("Sets the location of the config file.")
.long_help( .long_help(
"Sets the location of the config file. Expects a config file in the TOML format. \ "Sets the location of the config file. Expects a config file in the TOML format. \
If it doesn't exist, one is created.", If it doesn't exist, one is created.",
) )
.value_hint(ValueHint::AnyPath); .value_hint(ValueHint::AnyPath);
let default_time_value = Arg::new("default_time_value") let default_time_value = Arg::new("default_time_value")
.short('t') .short('t')
.long("default_time_value") .long("default_time_value")
.action(ArgAction::Set) .action(ArgAction::Set)
@ -191,15 +219,15 @@ fn general_args(cmd: Command) -> Command {
"Default time value for graphs. Takes a number in milliseconds or a human duration (e.g. 60s). The minimum time is 30s, and the default is 60s.", "Default time value for graphs. Takes a number in milliseconds or a human duration (e.g. 60s). The minimum time is 30s, and the default is 60s.",
); );
// TODO: Charts are broken in the manpage // TODO: Charts are broken in the manpage
let default_widget_count = Arg::new("default_widget_count") let default_widget_count = Arg::new("default_widget_count")
.long("default_widget_count") .long("default_widget_count")
.action(ArgAction::Set) .action(ArgAction::Set)
.requires_all(["default_widget_type"]) .requires_all(["default_widget_type"])
.value_name("INT") .value_name("INT")
.help("Sets the n'th selected widget type as the default.") .help("Sets the n'th selected widget type as the default.")
.long_help( .long_help(
"\ "\
Sets the n'th selected widget type to use as the default widget. Sets the n'th selected widget type to use as the default widget.
Requires 'default_widget_type' to also be set, and defaults to 1. Requires 'default_widget_type' to also be set, and defaults to 1.
@ -216,23 +244,23 @@ And we set our default widget type to 'CPU'. If we set
the default widget. If we set '--default_widget_count 3', it would the default widget. If we set '--default_widget_count 3', it would
use CPU (3) as the default instead. use CPU (3) as the default instead.
", ",
); );
let default_widget_type = Arg::new("default_widget_type") let default_widget_type = Arg::new("default_widget_type")
.long("default_widget_type") .long("default_widget_type")
.action(ArgAction::Set) .action(ArgAction::Set)
.value_name("WIDGET TYPE") .value_name("WIDGET TYPE")
.help("Sets the default widget type, use --help for info.") .help("Sets the default widget type, use --help for info.")
.long_help(DEFAULT_WIDGET_TYPE_STR); .long_help(DEFAULT_WIDGET_TYPE_STR);
let expanded_on_startup = Arg::new("expanded_on_startup") let expanded_on_startup = Arg::new("expanded_on_startup")
.short('e') .short('e')
.long("expanded") .long("expanded")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Expand the default widget upon starting the app.") .help("Expand the default widget upon starting the app.")
.long_help("Expand the default widget upon starting the app. Same as pressing \"e\" inside the app. Use with \"default_widget_type\" and \"default_widget_count\" to select desired expanded widget. This flag has no effect in basic mode (--basic)"); .long_help("Expand the default widget upon starting the app. Same as pressing \"e\" inside the app. Use with \"default_widget_type\" and \"default_widget_count\" to select desired expanded widget. This flag has no effect in basic mode (--basic)");
let rate = Arg::new("rate") let rate = Arg::new("rate")
.short('r') .short('r')
.long("rate") .long("rate")
.action(ArgAction::Set) .action(ArgAction::Set)
@ -240,7 +268,7 @@ use CPU (3) as the default instead.
.help("Sets the data refresh rate.") .help("Sets the data refresh rate.")
.long_help("Sets the data refresh rate. Takes a number in milliseconds or a human duration (e.g. 5s). The minimum is 250ms, and defaults to 1000ms. Smaller values may take more computer resources."); .long_help("Sets the data refresh rate. Takes a number in milliseconds or a human duration (e.g. 5s). The minimum is 250ms, and defaults to 1000ms. Smaller values may take more computer resources.");
let time_delta = Arg::new("time_delta") let time_delta = Arg::new("time_delta")
.short('d') .short('d')
.long("time_delta") .long("time_delta")
.action(ArgAction::Set) .action(ArgAction::Set)
@ -248,53 +276,55 @@ use CPU (3) as the default instead.
.help("The amount of time changed upon zooming.") .help("The amount of time changed upon zooming.")
.long_help("The amount of time changed when zooming in/out. Takes a number in milliseconds or a human duration (e.g. 30s). The minimum is 1s, and defaults to 15s."); .long_help("The amount of time changed when zooming in/out. Takes a number in milliseconds or a human duration (e.g. 30s). The minimum is 1s, and defaults to 15s.");
let retention = Arg::new("retention") let retention = Arg::new("retention")
.long("retention") .long("retention")
.action(ArgAction::Set) .action(ArgAction::Set)
.value_name("TIME") .value_name("TIME")
.help("The timespan of data stored.") .help("The timespan of data stored.")
.long_help("How much data is stored at once in terms of time. Takes a number in milliseconds or a human duration (e.g. 20m), with a minimum of 1 minute. Note higher values will take up more memory. Defaults to 10 minutes."); .long_help("How much data is stored at once in terms of time. Takes a number in milliseconds or a human duration (e.g. 20m), with a minimum of 1 minute. Note higher values will take up more memory. Defaults to 10 minutes.");
cmd.args(args![ let args = args![
autohide_time, autohide_time,
basic, basic,
disable_click, disable_click,
dot_marker, dot_marker,
hide_table_gap, hide_table_gap,
hide_time, hide_time,
left_legend, left_legend,
show_table_scroll_position, show_table_scroll_position,
config_location, config_location,
default_time_value, default_time_value,
default_widget_count, default_widget_count,
default_widget_type, default_widget_type,
expanded_on_startup, expanded_on_startup,
rate, rate,
time_delta, time_delta,
retention, retention,
]) ];
}
fn style_args(cmd: Command) -> Command { cmd.args(args)
let cmd = cmd.next_help_heading("Style Options"); }
// TODO: File an issue with manpage, it cannot render charts correctly. fn style_args(self) -> Command {
let color = Arg::new("color") let cmd = self.next_help_heading("Style Options");
.long("color")
.action(ArgAction::Set) // TODO: File an issue with manpage, it cannot render charts correctly.
.value_name("COLOR SCHEME") let color = Arg::new("color")
.value_parser(PossibleValuesParser::new([ .long("color")
"default", .action(ArgAction::Set)
"default-light", .value_name("COLOR SCHEME")
"gruvbox", .value_parser(PossibleValuesParser::new([
"gruvbox-light", "default",
"nord", "default-light",
"nord-light", "gruvbox",
])) "gruvbox-light",
.hide_possible_values(true) "nord",
.help("Use a color scheme, use --help for info.") "nord-light",
.long_help( ]))
"\ .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: Use a pre-defined color scheme. Currently supported values are:
+------------------------------------------------------------+ +------------------------------------------------------------+
| default | | default |
@ -311,61 +341,62 @@ Use a pre-defined color scheme. Currently supported values are:
+------------------------------------------------------------+ +------------------------------------------------------------+
Defaults to \"default\". Defaults to \"default\".
", ",
); );
cmd.arg(color) cmd.arg(color)
} }
fn temperature_args(cmd: Command) -> Command { fn temperature_args(self) -> Command {
let cmd = cmd.next_help_heading("Temperature Options"); let cmd = self.next_help_heading("Temperature Options");
let celsius = Arg::new("celsius") let celsius = Arg::new("celsius")
.short('c') .short('c')
.long("celsius") .long("celsius")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Use Celsius as the temperature unit.") .help("Use Celsius as the temperature unit.")
.long_help("Use Celsius as the temperature unit. This is the default option."); .long_help("Use Celsius as the temperature unit. This is the default option.");
let fahrenheit = Arg::new("fahrenheit") let fahrenheit = Arg::new("fahrenheit")
.short('f') .short('f')
.long("fahrenheit") .long("fahrenheit")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Use Fahrenheit as the temperature unit."); .help("Use Fahrenheit as the temperature unit.");
let kelvin = Arg::new("kelvin") let kelvin = Arg::new("kelvin")
.short('k') .short('k')
.long("kelvin") .long("kelvin")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Use Kelvin as the temperature unit."); .help("Use Kelvin as the temperature unit.");
let temperature_group = ArgGroup::new("TEMPERATURE_TYPE").args([ let temperature_group = ArgGroup::new("TEMPERATURE_TYPE").args([
celsius.get_id(), celsius.get_id(),
fahrenheit.get_id(), fahrenheit.get_id(),
kelvin.get_id(), kelvin.get_id(),
]); ]);
cmd.args(args![celsius, fahrenheit, kelvin]) let args = args![celsius, fahrenheit, kelvin];
.group(temperature_group)
}
fn process_args(cmd: Command) -> Command { cmd.args(args).group(temperature_group)
let cmd = cmd.next_help_heading("Process Options"); }
let case_sensitive = Arg::new("case_sensitive") fn process_args(self) -> Command {
.short('S') let cmd = self.next_help_heading("Process Options");
.long("case_sensitive")
.action(ArgAction::SetTrue)
.help("Enables case sensitivity by default.")
.long_help("When searching for a process, enables case sensitivity by default.");
let current_usage = Arg::new("current_usage") let case_sensitive = Arg::new("case_sensitive")
.short('S')
.long("case_sensitive")
.action(ArgAction::SetTrue)
.help("Enables case sensitivity by default.")
.long_help("When searching for a process, enables case sensitivity by default.");
let current_usage = Arg::new("current_usage")
.short('u') .short('u')
.long("current_usage") .long("current_usage")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Sets process CPU% to be based on current CPU%.") .help("Sets process CPU% to be based on current CPU%.")
.long_help("Sets process CPU% usage to be based on the current system CPU% usage rather than total CPU usage."); .long_help("Sets process CPU% usage to be based on the current system CPU% usage rather than total CPU usage.");
let unnormalized_cpu = Arg::new("unnormalized_cpu") let unnormalized_cpu = Arg::new("unnormalized_cpu")
.short('n') .short('n')
.long("unnormalized_cpu") .long("unnormalized_cpu")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
@ -374,106 +405,108 @@ fn process_args(cmd: Command) -> Command {
"Shows all process CPU% usage without averaging over the number of CPU cores in the system.", "Shows all process CPU% usage without averaging over the number of CPU cores in the system.",
); );
let group_processes = Arg::new("group_processes") let group_processes = Arg::new("group_processes")
.short('g') .short('g')
.long("group_processes") .long("group_processes")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Groups processes with the same name by default.") .help("Groups processes with the same name by default.")
.long_help("Groups processes with the same name by default."); .long_help("Groups processes with the same name by default.");
let process_command = Arg::new("process_command") let process_command = Arg::new("process_command")
.long("process_command") .long("process_command")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Show processes as their commands by default.") .help("Show processes as their commands by default.")
.long_help("Show processes as their commands by default in the process widget."); .long_help("Show processes as their commands by default in the process widget.");
let regex = Arg::new("regex") let regex = Arg::new("regex")
.short('R') .short('R')
.long("regex") .long("regex")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Enables regex by default.") .help("Enables regex by default.")
.long_help("When searching for a process, enables regex by default."); .long_help("When searching for a process, enables regex by default.");
let disable_advanced_kill = Arg::new("disable_advanced_kill") let disable_advanced_kill = Arg::new("disable_advanced_kill")
.long("disable_advanced_kill") .long("disable_advanced_kill")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Hides advanced process killing.") .help("Hides advanced process killing.")
.long_help("Hides advanced options to stop a process on Unix-like systems. The only option shown is 15 (TERM)."); .long_help("Hides advanced options to stop a process on Unix-like systems. The only option shown is 15 (TERM).");
let whole_word = Arg::new("whole_word") let whole_word = Arg::new("whole_word")
.short('W') .short('W')
.long("whole_word") .long("whole_word")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Enables whole-word matching by default.") .help("Enables whole-word matching by default.")
.long_help( .long_help(
"When searching for a process, return results that match the entire query by default.", "When searching for a process, return results that match the entire query by default.",
); );
let tree = Arg::new("tree") let tree = Arg::new("tree")
.short('T') .short('T')
.long("tree") .long("tree")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Defaults the process widget be in tree mode.") .help("Defaults the process widget be in tree mode.")
.long_help("Defaults to showing the process widget in tree mode."); .long_help("Defaults to showing the process widget in tree mode.");
let args = args![ let args = args![
case_sensitive, case_sensitive,
current_usage, current_usage,
unnormalized_cpu, unnormalized_cpu,
group_processes, group_processes,
process_command, process_command,
regex, regex,
whole_word, whole_word,
disable_advanced_kill, disable_advanced_kill,
tree, tree,
]; ];
cmd.args(args) cmd.args(args)
} }
fn cpu_args(cmd: Command) -> Command { fn cpu_args(self) -> Command {
let cmd = cmd.next_help_heading("CPU Options"); let cmd = self.next_help_heading("CPU Options");
let hide_avg_cpu = Arg::new("hide_avg_cpu") let hide_avg_cpu = Arg::new("hide_avg_cpu")
.short('a') .short('a')
.long("hide_avg_cpu") .long("hide_avg_cpu")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Hides the average CPU usage.") .help("Hides the average CPU usage.")
.long_help("Hides the average CPU usage from being shown."); .long_help("Hides the average CPU usage from being shown.");
// let default_avg_cpu = Arg::new(""); // let default_avg_cpu = Arg::new("");
cmd.args(args![hide_avg_cpu]) let args = args![hide_avg_cpu];
}
fn mem_args(cmd: Command) -> Command { cmd.args(args)
let cmd = cmd.next_help_heading("Memory Options"); }
let mem_as_value = Arg::new("mem_as_value") fn mem_args(self) -> Command {
let cmd = self.next_help_heading("Memory Options");
let mem_as_value = Arg::new("mem_as_value")
.long("mem_as_value") .long("mem_as_value")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Defaults to showing process memory usage by value.") .help("Defaults to showing process memory usage by value.")
.long_help("Defaults to showing process memory usage by value. Otherwise, it defaults to showing it by percentage."); .long_help("Defaults to showing process memory usage by value. Otherwise, it defaults to showing it by percentage.");
#[cfg(not(target_os = "windows"))] #[cfg(not(target_os = "windows"))]
{ {
let enable_cache_memory = Arg::new("enable_cache_memory") let enable_cache_memory = Arg::new("enable_cache_memory")
.long("enable_cache_memory") .long("enable_cache_memory")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Enable collecting and displaying cache and buffer memory."); .help("Enable collecting and displaying cache and buffer memory.");
cmd.args(args![mem_as_value, enable_cache_memory]) cmd.args([mem_as_value, enable_cache_memory])
}
#[cfg(target_os = "windows")]
{
cmd.arg(mem_as_value)
}
} }
#[cfg(target_os = "windows")]
{
cmd.arg(mem_as_value)
}
}
fn network_args(cmd: Command) -> Command { fn network_args(self) -> Command {
let cmd = cmd.next_help_heading("Network Options"); let cmd = self.next_help_heading("Network Options");
let use_old_network_legend = Arg::new("use_old_network_legend") let use_old_network_legend = Arg::new("use_old_network_legend")
.long("use_old_network_legend") .long("use_old_network_legend")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("DEPRECATED - uses a separate network legend.") .help("DEPRECATED - uses a separate network legend.")
@ -482,19 +515,21 @@ fn network_args(cmd: Command) -> Command {
tested anymore and could be broken.", tested anymore and could be broken.",
); );
let network_use_bytes = Arg::new("network_use_bytes") let network_use_bytes = Arg::new("network_use_bytes")
.long("network_use_bytes") .long("network_use_bytes")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Displays the network widget using bytes.") .help("Displays the network widget using bytes.")
.long_help("Displays the network widget using bytes. Defaults to bits."); .long_help("Displays the network widget using bytes. Defaults to bits.");
let network_use_log = Arg::new("network_use_log") let network_use_log = Arg::new("network_use_log")
.long("network_use_log") .long("network_use_log")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Displays the network widget with a log scale.") .help("Displays the network widget with a log scale.")
.long_help("Displays the network widget with a log scale. Defaults to a non-log scale."); .long_help(
"Displays the network widget with a log scale. Defaults to a non-log scale.",
);
let network_use_binary_prefix = Arg::new("network_use_binary_prefix") let network_use_binary_prefix = Arg::new("network_use_binary_prefix")
.long("network_use_binary_prefix") .long("network_use_binary_prefix")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Displays the network widget with binary prefixes.") .help("Displays the network widget with binary prefixes.")
@ -502,20 +537,22 @@ fn network_args(cmd: Command) -> Command {
"Displays the network widget with binary prefixes (i.e. kibibits, mebibits) rather than a decimal prefix (i.e. kilobits, megabits). Defaults to decimal prefixes.", "Displays the network widget with binary prefixes (i.e. kibibits, mebibits) rather than a decimal prefix (i.e. kilobits, megabits). Defaults to decimal prefixes.",
); );
cmd.args(args![ let args = args![
use_old_network_legend, use_old_network_legend,
network_use_bytes, network_use_bytes,
network_use_log, network_use_log,
network_use_binary_prefix, network_use_binary_prefix,
]) ];
}
fn battery_args(cmd: Command) -> Command { cmd.args(args)
#[cfg(feature = "battery")] }
{
let cmd = cmd.next_help_heading("Battery Options");
let battery = Arg::new("battery") fn battery_args(self) -> Command {
#[cfg(feature = "battery")]
{
let cmd = self.next_help_heading("Battery Options");
let battery = Arg::new("battery")
.long("battery") .long("battery")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help("Shows the battery widget.") .help("Shows the battery widget.")
@ -523,50 +560,64 @@ fn battery_args(cmd: Command) -> Command {
"Shows the battery widget in default or basic mode. No effect on custom layouts.", "Shows the battery widget in default or basic mode. No effect on custom layouts.",
); );
cmd.arg(battery) cmd.arg(battery)
}
#[cfg(not(feature = "battery"))]
{
self
}
} }
#[cfg(not(feature = "battery"))]
{ fn gpu_args(self) -> Command {
cmd #[cfg(feature = "gpu")]
{
let cmd = self.next_help_heading("GPU Options");
let enable_gpu = Arg::new("enable_gpu")
.long("enable_gpu")
.action(ArgAction::SetTrue)
.help("Enable collecting and displaying GPU usage.");
cmd.arg(enable_gpu)
}
#[cfg(not(feature = "gpu"))]
{
self
}
} }
}
fn gpu_args(cmd: Command) -> Command { fn other(self) -> Command {
#[cfg(feature = "gpu")] let cmd = self.next_help_heading("Other Options");
{
let cmd = cmd.next_help_heading("GPU Options");
let enable_gpu = Arg::new("enable_gpu") let help = Arg::new("help")
.long("enable_gpu") .short('h')
.action(ArgAction::SetTrue) .long("help")
.help("Enable collecting and displaying GPU usage."); .action(ArgAction::Help)
.help("Prints help (see more with '--help').");
cmd.arg(enable_gpu) let version = Arg::new("version")
.short('V')
.long("version")
.action(ArgAction::Version)
.help("Prints version information.");
cmd.args([help, version])
} }
#[cfg(not(feature = "gpu"))]
{ fn add_args(self) -> Self {
cmd self.general_args()
.style_args()
.temperature_args()
.process_args()
.cpu_args()
.mem_args()
.network_args()
.battery_args()
.gpu_args()
.other()
} }
} }
fn other_args(cmd: Command) -> Command {
let cmd = cmd.next_help_heading("Other Options");
let help = Arg::new("help")
.short('h')
.long("help")
.action(ArgAction::Help)
.help("Prints help (see more with '--help').");
let version = Arg::new("version")
.short('V')
.long("version")
.action(ArgAction::Version)
.help("Prints version information.");
cmd.args([help, version])
}
pub fn build_app() -> Command { pub fn build_app() -> Command {
const TEMPLATE: &str = include_str!("./args.template"); const TEMPLATE: &str = include_str!("./args.template");
const USAGE: &str = "btm [OPTIONS]"; const USAGE: &str = "btm [OPTIONS]";
@ -575,7 +626,7 @@ pub fn build_app() -> Command {
None => crate_version!(), None => crate_version!(),
}; };
let cmd = Command::new(crate_name!()) Command::new(crate_name!())
.author(crate_authors!()) .author(crate_authors!())
.about(crate_description!()) .about(crate_description!())
.disable_help_flag(true) .disable_help_flag(true)
@ -583,21 +634,8 @@ pub fn build_app() -> Command {
.color(ColorChoice::Auto) .color(ColorChoice::Auto)
.help_template(TEMPLATE) .help_template(TEMPLATE)
.override_usage(USAGE) .override_usage(USAGE)
.version(VERSION); .version(VERSION)
.add_args()
let cmd = general_args(cmd);
let cmd = style_args(cmd);
let cmd = temperature_args(cmd);
let cmd = process_args(cmd);
let cmd = cpu_args(cmd);
let cmd = mem_args(cmd);
let cmd = network_args(cmd);
let cmd = battery_args(cmd);
let cmd = gpu_args(cmd);
let cmd = other_args(cmd);
#[allow(clippy::let_and_return)]
cmd
} }
#[cfg(test)] #[cfg(test)]