This is a library which was extracted from a pretty much dead pywmdockapps project, and is meant to help with writing Window Maker dockapps in Python.
Installation
The installation from source expect there is a C compiler around, as well as X and Python headers/dev packages. It might be installed using virtualenv, or system wide:
Note, that you'll need C compiler and Xorg dev package to build the C extension.
Usage
There is a base class, a foundation for building custom dockapps. Simplest possible usage would be:
import wmdocklib
app = wmdocklib.DockApp()
app.run()
this will run dockapp, which doesn't do anything, it just displays black background with 3 pixel wide border.
To build something useful, there will be a need for adding implementation, and optionally bitmaps in XPM format for additional graphical elements, like fonts, buttons, app mask and so on.
To create an application, it simple as:
create a class inherited from DockApp,
implement run() and main_loop() methods,
optionally, add graphics (like bitmap charset), command line options handling, and possibly configuration file.
So below is the example for displaying random number:
1import random2import time34import wmdocklib567FONTS = '''\8/* XPM */9static char *square_[] = {10"156 8 2 1",11" c black",12"% c gray100",13" % % % % % % % % %%%%% % %%%%% %%%%% % % %%%%% %%%%% %%%%% %%%%% %%%%% ",14" % % % % % % % % % %% % % % % % % % % % % % ",15" % % % %%%%% %% %% % % % % % % % % % % % % % % ",16" % % % % %%%%% % % % % %%%%% %%%% %%%%% %%%%% %%%%% % %%%%% %%%%% ",17" %%%%% %% %% %% % % % % % % % % % % % % % ",18" % % % %% %% % % % % % % % % % % % % % % ",19" % % % % % % %% % %%%%% %%% %%%%% %%%%% % %%%%% %%%%% % %%%%% %%%%% ",20" % ",21};22'''2324class MyDockApp(wmdocklib.DockApp):2526font_dimentions = (6, 8)2728def __init__(self):29super().__init__()30self.font = FONTS3132def run(self):33self.prepare_pixmaps()34self.open_xwindow()35self.main_loop()3637def main_loop(self):38while True:39self.add_string(f'{random.randint(0, 999):3}', 1, 1)40self.redraw()41time.sleep(0.1)424344app = MyDockApp()45app.run()
In this simple application, there is (partial) charset defined (lines 7-22), which is assigned to the self.font (this attribute can be either a string with XPM data like above, or just a filename), by which it will be indicated that font data will be used.
Than, class MyDockApp is defined, with overriden methods run() and main_loop().
As for method run() it is kind of initialization of the object and window. By calling prepare_pixmaps there will be prepared combined bitmaps of background, pattern and (optionally) fonts, coordinates for the charset, it's width and heigh, and finally load prepared pixmap to memory.
Function open_xwindow will create and show the window. And than main loop is called, which iterate endlessly calling add_string() method for display string on the dockapp. Note, that add_string() method (and underlying add_char()) assuming, that fonts in bitmap are ordered just like ord() will do.
Method redraw() will trigger entire window to be refreshed.
License
This work is licensed under (L)GPL license.