2021-08-04 01:42:39 +00:00
|
|
|
use anyhow::Result;
|
|
|
|
use gpui::font_cache::{FamilyId, FontCache};
|
2021-11-29 08:35:38 +00:00
|
|
|
use language::Language;
|
|
|
|
use std::{collections::HashMap, sync::Arc};
|
|
|
|
use theme::Theme;
|
2021-03-18 19:13:31 +00:00
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
pub struct Settings {
|
|
|
|
pub buffer_font_family: FamilyId,
|
|
|
|
pub buffer_font_size: f32,
|
|
|
|
pub tab_size: usize,
|
2021-11-29 16:08:43 +00:00
|
|
|
soft_wrap: SoftWrap,
|
|
|
|
preferred_line_length: u32,
|
|
|
|
overrides: HashMap<String, Override>,
|
2021-05-24 22:38:43 +00:00
|
|
|
pub theme: Arc<Theme>,
|
|
|
|
}
|
|
|
|
|
2021-11-29 08:35:38 +00:00
|
|
|
#[derive(Clone, Default)]
|
|
|
|
pub struct Override {
|
|
|
|
pub soft_wrap: Option<SoftWrap>,
|
|
|
|
pub preferred_line_length: Option<u32>,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Copy, Clone)]
|
|
|
|
pub enum SoftWrap {
|
|
|
|
None,
|
|
|
|
EditorWidth,
|
|
|
|
PreferredLineLength,
|
|
|
|
}
|
|
|
|
|
2021-03-18 19:13:31 +00:00
|
|
|
impl Settings {
|
2021-10-05 09:00:33 +00:00
|
|
|
pub fn new(
|
|
|
|
buffer_font_family: &str,
|
|
|
|
font_cache: &FontCache,
|
|
|
|
theme: Arc<Theme>,
|
|
|
|
) -> Result<Self> {
|
2021-03-18 19:13:31 +00:00
|
|
|
Ok(Self {
|
2021-10-05 09:00:33 +00:00
|
|
|
buffer_font_family: font_cache.load_family(&[buffer_font_family])?,
|
2021-09-04 15:02:20 +00:00
|
|
|
buffer_font_size: 16.,
|
2021-03-18 19:13:31 +00:00
|
|
|
tab_size: 4,
|
2021-11-29 08:35:38 +00:00
|
|
|
soft_wrap: SoftWrap::None,
|
|
|
|
preferred_line_length: 80,
|
|
|
|
overrides: Default::default(),
|
2021-07-31 00:22:59 +00:00
|
|
|
theme,
|
2021-03-18 19:13:31 +00:00
|
|
|
})
|
|
|
|
}
|
2021-07-20 20:03:59 +00:00
|
|
|
|
|
|
|
pub fn with_tab_size(mut self, tab_size: usize) -> Self {
|
|
|
|
self.tab_size = tab_size;
|
|
|
|
self
|
|
|
|
}
|
2021-03-18 19:13:31 +00:00
|
|
|
|
2021-11-29 08:35:38 +00:00
|
|
|
pub fn with_overrides(mut self, language_name: impl Into<String>, overrides: Override) -> Self {
|
|
|
|
self.overrides.insert(language_name.into(), overrides);
|
|
|
|
self
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn soft_wrap(&self, language: Option<&Arc<Language>>) -> SoftWrap {
|
|
|
|
language
|
|
|
|
.and_then(|language| self.overrides.get(language.name()))
|
|
|
|
.and_then(|settings| settings.soft_wrap)
|
|
|
|
.unwrap_or(self.soft_wrap)
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn preferred_line_length(&self, language: Option<&Arc<Language>>) -> u32 {
|
|
|
|
language
|
|
|
|
.and_then(|language| self.overrides.get(language.name()))
|
|
|
|
.and_then(|settings| settings.preferred_line_length)
|
|
|
|
.unwrap_or(self.preferred_line_length)
|
|
|
|
}
|
2021-07-31 00:22:59 +00:00
|
|
|
}
|