Freitag, 16. Juli 2010

bash Autovervollständigung

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.

Keine Kommentare:

Kommentar veröffentlichen