bash Autovervollständigung

Published on Friday, 16 July 2010

Für ein bestimmtes Konto exportiere ich die Umsatzdaten aus dem Web-Frontend meiner Bank. Diese (merkwürdige) csv-Datei wandle ich dann in qif um, da GnuCash kein csv importiert (den verwendeten Konverter findet man im Archiv der GnuCash-De liste).
Da ich die cvs-Dateien und die qif-Dateien nebeneinander archiviere habe ich manchmal beim konvertieren das Problem, das ich nicht mehr so genau weiß, was es nun zu konvertieren gilt (bzw. welche csv-Dateien noch nicht konvertiert sind)....

Abhilfe habe ich mir von der programmierbaren Eingabe-Vervollständigung der Bash versprochen. Meine Idee: Für die Eingabe-Vervollständigung sollten nur csv-Dateien in Betracht kommen und hier auch nur diese, für die noch keine Datei mit Endung qif besteht. Gedacht, getippt:

_csv2qif_possible_csvFiles()
{
local csvs optfiles
optfiles=""
csvs=$(find . -maxdepth 1 -iname "*.csv" | sed "s/\.\///g")
for file in ${csvs}; do
if [ ! -f ${file/\.csv/.qif} ]; then
optfiles="${optfiles} ${file}"
fi
done
echo $optfiles
}
_csv2qif()
{
local cur opts
cur="${COMP_WORDS[COMP_CWORD]}"
opts=$(_csv2qif_possible_csvFiles)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
}
complete -F _csv2qif csv2qif.py

Diese Datei beim Starten der Bash mit einlesen oder bei gentoo einfach in /etc/.bash_completion.d/ oder ${HOME}/.bash_completion.d/ kopieren und schon klappt's auch mit der Eingabe-Vervollständigung.
Geholfen hat mir übrigens die Debian-Einführung zu bash completion.

Screenshots finde ich bei Kommandozeilen-Tools immer nicht so toll, hier ist Trotzdem einer:

Als mögliche Verbesserung bleibt noch die Suche der csv-Dateien nicht nur auf das aktuelle Verzeichnis zu beschränken, sondern einen eingegebenen pfad (z.B.: ../csv/2010/Q3/) mit zu beachten, aber das hebe ich mir wohl mal für einen „Urlaub“ auf...

Edit: Eine verbesserte Version findet sich in: bash Autovervollstandigung die Zweite.