Unity-Desktop

Als Linux-Fuzzi habe ich zwar jahrelang die komfortabelste Distribution (Ubuntu), aber mit dem Desktop Unity habe ich mich nicht anfreunden können. Jetzt bin ich in mich gegangen und habe meine mentale Sperre eingegrenzt: Mir fehlte das Startmenü. Was Unity stattdessen oben links abietet, hat für mich den Schwierigkeitsgrad eines Abiturs, einer theoretischen Führerscheinprüfung und eines Jagdscheins alles zusammen – das Gegenteil von intuitiv. (Ok, der Verena ihre Steffi wird das wohl anders beurteilen ... huhu, Steffi!)

Na, und als Tcl/Tk-Fuzzi bin ich gestern auf die Idee gekommen, das Startmenü selbst zu machen und in der Launcher-Leiste ganz oben zu positionieren ... here it comes:


#!/bin/bash

$(echo '

package require Tk
wm geometry . +[winfo pointerx .]+[winfo pointery .]
set font "Helvetica 11"
pack [menubutton .button -text Startmenü -font $font]
.button configure -menu [menu .button.start -tearoff no -font $font]

proc makeMenu {menu l} {
    global font
    set count 0
    foreach {cmd label cmdOrMenu} $l {
	switch -exact -- $cmd {
	    command {
		$menu add command\
		    -label $label\
		    -command "puts {$cmdOrMenu}; exit"
	    }
	    menu {
		set menu1 [menu $menu.[incr count]\
			       -tearoff no\
			       -font $font]
		$menu add cascade -label $label -menu $menu1
		makeMenu $menu1 $cmdOrMenu
	    }
	    separator {
		$menu add separator
	    }
	    default {
		return -code error "unknown command: $cmd"
	    }
	}
    }
}

makeMenu .button.start {
    menu Büro {
	command LibreOffice soffice
	command Lyx lyx
    }
    menu Grafik {
	command Inkscape inkscape
	command Gimp gimp
	command LibreOffice "libreoffice -draw"
    }
    menu Multimedia {
	command Video totem
	command Musik rhythmbox
    }
    menu Internet {
	command Chrome google-chrome
	command Firefox firefox
    }
    menu Editor {
	command Gedit gedit	
	command Emacs emacs
    }
    menu Spiele {
	command Solitär sol
	command Dame flcheckers
	command Mine gnome-mines
	command Mah-Jongg gnome-mahjongg
	command Block-Attack! flblocks
    }
    menu System {
	command Terminal gnome-terminal
	command Startmedium "gksudo usb-creator-gtk"    }
    separator - - 
    command "Startmenü bearbeiten" {emacs ~/bin/startmenu}
}

tk_popup .button.start [winfo pointerx .] [winfo pointery .]
# bind . <FocusIn> exit
trace add execution .button.start leave {apply {args {
    if {[lindex $args 0 1] eq "unpost"} then {
	after idle exit
    } } } }

' | tclsh) &

Erklärung, das bash-Script ruft mit $( ... ) eine Unterfunktion auf, die ihererseits einen Tcl-Quelltext via pipe (das Zeichen |) an den Tcl-Interpreter schickt. Dieser tut nichts anderes, als die Menüauswahl des geneigten Benutzers an stdout zu schreiben, also den jeweiligen Programm-Befehl, und sich dann zu verabschieden. Dieser Ausgabetext ist der Rückgabewert der Funktion $( ... ) und wird vom Script ausgeführt, weil an erster Stelle der Script-Zeile. Soweit capis?

Systemvoraussetzung (außer Linux, versteht sich): die Shell bash (höchstwahrscheinlich schon da), und eine Tcl/Tk-Installation (muss manchmal nachbesorgt werden, ist aber verfügbar). Wenn ihr mit Ubuntu Unity schafft und ein Minimum an Tcl/Tk drauf habt: KEW (Kopieren, Einfügen, Wohlfühlen).

Das Schmankerl schlechthin ist der unterste Menü-Eingtrag „Startmenü bearbeiten“ – darauf bin ich mächtig stolz! – Um es in die Launcher-Leiste links am Bildschirmrand zu kriegen, muss eine .desktop-Datei angelegt werden, die sich (zumindest auf meinem Schreibtisch) da reinpraktizieren ließ.

(Ursprung – Sonntag, den 31. August 2014, 00:00:00 Uhr)

<< Home | Sitemap | A-Z | Impressum | Suche >>