diff options
author | Blaž Hrastnik | 2022-08-22 01:11:04 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2022-08-22 01:11:04 +0000 |
commit | cb7615e0ed119f292eabdce784e4635247ed1eb1 (patch) | |
tree | daf3c7fdb0cfc8ef97f07400a7ba8227855fb7e7 /helix-view/src/handlers | |
parent | 7e330697e194bf7a32b59ac3adefbde308c1995c (diff) |
Make external terminal provider configurable
Fixes #1699
Diffstat (limited to 'helix-view/src/handlers')
-rw-r--r-- | helix-view/src/handlers/dap.rs | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/helix-view/src/handlers/dap.rs b/helix-view/src/handlers/dap.rs index 4d197680..e39584c3 100644 --- a/helix-view/src/handlers/dap.rs +++ b/helix-view/src/handlers/dap.rs @@ -5,7 +5,6 @@ use helix_dap::{self as dap, Client, Payload, Request, ThreadId}; use helix_lsp::block_on; use log::warn; use std::fmt::Write; -use std::io::ErrorKind; use std::path::PathBuf; #[macro_export] @@ -287,32 +286,32 @@ impl Editor { serde_json::from_value(request.arguments.unwrap_or_default()).unwrap(); // TODO: no unwrap - let process = if cfg!(windows) { - std::process::Command::new("wt") - .arg("new-tab") - .arg("--title") - .arg("DEBUG") - .arg("cmd") - .arg("/C") - .arg(arguments.args.join(" ")) - .spawn() - .unwrap_or_else(|error| match error.kind() { - ErrorKind::NotFound => std::process::Command::new("conhost") - .arg("cmd") - .arg("/C") - .arg(arguments.args.join(" ")) - .spawn() - .unwrap(), - // TODO replace the pretty print {:?} with a regular format {} - // when the MSRV is raised to 1.60.0 - e => panic!("Error to start debug console: {:?}", e), - }) - } else { - std::process::Command::new("tmux") - .arg("split-window") - .arg(arguments.args.join(" ")) - .spawn() - .unwrap() + let config = match self.config().terminal.clone() { + Some(config) => config, + None => { + self.set_error("No external terminal defined"); + return true; + } + }; + + // Re-borrowing debugger to avoid issues when loading config + let debugger = match self.debugger.as_mut() { + Some(debugger) => debugger, + None => return false, + }; + + let process = match std::process::Command::new(config.command) + .args(config.args) + .arg(arguments.args.join(" ")) + .spawn() + { + Ok(process) => process, + Err(err) => { + // TODO replace the pretty print {:?} with a regular format {} + // when the MSRV is raised to 1.60.0 + self.set_error(format!("Error starting external terminal: {:?}", err)); + return true; + } }; let _ = debugger |