Kevin D. schrieb… da brauch ich kein i18n und wollte das so slim wie möglich halten.
Immer so entwickeln, dass man es problemlos großmachen kann, denn man weiß nie, wie bekannt es wird.

Ich muss da immer an SAP denken. Hätten die so gedacht, müssten sich jetzt nicht million von Entwicklern weltweit über deutsche Programmiersprachkonstrukte und deutsche Systemtabellenbezeichnungen den Kopf zerbrechen 🙂
Du hast prinzipiell natürlich Recht aber nur um das nochmal festzuhalten: Ich unterscheide zwischen der personalisierten Version, die ich benutze (extra-slim) und der "Release"-Version. In die nächste Release-Version werde ich sowohl Icons, als auch deinen Vorschlag einbauen 😉
Kevin D. schriebIch unterscheide zwischen der personalisierten Version, die ich benutze (extra-slim) und der "Release"-Version.
Hab’ ich auch mal gemacht, aber irgendwann war mir das zu blöd, zwei Zweige pflegen zu müssen, und habe die personalisierten Sachen raus gekickt.

Mittlerweile bin ich bei allem, was ich veröffentliche (kleiner Ausschnitt hier) sowohl Entwickler, als auch ganz normaler Anwender. Das geht sogar so weit, dass ich den kram, den ich commite und pushe, auch selber, an entsprechender stelle wieder pulle 🙂
Ich kann nur nochmal betonen: Du hast natürlich Recht!
Ich sollte mich vielleich in git einarbeiten und das Projekt damit verwalten 😉

Mein Problem is einfach, dass ich die Features die ich einbaue (z.B. Suspend&Hibernate, Tray-Integration) nicht brauche und mir das Programm dann irgendwie zu bloat erscheint. Außerdem ist die Aufteilung ja ne recht gute Methode neue Features zu testen (Solange ich git nicht verwende...).
Kevin D. schriebIch sollte mich vielleich in git einarbeiten und das Projekt damit verwalten 😉
hg > git

😉
Dirk Sohler schrieb
Kevin D. schriebIch sollte mich vielleich in git einarbeiten und das Projekt damit verwalten 😉
hg > git

😉
$ cd (project-directory)
$ git init
$ (add some files)
$ git add .
$ git commit -m 'Initial commit'
<=>
$ hg init (project-directory)
$ cd (project-directory)
$ (add some files)
$ hg add
$ hg commit -m 'Initial commit'
bzw.
$ git clone git://github.com/git/hello-world.git
$ cd hello-world
$ (edit files)
$ git add (files)
$ git commit -m 'Explain what I changed'
$ git format-patch origin/master
<=>
$ hg clone http://selenic.com/repo/hello
$ cd hello
$ (edit files)
$ hg add (new files)
$ hg commit -m 'My changes'
$ hg push
Scheinen sich jetz auf den ersten Blick nicht so großartig zu unterscheiden... Wo sind die Unterschiede und warum ist "hg > git" ?
Kevin D. schriebWo sind die Unterschiede und warum ist "hg > git" ?
hg ist kürzer als git 🙂

Mercurial liefert vor allem nicht fast 150 Binaries, die alle irgendwie irgendwas machen, sondern ist wesentlich kleiner und schlanker.

Wenns um die Standard-Sachen geht, sind Git und Mercurial sicher ebenbürtig. Mercurial ist zudem konsistenter. Commits können nicht mehr geändert werden, Git hat ein Programm dafür. Warum sollte man seinen Kram nachträglich ändern? Man will doch nicht absichtlich Inkonsistenz erzeugen.

http://www.google.com/search?q=hg+vs+git

