aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/configuration.md1
-rw-r--r--helix-term/src/commands.rs11
-rw-r--r--helix-view/src/editor.rs12
3 files changed, 22 insertions, 2 deletions
diff --git a/book/src/configuration.md b/book/src/configuration.md
index 60b12bfd..f30146dd 100644
--- a/book/src/configuration.md
+++ b/book/src/configuration.md
@@ -19,6 +19,7 @@ To override global configuration parameters, create a `config.toml` file located
| `line-number` | Line number display (`absolute`, `relative`) | `absolute` |
| `smart-case` | Enable smart case regex searching (case insensitive unless pattern contains upper case characters) | `true` |
| `auto-pairs` | Enable automatic insertion of pairs to parenthese, brackets, etc. | `true` |
+| `idle-timeout` | Time in milliseconds since last keypress before idle timers trigger. Used for autocompletion, set to 0 for instant. | `400` |
## LSP
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 3798c99a..f005e376 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -4130,7 +4130,7 @@ pub fn completion(cx: &mut Context) {
};
if items.is_empty() {
- editor.set_error("No completion available".to_string());
+ // editor.set_error("No completion available".to_string());
return;
}
let size = compositor.size();
@@ -4138,7 +4138,14 @@ pub fn completion(cx: &mut Context) {
.find(std::any::type_name::<ui::EditorView>())
.unwrap();
if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
- ui.set_completion(editor, items, offset_encoding, start_offset, trigger_offset, size);
+ ui.set_completion(
+ editor,
+ items,
+ offset_encoding,
+ start_offset,
+ trigger_offset,
+ size,
+ );
};
},
);
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index 5362acc8..5af6dbf3 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -26,6 +26,14 @@ use helix_core::Position;
use serde::Deserialize;
+fn deserialize_duration_millis<'de, D>(deserializer: D) -> Result<Duration, D::Error>
+where
+ D: serde::Deserializer<'de>,
+{
+ let millis = u64::deserialize(deserializer)?;
+ Ok(Duration::from_millis(millis))
+}
+
#[derive(Debug, Clone, PartialEq, Deserialize)]
#[serde(rename_all = "kebab-case", default)]
pub struct Config {
@@ -45,6 +53,9 @@ pub struct Config {
pub smart_case: bool,
/// Automatic insertion of pairs to parentheses, brackets, etc. Defaults to true.
pub auto_pairs: bool,
+ /// Time in milliseconds since last keypress before idle timers trigger. Used for autocompletion, set to 0 for instant. Defaults to 400ms.
+ #[serde(skip_serializing, deserialize_with = "deserialize_duration_millis")]
+ pub idle_timeout: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
@@ -72,6 +83,7 @@ impl Default for Config {
middle_click_paste: true,
smart_case: true,
auto_pairs: true,
+ idle_timeout: Duration::from_millis(400),
}
}
}