[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Readline + completion of "all files in current directory"

Marc Heiler

11/17/2007 3:50:00 PM

Hi,

I am having a hard time understanding readline. If i have a list of
possible matches for given files (and subdirectories) in a directory,
how can I make readline work with that, so that i can type something
like:

some_method r<TAB>

where some_method would be just a method, and "r" a file in current
directory (ie. rx.rb ry.rb rz.rb files)

Readline.completion_proc = proc do |word|
Dir['*'].grep(/\A#{Regexp.quote(word)}/)
end
Readline.completion_case_fold = true
# hmm
--
Posted via http://www.ruby-....

4 Answers

Charles Oliver Nutter

11/17/2007 4:01:00 PM

0

Marc Heiler wrote:
> Hi,
>
> I am having a hard time understanding readline. If i have a list of
> possible matches for given files (and subdirectories) in a directory,
> how can I make readline work with that, so that i can type something
> like:
>
> some_method r<TAB>
>
> where some_method would be just a method, and "r" a file in current
> directory (ie. rx.rb ry.rb rz.rb files)
>
> Readline.completion_proc = proc do |word|
> Dir['*'].grep(/\A#{Regexp.quote(word)}/)
> end
> Readline.completion_case_fold = true

This actually already works on JRuby by mistake; something to do with
the readline library we use. It's a bug, but it's rather amusing:

~/NetBeansProjects/jruby $ jirb
irb(main):001:0> puts build<tab>
build build-config.xml build.xml build_lib
irb(main):001:0> puts build

- Charlie

Marc Heiler

11/17/2007 6:01:00 PM

0

> ~/NetBeansProjects/jruby $ jirb
> irb(main):001:0> puts build<tab>
> build build-config.xml build.xml build_lib
> irb(main):001:0> puts build

Hmm but how does it work?
Guess i have to look at the source :/
--
Posted via http://www.ruby-....

Charles Oliver Nutter

11/18/2007 1:08:00 AM

0

Marc Heiler wrote:
>> ~/NetBeansProjects/jruby $ jirb
>> irb(main):001:0> puts build<tab>
>> build build-config.xml build.xml build_lib
>> irb(main):001:0> puts build
>
> Hmm but how does it work?
> Guess i have to look at the source :/

Considering that it's a bug...I'm not really sure :)

I believe it has something to do with our readline library (Jline)
probably having some default mode where tab completion includes the
current directory.

- Charlie

ara.t.howard

11/18/2007 3:17:00 AM

0


On Nov 17, 2007, at 8:50 AM, Marc Heiler wrote:

> I am having a hard time understanding readline. If i have a list of
> possible matches for given files (and subdirectories) in a directory,
> how can I make readline work with that, so that i can type something
> like:
>
> some_method r<TAB>
>
> where some_method would be just a method, and "r" a file in current
> directory (ie. rx.rb ry.rb rz.rb files)
>
> Readline.completion_proc = proc do |word|
> Dir['*'].grep(/\A#{Regexp.quote(word)}/)
> end
> Readline.completion_case_fold = true
> # hmm

cfp:~ > cat a.rb
require 'readline'

class File
def self.tab arg, prompt = 'directory > '
candidates = Array === arg ? candidates : Dir[arg]
Readline.completion_proc = lambda do |abbrev|
list = candidates.select{|candidate| candidate.index(abbrev)
== 0}
list = list.empty? ? candidates : list
end
Readline.readline prompt
end
end

p File.tab('*').strip


cfp:~ > ruby a.rb
directory > s<tab>
sane_transactions.rb sfctmp.rb site
spadoc_watch src sudo
sciruby sif_nighttime_drop source
sqlite.sh ss.png svn
directory > si<tab>
sif_nighttime_drop site
directory > site
"site"


a @ http://codeforp...
--
it is not enough to be compassionate. you must act.
h.h. the 14th dalai lama