on master help sign in
Make idle-timeout configurable
633b981Blaž Hrastnik
book/src/configuration.md+1
@@ -19,6 +19,7 @@ To override global configuration parameters, create a `config.toml` file located
19| `line-number` | Line number display (`absolute`, `relative`) | `absolute` |
19| `line-number` | Line number display (`absolute`, `relative`) | `absolute` |
20| `smart-case` | Enable smart case regex searching (case insensitive unless pattern contains upper case characters) | `true` |
20| `smart-case` | Enable smart case regex searching (case insensitive unless pattern contains upper case characters) | `true` |
21| `auto-pairs` | Enable automatic insertion of pairs to parenthese, brackets, etc. | `true` |
21| `auto-pairs` | Enable automatic insertion of pairs to parenthese, brackets, etc. | `true` |
22+| `idle-timeout` | Time in milliseconds since last keypress before idle timers trigger. Used for autocompletion, set to 0 for instant. | `400` |
22
23
23## LSP
24## LSP
24
25
helix-term/src/commands.rs+9−2
@@ -4130,7 +4130,7 @@ pub fn completion(cx: &mut Context) {
4130 };
4130 };
4131
4131
4132 if items.is_empty() {
4132 if items.is_empty() {
4133− editor.set_error("No completion available".to_string());
4133+ // editor.set_error("No completion available".to_string());
4134 return;
4134 return;
4135 }
4135 }
4136 let size = compositor.size();
4136 let size = compositor.size();
@@ -4138,7 +4138,14 @@ pub fn completion(cx: &mut Context) {
4138 .find(std::any::type_name::<ui::EditorView>())
4138 .find(std::any::type_name::<ui::EditorView>())
4139 .unwrap();
4139 .unwrap();
4140 if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
4140 if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
4141− ui.set_completion(editor, items, offset_encoding, start_offset, trigger_offset, size);
4141+ ui.set_completion(
4142+ editor,
4143+ items,
4144+ offset_encoding,
4145+ start_offset,
4146+ trigger_offset,
4147+ size,
4148+ );
4142 };
4149 };
4143 },
4150 },
4144 );
4151 );
helix-view/src/editor.rs+12
@@ -26,6 +26,14 @@ use helix_core::Position;
26
26
27use serde::Deserialize;
27use serde::Deserialize;
28
28
29+fn deserialize_duration_millis<'de, D>(deserializer: D) -> Result<Duration, D::Error>
30+where
31+ D: serde::Deserializer<'de>,
32+{
33+ let millis = u64::deserialize(deserializer)?;
34+ Ok(Duration::from_millis(millis))
35+}
36+
29#[derive(Debug, Clone, PartialEq, Deserialize)]
37#[derive(Debug, Clone, PartialEq, Deserialize)]
30#[serde(rename_all = "kebab-case", default)]
38#[serde(rename_all = "kebab-case", default)]
31pub struct Config {
39pub struct Config {
@@ -45,6 +53,9 @@ pub struct Config {
45 pub smart_case: bool,
53 pub smart_case: bool,
46 /// Automatic insertion of pairs to parentheses, brackets, etc. Defaults to true.
54 /// Automatic insertion of pairs to parentheses, brackets, etc. Defaults to true.
47 pub auto_pairs: bool,
55 pub auto_pairs: bool,
56+ /// Time in milliseconds since last keypress before idle timers trigger. Used for autocompletion, set to 0 for instant. Defaults to 400ms.
57+ #[serde(skip_serializing, deserialize_with = "deserialize_duration_millis")]
58+ pub idle_timeout: Duration,
48}
59}
49
60
50#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
61#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
@@ -72,6 +83,7 @@ impl Default for Config {
72 middle_click_paste: true,
83 middle_click_paste: true,
73 smart_case: true,
84 smart_case: true,
74 auto_pairs: true,
85 auto_pairs: true,
86+ idle_timeout: Duration::from_millis(400),
75 }
87 }
76 }
88 }
77}
89}