# HG changeset patch # User Björn Ricks # Date 1354793158 -3600 # Node ID f0a2beb17f9b9a0f0982d955362652370998458f # Parent 8cc1f83d32eed2a9cf4281035450715d373da706 Add config classes to provide keybindings The new Config class to be able to configure getan. Until now it is only possible to configure the Keybinding. The config is read from $HOME/.getan/getanrc and /etc/getanrc of the first file isn't found. If both files aren't available a default is used. diff -r 8cc1f83d32ee -r f0a2beb17f9b getan/config.py --- a/getan/config.py Thu Nov 15 13:00:13 2012 +0100 +++ b/getan/config.py Thu Dec 06 12:25:58 2012 +0100 @@ -11,6 +11,8 @@ import logging import os +from ConfigParser import SafeConfigParser, NoSectionError, NoOptionError + logger = None def initialize(level=logging.INFO, filename="getan.log"): @@ -40,3 +42,124 @@ if isinstance(lang, str): os.environ["LANG"] = lang + +class Config(object): + + def __init__(self): + self.config = self.load([os.path.expanduser("~/.getan/getanrc"), + "/etc/getanrc"]) + self.keybinding = Keybinding(self) + + def load(self, filenames): + configparser = SafeConfigParser() + configparser.read(filenames) + return configparser + + def get(self, section, key): + return self.config.get(section, key) + + def items(self, section): + return self.config.items(section) + + def get_keybinding(self): + return self.keybinding + + +class Keybinding(object): + + KEYBINDINGS = "keybindings" + + KEY_SWITCH_TIME_MODE = "switch_time_mode" + KEY_SWITCH_PROJECT_ORDER = "switch_project_order" + KEY_SWITCH_LISTS = "switch_lists" + KEY_ENTER = "enter" + KEY_INSERT = "insert" + KEY_DELETE = "delete" + KEY_ESCAPE = "escape" + KEY_ENTRY_DELETE = "entry_delete" + KEY_ENTRY_UP = "entry_up" + KEY_ENTRY_DOWN = "entry_down" + KEY_ENTRY_MOVE = "entry_move" + KEY_ENTRY_EDIT = "entry_edit" + KEY_ADD_TIME = "add_time" + KEY_SUBTRACT_TIME = "subtract_time" + KEY_PAUSE_PROJECT = "pause_project" + + DEFAULT_KEYBINDINGS = { + KEY_SWITCH_TIME_MODE : "f1", + KEY_SWITCH_PROJECT_ORDER : "f2", + KEY_SWITCH_LISTS : "tab", + KEY_ENTER : "enter", + KEY_INSERT : "insert", + KEY_DELETE : "delete", + KEY_ESCAPE : "esc", + KEY_ENTRY_UP : "up", + KEY_ENTRY_DOWN : "down", + KEY_ENTRY_DELETE : "d", + KEY_ENTRY_MOVE : "m", + KEY_ENTRY_EDIT : "e", + KEY_ADD_TIME : "+", + KEY_SUBTRACT_TIME : "-", + KEY_PAUSE_PROJECT : " ", + } + + + def __init__(self, config): + logger.debug("Keybindings are: %r" % config.items(self.KEYBINDINGS)) + self.config = config + + def get_binding(self, key): + value = None + try: + value = self.config.get(self.KEYBINDINGS, key) + except (NoSectionError, NoOptionError): + pass + + if not value: + value = self.DEFAULT_KEYBINDINGS[key] + return value + + def get_switch_time_mode(self): + return self.get_binding(self.KEY_SWITCH_TIME_MODE) + + def get_switch_project_order(self): + return self.get_binding(self.KEY_SWITCH_PROJECT_ORDER) + + def get_switch_lists(self): + return self.get_binding(self.KEY_SWITCH_LISTS) + + def get_enter(self): + return self.get_binding(self.KEY_ENTER) + + def get_insert(self): + return self.get_binding(self.KEY_INSERT) + + def get_delete(self): + return self.get_binding(self.KEY_DELETE) + + def get_escape(self): + return self.get_binding(self.KEY_ESCAPE) + + def get_entry_delete(self): + return self.get_binding(self.KEY_ENTRY_DELETE) + + def get_entry_move(self): + return self.get_binding(self.KEY_ENTRY_MOVE) + + def get_entry_edit(self): + return self.get_binding(self.KEY_ENTRY_EDIT) + + def get_entry_up(self): + return self.get_binding(self.KEY_ENTRY_UP) + + def get_entry_down(self): + return self.get_binding(self.KEY_ENTRY_DOWN) + + def get_add_time(self): + return self.get_binding(self.KEY_ADD_TIME) + + def get_subtract_time(self): + return self.get_binding(self.KEY_SUBTRACT_TIME) + + def get_pause_project(self): + return self.get_binding(self.KEY_PAUSE_PROJECT)