@@ -157,6 +157,7 @@ pub struct Config {
157157 #[serde(default)]
158158 pub search: SearchConfig,
159159 pub lsp: LspConfig,
160+ pub terminal: Option<TerminalConfig>,
160161 /// Column numbers at which to draw the rulers. Default to `[]`, meaning no rulers.
161162 pub rulers: Vec<u16>,
162163 #[serde(default)]
@@ -167,6 +168,52 @@ pub struct Config {
167168 pub color_modes: bool,
168169}
169170
171+#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
172+#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
173+pub struct TerminalConfig {
174+ pub command: String,
175+ #[serde(default)]
176+ #[serde(skip_serializing_if = "Vec::is_empty")]
177+ pub args: Vec<String>,
178+}
179+
180+#[cfg(windows)]
181+pub fn get_terminal_provider() -> Option<TerminalConfig> {
182+ use crate::clipboard::provider::command::exists;
183+
184+ if exists("wt") {
185+ return Some(TerminalConfig {
186+ command: "wt".to_string(),
187+ args: vec![
188+ "new-tab".to_string(),
189+ "--title".to_string(),
190+ "DEBUG".to_string(),
191+ "cmd".to_string(),
192+ "/C".to_string(),
193+ ],
194+ });
195+ }
196+
197+ return Some(TerminalConfig {
198+ command: "conhost".to_string(),
199+ args: vec!["cmd".to_string(), "/C".to_string()],
200+ });
201+}
202+
203+#[cfg(not(any(windows, target_os = "wasm32")))]
204+pub fn get_terminal_provider() -> Option<TerminalConfig> {
205+ use crate::clipboard::provider::command::{env_var_is_set, exists};
206+
207+ if env_var_is_set("TMUX") && exists("tmux") {
208+ return Some(TerminalConfig {
209+ command: "tmux".to_string(),
210+ args: vec!["split-window".to_string()],
211+ });
212+ }
213+
214+ None
215+}
216+
170217#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
171218#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
172219pub struct LspConfig {
@@ -497,6 +544,7 @@ impl Default for Config {
497544 true_color: false,
498545 search: SearchConfig::default(),
499546 lsp: LspConfig::default(),
547+ terminal: get_terminal_provider(),
500548 rulers: Vec::new(),
501549 whitespace: WhitespaceConfig::default(),
502550 indent_guides: IndentGuidesConfig::default(),