130 lines
4 KiB
Diff
130 lines
4 KiB
Diff
diff --git a/kak-tree-sitter-config/src/lib.rs b/kak-tree-sitter-config/src/lib.rs
|
|
index e4edc42..a9c92cb 100644
|
|
--- a/kak-tree-sitter-config/src/lib.rs
|
|
+++ b/kak-tree-sitter-config/src/lib.rs
|
|
@@ -52,9 +52,13 @@ impl Config {
|
|
}
|
|
|
|
/// Load the default configuration, the user configuration, and merge both.
|
|
- pub fn load_default_user() -> Result<Self, ConfigError> {
|
|
+ pub fn load_default_user(path: Option<impl AsRef<Path>>) -> Result<Self, ConfigError> {
|
|
let mut config = Self::load_default_config()?;
|
|
- match UserConfig::load_from_xdg() {
|
|
+ let user_config = match path {
|
|
+ Some(p) => UserConfig::load(p),
|
|
+ None => UserConfig::load_from_xdg(),
|
|
+ };
|
|
+ match user_config {
|
|
Ok(user_config) => {
|
|
config.merge_user_config(user_config)?;
|
|
}
|
|
@@ -448,7 +452,7 @@ impl UserConfig {
|
|
}
|
|
|
|
/// Load the configuration from a given path.
|
|
- fn load(path: impl AsRef<Path>) -> Result<Self, ConfigError> {
|
|
+ pub fn load(path: impl AsRef<Path>) -> Result<Self, ConfigError> {
|
|
let path = path.as_ref();
|
|
|
|
log::debug!("loading configuration at {path}", path = path.display());
|
|
diff --git a/kak-tree-sitter/src/cli.rs b/kak-tree-sitter/src/cli.rs
|
|
index b8102cd..923312c 100644
|
|
--- a/kak-tree-sitter/src/cli.rs
|
|
+++ b/kak-tree-sitter/src/cli.rs
|
|
@@ -22,6 +22,10 @@ pub struct Cli {
|
|
#[clap(short, long)]
|
|
pub server: bool,
|
|
|
|
+ /// Specify a custom path for the user config.
|
|
+ #[clap(short, long)]
|
|
+ pub user_config: Option<String>,
|
|
+
|
|
/// Try to daemonize, if not already done.
|
|
#[clap(short, long)]
|
|
pub daemonize: bool,
|
|
diff --git a/kak-tree-sitter/src/main.rs b/kak-tree-sitter/src/main.rs
|
|
index bee9698..cbd7b39 100644
|
|
--- a/kak-tree-sitter/src/main.rs
|
|
+++ b/kak-tree-sitter/src/main.rs
|
|
@@ -43,7 +43,7 @@ fn start() -> Result<(), OhNo> {
|
|
}
|
|
}
|
|
|
|
- let config = Config::load_default_user()?;
|
|
+ let config = Config::load_default_user(cli.user_config.as_ref())?;
|
|
|
|
// inject rc if we start from Kakoune
|
|
if cli.kakoune && cli.init.is_some() {
|
|
diff --git a/kak-tree-sitter/src/server.rs b/kak-tree-sitter/src/server.rs
|
|
index f3b7723..000c81d 100644
|
|
--- a/kak-tree-sitter/src/server.rs
|
|
+++ b/kak-tree-sitter/src/server.rs
|
|
@@ -73,6 +73,7 @@ impl Server {
|
|
log::debug!("creating IO handler");
|
|
let io_handler = IOHandler::new(
|
|
config,
|
|
+ cli.user_config.clone(),
|
|
cli.is_standalone(),
|
|
cli.with_highlighting || config.features.highlighting,
|
|
resources,
|
|
@@ -165,6 +166,7 @@ struct IOHandler {
|
|
connections: HashMap<Token, BufferedClient>,
|
|
enqueue_response: EnqueueResponse,
|
|
handler: Handler,
|
|
+ user_config_path: Option<String>,
|
|
}
|
|
|
|
impl IOHandler {
|
|
@@ -173,6 +175,7 @@ impl IOHandler {
|
|
|
|
fn new(
|
|
config: &Config,
|
|
+ user_config_path: Option<String>,
|
|
is_standalone: bool,
|
|
with_highlighting: bool,
|
|
resources: ServerResources,
|
|
@@ -203,6 +206,7 @@ impl IOHandler {
|
|
connections,
|
|
enqueue_response,
|
|
handler,
|
|
+ user_config_path,
|
|
})
|
|
}
|
|
|
|
@@ -450,7 +454,7 @@ impl IOHandler {
|
|
}
|
|
|
|
fn reload(&mut self) {
|
|
- let config = match Config::load_default_user() {
|
|
+ let config = match Config::load_default_user(self.user_config_path.as_ref()) {
|
|
Ok(config) => config,
|
|
Err(err) => {
|
|
log::error!("reloading config failed: {err}");
|
|
diff --git a/ktsctl/src/cli.rs b/ktsctl/src/cli.rs
|
|
index dfac5c3..09f86f3 100644
|
|
--- a/ktsctl/src/cli.rs
|
|
+++ b/ktsctl/src/cli.rs
|
|
@@ -11,6 +11,9 @@ pub struct Cli {
|
|
#[clap(long)]
|
|
pub verbose: bool,
|
|
|
|
+ #[clap(short, long)]
|
|
+ pub user_config: Option<String>,
|
|
+
|
|
#[clap(subcommand)]
|
|
pub cmd: Cmd,
|
|
}
|
|
diff --git a/ktsctl/src/main.rs b/ktsctl/src/main.rs
|
|
index f9a3499..f823633 100644
|
|
--- a/ktsctl/src/main.rs
|
|
+++ b/ktsctl/src/main.rs
|
|
@@ -37,7 +37,7 @@ fn start() -> Result<(), HellNo> {
|
|
simple_logger::init_with_level(log::Level::Debug)?;
|
|
}
|
|
|
|
- let config = Config::load_default_user()?;
|
|
+ let config = Config::load_default_user(cli.user_config.as_ref())?;
|
|
log::debug!("ktsctl configuration:\n{config:#?}");
|
|
|
|
match cli.cmd {
|