aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src/editor.rs
diff options
context:
space:
mode:
authorBlaž Hrastnik2022-08-22 01:11:04 +0000
committerBlaž Hrastnik2022-08-22 01:11:04 +0000
commitcb7615e0ed119f292eabdce784e4635247ed1eb1 (patch)
treedaf3c7fdb0cfc8ef97f07400a7ba8227855fb7e7 /helix-view/src/editor.rs
parent7e330697e194bf7a32b59ac3adefbde308c1995c (diff)
Make external terminal provider configurable
Fixes #1699
Diffstat (limited to 'helix-view/src/editor.rs')
-rw-r--r--helix-view/src/editor.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index 18c2a343..a49fae00 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -157,6 +157,7 @@ pub struct Config {
#[serde(default)]
pub search: SearchConfig,
pub lsp: LspConfig,
+ pub terminal: Option<TerminalConfig>,
/// Column numbers at which to draw the rulers. Default to `[]`, meaning no rulers.
pub rulers: Vec<u16>,
#[serde(default)]
@@ -167,6 +168,52 @@ pub struct Config {
pub color_modes: bool,
}
+#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
+#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
+pub struct TerminalConfig {
+ pub command: String,
+ #[serde(default)]
+ #[serde(skip_serializing_if = "Vec::is_empty")]
+ pub args: Vec<String>,
+}
+
+#[cfg(windows)]
+pub fn get_terminal_provider() -> Option<TerminalConfig> {
+ use crate::clipboard::provider::command::exists;
+
+ if exists("wt") {
+ return Some(TerminalConfig {
+ command: "wt".to_string(),
+ args: vec![
+ "new-tab".to_string(),
+ "--title".to_string(),
+ "DEBUG".to_string(),
+ "cmd".to_string(),
+ "/C".to_string(),
+ ],
+ });
+ }
+
+ return Some(TerminalConfig {
+ command: "conhost".to_string(),
+ args: vec!["cmd".to_string(), "/C".to_string()],
+ });
+}
+
+#[cfg(not(any(windows, target_os = "wasm32")))]
+pub fn get_terminal_provider() -> Option<TerminalConfig> {
+ use crate::clipboard::provider::command::{env_var_is_set, exists};
+
+ if env_var_is_set("TMUX") && exists("tmux") {
+ return Some(TerminalConfig {
+ command: "tmux".to_string(),
+ args: vec!["split-window".to_string()],
+ });
+ }
+
+ None
+}
+
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
pub struct LspConfig {
@@ -497,6 +544,7 @@ impl Default for Config {
true_color: false,
search: SearchConfig::default(),
lsp: LspConfig::default(),
+ terminal: get_terminal_provider(),
rulers: Vec::new(),
whitespace: WhitespaceConfig::default(),
indent_guides: IndentGuidesConfig::default(),