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!("");
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user