def getCurrentLayoutWin(): global startLayout, loadedLayouts startLayout = win32api.GetKeyboardLayoutName() loadedLayouts = win32api.GetKeyboardLayoutList()
def __init__(self, f): self.filename = "unknown" self.last_error = None self.key_to_events = {} if hasattr(f, "readline"): fp = f self.filename = "<config string>" compiled_name = None else: try: f = find_config_file(f) src_stat = os.stat(f) except os.error: self.report_error("Config file '%s' not found" % f) return self.filename = f self.basename = os.path.basename(f) trace("Loading configuration", self.basename) compiled_name = os.path.splitext(f)[0] + ".cfc" try: cf = open(compiled_name, "rb") try: ver = marshal.load(cf) ok = compiled_config_version == ver if ok: kblayoutname = marshal.load(cf) magic = marshal.load(cf) size = marshal.load(cf) mtime = marshal.load(cf) if (magic == importlib.util.MAGIC_NUMBER and win32api.GetKeyboardLayoutName() == kblayoutname and src_stat[stat.ST_MTIME] == mtime and src_stat[stat.ST_SIZE] == size): self.cache = marshal.load(cf) trace("Configuration loaded cached", compiled_name) return # We are ready to roll! finally: cf.close() except (os.error, IOError, EOFError): pass fp = open(f) self.cache = {} lineno = 1 line = fp.readline() while line: # Skip to the next section (maybe already there!) section, subsection = get_section_header(line) while line and section is None: line = fp.readline() if not line: break lineno = lineno + 1 section, subsection = get_section_header(line) if not line: break if section == "keys": line, lineno = self._load_keys(subsection, fp, lineno) elif section == "extensions": line, lineno = self._load_extensions(subsection, fp, lineno) elif section == "idle extensions": line, lineno = self._load_idle_extensions( subsection, fp, lineno) elif section == "general": line, lineno = self._load_general(subsection, fp, lineno) else: self.report_error("Unrecognised section header '%s:%s'" % (section, subsection)) line = fp.readline() lineno = lineno + 1 # Check critical data. if not self.cache.get("keys"): self.report_error("No keyboard definitions were loaded") if not self.last_error and compiled_name: try: cf = open(compiled_name, "wb") marshal.dump(compiled_config_version, cf) marshal.dump(win32api.GetKeyboardLayoutName(), cf) marshal.dump(importlib.util.MAGIC_NUMBER, cf) marshal.dump(src_stat[stat.ST_SIZE], cf) marshal.dump(src_stat[stat.ST_MTIME], cf) marshal.dump(self.cache, cf) cf.close() except (IOError, EOFError): pass # Ignore errors - may be read only.