#!/usr/bin/perl use diagnostics; use strict; use warnings; use Tk; my $mw = new MainWindow; $mw->title('Autovervollständigung'); my $e = $mw->Entry(-text => '', -width => 80, ) ->pack( -expand => 1, -fill => 'x', ); $mw->bind ('', \&vervollstaendige ); $e->focus(); MainLoop(); sub vervollstaendige { my $text = $e->get(); print $text, "\n"; my @treffer; my ($pfad, $trenner, $anf) = $text =~ m~^(.*)([/\\])([^/\\]*)$~; print "pfad='$pfad', Anfang='$anf'\n"; if (! -d $pfad) { print "'$pfad' ist kein Verzeichnis, Abbruch\n"; } else { opendir PFAD, "$pfad/" or die "Kann Verzeichnis '$pfad' nicht öffnen: $!"; my @verzeichnisse = grep -d "$pfad/$_", readdir PFAD; closedir PFAD; for my $v (@verzeichnisse) { print "Verzeichnis '$v'\n"; if ($v =~ /^\Q$anf/i) { # bei Linux/Unix das i entfernen! print "Anfang '$anf' passt auf '$v'\n"; push @treffer, $v; } } } $e->delete(0, 'end'); if (scalar(@treffer) == 1) { $e->insert('end', "$pfad$trenner$treffer[0]"); } else { $e->insert('end', "$pfad$trenner$anf"); } $e->selectionClear(); $e->icursor('end'); $e->configure(state => 'disable'); $e->configure(state => 'enable'); $e->focus(); } # sub vervollstaendige