#!/usr/bin/env python ########################################################################### # # xasyOptions provides a mechanism for storing and restoring a user's # preferences. # # # Author: Orest Shardt # Created: June 29, 2007 # ########################################################################### import pickle import sys,os import errno defaultOptions = { 'asyPath':'asy', 'showDebug':False, 'showGrid':False, 'gridX':10, 'gridY':10, 'gridColor':'#eeeeee', 'showAxes':True, 'axisX':10, 'axisY':10, 'axesColor':'#cccccc', 'tickColor':'#eeeeee', 'defPenOptions':'', 'defPenColor':'#000000', 'defPenWidth':1.0, 'externalEditor':'' } if sys.platform[:3] == "win": defaultOptions['externalEditor'] = "%PROGRAMFILES%\Windows NT\Accessories\wordpad.exe" else: defaultOptions['externalEditor'] = "emacs" options = defaultOptions.copy() def settingsFileLocation(): folder = "" try: folder = os.path.expanduser("~/.asy/") except: pass return os.path.normcase(os.path.join(folder,"xasy.conf")) def setAsyPathFromWindowsRegistry(): try: import _winreg as registry #test both registry locations try: key = registry.OpenKey(registry.HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Asymptote") options['asyPath'] = registry.QueryValueEx(key,"Path")[0]+"\\asy.exe" registry.CloseKey(key) except: key = registry.OpenKey(registry.HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Asymptote") options['asyPath'] = registry.QueryValueEx(key,"InstallLocation")[0]+"\\asy.exe" registry.CloseKey(key) except: #looks like asy is not installed or this isn't Windows pass def setDefaults(): global options options = defaultOptions.copy() if sys.platform[:3] == 'win': #for windows, wince, win32, etc setAsyPathFromWindowsRegistry() save() def load(): global options fileName = settingsFileLocation() if not os.path.exists(fileName): #make folder thedir = os.path.dirname(fileName) if not os.path.exists(thedir): try: os.makedirs(thedir) except: raise Exception("Could not create configuration folder") if not os.path.isdir(thedir): raise Exception("Configuration folder path does not point to a folder") setDefaults() try: f = open(fileName,"rb") newOptions = pickle.load(f) for key in options.keys(): if type(newOptions[key]) != type(options[key]): raise Exception("Bad type for entry in xasy settings") options = newOptions except: setDefaults() def save(): global options fileName = settingsFileLocation() try: f = open(fileName,"wb") pickle.dump(options,f) f.close() except: raise Exception("Error saving preferences") load() if __name__=='__main__': print (settingsFileLocation()) print ("Current content") load() print ("Setting defaults") setDefaults() save() load() options['showAxes'] = options['showGrid'] = False save() print ("Set to False") load() options['showAxes'] = options['showGrid'] = True save() print ("Set to True") load() print (options)