]> Dogcows Code - chaz/openbox/commitdiff
historyplacement!!
authorDana Jansens <danakj@orodu.net>
Sat, 1 Feb 2003 10:03:29 +0000 (10:03 +0000)
committerDana Jansens <danakj@orodu.net>
Sat, 1 Feb 2003 10:03:29 +0000 (10:03 +0000)
scripts/Makefile.am
scripts/historyplacement.py [new file with mode: 0644]
scripts/windowplacement.py

index 36747ee504cb64d25dde698a5b8af13944f3fa15..7619efc09995f0c5dd8e61dd1b0504ed7cd59d59 100644 (file)
@@ -1,7 +1,8 @@
 scriptdir = $(libdir)/openbox/python
 MAINTAINERCLEANFILES = Makefile.in
 script_DATA = config.py builtins.py defaults.py focus.py callbacks.py \
-              focusmodel.py windowplacement.py behavior.py motion.py
+              focusmodel.py windowplacement.py behavior.py motion.py \
+              historyplacement.py
 EXTRA_DIST = $(script_DATA)
 
 distclean-local:
diff --git a/scripts/historyplacement.py b/scripts/historyplacement.py
new file mode 100644 (file)
index 0000000..8f44030
--- /dev/null
@@ -0,0 +1,135 @@
+##############################################################################
+### The history window placement algorithm. ebind historyplacement.place   ###
+### to the ob.EventAction.PlaceWindow event to use it.                     ###
+##############################################################################
+
+import windowplacement # fallback routines
+
+##############################################################################
+### Options for the historyplacement module:                               ###
+###                                                                        ###
+# fallback - The window placement algorithm that will be used when history ###
+###          placement does not have a place for the window.               ###
+fallback = windowplacement.random                                          ###
+###                                                                        ###
+# filename - The name of the file where history data will be stored. The   ###
+###          number of the screen is appended onto this filename.          ###
+filename = 'historydb'                                                     ###
+###                                                                        ###
+##############################################################################
+
+import otk
+import ob
+import os
+import string
+
+_data = []
+
+class _state:
+    def __init__(self, appname, appclass, role, x, y):
+        self.appname = appname
+        self.appclass = appclass
+        self.role = role
+        self.x = x
+        self.y = y
+    def __eq__(self, other):
+        if self.appname == other.appname and \
+           self.appclass == other.appclass and \
+           self.role == other.role:
+            return 1
+        return 0
+
+def _load(data):
+    file = open(os.environ['HOME']+'/.openbox/'+filename+"."+str(data.screen),
+                'r')
+    if file:
+        print "loading: "
+        # read data
+        for line in file.readlines():
+            line = line[:-1] # drop the '\n'
+            try:
+                print string.split(line, '\0')
+                print line.count('\0')
+                s = string.split(line, '\0')
+                state = _state(s[0], s[1], s[2],
+                               string.atoi(s[3]), string.atoi(s[4]))
+
+                while len(_data)-1 < data.screen:
+                    _data.append([])
+                _data[data.screen].append(state)
+                
+                print "  "+s[0]+" "+s[1]+" "+s[2]
+                print "     " + str(s[3]) + "," + str(s[4])
+            except ValueError:
+                print "ValueError"
+                pass
+            except IndexError:
+                print "IndexError"
+                pass
+        print "DONE loading."
+        file.close()
+
+def _save(data):
+    file = open(os.environ['HOME']+'/.openbox/'+filename+"."+str(data.screen),
+                'w')
+    if file:
+        print "saving: "
+        while len(_data)-1 < data.screen:
+            _data.append([])
+        for i in _data[data.screen]:
+            file.write(i.appname + '\0' +
+                       i.appclass + '\0' +
+                       i.role + '\0' +
+                       str(i.x) + '\0' +
+                       str(i.y) + '\n')
+            print "  "+i.appname+" "+i.appclass+" "+i.role
+            print "     " + str(i.x) + "," + str(i.y)
+        print "DONE saving."
+        file.close()
+
+def place(data):
+    print "placing"
+    if data.client:
+        state = _state(data.client.appName(), data.client.appClass(),
+                       data.client.role(), 0, 0)
+        while len(_data)-1 < data.screen:
+            _data.append([])
+        print "looking for :"
+        print "  " + state.appname
+        print "  " + state.appclass
+        print "  " + state.role
+        try:
+            i = _data[data.screen].index(state)
+            print "got it"
+            coords = _data[data.screen][i]
+            print "Found in history ("+str(coords.x)+","+str(coords.y)+")"
+            data.client.move(coords.x, coords.y)
+        except ValueError:
+            print "No match in history"
+            fallback(data)
+
+def _save_window(data):
+    print "saving"
+    if data.client:
+        area = data.client.area()
+        state = _state(data.client.appName(), data.client.appClass(),
+                       data.client.role(), area.x(), area.y())
+        while len(_data)-1 < data.screen:
+            _data.append([])
+        print "looking for :"
+        print "  " + state.appname
+        print "  " + state.appclass
+        print "  " + state.role
+        try:
+            i = _data[data.screen].index(state)
+            print "replacing"
+            _data[data.screen][i] = state # replace it
+        except ValueError:
+            print "appending"
+            _data[data.screen].append(state)
+
+ob.ebind(ob.EventAction.CloseWindow, _save_window)
+ob.ebind(ob.EventAction.Startup, _load)
+ob.ebind(ob.EventAction.Shutdown, _save)
+
+print "Loaded historyplacement.py"
index 4a9f1aee681a669b7d60116bcb146750ca2b8d49..070cc0ee2699f890a0e7d97141d2086bb2404c80 100644 (file)
@@ -1,6 +1,10 @@
 ############################################################################
 ### Window placement algorithms, choose one of these and ebind it to the ###
 ### ob.EventAction.PlaceWindow event.                                    ###
+###                                                                      ###
+### Also see historyplacement.py for the history placement module which  ###
+### provides an algorithm that can be used in place of, or alongside     ###
+### these.                                                               ###
 ############################################################################
 
 import otk
This page took 0.029748 seconds and 4 git commands to generate.