menu: finish error handline

This commit is contained in:
dtb
2026-02-01 10:04:17 -07:00
parent 50c0c08242
commit 2046b46340

24
menu.rs
View File

@@ -59,7 +59,7 @@ fn print_entries(entries: &[Entry]) {
eprintln!(""); eprintln!("");
for (index, entry) in entries.iter().enumerate() { for (index, entry) in entries.iter().enumerate() {
eprint!( eprintln!(
"[{:>index_len$}]: {}", "[{:>index_len$}]: {}",
index + 1, index + 1,
entry.text, entry.text,
@@ -82,9 +82,7 @@ fn main() -> ExitCode {
} }
Ok(file) => Box::new(BufReader::new(file)), Ok(file) => Box::new(BufReader::new(file)),
} }
} else { } else { Box::new(io::stdin().lock()) };
Box::new(io::stdin().lock())
};
let user_input: Box<dyn BufRead> = if argv.len() <= 1 { let user_input: Box<dyn BufRead> = if argv.len() <= 1 {
match File::open("/dev/tty") { match File::open("/dev/tty") {
Err(e) => { Err(e) => {
@@ -92,9 +90,7 @@ fn main() -> ExitCode {
} }
Ok(file) => Box::new(BufReader::new(file)), Ok(file) => Box::new(BufReader::new(file)),
} }
} else { } else { Box::new(io::stdin().lock()) }; // ...Oops! I did it again.
Box::new(io::stdin().lock())
}; // ...Oops! I did it again.
// Parser // Parser
{ {
@@ -114,11 +110,11 @@ fn main() -> ExitCode {
} }
} }
State::Text => { State::Text => {
entry.text = line.clone() + "\n"; entry.text = line.clone();
state = State::Attributes; state = State::Attributes;
} }
State::Attributes => { State::Attributes => {
entry.attr = line.clone() + "\n"; entry.attr = line.clone();
state = State::Content; state = State::Content;
} }
State::Content => match line.chars().next() { State::Content => match line.chars().next() {
@@ -160,10 +156,11 @@ fn main() -> ExitCode {
if line != "" { if line != "" {
match line.parse::<usize>() { match line.parse::<usize>() {
Err(e) => { Err(e) => {
return error(&argv[0], &line, &e); eprintln!("{}: Could not parse selection (try 0..{})",
argv[0], entries.len());
} }
Ok(n) => { Ok(n) => {
if n != 0 { if n != 0 && n <= entries.len() {
match Command::new("sh") match Command::new("sh")
.arg("-c") .arg("-c")
.arg(entries[n - 1].cont.clone()) .arg(entries[n - 1].cont.clone())
@@ -177,8 +174,9 @@ fn main() -> ExitCode {
Ok(_) => { print_entries(&entries); } Ok(_) => { print_entries(&entries); }
}, },
} }
} } else if n > entries.len() {
if n == 0 || exit_on_selection { eprintln!("{}: Selection out of range", argv[0]);
} else if n == 0 || exit_on_selection {
return ExitCode::SUCCESS; return ExitCode::SUCCESS;
} }
} }