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