Article 5221 of comp.lang.perl:
Xref: feenix.metronet.com comp.lang.perl:5221
Newsgroups: comp.lang.perl
Path: feenix.metronet.com!news.utdallas.edu!convex!convex!convex!cnn.exu.ericsson.se!s10a10!exukenc
From:
[email protected] (Ken Corey,T/TF,75841)
Subject: Re: Name completion question
Message-ID: <
[email protected]>
Sender:
[email protected]
Nntp-Posting-Host: s10a10.exu.ericsson.se
Reply-To:
[email protected]
Organization: Ericsson Network Systems
References: <
[email protected]>
Date: Mon, 23 Aug 1993 16:15:39 GMT
X-Disclaimer: This article was posted by a user at Ericsson.
Any opinions expressed are strictly those of the
user and not necessarily those of Ericsson.
Lines: 85
In article
[email protected],
[email protected] (Ron Stone) writes:
>John Stoffel (
[email protected]) wrote:
>: Has anyone written some perl code to name completion? ...
>You should be able to use the complete.pl package in the distribution
>for this.
Here's a little ditty I cooked up once to do this. (This is really non-perlish perl,
but it worked for all the cases I needed...8^)
---
exukenc == Ken Corey, 214/907-5841 : Speaking for the Americans...all of `em.
-------------------------snip--------------------------------
#!/usr/local/bin/perl
# by Ken Corey,
[email protected] @1992, you may give but not sell.
# provides name completion in a cd command.
# Format:
# alias cd 'chdir `compcd \!*`'
# Then, you can:
#
# cd NewPathName
#
# The format of the NewPathName argument is the same as that of any
# regular CD command, with the exception that the first '-' in ANY
# filename is removed, and the filename is handed verbatim to chdir.
#
# So: cd /scr/ke/cd Will change into the /scratch/kenc/cd
# directory, unless there's some ambiguity
# cd /scr/-kenc/cd Will change into the /scratch/kenc/cd
# directory specifically, and not perform
# completion on the 'kenc' part.
#
$newpathname = $ARGV[0];
$count = ($newpathname =~ s/\//\//g);
@path = split(/\//,$newpathname);
if ($#ARGV< 0) {
print "$ENV{HOME}\n";
exit 0;
}
#if ($path[0] == '') {
# print "path[0] == ''\n";
# chdir "/";
# shift @path;
# $count--;
#}
while ($count >= 0) {
# print "path[0]=$path[0].\n";
s/ $//g;
# print "length of path = ".length($path[0])."\n";
if ($path[0] =~ /^\.{1,2}$/) {
$result = $result . "$path[0]/";
} elsif ($path[0] =~ /^\-/) {
$path[0] =~ s/-//;
$result = $result . "$path[0]/";
} else {
if (length($path[0])==0) {
} elsif (opendir(DIRHANDLE,'.')) {
@file = grep(!/^\.{1,2}$/,grep(-d,readdir(DIRHANDLE)));
@file=grep(/^$path[0].{0,}/,@file);
closedir(DIRHANDLE);
$path[0] = $file[0];
$result = $result . "$file[0]/";
} else {
print "Oops! Couldn't open '.'.\n"; exit 1;
}
}
if (length($path[0]) != 0) {
chdir $path[0];
} else {
print "/";
chdir "/";
}
shift @path;
$count--;
}
print "$result\n";