2022-07-15 12:40 UTC
  • Xyne


Description: A GUI theme editor for Openbox.
Latest Version: 2013.2.20.2
Source Code: src/
  • any
  • gtk2
  • pygtk
  • python2
  • python2-fuse
Arch Repositories:
  • [xyne-any]
  • [xyne-i686]
  • [xyne-x86_64]
AUR Page: obtheme
Arch Forum Thread: 72692


ObTheme is a GUI theme editor for openbox. Among its features are a live preview mode, a built-in xbm image button editor and a palette for changing colors globally. ObTheme has no connection to an older application of the same name.

ObTheme follows the Openbox theme specification at http://openbox.org/wiki/Help:Themes.


Are you going to add an image preview like the one in ObConf?

Ideally, yes. I just don’t know how to (yet). I’ll try to figure out how ObConf does it and see if there’s a way to do it in pygtk. If that doesn’t work, maybe I’ll just ask the ObConf devs to create a stand-alone previewer that I could embed. I promise nothing though.

What’s up with the code? Why isn’t it more pythonic?

I was almost completely new to Python when I wrote it. I also hacked most of it together over 3 days and never went back to clean it up. I’ll get to it eventually.

I’m not using Arch Linux… how do I install it?

Just download the source tarball, unpack it and run obtheme. Make sure that you have python-fuse and pygtk (the latest version). If you really want to install it, package it for your distro’s package manager so that obtheme is placed in your path. I’ll get around to adding an install script eventually but it’s not a priority right now as I don’t even know if anyone is using this on something other than Arch Linux.


screenshot screenshot 



The code is a hack-job from 2009 when I was a Python noob (I’m still a noob, but less so now). The following are some ideas for how the code could be improved. I may never get around to this as I have little time and no real motivation.

First things first, it should be rewritten in Python 3.

The themeElements data structure should be moved to an external, user-configurable JSON file so that it can be updated independently. It’s practically in JSON format already and it would be trivial to export it.

FUSE is likely overkill. I don’t even remember right how much it handles, but it would be worth investigating FIFOs as replacements.

All of the has_key and other noobish tests should be replaced with proper try/except blocks. There’s probably a load of other conventions that need to be changed.





  • added more changes submitted by Stophe (“Quit” item in file menu, default window size, replacement of “has_key” with “in” tests).
  • modified FUSE directory handling to detect symlinked paths and existing mounts
  • modified filter categories


  • added changes submitted by Stophe (combo box category filter, default value bug fix)

This is the first change in years… looking at my old code makes me cringe a little.

echo xyne.archlinux.org | sed 's/\./@/'
XHTML 1.0 Strict CSS level 3 Atom 1.0