Samstag, 17. Juli 2010

bash Autovervollständigung die Zweite

Gestern habe ich über die Autovervollständigung der bash geschrieben. Heute möchte ich kurz beschreiben wie ich das Verhalten verbessert habe.
Die noch fehlenden Funktionen waren:
  1. Die Autovervollständigung von Verzeichnisnamen
  2. Die Autovervollständigung von csv-Dateien in anderen Verzeichnissen als dem aktuellen.
Das Skript habe ich nun folgendermaßen abgeändert:
_csv2qif_possible_csvFiles()
{
   local curWord csvs optfiles
   curWord=${1}
   optfiles=""
   csvs=$( compgen -f -X "!*.csv" -- "${curWord}" )
   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 ${cur})

   COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
   return 0
}

complete -o plusdirs -F _csv2qif csv2qif.py

In Zeile 25 wird die Funktion Nr. 2 (Autovervollständigung von Verzeichnisnamen) realisiert. Durch den Parameter -o plusdirs wird die Liste der Autovervollständigung um die möglichen Verzeichnisse erweitert.

In Zeile 6 wird die Funktion Nr. 1 (andere Verzeichnisse als das aktuelle) realisiert. Die bash „hat da schon etwas vorbereitet“: compgen -f -X "!*.csv" -- "${curWord}" Stellt eine Liste für die Autovervollständigung zusammen. Und zwar werden hier für den Parameter ${curWord} alle passenden Dateien (-f) mit der Endung .csv (-X "!*.csv") Aufgelistet. Dabei wird schon bedacht, dass der Parameter auf ein anderes Verzeichnis zeigen könnte...

Finde ich super.
Dieses Mal habe ich meine Inspiration in der bash-Referenz gefunden, unter Programmable-Completion.

Keine Kommentare:

Kommentar veröffentlichen