Forlong
Anmeldungsdatum: 19. September 2006
Beiträge: 3864
Wohnort: Köln
|
Da ja die Screenlets relativ leicht zu modifizieren sind (xml- und Grafikbeartbeitung-Kenntnisse vorausgesetzt) mach ich hier mal einen allgemeinen Thread auf, um eigene Themes etc. zu posten. Ich hab nämlich gerade mal ein eigenes Theme für das NowPlaying-Screenlet gemacht: Ungültiges MakroDieses Makro ist nicht verfügbar OK... das wird jetzt vermutlich keinen von den Socken reissen, weils auf den ersten Blick wie das default-Theme aussieht aber das Problem von diesem ist ja, dass es IMHO viel zu groß ist und wenn man es verkleinert, die Schrift relativ unleserlich wird. Also hab ich die Grafiken noch mal selbst in Inkscape erstellt und zwar so, dass ich alles auf eine Darstellung des Covers von 100x100 optimiert habe (und das ganze dann noch allgemein etwas verbessert). edit: ein Bild sagt mehr als tausend Worte... deshalb hier ein Vergleich (oben: default auf 50%): http://mitglied.lycos.de/Forlong/glass100-default.png''
Würd mich über feedback freuen.
- glass100.tar.gz (18.7 KiB)
- Download glass100.tar.gz
|
Arne
Anmeldungsdatum: 2. April 2007
Beiträge: 1942
|
Ich finde es sehr gelungen. Mein Problem beim Modden von den Screenlets sind die svgs. Es wäre genial, wenn du ein HowTo schreiben könntest, wie du deins erstellt hast. gruß
|
neo-linux
Anmeldungsdatum: 24. Oktober 2006
Beiträge: 1145
Wohnort: Ennepetal
|
Auch wenn ich keine Screenlets verwende finde ich es sehr gelungen.
|
Joker
Anmeldungsdatum: 1. Juli 2005
Beiträge: 343
Wohnort: Nürnberg
|
Sehr schick! Und viel besser als das Originale default-theme 8)
|
Forlong
(Themenstarter)
Anmeldungsdatum: 19. September 2006
Beiträge: 3864
Wohnort: Köln
|
Danke erstmal. ☺ Scheinen aber wirklich (noch?) nicht so viele User hier Screenlets zu benutzen... samsemilia hat geschrieben: Ich finde es sehr gelungen. Mein Problem beim Modden von den Screenlets sind die svgs. Es wäre genial, wenn du ein HowTo schreiben könntest, wie du deins erstellt hast.
Hm... ein How-to für die gesamte Vorgehensweise oder nur für die Vektor-Grafiken? Gibt's denn da überhaupt allgemein Interesse dran? Wäre ja in jedem Fall schon was aufwendig...
|
Dr._Ä
Anmeldungsdatum: 3. November 2005
Beiträge: 597
Wohnort: Bayern
|
Hallo! Könnte man das Screenlet auch so anpassen, dass es mit QuodLibet zusammenarbeitet?
|
Forlong
(Themenstarter)
Anmeldungsdatum: 19. September 2006
Beiträge: 3864
Wohnort: Köln
|
Dr. Ä hat geschrieben: Könnte man das Screenlet auch so anpassen, dass es mit QuodLibet zusammenarbeitet?
Da müsstest du dich vermutlich an RYX wenden (Autor der Screenlets). Aktuell werden "nur" Amarok, Banshee, Exaile, Rhythmbox und Listen gezielt unterstützt. Der Hauptthread für Screenlets findet sich im compiz.org Forum (ist gerade down). Kannst es aber auch hier versuchen: http://hendrik.kaju.pri.ee/screenlets/ Oder du schreibst ihm 'ne PM über http://forums.opencompositing.org/memberlist.php?mode=viewprofile&u=1250 (er ist übrigens Deutscher). Aktuell arbeitet er allerdings nicht an Screenlets...
|
xjoni
Anmeldungsdatum: 2. Juli 2007
Beiträge: 11
Wohnort: Berlin
|
so, ich hab mich auch mal an die arbeit gemacht, und das erste mal in meinem leben ein vektor-mal-programm und python code in die hand genommen um mal ein wenig zu 'screenletten'. ich find screenlets toll, es müßte nur wesentlich mehr geben ☺ das hier dient zur anzeige der festplattenausnutzung. Ungültiges MakroDieses Makro ist nicht verfügbar so siehts aus, und hier kann man es finden: http://hendrik.kaju.pri.ee/screenlets/?q=node/46 wer screenlets mit compiz fusion nutzen will, der guckt hier mal nach: http://forum.ubuntuusers.de/topic/101979/?highlight=widget+compiz und wer noch ne gute idee für ein screenlet hat das es noch nicht gibt, immer her damit, macht spaß so dinger zu bauen 😉
|
xjoni
Anmeldungsdatum: 2. Juli 2007
Beiträge: 11
Wohnort: Berlin
|
Dr. Ä hat geschrieben: Hallo! Könnte man das Screenlet auch so anpassen, dass es mit QuodLibet zusammenarbeitet?
da quodlibet ne dbus schnittstelle hat, ist das kaum ein problem. nimm einfach folgenden code und pack ihn nach: /usr/local/share/screenlets/NowPlaying/Players/QuodLibet.py #!/usr/bin/env python
# QuodLibetApi
import os
import subprocess
import string
import gobject
from GenericPlayer import GenericAPI
class QuodLibetApi(GenericAPI):
__name__ = 'QuodLibet API'
__version__ = '0.1'
__author__ = 'Jonathan Rauprich <joni@noplu.de>'
__desc__ = 'API to the QuodLibet Music Player'
ns = "net.sacredchao.QuodLibet"
iroot = "/net/sacredchao/QuodLibet"
playerAPI = None
callbackFn = None
__curplaying = None
playing = True
# Extended Functions from the GenericAPI
def __init__(self, session_bus):
GenericAPI.__init__(self, session_bus)
def is_active(self, dbus_iface):
if self.ns in dbus_iface.ListNames(): return True
else: return False
def connect(self):
self.playerAPI = self.session_bus.get_object(self.ns, self.iroot)
def get_title(self):
return self.playerAPI.CurrentSong()['title']
def get_album(self):
return self.playerAPI.CurrentSong()['album']
def get_artist(self):
return self.playerAPI.CurrentSong()['artist']
def get_cover_path(self):
#requires save curent cover art to disc plugin
return "~/.quodlibet/current.cover"
def is_playing(self):
return self.playing
def play_pause(self):
self.playerAPI.PlayPause()
def next(self):
self.playerAPI.Next()
def previous(self):
self.playerAPI.Previous()
def register_change_callback(self, fn):
if(self.callback_fn == None):
#print "Registering Callback"
self.callback_fn = fn
self.playerAPI.connect_to_signal("SongStarted", self.info_changed)
self.playerAPI.connect_to_signal("SongEnded", self.info_changed)
self.playerAPI.connect_to_signal("Paused", self.cb_paused)
self.playerAPI.connect_to_signal("Unpaused", self.cb_unpaused)
def info_changed(self, *args, **kwargs):
self.callback_fn()
#used to save playing status
def cb_paused(self):
self.playing = False
self.callback_fn()
def cb_unpaused(self):
self.playing = True
self.callback_fn() und änder die datei /usr/local/share/screenlets/NowPlaying/NowPlayingScreenlet.py PLAYER_LIST = {'Rhythmbox':'RhythmboxAPI',
'Listen':'ListenAPI',
'Banshee':'BansheeAPI',
'Amarok':'AmarokAPI',
'Exaile':'ExaileAPI'} das in das PLAYER_LIST = {'Rhythmbox':'RhythmboxAPI',
'Listen':'ListenAPI',
'Banshee':'BansheeAPI',
'Amarok':'AmarokAPI',
'Exaile':'ExaileAPI',
'QuodLibet':'QuodLibetApi'} dann aktivier noch das 'picture saver' plugin und schon kann der spaß losgehen ☺ ich mal das mal RYX durch, evtl wirds ja dann in der nächsten version integriert. cya joni
|
Bat
Anmeldungsdatum: 22. April 2006
Beiträge: 953
|
Forlong hat geschrieben: Scheinen aber wirklich (noch?) nicht so viele User hier Screenlets zu benutzen...
Sag mir wie ich gDesklets (oder eine andere Desklet-engine) zusammen mit Beryl anständig zum laufen bekomme und ich bin dabei 😉 Das Problem bei gDesklets ist einfach, daß alle Desklets verschwinden sobald ich Beryl starte. Wenn ich erst Beryl starte und dann gDesklets bekomme ich alle Desklets in der Taskbar als Fenster angezeigt.. ziemlich ätzend 😉 Allerdings habe ich bisher auch noch nicht das Wunsch-desklet gefunden: Ein Desklet, daß einem den Inhalt einer log-datei anzeigt und dabei konfiguriert werden kann: Zeige 10 Zeilen, 15 Zeilen, 20 zeilen usw.. Gruß, Bat ^°^ Nachtrag: Habe gerade Screenlets installiert, allerdings lässt es sich nicht starten:
bash: screenlets: command not found
screenlets hat aber mit Autocomplete via Tab geklappt.. komisch. Wenn ich via Alt+F2 starte erhalte ich folgende Meldung:
Speicherort »file:///screenlets« konnte nicht angezeigt werden
???
|
xjoni
Anmeldungsdatum: 2. Juli 2007
Beiträge: 11
Wohnort: Berlin
|
hast du das packet screnlet-utils installiert? dann hast du in anwendungen->zubehör->screenlets. starte mal darüber.
|
Bat
Anmeldungsdatum: 22. April 2006
Beiträge: 953
|
xjoni hat geschrieben: hast du das packet screnlet-utils installiert? dann hast du in anwendungen->zubehör->screenlets. starte mal darüber.
Hallo xjoni, danke für die schnelle Antwort ☺ Ich meine schon, daß das Paket mit installiert wurde.. ich schaue heute Abend sicherheitshalber aber nochmal nach und poste hier dann nochmal.. Gruß, Bat ^°^
|
Bat
Anmeldungsdatum: 22. April 2006
Beiträge: 953
|
Sodelle, jetzt hats geklappt.. ich glaub ich war gestern abend zu müde um das icon in der Appletbar zu sehen.. 😉 Sagmal.. hast Du das alles entwickelt? Schaut soweit echt gut aus, auch wenn ich nur eins von den Screenlets nutze (Systeminfos).. das einzige was ich jetzt noch vermisse ist ein Screenlet, daß mir eine Logdatei anzeigt (z.B. die letzten 15 Zeilen) und selbstständig alle neuen Einträge in der Logdatei ebenfalls anzeigt.. falls Du noch eine Idee für ein neues Screenlet suchst 😉 Alternativ kannst Du mir - sofern vorhanden - gerne einen Link zu einem Tutorial nennen und ich versuche mich da selbst mal dran.. kann aber etwas dauern bis ich dazu komme.. 😕 Danke erstmal für Screenlets.. endlich kann ich die gDesklets deinstallieren.. die spinnen eh nur mit Beryl rum.. 😀 Gruß, Bat P.s.: Eine CPU-Auslastungsanzeige im System-Status-Screenlet wär noch nett 😉
|
Bat
Anmeldungsdatum: 22. April 2006
Beiträge: 953
|
Was bedeutet denn "Treat as Widget" btw was macht diese Einstellung? Was bedeutet "Skip Pager" bzw wann braucht man das?
|
mots
Anmeldungsdatum: 26. Juni 2006
Beiträge: 112
|
Hi, vielleicht koennt ihr mir ja helfen: habe versucht, ein NowPlaying-Plugin fuer MPD+Sonata zu schreiben, es scheint aber nicht zu funzen D: Hier mein Code:
#!/usr/bin/env python
# MPD API
import os
import dbus
import string
import gobject
import mpdclient
from GenericPlayer import GenericAPI
class MPDAPI(GenericAPI):
__name__ = 'MPD API'
__version__ = '0.1'
__author__ = 'mots'
__desc__ = 'API to the Music Player Daemon'
host='localhost'
port=6600
playerAPI = None
__timeout = None
__interval = 2
callbackFn = None
__curplaying = None
# Extended Functions from the GenericAPI
def __init__(self, session_bus):
GenericAPI.__init__(self, session_bus)
def is_active(self, dbus_iface):
try:
self.mpd = mpdclient.MpdController(host,port)
return True
except:
return False
def connect(self):
self.playerAPI = self.mpd
def get_title(self):
return self.playerAPI.getCurrentSong().title
def get_album(self):
return self.playerAPI.getCurrentSong().album
def get_artist(self):
return self.playerAPI.getCurrentSong().artist
def get_cover_path(self):
#return self.playerAPI.GetPlayingCoverUri()
def is_playing(self):
if self.playerAPI.status().stateStr() == 'play': return True
else: return False
def play_pause(self):
if self.playerAPI.status().stateStr() == 'play':
self.playerAPI.pause()
else:
self.playerAPI.play()
def next(self):
self.playerAPI.next()
def previous(self):
self.playerAPI.prev()
def register_change_callback(self, fn):
self.callback_fn = fn
# Could not find a callback signal for MPD, so just calling after some time interval
if self.__timeout:
gobject.source_remove(self.__timeout)
self.__timeout = gobject.timeout_add(self.__interval * 1000, self.info_changed)
def info_changed(self, signal=None):
# Only call the callback function if Data has changed
if self.__timeout:
gobject.source_remove(self.__timeout)
try:
if self.__curplaying != None and not self.is_playing():
self.__curplaying = None
self.callback_fn()
playinguri = self.playerAPI.GetPlayingUri()
if self.is_playing() and self.__curplaying != playinguri:
self.__curplaying = playinguri
self.callback_fn()
self.__timeout = gobject.timeout_add(self.__interval * 1000, self.info_changed)
except:
# The player exited ? call callback function
self.callback_fn() [/code]
|