mirror of https://github.com/helix-editor/helix
parent
7e330697e1
commit
cb7615e0ed
|
@ -139,7 +139,7 @@ pub fn get_clipboard_provider() -> Box<dyn ClipboardProvider> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mod provider {
|
pub mod provider {
|
||||||
use super::{ClipboardProvider, ClipboardType};
|
use super::{ClipboardProvider, ClipboardType};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
@ -164,6 +164,12 @@ mod provider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for NopProvider {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
impl ClipboardProvider for NopProvider {
|
impl ClipboardProvider for NopProvider {
|
||||||
fn name(&self) -> Cow<str> {
|
fn name(&self) -> Cow<str> {
|
||||||
|
|
|
@ -157,6 +157,7 @@ pub struct Config {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub search: SearchConfig,
|
pub search: SearchConfig,
|
||||||
pub lsp: LspConfig,
|
pub lsp: LspConfig,
|
||||||
|
pub terminal: Option<TerminalConfig>,
|
||||||
/// Column numbers at which to draw the rulers. Default to `[]`, meaning no rulers.
|
/// Column numbers at which to draw the rulers. Default to `[]`, meaning no rulers.
|
||||||
pub rulers: Vec<u16>,
|
pub rulers: Vec<u16>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
@ -167,6 +168,52 @@ pub struct Config {
|
||||||
pub color_modes: bool,
|
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)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
|
#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
|
||||||
pub struct LspConfig {
|
pub struct LspConfig {
|
||||||
|
@ -497,6 +544,7 @@ impl Default for Config {
|
||||||
true_color: false,
|
true_color: false,
|
||||||
search: SearchConfig::default(),
|
search: SearchConfig::default(),
|
||||||
lsp: LspConfig::default(),
|
lsp: LspConfig::default(),
|
||||||
|
terminal: get_terminal_provider(),
|
||||||
rulers: Vec::new(),
|
rulers: Vec::new(),
|
||||||
whitespace: WhitespaceConfig::default(),
|
whitespace: WhitespaceConfig::default(),
|
||||||
indent_guides: IndentGuidesConfig::default(),
|
indent_guides: IndentGuidesConfig::default(),
|
||||||
|
|
|
@ -5,7 +5,6 @@ use helix_dap::{self as dap, Client, Payload, Request, ThreadId};
|
||||||
use helix_lsp::block_on;
|
use helix_lsp::block_on;
|
||||||
use log::warn;
|
use log::warn;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
use std::io::ErrorKind;
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
@ -287,32 +286,32 @@ impl Editor {
|
||||||
serde_json::from_value(request.arguments.unwrap_or_default()).unwrap();
|
serde_json::from_value(request.arguments.unwrap_or_default()).unwrap();
|
||||||
// TODO: no unwrap
|
// TODO: no unwrap
|
||||||
|
|
||||||
let process = if cfg!(windows) {
|
let config = match self.config().terminal.clone() {
|
||||||
std::process::Command::new("wt")
|
Some(config) => config,
|
||||||
.arg("new-tab")
|
None => {
|
||||||
.arg("--title")
|
self.set_error("No external terminal defined");
|
||||||
.arg("DEBUG")
|
return true;
|
||||||
.arg("cmd")
|
}
|
||||||
.arg("/C")
|
};
|
||||||
.arg(arguments.args.join(" "))
|
|
||||||
.spawn()
|
// Re-borrowing debugger to avoid issues when loading config
|
||||||
.unwrap_or_else(|error| match error.kind() {
|
let debugger = match self.debugger.as_mut() {
|
||||||
ErrorKind::NotFound => std::process::Command::new("conhost")
|
Some(debugger) => debugger,
|
||||||
.arg("cmd")
|
None => return false,
|
||||||
.arg("/C")
|
};
|
||||||
.arg(arguments.args.join(" "))
|
|
||||||
.spawn()
|
let process = match std::process::Command::new(config.command)
|
||||||
.unwrap(),
|
.args(config.args)
|
||||||
// TODO replace the pretty print {:?} with a regular format {}
|
.arg(arguments.args.join(" "))
|
||||||
// when the MSRV is raised to 1.60.0
|
.spawn()
|
||||||
e => panic!("Error to start debug console: {:?}", e),
|
{
|
||||||
})
|
Ok(process) => process,
|
||||||
} else {
|
Err(err) => {
|
||||||
std::process::Command::new("tmux")
|
// TODO replace the pretty print {:?} with a regular format {}
|
||||||
.arg("split-window")
|
// when the MSRV is raised to 1.60.0
|
||||||
.arg(arguments.args.join(" "))
|
self.set_error(format!("Error starting external terminal: {:?}", err));
|
||||||
.spawn()
|
return true;
|
||||||
.unwrap()
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let _ = debugger
|
let _ = debugger
|
||||||
|
|
Loading…
Reference in New Issue