@@ -157,6 +157,7 @@ pub struct Config {
157 #[serde(default)]
157 #[serde(default)]
158 pub search: SearchConfig,
158 pub search: SearchConfig,
159 pub lsp: LspConfig,
159 pub lsp: LspConfig,
160+ pub terminal: Option<TerminalConfig>,
160 /// Column numbers at which to draw the rulers. Default to `[]`, meaning no rulers.
161 /// Column numbers at which to draw the rulers. Default to `[]`, meaning no rulers.
161 pub rulers: Vec<u16>,
162 pub rulers: Vec<u16>,
162 #[serde(default)]
163 #[serde(default)]
@@ -167,6 +168,52 @@ pub struct Config {
167 pub color_modes: bool,
168 pub color_modes: bool,
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,
176+ #[serde(skip_serializing_if = "Vec::is_empty")]
177+ pub args: Vec<String>,
181+pub fn get_terminal_provider() -> Option<TerminalConfig> {
182+ use crate::clipboard::provider::command::exists;
185+ return Some(TerminalConfig {
186+ command: "wt".to_string(),
188+ "new-tab".to_string(),
189+ "--title".to_string(),
190+ "DEBUG".to_string(),
197+ return Some(TerminalConfig {
198+ command: "conhost".to_string(),
199+ args: vec!["cmd".to_string(), "/C".to_string()],
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};
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()],
170#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
217#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
171#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
218#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
172pub struct LspConfig {
219pub struct LspConfig {
@@ -497,6 +544,7 @@ impl Default for Config {
497 true_color: false,
544 true_color: false,
498 search: SearchConfig::default(),
545 search: SearchConfig::default(),
499 lsp: LspConfig::default(),
546 lsp: LspConfig::default(),
547+ terminal: get_terminal_provider(),
500 rulers: Vec::new(),
548 rulers: Vec::new(),
501 whitespace: WhitespaceConfig::default(),
549 whitespace: WhitespaceConfig::default(),
502 indent_guides: IndentGuidesConfig::default(),
550 indent_guides: IndentGuidesConfig::default(),