From f018d5b57cec8890f0419ea3bf3bec325edfe225 Mon Sep 17 00:00:00 2001 From: gibbz00 Date: Tue, 27 Dec 2022 12:08:12 +0100 Subject: [PATCH] Infobox: Consistently place lowercase equivalents first This, along with previous commit reverts regression in #952 --- helix-term/src/keymap/keytrie.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/helix-term/src/keymap/keytrie.rs b/helix-term/src/keymap/keytrie.rs index 8020b6caafbf6..e49b33d501b1d 100644 --- a/helix-term/src/keymap/keytrie.rs +++ b/helix-term/src/keymap/keytrie.rs @@ -91,7 +91,7 @@ impl KeyTrie { // Add sorted conditional? // Add body as a keytrie field and reload it in keytrie merge? - // Make the shortest keyevents appear first + // Make the shortest keyevent appear first let mut sorted_body = body .iter() .map(|(key_events, description)| { @@ -102,6 +102,27 @@ impl KeyTrie { .collect::, &str)>>(); sorted_body.sort_unstable_by(|a, b| a.0[0].to_lowercase().cmp(&b.0[0].to_lowercase())); + // Consistently place lowercase before uppercase of the same letter. + if sorted_body.len() > 1 { + let mut x_index = 0; + let mut y_index = 1; + + while y_index < sorted_body.len() { + let x = &sorted_body[x_index].0[0]; + let y = &sorted_body[y_index].0[0]; + if x.to_lowercase() == y.to_lowercase() { + // Uppercase regarded as lower value. + if x < y { + let temp_holder = sorted_body[x_index].clone(); + sorted_body[x_index] = sorted_body[y_index].clone(); + sorted_body[y_index] = temp_holder; + } + } + x_index = y_index; + y_index += 1; + } + } + let stringified_key_events_body: Vec<(String, &str)> = sorted_body .iter() .map(|(key_events, description)| {