Gibt genügend Vergleiche, warum dieses oder jenes besser ist. Ich werde jedenfalls bei Mercurial bleiben – Und wenn es nur deswegen ist, weil ich mir mein System nich mit mehreren dutzend Binaries vollramschen will.
Hier fehlt noch ein Thread "Welches VCS ist das Beste?"
Kevin D. schrieb
Gast schriebSuper. Mein Vorschlag wäre noch einen Cancel Button zu ergänzen.
Da hab ich auch schon drüber nachgedacht aber mir graut es irgendwie davor, den auf einer Ebene mit den "richtigen" Buttons zu setzen... Cancel geht bei mir, wenn nötig, mit Alt-F4 oder Rechtsklick auf das Icon in Tint2 😉
Also ich habe auch einen cancel-Button vermisst und habe das vorerst so gelöst...
def cancel(self, widget, data=None):
gtk.main_quit()
am liebsten hätte ich das man über escape das Fenster schließen könnte. Naja das bekommt man sicherlich irgendwie raus 🙂
16 Tage später
Das mit Schließen per Escape finde ich auch gut, müsste ja eigentlich nur ein Keydown Event sein mit Abfrage auf den Key. Irgendein GTK Experte hier der sowas blind tippen kann? Sonst muss ich mich mal durchs Tutorial wühlen.
Isildur schriebDas mit Schließen per Escape finde ich auch gut, müsste ja eigentlich nur ein Keydown Event sein mit Abfrage auf den Key. Irgendein GTK Experte hier der sowas blind tippen kann? Sonst muss ich mich mal durchs Tutorial wühlen.
Ja Shortcuts wollte ich eh noch einbauen... Hab ja jetzt keine Schule mehr, werd mich ma dranmachen...
Also, ich habe die Sache mit dem Escape-Key mal eingefügt, jetzt müsste es für jeden ein Leichtes sein weitere Shortcuts einzubauen (falls nötig).

