mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-31 12:21:19 -03:00
reader handle_completions(): remove code duplication
We fail to flash the command line if we filter out completions due to !reader_can_replace. Fix that and de-duplicate the logic
This commit is contained in:
@@ -6660,23 +6660,6 @@ fn try_insert(&mut self, c: Completion, tok: &wstr, token_range: Range<usize>) {
|
||||
fn handle_completions(&mut self, token_range: Range<usize>, mut comp: Vec<Completion>) -> bool {
|
||||
let tok = self.command_line.text()[token_range.clone()].to_owned();
|
||||
|
||||
// Check trivial cases.
|
||||
let len = comp.len();
|
||||
if len == 0 {
|
||||
// No suitable completions found, flash screen and return.
|
||||
if token_range.is_empty() {
|
||||
self.flash(0..self.command_line.len());
|
||||
} else {
|
||||
self.flash(token_range);
|
||||
}
|
||||
return false;
|
||||
} else if len == 1 {
|
||||
// Exactly one suitable completion found - insert it.
|
||||
let c = std::mem::take(&mut comp[0]);
|
||||
self.try_insert(c, &tok, token_range);
|
||||
return true;
|
||||
}
|
||||
|
||||
comp.retain({
|
||||
let best_rank = comp.iter().map(|c| c.rank()).min().unwrap_or(u32::MAX);
|
||||
move |c| {
|
||||
@@ -6698,10 +6681,18 @@ fn handle_completions(&mut self, token_range: Range<usize>, mut comp: Vec<Comple
|
||||
}
|
||||
}
|
||||
|
||||
if comp.len() == 1 {
|
||||
// After sorting and stuff only one completion is left, use it.
|
||||
let len = comp.len();
|
||||
if len == 0 {
|
||||
// No suitable completions found, flash screen and return.
|
||||
if token_range.is_empty() {
|
||||
self.flash(0..self.command_line.len());
|
||||
} else {
|
||||
self.flash(token_range);
|
||||
}
|
||||
return false;
|
||||
} else if len == 1 {
|
||||
// Exactly one suitable completion found - insert it.
|
||||
let c = std::mem::take(&mut comp[0]);
|
||||
|
||||
self.try_insert(c, &tok, token_range);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user