bash-completion

29/04/2008 - 20:27 von Jakobus Schuerz | Report spam
Wie geh ich es am besten an.

Aufgabe:

Ich habe eine Liste die so àhnlich ausschaut:

10.1 0.0 2000
10.1 300 20
10.1 250 1000
10.2 100 1040
10.2 5000 4000
20.3 450 8500
20.3 1.0 nan
...

ich möchte eine Regel für die bash_completion schreiben, die mir
folgendes tut:

befehl -A (hier die Tab-Taste gedrückt soll mir die Werte aus Spalte
eins liefern und am Ende einen Doppelpunkt anhàngen)
befehl -A: (hier die Tab-Taste gedrückt soll mir den minimalen und den
maximalen Wert aus den Spalten 2 und 3 liefern, aber nur aus den Zeilen,
die mit dem vorher aus Spalte 1 gewàhlten Wert übereinstimmen.

also

befehl -A (completion schlàgt 10.1 10.2 20.3 vor)

befehl -A10.1: (completion schlàgt 0.0 2000 vor)

wichtig, nach dem Doppelpunkt darf kein Leerzeichen sein.

ich hab bisher folgendes geschafft:

~$ cat /etc/bash_completion.d/befehl
function _allist() {
COMPREPLY=()
local cur prev
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
"-A"|"-B")
COMPREPLY=( $( compgen -o nospace -W "`cut -f1
/pfad/zu/liste/liste.txt|sed -e 's/$/:/'|uniq|sort|uniq`" --
$cur;compgen -X\ '[0-9a-zA-Z]*.[0-9a-zA-Z]*:' -W "`grep "${cur%.$}"
/pfad/zu/liste/liste.txt|\
awk 'BEGIN{OFS=""}{print $2,$3}'|uniq|sort -n|uniq|sed -n -e '1p' -e
'$p'`" ))
return 0
;;
esac

}
complete -F _allist befehl

~$

das liefert mir allerdings:

befehl -A (hier wird nur etwas vorgeschlagen, wenn ich einen Abstand
mache, und zwar: 10.1: 10.2: 20.3: - also schön die Werte aus Spalte eins)

befehl -A 10 (completion: 0.0 10.1: 10.2: 2000 - also den minimalen Wert
aus Spalte zwei und 3 der Zeilen wo 10.1 in der ersten steht, dann die
restlichen Ergànzungen für Spalte 1, und dann den maximalen Wert der
Spalten 2 und 3)

befehl -A 10.1: (completion: kein Vorschlag, dafür selbstàndige
Ergànzung auf 10.1:10.1: bei Drücken der Tab-Taste. Also Mist. denn hier
sollte nur mehr der minimal- und maximalwert aus Spalte zwei und drei
vorgeschlagen werden)

Any Ideas?

lg jakob


lg jakob
 

Lesen sie die antworten

#1 Hauke Laging
03/05/2008 - 23:18 | Warnen spam
Jakobus Schuerz schrieb am Dienstag 29 April 2008 20:27:

wichtig, nach dem Doppelpunkt darf kein Leerzeichen sein.

COMPREPLY=( $( compgen -o nospace

complete -F _allist befehl



Verwechselung: Das "-o nospace" muss in den complete-, nicht in den
compgen-Aufruf.

befehl -A 10.1: (completion: kein Vorschlag, dafür selbstàndige
Ergànzung auf 10.1:10.1: bei Drücken der Tab-Taste.



Komisches Problem, hat nichts mit Deinem Code, sondern mit der
resultierenden Zeichenkette zu tun. Ich mach mal 'nen neuen Thread
dafür auf.


CU

Hauke
http://www.hauke-laging.de/ideen/
http://zeitstempel-signatur.hauke-laging.de/
Wie können 59.054.087 Leute nur so dumm sein?

Ähnliche fragen