Find and Replace #5

Merged
candle merged 9 commits from master into release 2025-07-16 21:36:23 +00:00
2 changed files with 46 additions and 14 deletions
Showing only changes of commit c1d0c7af1e - Show all commits

View File

@ -5,22 +5,38 @@ use super::theme::Theme;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Config {
#[serde(default = "default_auto_hide_toolbar")]
pub auto_hide_toolbar: bool,
#[serde(default = "default_auto_hide_tab_bar")]
pub auto_hide_tab_bar: bool,
#[serde(default = "default_show_line_numbers")]
pub show_line_numbers: bool,
#[serde(default = "default_word_wrap")]
pub word_wrap: bool,
#[serde(default = "Theme::default")]
pub theme: Theme,
#[serde(default = "default_line_side")]
pub line_side: bool,
#[serde(default = "default_font_family")]
pub font_family: String,
#[serde(default = "default_font_size")]
pub font_size: f32,
// pub vim_mode: bool,
}
fn default_auto_hide_toolbar() -> bool { false }
fn default_auto_hide_tab_bar() -> bool { true }
fn default_show_line_numbers() -> bool { false }
fn default_word_wrap() -> bool { true }
fn default_line_side() -> bool { false }
fn default_font_family() -> String { "Proportional".to_string() }
fn default_font_size() -> f32 { 14.0 }
impl Default for Config {
fn default() -> Self {
Self {
auto_hide_toolbar: false,
auto_hide_tab_bar: false,
auto_hide_tab_bar: true,
show_line_numbers: false,
word_wrap: true,
theme: Theme::default(),
@ -35,9 +51,9 @@ impl Default for Config {
impl Config {
pub fn config_path() -> Option<PathBuf> {
let config_dir = if let Some(config_dir) = dirs::config_dir() {
config_dir.join("ced")
config_dir.join(format!("{}", env!("CARGO_PKG_NAME")))
} else if let Some(home_dir) = dirs::home_dir() {
home_dir.join(".config").join("ced")
home_dir.join(".config").join(format!("{}", env!("CARGO_PKG_NAME")))
} else {
return None;
};
@ -60,7 +76,8 @@ impl Config {
}
match std::fs::read_to_string(&config_path) {
Ok(content) => match toml::from_str::<Config>(&content) {
Ok(content) => {
let mut config = match toml::from_str::<Config>(&content) {
Ok(config) => config,
Err(e) => {
eprintln!(
@ -68,8 +85,13 @@ impl Config {
config_path.display(),
e
);
Self::default()
return Self::default();
}
};
let default_config = Self::default();
config.merge_with_default(default_config);
config
},
Err(e) => {
eprintln!(
@ -82,6 +104,16 @@ impl Config {
}
}
fn merge_with_default(&mut self, default: Config) {
if self.font_family.is_empty() {
self.font_family = default.font_family;
}
if self.font_size <= 0.0 {
self.font_size = default.font_size;
}
}
pub fn save(&self) -> Result<(), Box<dyn std::error::Error>> {
let config_path = Self::config_path().ok_or("Cannot determine config directory")?;

View File

@ -125,7 +125,7 @@ impl TextEditor {
return self.calculate_editor_dimensions(ui).text_width;
}
let longest_line_width = processing_result.longest_line_pixel_width + self.font_size;
let longest_line_width = processing_result.longest_line_pixel_width + (self.font_size * 2.0);
let dimensions = self.calculate_editor_dimensions(ui);
longest_line_width.max(dimensions.text_width)