Voor diegene die het handig vinden om een lijst met alle open vensters te hebben, heb ik eens uit interesse hiervoor een script geschreven.
Voorbeeld van een paar open vensters en de window list geopend:
Er zijn 2 bestandjes nodig en het is belangrijk om deze
correct te benoemen en plaatsen. Installeer ook het volgende pakketje: gir1.2-wnck-3.0
Het eerste is het .desktop bestand dat
windowlistlauncher.desktop moet noemen en in
~/.local/share/applications/ of
/usr/share/applications/ moet staan:
[Desktop Entry]
Version=1.0
Name=Windowlist
Comment=View all open windows
Terminal=false
Type=Application
Icon=desktop
Exec=windowlistlauncher -d
Dit bestand kan na het aanmaken naar de launcher versleept worden om vast te zetten.
Het volgende moet
windowlistlauncher noemen,
uitvoerbaar gemaakt worden en in een map die in
PATH staat gezet worden. Meestal is dit /usr/bin of ~/bin
#!/usr/bin/env python
"""
A Unity launcher icon that represents a window list.
"""
__author__ = "Timo Vanwynsberghe"
__version__ = 0.1
import os
import sys
import time
from xdg import BaseDirectory
from gi.repository import Gtk, Gdk, GObject, Unity, Dbusmenu, Wnck
class MainDialog(Gtk.Dialog):
def __init__(self):
Gtk.Dialog.__init__(self, "Windowlist launcher")
self.connect("response", self.on_dialog_response)
label = Gtk.Label("Nothing to see here for now, please right click on "
"the launcher.\n\nPreferences will be added here in "
"the future if needed.")
label.set_justify(Gtk.Justification.CENTER)
content_area = self.get_content_area()
content_area.pack_start(label, False, False, 0)
self.show_all()
def on_dialog_response(self, dialog, response):
Gtk.main_quit()
def on_menuitem_activated(menuitem, obj, window):
#TODO: is this time correct?
window.activate(time.time())
def on_window_opened(screen, window, quicklist):
if window.get_window_type() not in (Wnck.WindowType.NORMAL, Wnck.WindowType.DIALOG):
return
item = Dbusmenu.Menuitem.new()
item.connect("item-activated", on_menuitem_activated, window)
item.property_set(Dbusmenu.MENUITEM_PROP_LABEL, window.get_name())
item.property_set_bool(Dbusmenu.MENUITEM_PROP_VISIBLE, True)
quicklist.child_append(item)
window.set_data("menuitem", item)
window.connect("name-changed", on_window_name_changed, item)
def on_window_closed(screen, window):
menuitem = window.get_data("menuitem")
if menuitem is None: return
parent = menuitem.get_parent()
parent.child_delete(menuitem)
def on_window_name_changed(window, item):
item.property_set(Dbusmenu.MENUITEM_PROP_LABEL, window.get_name())
def get_desktop_file():
dfile = None
dfile_dirs = [os.path.join(d, 'applications') for d in BaseDirectory.xdg_data_dirs]
for dfile_dir in dfile_dirs:
if not os.path.isdir(dfile_dir): continue
checking = os.path.join(dfile_dir, 'windowlistlauncher.desktop')
if os.path.exists(checking):
dfile = checking
break
return dfile
def setup():
dfile = get_desktop_file()
if dfile is None:
raise SystemExit("Could not find the correct .desktop file!")
quicklist = Dbusmenu.Menuitem.new()
launcher = Unity.LauncherEntry.get_for_desktop_file(dfile)
launcher.set_property("quicklist", quicklist)
screen = Wnck.Screen.get_default()
screen.connect("window-opened", on_window_opened, quicklist)
screen.connect("window-closed", on_window_closed)
if __name__ == '__main__':
if len(sys.argv) > 1 and sys.argv[1] == '-d':
dialog = MainDialog()
Gtk.main()
else:
setup()
loop = GObject.MainLoop()
try:
loop.run()
except KeyboardInterrupt:
loop.quit()
Voeg dit script daarna toe aan de opstarttoepassingen.
Hierna even afmelden zodat het script geladen kan worden en alle geopende vensters zouden nu zichtbaar moeten zijn.
Dit is nog maar een begin en ik heb nog enkele plannen, zoals:
- een beter icoontje
- groeperen per applicatie
- groeperen per werkblad
- vierkante haakjes plaatsen bij een geminimaliseerd venster
- maximum breedte voor de labels
- applicatie naam toevoegen (indien niet aanwezig)
- een voorkeuren venster voor het bovenstaande