from textual.app import App from pathlib import Path import os import configparser class ConfigHandler: def __init__(self, app: App): self.app: App = app self.config: configparser.ConfigParser = configparser.ConfigParser() self.config_dir: str = self.ensure_hidden_config_dir() self.load_settings() def ensure_hidden_config_dir(self): config_dir = Path.home() / ".berry" config_dir.mkdir(parents=True, exist_ok=True) return config_dir def get(self, section: str, option: str): return self.config.get(section, option) def set(self, section: str, option: str, new_value: str): self.config.set(section, option, new_value) self.write_settings() def apply_settings(self): self.app.query_one("#code-editor").soft_wrap = bool(int(self.get("editor", "word_wrap"))) self.app.theme = self.get("appearance", "colour_theme") def write_settings(self): with open(self.config_dir / "config.ini", "w") as configfile: self.config.write(configfile) def load_settings(self): if os.path.isfile(self.config_dir / "config.ini"): self.config.read(self.config_dir / "config.ini") return self.config["config"] = { "version": "1" } self.config["editor"] = { "word_wrap": "0" } self.config["plugins"] = { "enabled": "1", "log": "1", "log_timeout": "10" } self.config["appearance"] = { "colour_theme": "textual-dark" } with open(self.config_dir / "config.ini", "w") as configfile: self.config.write(configfile)