aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src/handlers
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/handlers
parent7e330697e194bf7a32b59ac3adefbde308c1995c (diff)
Make external terminal provider configurable
Fixes #1699
Diffstat (limited to 'helix-view/src/handlers')
-rw-r--r--helix-view/src/handlers/dap.rs53
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