57 lines
1.4 KiB
Python
57 lines
1.4 KiB
Python
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) |