menu: finish error handline
This commit is contained in:
24
menu.rs
24
menu.rs
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user