Implemented local settings save in ~/.local/share/stormux. Also, I think I got interrupt on any keypress working better when using -x.
This commit is contained in:
+1
-1
@@ -41,7 +41,7 @@ def create_argument_parser():
|
||||
argumentParser.add_argument(
|
||||
'-s', '--setting',
|
||||
metavar='SETTING-FILE',
|
||||
default='/etc/fenrir/settings/settings.conf',
|
||||
default=None,
|
||||
help='Path to custom settings file'
|
||||
)
|
||||
argumentParser.add_argument(
|
||||
|
||||
@@ -22,10 +22,7 @@ class command:
|
||||
return _("Saves your current Fenrir settings so they are the default.")
|
||||
|
||||
def run(self):
|
||||
settings_file = self.env["runtime"][
|
||||
"SettingsManager"
|
||||
].get_settings_file()
|
||||
self.env["runtime"]["SettingsManager"].save_settings(settings_file)
|
||||
self.env["runtime"]["SettingsManager"].save_settings()
|
||||
self.env["runtime"]["OutputManager"].present_text(
|
||||
_("Settings saved."), interrupt=True
|
||||
)
|
||||
|
||||
@@ -48,8 +48,7 @@ class DynamicKeyboardLayoutCommand:
|
||||
)
|
||||
|
||||
# Save to the actual config file
|
||||
configFilePath = settingsManager.get_settings_file()
|
||||
settingsManager.save_settings(configFilePath)
|
||||
settingsManager.save_settings()
|
||||
|
||||
self.env["runtime"]["OutputManager"].present_text(
|
||||
f"Keyboard layout set to {self.layoutName}. Please restart Fenrir for this change to take effect."
|
||||
|
||||
@@ -464,12 +464,6 @@ class RemoteManager:
|
||||
)
|
||||
|
||||
def save_settings(self, setting_config_path=None):
|
||||
if not setting_config_path:
|
||||
setting_config_path = self.env["runtime"][
|
||||
"SettingsManager"
|
||||
].get_settings_file()
|
||||
if setting_config_path == "":
|
||||
return
|
||||
self.env["runtime"]["SettingsManager"].save_settings(
|
||||
setting_config_path
|
||||
)
|
||||
|
||||
@@ -42,11 +42,18 @@ fenrir_path = os.path.dirname(currentdir)
|
||||
|
||||
|
||||
class SettingsManager:
|
||||
system_settings_root = "/etc/fenrirscreenreader/"
|
||||
system_settings_file = "/etc/fenrirscreenreader/settings/settings.conf"
|
||||
user_settings_file = (
|
||||
"~/.local/share/stormux/fenrirscreenreader/settings/settings.conf"
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
self.settings = settings_data
|
||||
self.settingArgDict = {}
|
||||
self.bindingsBackup = None
|
||||
self.settings_file = ""
|
||||
self.save_settings_path = ""
|
||||
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
@@ -104,12 +111,57 @@ class SettingsManager:
|
||||
return self.settings_file
|
||||
|
||||
def set_settings_file(self, settings_file):
|
||||
if not os.path.exists(settings_file):
|
||||
return
|
||||
if not os.access(settings_file, os.R_OK):
|
||||
if os.path.exists(settings_file) and not os.access(
|
||||
settings_file, os.R_OK
|
||||
):
|
||||
return
|
||||
self.settings_file = settings_file
|
||||
|
||||
def get_user_settings_file(self):
|
||||
return os.path.expanduser(self.user_settings_file)
|
||||
|
||||
def get_system_settings_file(self):
|
||||
return self.system_settings_file
|
||||
|
||||
def is_user_settings_mode(self):
|
||||
return os.geteuid() != 0
|
||||
|
||||
def get_default_save_settings_file(self):
|
||||
if self.is_user_settings_mode():
|
||||
return self.get_user_settings_file()
|
||||
return self.get_system_settings_file()
|
||||
|
||||
def get_bundled_settings_root(self):
|
||||
return os.path.abspath(os.path.join(fenrir_path, "../../config/")) + "/"
|
||||
|
||||
def get_resource_settings_root(self):
|
||||
if os.path.exists(self.system_settings_root):
|
||||
return self.system_settings_root
|
||||
bundled_settings_root = self.get_bundled_settings_root()
|
||||
if os.path.exists(bundled_settings_root):
|
||||
return bundled_settings_root
|
||||
return ""
|
||||
|
||||
def resolve_settings_file(self, requested_settings_file=None):
|
||||
if requested_settings_file and os.path.exists(requested_settings_file):
|
||||
return requested_settings_file
|
||||
|
||||
if self.is_user_settings_mode() and os.path.exists(
|
||||
self.get_user_settings_file()
|
||||
):
|
||||
return self.get_user_settings_file()
|
||||
|
||||
if os.path.exists(self.get_system_settings_file()):
|
||||
return self.get_system_settings_file()
|
||||
|
||||
bundled_settings_file = os.path.join(
|
||||
self.get_bundled_settings_root(), "settings/settings.conf"
|
||||
)
|
||||
if os.path.exists(bundled_settings_file):
|
||||
return bundled_settings_file
|
||||
|
||||
return ""
|
||||
|
||||
def load_settings(self, setting_config_path):
|
||||
if not os.path.exists(setting_config_path):
|
||||
return False
|
||||
@@ -128,7 +180,29 @@ class SettingsManager:
|
||||
self.set_settings_file(setting_config_path)
|
||||
return True
|
||||
|
||||
def save_settings(self, setting_config_path):
|
||||
def save_settings(self, setting_config_path=None):
|
||||
if setting_config_path is None:
|
||||
if self.save_settings_path:
|
||||
setting_config_path = self.save_settings_path
|
||||
else:
|
||||
setting_config_path = self.get_default_save_settings_file()
|
||||
|
||||
# Ensure directory exists for user-local settings
|
||||
if setting_config_path and setting_config_path.startswith(
|
||||
os.path.expanduser("~/.local/")
|
||||
):
|
||||
config_dir = os.path.dirname(setting_config_path)
|
||||
if not os.path.exists(config_dir):
|
||||
try:
|
||||
os.makedirs(config_dir, mode=0o755, exist_ok=True)
|
||||
except Exception as e:
|
||||
self.env["runtime"]["DebugManager"].write_debug_out(
|
||||
"save_settings: failed to create directory "
|
||||
+ config_dir
|
||||
+ ": "
|
||||
+ str(e),
|
||||
debug.DebugLevel.ERROR,
|
||||
)
|
||||
# set opt dict here
|
||||
# save file
|
||||
try:
|
||||
@@ -458,25 +532,24 @@ class SettingsManager:
|
||||
def init_fenrir_config(
|
||||
self, cliArgs, fenrir_manager=None, environment=environment.environment
|
||||
):
|
||||
settings_root = "/etc/fenrirscreenreader/"
|
||||
settings_file = cliArgs.setting
|
||||
self.cliArgs = cliArgs
|
||||
|
||||
settings_root = self.get_resource_settings_root()
|
||||
if not settings_root:
|
||||
return None
|
||||
|
||||
sound_root = "/usr/share/sounds/fenrirscreenreader/"
|
||||
# get fenrir settings root
|
||||
if not os.path.exists(settings_root):
|
||||
if os.path.exists(fenrir_path + "/../../config/"):
|
||||
settings_root = fenrir_path + "/../../config/"
|
||||
else:
|
||||
return None
|
||||
# get settings file
|
||||
if settings_file is None or not os.path.exists(settings_file):
|
||||
if os.path.exists(settings_root + "/settings/settings.conf"):
|
||||
settings_file = settings_root + "/settings/settings.conf"
|
||||
else:
|
||||
return None
|
||||
# get sound themes root
|
||||
if not os.path.exists(sound_root):
|
||||
if os.path.exists(fenrir_path + "/../../config/sound/"):
|
||||
sound_root = fenrir_path + "/../../config/sound/"
|
||||
bundled_sound_root = os.path.join(
|
||||
self.get_bundled_settings_root(), "sound/"
|
||||
)
|
||||
if os.path.exists(bundled_sound_root):
|
||||
sound_root = bundled_sound_root
|
||||
|
||||
self.save_settings_path = self.get_default_save_settings_file()
|
||||
settings_file = self.resolve_settings_file(cliArgs.setting)
|
||||
if not settings_file:
|
||||
return None
|
||||
|
||||
environment["runtime"]["SettingsManager"] = self
|
||||
environment["runtime"]["SettingsManager"].initialize(environment)
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
# Fenrir TTY screen reader
|
||||
# By Chrys, Storm Dragon, and contributors.
|
||||
|
||||
version = "2026.05.10"
|
||||
version = "2026.05.12"
|
||||
code_name = "testing"
|
||||
|
||||
@@ -288,6 +288,20 @@ class driver(screenDriver):
|
||||
msg_bytes = bytes(msg_bytes, "UTF-8")
|
||||
os.write(screen, msg_bytes)
|
||||
|
||||
def interrupt_output_on_stdin_input(self, msg_bytes):
|
||||
if not msg_bytes:
|
||||
return
|
||||
settings_manager = self.env["runtime"]["SettingsManager"]
|
||||
if not settings_manager.get_setting_as_bool(
|
||||
"keyboard", "interrupt_on_key_press"
|
||||
):
|
||||
return
|
||||
if settings_manager.get_setting(
|
||||
"keyboard", "interrupt_on_key_press_filter"
|
||||
).strip():
|
||||
return
|
||||
self.env["runtime"]["OutputManager"].interrupt_output()
|
||||
|
||||
def get_session_information(self):
|
||||
self.env["screen"]["autoIgnoreScreens"] = []
|
||||
self.env["general"]["prev_user"] = getpass.getuser()
|
||||
@@ -420,6 +434,7 @@ class driver(screenDriver):
|
||||
)
|
||||
break
|
||||
try:
|
||||
self.interrupt_output_on_stdin_input(msg_bytes)
|
||||
self.inject_text_to_screen(msg_bytes)
|
||||
except Exception as e:
|
||||
self.env["runtime"][
|
||||
|
||||
Reference in New Issue
Block a user