aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src
diff options
context:
space:
mode:
authorKirawi2022-04-18 03:10:51 +0000
committerGitHub2022-04-18 03:10:51 +0000
commitc2a40d9d5229c701fa1a6d0fb80ce4ba86e8dc0c (patch)
treeb27da29863432ca7ee48c582f5aeb538d7a39ea1 /helix-term/src
parentbe656c14e32243fc32ed68f9a3240301f2902df7 (diff)
Add support for local language configuration (#1249)
* add local configuration * move config loading to Application::new * simplify find_root_impl
Diffstat (limited to 'helix-term/src')
-rw-r--r--helix-term/src/application.rs33
-rw-r--r--helix-term/src/main.rs30
2 files changed, 28 insertions, 35 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index bc5f3bd7..7733c2c6 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -56,15 +56,33 @@ pub struct Application {
}
impl Application {
- pub fn new(args: Args, config: Config) -> Result<Self, Error> {
+ pub fn new(args: Args) -> Result<Self, Error> {
use helix_view::editor::Action;
- let mut compositor = Compositor::new()?;
- let size = compositor.size();
- let conf_dir = helix_loader::config_dir();
+ let config_dir = helix_loader::config_dir();
+ if !config_dir.exists() {
+ std::fs::create_dir_all(&config_dir).ok();
+ }
- let theme_loader =
- std::sync::Arc::new(theme::Loader::new(&conf_dir, &helix_loader::runtime_dir()));
+ let config = match std::fs::read_to_string(config_dir.join("config.toml")) {
+ Ok(config) => toml::from_str(&config)
+ .map(crate::keymap::merge_keys)
+ .unwrap_or_else(|err| {
+ eprintln!("Bad config: {}", err);
+ eprintln!("Press <ENTER> to continue with default config");
+ use std::io::Read;
+ // This waits for an enter press.
+ let _ = std::io::stdin().read(&mut []);
+ Config::default()
+ }),
+ Err(err) if err.kind() == std::io::ErrorKind::NotFound => Config::default(),
+ Err(err) => return Err(Error::new(err)),
+ };
+
+ let theme_loader = std::sync::Arc::new(theme::Loader::new(
+ &config_dir,
+ &helix_loader::runtime_dir(),
+ ));
let true_color = config.editor.true_color || crate::true_color();
let theme = config
@@ -98,9 +116,10 @@ impl Application {
});
let syn_loader = std::sync::Arc::new(syntax::Loader::new(syn_loader_conf));
+ let mut compositor = Compositor::new()?;
let config = Arc::new(ArcSwap::from_pointee(config));
let mut editor = Editor::new(
- size,
+ compositor.size(),
theme_loader.clone(),
syn_loader.clone(),
Box::new(Map::new(Arc::clone(&config), |config: &Config| {
diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs
index 4a3434d1..58a90131 100644
--- a/helix-term/src/main.rs
+++ b/helix-term/src/main.rs
@@ -1,7 +1,6 @@
-use anyhow::{Context, Error, Result};
+use anyhow::{Context, Result};
use helix_term::application::Application;
use helix_term::args::Args;
-use helix_term::config::{Config, ConfigLoadError};
use std::path::PathBuf;
fn setup_logging(logpath: PathBuf, verbosity: u64) -> Result<()> {
@@ -109,35 +108,10 @@ FLAGS:
return Ok(0);
}
- let conf_dir = helix_loader::config_dir();
- if !conf_dir.exists() {
- std::fs::create_dir_all(&conf_dir).ok();
- }
-
- let config = match Config::load_default() {
- Ok(config) => config,
- Err(err) => {
- match err {
- ConfigLoadError::BadConfig(err) => {
- eprintln!("Bad config: {}", err);
- eprintln!("Press <ENTER> to continue with default config");
- use std::io::Read;
- // This waits for an enter press.
- let _ = std::io::stdin().read(&mut []);
- Config::default()
- }
- ConfigLoadError::Error(err) if err.kind() == std::io::ErrorKind::NotFound => {
- Config::default()
- }
- ConfigLoadError::Error(err) => return Err(Error::new(err)),
- }
- }
- };
-
setup_logging(logpath, args.verbosity).context("failed to initialize logging")?;
// TODO: use the thread local executor to spawn the application task separately from the work pool
- let mut app = Application::new(args, config).context("unable to create new application")?;
+ let mut app = Application::new(args).context("unable to create new application")?;
let exit_code = app.run().await?;