1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-26 14:54:16 +03:00

add config for the mux socket path

This commit is contained in:
Wez Furlong 2019-03-13 12:49:07 -07:00
parent 05c14e5bc7
commit ea8fa17f6e

View File

@ -3,7 +3,7 @@
use crate::font::FontSystemSelection; use crate::font::FontSystemSelection;
use crate::frontend::FrontEndSelection; use crate::frontend::FrontEndSelection;
use crate::{get_shell, Command}; use crate::{get_shell, Command};
use directories::UserDirs; use directories::{ProjectDirs, UserDirs};
use failure::{err_msg, Error}; use failure::{err_msg, Error};
use std; use std;
use std::ffi::OsStr; use std::ffi::OsStr;
@ -65,6 +65,10 @@ pub struct Config {
#[serde(default)] #[serde(default)]
pub front_end: FrontEndSelection, pub front_end: FrontEndSelection,
/// When using the MuxServer, this specifies the path to the unix
/// domain socket to use to communicate with the mux server.
pub mux_server_unix_domain_socket_path: Option<String>,
} }
fn default_hyperlink_rules() -> Vec<hyperlink::Rule> { fn default_hyperlink_rules() -> Vec<hyperlink::Rule> {
@ -102,6 +106,7 @@ impl Default for Config {
hyperlink_rules: default_hyperlink_rules(), hyperlink_rules: default_hyperlink_rules(),
term: default_term(), term: default_term(),
default_prog: None, default_prog: None,
mux_server_unix_domain_socket_path: None,
} }
} }
} }
@ -283,15 +288,23 @@ pub struct StyleRule {
pub font: TextStyle, pub font: TextStyle,
} }
fn project_dirs() -> Result<ProjectDirs, Error> {
ProjectDirs::from("org", "wez", "wezterm").ok_or_else(|| err_msg("can't find project dirs"))
}
impl Config { impl Config {
pub fn load() -> Result<Self, Error> { pub fn load() -> Result<Self, Error> {
let project_dirs = project_dirs()?;
let dirs = UserDirs::new().ok_or_else(|| err_msg("can't find home dir"))?; let dirs = UserDirs::new().ok_or_else(|| err_msg("can't find home dir"))?;
let home = dirs.home_dir(); let home = dirs.home_dir();
// Note that the directories crate has methods for locating project // Note that the directories crate has methods for locating project
// specific config directories, but only returns one of them, not // specific config directories, but only returns one of them, not
// multiple. Not sure how feel about that. // multiple, so we use it for one of the paths, and fill in the fallbacks
// manually here. This will likely result in trying the same path
// a couple of times, but that's harmless.
let paths = [ let paths = [
project_dirs.config_dir().join("wezterm.toml"),
home.join(".config").join("wezterm").join("wezterm.toml"), home.join(".config").join("wezterm").join("wezterm.toml"),
home.join(".wezterm.toml"), home.join(".wezterm.toml"),
]; ];
@ -310,21 +323,31 @@ impl Config {
let cfg: Self = toml::from_str(&s) let cfg: Self = toml::from_str(&s)
.map_err(|e| format_err!("Error parsing TOML from {}: {:?}", p.display(), e))?; .map_err(|e| format_err!("Error parsing TOML from {}: {:?}", p.display(), e))?;
return Ok(cfg.compute_extra_defaults()); return Ok(cfg.compute_extra_defaults(project_dirs));
} }
Ok(Self::default_config()) Ok(Self::default().compute_extra_defaults(project_dirs))
} }
pub fn default_config() -> Self { pub fn default_config() -> Self {
Self::default().compute_extra_defaults() let project_dirs = project_dirs().unwrap();
Self::default().compute_extra_defaults(project_dirs)
} }
/// In some cases we need to compute expanded values based /// In some cases we need to compute expanded values based
/// on those provided by the user. This is where we do that. /// on those provided by the user. This is where we do that.
fn compute_extra_defaults(&self) -> Self { fn compute_extra_defaults(&self, project_dirs: ProjectDirs) -> Self {
let mut cfg = self.clone(); let mut cfg = self.clone();
if cfg.mux_server_unix_domain_socket_path.is_none() {
cfg.mux_server_unix_domain_socket_path = match project_dirs.runtime_dir() {
Some(path) => path.join("sock"),
None => project_dirs.data_local_dir().join("sock"),
}
.to_str()
.map(str::to_owned);
}
if cfg.font_rules.is_empty() { if cfg.font_rules.is_empty() {
// Expand out some reasonable default font rules // Expand out some reasonable default font rules
let bold = self.font.make_bold(); let bold = self.font.make_bold();