Folgende Änderungen habe ich dafür vorgenommen ( die mit #<<<<<< markierten Zeilen sind neu, falls keine markiert sind ist der ganze Block neu):
def catch_button( self, window, event, data=None ):
		keyval = event.keyval
		#Escape
		key_esc = gtk.gdk.keyval_from_name( 'Escape' )
		if keyval == key_esc:
			gtk.main_quit()
		self.window.set_title( 'MyExit' )
		self.window.connect( 'key-press-event', self.catch_button ) #<<<<<<
		self.window.connect( 'delete_event', self.delete_event )
Ja ich weiß, ich sollte mir git/hg/irgwas angucken... Bald...

Wer mehr Infos zu den Keyboard-Geschichten braucht, mir hat diese Seite geholfen: http://www.islascruz.org/html/index.php/blog/show/Pygtk:-About-keyboard-accelerators.html

Insgesamt sieht meine Version jetzt so aus:
#!/usr/bin/env python

import pygtk
pygtk.require( '2.0' )
import gtk
from os import system, path
from sys import argv

LOCK = 'xscreensaver-command -lock'
LOGOUT = 'openbox --exit'
REBOOT = 'dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart'
SHUTDOWN = 'dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop'



class MyExit:

	def delete_event( self, widget, event, data=None ):
		gtk.main_quit()
		return False

	def action( self, widget, data=None ):
		if data == 'lock':
			system( LOCK )
			gtk.main_quit()
		elif data == 'logout':
			system( LOGOUT )
		elif data == 'reboot':
			system( REBOOT )
		elif data == 'shutdown':
			system( SHUTDOWN )
		return False

	def catch_button( self, window, event, data=None ):
		keyval = event.keyval
		#Escape
		key_esc = gtk.gdk.keyval_from_name( 'Escape' )
		if keyval == key_esc:
			gtk.main_quit()

	def __init__( self ):
		self.window = gtk.Window( gtk.WINDOW_TOPLEVEL )
		self.window.set_title( 'MyExit' )
		self.window.connect( 'key-press-event', self.catch_button )
		self.window.connect( 'delete_event', self.delete_event )
		self.window.set_border_width( 20 )
		self.window.set_decorated( False )
		self.window.set_icon_name( 'exit' )
		self.window.set_keep_above( True )
		self.window.set_position( gtk.WIN_POS_CENTER )

		self.box = gtk.HButtonBox()
		self.box.set_spacing( 10 )
		self.window.add( self.box )
		self.box.show()

		self.buttons = {}
		here = path.dirname( argv[0] )
		

		self.buttons['lock'] = gtk.Button( 'Lock Screen' )
		self.buttons['lock'].connect( 'clicked', self.action, 'lock' )
		self.buttons['lock'].set_image( gtk.image_new_from_file( path.join( here, 'lock.png' ) ) )
		self.buttons['lock'].set_relief( gtk.RELIEF_NONE )
		self.box.pack_start( self.buttons['lock'], True, True, 0 )

		self.buttons['logout'] = gtk.Button( 'Logout' )
		self.buttons['logout'].connect( 'clicked', self.action, 'logout' )
		self.buttons['logout'].set_image( gtk.image_new_from_file( path.join( here, 'logout.png' ) ) )
		self.buttons['logout'].set_relief( gtk.RELIEF_NONE )
		self.box.pack_start( self.buttons['logout'], True, True, 0 )

		self.buttons['reboot'] = gtk.Button( 'Reboot' )
		self.buttons['reboot'].connect( 'clicked', self.action, 'reboot' )
		self.buttons['reboot'].set_image( gtk.image_new_from_file( path.join( here, 'reboot.png' ) ) )
		self.buttons['reboot'].set_relief( gtk.RELIEF_NONE )
		self.box.pack_start( self.buttons['reboot'], True, True, 0 )

		self.buttons['shutdown'] = gtk.Button( 'Shutdown' )
		self.buttons['shutdown'].connect( 'clicked', self.action, 'shutdown' )
		self.buttons['shutdown'].modify_bg( gtk.STATE_NORMAL, gtk.gdk.Color( '#FCC' ) )
		self.buttons['shutdown'].set_image( gtk.image_new_from_file( path.join( here, 'shutdown.png' ) ) )
		self.box.pack_start( self.buttons['shutdown'], True, True, 0 )

		for key, button in self.buttons.items():
			button.show()

		self.window.show()
		self.buttons['shutdown'].grab_focus()

def main():
	gtk.main()
	
if __name__ == "__main__":
	exit = MyExit()   	
	main()
	
2 Monate später
Hallo und vielen Dank für das Programm ist echt cool, hab nur eine Frage.

Bei mir funktioniert das runterfahren und neustarten nur wenn ich es als root ausführe, wass etwas umständlich ist hab versucht das irgendwie mit sudo zu umgehen hat aber nicht wirklich funktioniert, also wie macht ihr das?
Wäre über jeden Hinweis dankbar.
marten schrieb… also wie macht ihr das?
Mit HAL (über DBUS).
ok hatte es genau so gemacht, jedoch keine ConsoleKit-Session am laufen, jedoch hat es als root funktioniert.

Jetzt geht es auf jeden Fall, vielen Dank.
  • [gelöscht]

Kevin D. schriebAlso, ich habe die Sache mit dem Escape-Key mal eingefügt, jetzt müsste es für jeden ein Leichtes sein weitere Shortcuts einzubauen (falls nötig).

Folgende Änderungen habe ich dafür vorgenommen ( die mit #<<<<<< markierten Zeilen sind neu, falls keine markiert sind ist der ganze Block neu):
def catch_button( self, window, event, data=None ):
        keyval = event.keyval
        #Escape
        key_esc = gtk.gdk.keyval_from_name( 'Escape' )
        if keyval == key_esc:
            gtk.main_quit()
        self.window.set_title( 'MyExit' )
        self.window.connect( 'key-press-event', self.catch_button ) #<<<<<<
        self.window.connect( 'delete_event', self.delete_event )
[…]
So kompliziert muss es nicht sein:
    def _on_window_key_release(self, widget, event):
        if event.keyval == gtk.keysyms.Escape:
            self.window.hide()
        return True
Das teil braucht endlich ein Mercurial-Repo 🙂
Ja... Wenn die Sticker fertig sind^^
Entschuldigt die doofe frage. Geht das denn auch mit KDE? Da ich keine Lust habe KDM zu nutzen um KDE Herunterfahren zu können.