Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2007-10-29 13:36:14 (GMT)
committer Simon Schampijer <simon@schampijer.de>2007-10-29 13:36:14 (GMT)
commit18f9a0ef9251fa3fa109fe32dad7550326c35493 (patch)
tree82e26488a5eb77e5dee9255e51e2101484a2d244 /shell
parent4d26d307109c4db2bfcf1fa43ecb475f1ab37c27 (diff)
Initial push for the sugar control panel
Diffstat (limited to 'shell')
-rw-r--r--shell/controlpanel/control.py425
-rwxr-xr-xshell/controlpanel/sugar-control71
2 files changed, 496 insertions, 0 deletions
diff --git a/shell/controlpanel/control.py b/shell/controlpanel/control.py
new file mode 100644
index 0000000..cf2b688
--- /dev/null
+++ b/shell/controlpanel/control.py
@@ -0,0 +1,425 @@
+# Copyright (C) 2007, One Laptop Per Child
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+#
+# The language config is based on the system-config-language
+# (http://fedoraproject.org/wiki/SystemConfig/language) tool
+# and the timezone config on the system-config-date
+# (http://fedoraproject.org/wiki/SystemConfig/date) tool.
+# Parts of the code were reused.
+#
+
+import os
+import string
+import shutil
+from gettext import gettext as _
+
+from sugar import profile
+from sugar.graphics.xocolor import XoColor
+
+
+_COLORS = {'red': {'dark':'#b20008', 'medium':'#e6000a', 'light':'#ffadce'},
+ 'orange': {'dark':'#9a5200', 'medium':'#c97e00', 'light':'#ffc169'},
+ 'yellow': {'dark':'#807500', 'medium':'#be9e00', 'light':'#fffa00'},
+ 'green': {'dark':'#008009', 'medium':'#00b20d', 'light':'#8bff7a'},
+ 'blue': {'dark':'#00588c', 'medium':'#005fe4', 'light':'#bccdff'},
+ 'purple': {'dark':'#5e008c', 'medium':'#7f00bf', 'light':'#d1a3ff'}
+ }
+
+_MODIFIERS = ('dark', 'medium', 'light')
+
+_TIMEZONE_CONFIG = '/etc/sysconfig/clock'
+
+_LANGUAGES = {
+ 'Afrikaans/South_Africa': ('af_ZA', 'lat0-sun16'),
+ 'Albanian': ('sq_AL.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Algeria': ('ar_DZ.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Bahrain': ('ar_BH.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Egypt': ('ar_EG.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/India': ('ar_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Iraq': ('ar_IQ.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Jordan': ('ar_JO.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Kuwait': ('ar_KW.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Lebanon': ('ar_LB.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Libyan_Arab_Jamahiriya': ('ar_LY.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Morocco': ('ar_MA.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Oman': ('ar_OM.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Qatar': ('ar_QA.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Saudi_Arabia': ('ar_SA.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Sudan': ('ar_SD.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Syrian_Arab_Republic': ('ar_SY.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Tunisia': ('ar_TN.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/United_Arab_Emirates': ('ar_AE.UTF-8', 'latarcyrheb-sun16'),
+ 'Arabic/Yemen': ('ar_YE.UTF-8', 'latarcyrheb-sun16'),
+ 'Basque/Spain': ('eu_ES.UTF-8', 'latarcyrheb-sun16'),
+ 'Belarusian': ('be_BY.UTF-8', 'latarcyrheb-sun16'),
+ 'Bengali/BD': ('bn_BD.UTF-8', 'latarcyrheb-sun16'),
+ 'Bengali/India': ('bn_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Bosnian/Bosnia_and_Herzegowina': ('bs_BA', 'lat2-sun16'),
+ 'Breton/France': ('br_FR', 'lat0-sun16'),
+ 'Bulgarian': ('bg_BG.UTF-8', 'latarcyrheb-sun16'),
+ 'Catalan/Spain': ('ca_ES.UTF-8', 'latarcyrheb-sun16'),
+ 'Chinese/Hong_Kong': ('zh_HK.UTF-8', 'latarcyrheb-sun16'),
+ 'Chinese/P.R._of_China': ('zh_CN.UTF-8', 'lat0-sun16'),
+ 'Chinese/Taiwan': ('zh_TW.UTF-8', 'lat0-sun16'),
+ 'Cornish/Britain': ('kw_GB.UTF-8', 'latarcyrheb-sun16'),
+ 'Croatian': ('hr_HR.UTF-8', 'latarcyrheb-sun16'),
+ 'Czech': ('cs_CZ.UTF-8', 'latarcyrheb-sun16'),
+ 'Danish': ('da_DK.UTF-8', 'latarcyrheb-sun16'),
+ 'Dutch/Belgium': ('nl_BE.UTF-8', 'latarcyrheb-sun16'),
+ 'Dutch/Netherlands': ('nl_NL.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Australia': ('en_AU.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Botswana': ('en_BW.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Canada': ('en_CA.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Denmark': ('en_DK.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Great_Britain': ('en_GB.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Hong_Kong': ('en_HK.UTF-8', 'latarcyrheb-sun16'),
+ 'English/India': ('en_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Ireland': ('en_IE.UTF-8', 'latarcyrheb-sun16'),
+ 'English/New_Zealand': ('en_NZ.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Philippines': ('en_PH.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Singapore': ('en_SG.UTF-8', 'latarcyrheb-sun16'),
+ 'English/South_Africa': ('en_ZA.UTF-8', 'latarcyrheb-sun16'),
+ 'English/USA': ('en_US.UTF-8', 'latarcyrheb-sun16'),
+ 'English/Zimbabwe': ('en_ZW.UTF-8', 'latarcyrheb-sun16'),
+ 'Estonian': ('et_EE.UTF-8', 'latarcyrheb-sun16'),
+ 'Faroese/Faroe_Islands': ('fo_FO.UTF-8', 'latarcyrheb-sun16'),
+ 'Finnish': ('fi_FI.UTF-8', 'latarcyrheb-sun16'),
+ 'French/Belgium': ('fr_BE.UTF-8', 'latarcyrheb-sun16'),
+ 'French/Canada': ('fr_CA.UTF-8', 'latarcyrheb-sun16'),
+ 'French/France': ('fr_FR.UTF-8', 'latarcyrheb-sun16'),
+ 'French/Luxemburg': ('fr_LU.UTF-8', 'latarcyrheb-sun16'),
+ 'French/Switzerland': ('fr_CH.UTF-8', 'latarcyrheb-sun16'),
+ 'Galician/Spain': ('gl_ES.UTF-8', 'latarcyrheb-sun16'),
+ 'German/Austria': ('de_AT.UTF-8', 'latarcyrheb-sun16'),
+ 'German/Belgium': ('de_BE.UTF-8', 'latarcyrheb-sun16'),
+ 'German/Germany': ('de_DE.UTF-8', 'latarcyrheb-sun16'),
+ 'German/Luxemburg': ('de_LU.UTF-8', 'latarcyrheb-sun16'),
+ 'German/Switzerland': ('de_CH.UTF-8', 'latarcyrheb-sun16'),
+ 'Greek': ('el_GR.UTF-8', 'latarcyrheb-sun16'),
+ 'Greenlandic/Greenland': ('kl_GL.UTF-8', 'latarcyrheb-sun16'),
+ 'Gujarati/India': ('gu_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Hebrew/Israel': ('he_IL.UTF-8', 'latarcyrheb-sun16'),
+ 'Hindi/India': ('hi_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Hungarian': ('hu_HU.UTF-8', 'latarcyrheb-sun16'),
+ 'Icelandic': ('is_IS.UTF-8', 'latarcyrheb-sun16'),
+ 'Indonesian': ('id_ID.UTF-8', 'latarcyrheb-sun16'),
+ 'Irish': ('ga_IE.UTF-8', 'latarcyrheb-sun16'),
+ 'Italian/Italy': ('it_IT.UTF-8', 'latarcyrheb-sun16'),
+ 'Italian/Switzerland': ('it_CH.UTF-8', 'latarcyrheb-sun16'),
+ 'Japanese': ('ja_JP.UTF-8', 'lat0-sun16'),
+ 'Korean/Republic_of_Korea': ('ko_KR.UTF-8', 'lat0-sun16'),
+ 'Lao/Laos': ('lo_LA.UTF-8', 'latarcyrheb-sun16'),
+ 'Latvian/Latvia': ('lv_LV.UTF-8', 'latarcyrheb-sun16'),
+ 'Lithuanian': ('lt_LT.UTF-8', 'latarcyrheb-sun16'),
+ 'Macedonian': ('mk_MK.UTF-8', 'latarcyrheb-sun16'),
+ 'Malay/Malaysia': ('ms_MY.UTF-8', 'latarcyrheb-sun16'),
+ 'Maltese/malta': ('mt_MT.UTF-8', 'latarcyrheb-sun16'),
+ 'Manx/Britain': ('gv_GB.UTF-8', 'latarcyrheb-sun16'),
+ 'Marathi/India': ('mr_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Northern/Norway': ('se_NO', 'latarcyrheb-sun16'),
+ 'Norwegian': ('nb_NO.UTF-8', 'latarcyrheb-sun16'),
+ 'Norwegian,/Norway': ('nn_NO.UTF-8', 'latarcyrheb-sun16'),
+ 'Occitan/France': ('oc_FR', 'lat0-sun16'),
+ 'Oriya/India': ('or_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Persian/Iran': ('fa_IR.UTF-8', 'latarcyrheb-sun16'),
+ 'Polish': ('pl_PL.UTF-8', 'latarcyrheb-sun16'),
+ 'Portuguese/Brasil': ('pt_BR.UTF-8', 'latarcyrheb-sun16'),
+ 'Portuguese/Portugal': ('pt_PT.UTF-8', 'latarcyrheb-sun16'),
+ 'Punjabi/India': ('pa_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Romanian': ('ro_RO.UTF-8', 'latarcyrheb-sun16'),
+ 'Russian': ('ru_RU.UTF-8', 'latarcyrheb-sun16'),
+ 'Russian/Ukraine': ('ru_UA.UTF-8', 'latarcyrheb-sun16'),
+ 'Serbian': ('sr_CS.UTF-8', 'latarcyrheb-sun16'),
+ 'Serbian/Latin': ('sr_CS.UTF-8@Latn', 'latarcyrheb-sun16'),
+ 'Slovak': ('sk_SK.UTF-8', 'latarcyrheb-sun16'),
+ 'Slovenian/Slovenia': ('sl_SI.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Argentina': ('es_AR.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Bolivia': ('es_BO.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Chile': ('es_CL.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Colombia': ('es_CO.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Costa_Rica': ('es_CR.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Dominican_Republic': ('es_DO.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/El_Salvador': ('es_SV.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Equador': ('es_EC.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Guatemala': ('es_GT.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Honduras': ('es_HN.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Mexico': ('es_MX.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Nicaragua': ('es_NI.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Panama': ('es_PA.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Paraguay': ('es_PY.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Peru': ('es_PE.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Puerto_Rico': ('es_PR.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Spain': ('es_ES.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/USA': ('es_US.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Uruguay': ('es_UY.UTF-8', 'latarcyrheb-sun16'),
+ 'Spanish/Venezuela': ('es_VE.UTF-8', 'latarcyrheb-sun16'),
+ 'Swedish/Finland': ('sv_FI.UTF-8', 'latarcyrheb-sun16'),
+ 'Swedish/Sweden': ('sv_SE.UTF-8', 'latarcyrheb-sun16'),
+ 'Tagalog/Philippines': ('tl_PH', 'lat0-sun16'),
+ 'Tamil/India': ('ta_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Telugu/India': ('te_IN.UTF-8', 'latarcyrheb-sun16'),
+ 'Thai': ('th_TH.UTF-8', 'latarcyrheb-sun16'),
+ 'Turkish': ('tr_TR.UTF-8', 'latarcyrheb-sun16'),
+ 'Ukrainian': ('uk_UA.UTF-8', 'latarcyrheb-sun16'),
+ 'Urdu/Pakistan': ('ur_PK', 'latarcyrheb-sun16'),
+ 'Uzbek/Uzbekistan': ('uz_UZ', 'lat0-sun16'),
+ 'Walloon/Belgium': ('wa_BE@euro', 'lat0-sun16'),
+ 'Welsh/Great_Britain': ('cy_GB.UTF-8', 'latarcyrheb-sun16'),
+ 'Xhosa/South_Africa': ('xh_ZA.UTF-8', 'latarcyrheb-sun16'),
+ 'Zulu/South_Africa': ('zu_ZA.UTF-8', 'latarcyrheb-sun16')
+ }
+
+_timezones = []
+
+def _initialize():
+ _timezones = _read_zonetab()
+ j=0
+ for timezone in _timezones:
+ set_timezone.__doc__ += timezone+', '
+ j+=1
+ if j%3 == 0:
+ set_timezone.__doc__ += '\n'
+
+ if not os.access(_TIMEZONE_CONFIG, os.R_OK):
+ #Theres no /etc/sysconfig/clock file, so make one
+ fd = open(_TIMEZONE_CONFIG, 'w')
+ f.write(' The ZONE parameter is only evaluated by sugarcontrol.\n')
+ f.write('The timezone of the system' +
+ ' is defined by the contents of /etc/localtime.\n')
+ f.write('ZONE="America/NEW_York"\n')
+ f.close()
+
+ keys = _LANGUAGES.keys()
+ keys.sort()
+ i = 0
+ for key in keys:
+ set_language.__doc__ += key+', '
+ i+=1
+ if i%3 == 0:
+ set_language.__doc__ += '\n'
+
+def get_jabber():
+ pro = profile.get_profile()
+ return pro.jabber_server
+
+def print_jabber():
+ print get_jabber()
+
+def set_jabber(server):
+ """Set the jabber server
+ server : 'olpc.collabora.co.uk'
+ """
+ pro = profile.get_profile()
+ pro.jabber_server = server
+ pro.save()
+
+def get_color():
+ return profile.get_color()
+
+def print_color():
+ print get_color().to_string()
+
+def set_color(stroke, fill, modstroke='medium', modfill='medium'):
+ """Set the system color.
+ fill : 'red, orange, yellow, blue, purple'
+ stroke : 'red, orange, yellow, blue, purple'
+ modstroke : 'dark, medium, light'
+ modfill : ''dark, medium, light'
+ """
+
+ if modstroke not in _MODIFIERS or modfill not in _MODIFIERS:
+ print (_("Error in specified color modifiers."))
+ return
+ if stroke not in _COLORS or fill not in _COLORS:
+ print (_("Error in specified colors."))
+ return
+
+ if modstroke == modfill:
+ if modfill == medium:
+ modfill = light
+ else:
+ modfill = medium
+
+ color = _COLORS[stroke][modstroke] + ',' + _COLORS[fill][modfill]
+ pro = profile.get_profile()
+ pro.color = XoColor(color)
+ pro.save()
+
+def get_nick():
+ return profile.get_nick_name()
+
+def print_nick():
+ print get_nick()
+
+def set_nick(nick):
+ """Set the nickname.
+ nick : 'erikos'
+ """
+ pro = profile.get_profile()
+ pro.nick_name = nick
+ pro.save()
+
+def get_radio(state):
+ return ''
+
+def print_radio(self):
+ print get_radio()
+
+def set_radio(state):
+ """Turn Radio off
+ state : 'on/off'
+ """
+ if state == 'on':
+ cmd = '/sbin/iwconfig eth0 txpower on'
+ handle = os.popen(cmd, 'r')
+ print string.join(handle.readlines())
+ handle.close()
+ elif state == 'off':
+ cmd = '/sbin/iwconfig eth0 txpower off'
+ handle = os.popen(cmd, 'r')
+ print string.join(handle.readlines())
+ handle.close()
+ else:
+ print (_("Error in specified radio argument use on/off."))
+
+def get_timezone():
+ fd = open(_TIMEZONE_CONFIG, "r")
+ lines = fd.readlines()
+ fd.close()
+ try:
+ for line in lines:
+ line = string.strip(line)
+ if len (line) and line[0] == '#':
+ continue
+ try:
+ tokens = string.split(line, "=")
+ if tokens[0] == "ZONE":
+ timezone = string.replace(tokens[1], '"', '')
+ return timezone
+ except Exception, e:
+ print (_("get_timezone: %s") % e)
+ except Exception, e:
+ print (_("get_timezone: %s") % e)
+ return None
+
+def print_timezone():
+ timezone = get_timezone()
+ if timezone is None:
+ print (_("Error in reading timezone"))
+ else:
+ print timezone
+
+def set_timezone(timezone):
+ """Set the system timezone
+ timezone :
+ """
+ if timezone in _timezones:
+ fromfile = os.path.join("/usr/share/zoneinfo/", timezone)
+ try:
+ shutil.copyfile(fromfile, "/etc/localtime")
+ except OSError, (errno, msg):
+ print (_("Error copying timezone (from %s): %s")%(fromfile, msg))
+ return
+ try:
+ os.chmod("/etc/localtime", 0644)
+ except OSError, (errno, msg):
+ print (_("Changing permission of timezone: %s") % (msg))
+ return
+
+ # Write info to the /etc/sysconfig/clock file
+ fd = open(_TIMEZONE_CONFIG, "w")
+ fd.write('# The ZONE parameter is only evaluated by sugarcontrol.\n')
+ fd.write('# The timezone of the system ' +
+ 'is defined by the contents of /etc/localtime.\n')
+ fd.write('ZONE="%s"\n' % timezone)
+ fd.close()
+ else:
+ print (_("Error timezone does not exist."))
+
+def _read_zonetab(fn='/usr/share/zoneinfo/zone.tab'):
+ fd = open (fn, 'r')
+ lines = fd.readlines()
+ fd.close()
+ timezones = []
+ for line in lines:
+ if line.startswith('#'):
+ continue
+ line = line.split()
+ if len(line) > 1:
+ timezones.append(line[2])
+ timezones.sort()
+ return timezones
+
+def _remove_encoding(lang):
+ if '.' in lang:
+ langBase = lang.split('.')
+ return langBase[0]
+ elif '@' in lang:
+ langBase = lang.split('@')
+ return langBase[0]
+ else:
+ return lang
+
+def _writeI18N(lang, sysfont):
+ path = '/etc/sysconfig/i18n'
+ if os.access(path, os.R_OK) == 0:
+ print(_("Could not access %s")%path)
+ else:
+ fd = open(path, 'w')
+ fd.write('LANG="' + lang + '"\n')
+ fd.write('SYSFONT="' + sysfont + '"\n')
+ fd.close()
+
+def get_language():
+ originalFile = None
+ path = '/etc/sysconfig/i18n'
+ if os.access(path, os.R_OK) == 0:
+ return None
+ else:
+ fd = open(path, "r")
+ originalFile = fd.readlines()
+ fd.close()
+
+ lang = None
+
+ for line in originalFile:
+ if line[:5] == "LANG=":
+ lang = line[5:].replace('"', '')
+ lang = lang.strip()
+
+ if lang:
+ lang = _remove_encoding(lang)
+ else:
+ lang = "en_US"
+ return lang
+
+def print_language():
+ print get_language()
+
+def set_language(language):
+ """Set the system language.
+ languages :
+ """
+ if language in _LANGUAGES:
+ _writeI18N(_LANGUAGES[language][0], _LANGUAGES[language][1])
+ else:
+ print (_("Sorry I do not speak \'%s\'.")%language)
+
+
+# inilialize the docstrings for the timezone and language
+_initialize()
diff --git a/shell/controlpanel/sugar-control b/shell/controlpanel/sugar-control
new file mode 100755
index 0000000..4bee092
--- /dev/null
+++ b/shell/controlpanel/sugar-control
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2007, One Laptop Per Child
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+import getopt, sys
+
+import control
+
+def cmd_help():
+ print 'Usage: sugar-control [ option ] key [ args ... ] \n\
+ Control for the sugar environment. \n\
+ Options: \n\
+ -h, --help show this help message and exit \n\
+ -h key show information about this key \n\
+ -g key get the current value of the key \n\
+ -s key set the current value for the key \n\
+ '
+
+def main():
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], "h:s:g:", ["help"])
+ except getopt.GetoptError:
+ cmd_help()
+ sys.exit(2)
+
+ output = None
+ verbose = False
+
+ for opt, key in opts:
+ if opt in ("-h"):
+ method = getattr(control, 'set_' + key, None)
+ if method is None:
+ cmd_help()
+ sys.exit()
+ else:
+ print method.__doc__
+ if opt in ("-g"):
+ method = getattr(control, 'print_' + key, None)
+ if method is None:
+ cmd_help()
+ sys.exit()
+ else:
+ method()
+ if opt in ("-s"):
+ method = getattr(control, 'set_' + key, None)
+ if method is None:
+ cmd_help()
+ sys.exit()
+ else:
+ try:
+ method(*args)
+ except Exception, e:
+ print "sugar-control: %s"% e
+
+if __name__ == '__main__':
+ main()