[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Kommandozeile fuer dialog im Bashskript bauen



High, high ...
* Andreas Pakulat <apaku@gmx.de> schrieb am [19.08.05 21:26]:
> On 19.Aug 2005 - 19:57:16, Frank Küster wrote:
> > Andreas Pakulat <apaku@gmx.de> wrote:
> > 
> > > On 19.Aug 2005 - 18:46:08, Frank Küster wrote:
> > >> Andreas Pakulat <apaku@gmx.de> wrote:
> > >> 
> > >> > MENUOPTS="\"Titel mit Leerzeichen\" 60 15 5"
> > >> > environments="item1 \"desc 1\" item2 \"desc 2\""
> > >> > defaultloc="--default-item item2"
> > >> > timeout="--timeout 5"
> > >> > /usr/bin/dialog $defaultloc $timeout --menu $MENUOPTS $environments
> > >> 
> > >> Wieso nicht
> > >> 
> > >> TITEL="Titel mit Leerzeichen"
> > >> OTHEROPTS="60 15 5"
> > >> /usr/bin/dialog $defaultloc $timeout --menu "$TITEL" $OTHEROPTS $environments
> > >
> > > :-) Der Menutitel ist nich das eigentliche Problem, sondern
> > > environments. Das wird generiert, damit der Nutzer spaeter einfach
> > >
Alles Zshell, fuer die Bash geht das folgende bestimmt auch aehnlich.

Das mit den Environments habe ich ueber ARRAYs geloest, das ist
ziemlich einfach (Bsp.):
for VAR in $Werte ; {
    ARRAY[ANZ]="\"$VAR\" \"\""
    (( ANZ++ ))
}

Durch das Quoting kannst Du auch Leerzeichen benutzen.

Ich habe mir (Zshell) Funktionen fuer menue, ..., geschrieben die
auch gleich die Spalten und Zeilenlaenge des Terminal berechnen. 
Das mit den Variablen TITLE MSG kannste auch anders machen, das soll
eh demnaechst von gettext (locale) geloest werden.

Aber vielleicht ist dies ja fuer dich eine Anregung.

Alle Scripts initialisieren sich durch die Funktion script_init,
welches vorab die Funktionspfade und einige Variablen generiert.

Durch "eval" wird alles in einer Subshell ausgefuehrt, dadurch hast
du weniger Probleme mit generierten Variablen, ausser du exportierst
diese.

# Funktion menue
#
# benötigt die Funktion return_check
#
# usage: menue -v TITLE_NAME "$ARRAY" (-v = Variable)
#        menue -s TITLE_NAME ARRAY_NAME (-s = */msg/$LANGUAGE/share)
#        menue TITLE_NAME ARRAY_NAME
#        TITLE_NAME - Der TITLE_NAME wird aus der */msg/$LANGUAGE/title gelesen
#        ARRAY_NAME - Der ARRAY_NAME wird aus der */msg/$LANGUAGE/$SCRIPTNAME gelesen
#        ARRAY - Array mit Werten die man auswaehlen kann.
#
menue ()
{
	if [ "$#" -ge 2 ] ; then
		MSG=${${(s.;.)${(M)${(f)"$(< ${MSG_FILE%/*}/share)"}##(s#)menuepunkt;*}}[2]}
		if [ "$1" = -v ] ; then
			TITLE=${${(s.;.)${(M)${(f)"$(< ${MSG_FILE%/*}/title)"}##(s#)${2};*}}[2]}
			MENUE_ARRAY=(${3[*]})
		elif [ "$1" = -s ] ; then
			TITLE=${${(s.;.)${(M)${(f)"$(< ${MSG_FILE%/*}/title)"}##(s#)${2};*}}[2]}
			MENUE_ARRAY=(${${(s.;.)${(M)${(f)"$(< ${MSG_FILE%/*}/share)"}##(s#)${3};*}}[2]})
		else
			TITLE=${${(s.;.)${(M)${(f)"$(< ${MSG_FILE%/*}/title)"}##(s#)${1};*}}[2]}
			MENUE_ARRAY=(${${(s.;.)${(M)${(f)"$(< $MSG_FILE)"}##(s#)${2};*}}[2]})
		fi

		(( Elemente=+${#MENUE_ARRAY[@]} ))
		(( Elemente = Elemente/2+1 ))
		Overhead=7
		if [ "$[Elemente+Overhead]" -lt "$[LINES-4]" ]; then
		    (( DisplayLines = Elemente+Overhead ))
		else
			(( DisplayLines = LINES-6 ))
			(( Elemente = DisplayLines-8 ))
		fi

		DialogTitle="--title \"${SCRIPTNAME}::${TITLE}\" $DialogBackTitle"
		DialogLabel="--ok-label $OK --help-button --help-label $HILFE --cancel-label $ABBRECHEN"
		DialogPara="--clear --menu \"$MSG\" $DisplayLines $[COLUMNS-8] $Elemente ${MENUE_ARRAY[*]}"
		eval $Dialog $DialogLabel $DialogTitle $DialogPara $DialogReDirect
		
		return_check
	else
		no_para_msg $0
	fi
}

Sorry, wegen der Zeilenueberlaenge (>72), ist halt copy & Paste (vim).
Die Sourcen kannst du dir unter
ftp://ftp.berlios.de/pub/netzworkk/scripts/kwtools/Sources/0.4/
laden und ansehen.

mfg Kiste

-- 
#######################################################################
Netzworkk
Kai Wilke
kiste@netzworkk.de
http://www.netzworkk.de
http://netzworkk.berlios.de

Attachment: signature.asc
Description: Digital signature


Reply to: