= rush-0.1.bandicoot

== rush?
rush is an attempt to create an extremely flexible fully object-oriented
shell in Ruby.

0.1.bandicoot is the current state of development (small and rather
fuzzy).

The purpose of this release was to offer rudimentary support for shell
integration and to refine the infrastructure. The more extreme
development is still to come.


== Getting rush
http://www.magical-cat.org/projects/rush/downloads/rush-0.1.bandicoot.tar.gz

Unpack the archive: complete installation instructions are in
doc/README.


== What can it do?
At this stage, rush is limited but already has some useful features:
the most important one of these is that you can write any valid ruby
code right from your command-line:

   r u s h > x = 1 + 2
   r u s h > puts x + 2
   5
   r u s h > def foo(x)
   -ruby- 1>   puts x
   -ruby- 1> end
   r u s h >
   r u s h > foo "Hello!"
   Hello!
   r u s h >

You can treat rush as irb or just another .rb file (you can almost
discard irb altogether). Some diagnostic information can also be
requested:

   r u s h > $env.rubyreturn!
   r u s h > 1 + 1
   # => 2
   r u s h > $env.debug!
   # => true

rush tries to integrate with traditional shell syntax. Currently,
pipes and 'commands' are supported. Commands are the traditional
shell programs such as 'ls' and 'cd'. rush defines some of these
commands itself (Commands.list for a list) but it also allows one
to access the commands provided by the system by prepending the
command with a '!'; for example, !ls (some programs, such as vi,
require special handling. These programs are launched with ^vi).
Standard pipe filter syntax:

   r u s h > !ls
   test.rb
   foobar.rb
   r u s h > !ls | !grep 'foo'
   foobar.rb

But here is where things get exciting: you can mix Ruby with pipes.

   r u s h > 'foo' | !grep 'foo'
   foo

Or, the other way:

   r u s h > !ls | .first
   test.rb
   r u s h > !ls | .first | .reverse
   br.tset
   r u s h > !ls | .map {|file| file + '.bak'}
   test.rb.bak
   foobar.rb.bak
   r u s h > !ls | .class
   Array
   r u s h > 97 | .chr
   a

You can invoke any method on the ruby object returned by the pipe as
long as that object responds to it. You can also do more complex
manipulation by accessing the object as $pipe which means you need not
call one of its methods directly:

   r u s h > !ls | files = $pipe; foo(files)
   test.rb
   foobar.rb

rush is completely customizable since it is written in ruby. You can,
actually, modify the running program right from the command-line. If you
want and/or need persistent initializations and such, you can use the
standard location ~/.rushrc. See doc/HOWTO.customizing for information
on this file.

rush also includes tab completion for directories/files and ruby
method completion!

For more information, see doc/HOWTO.using in your rush directory.


== Documentation
All of rush's documentation is in the doc/ directory. Additionally, it
is available on the web.

http://www.magical-cat.org/projects/rush/rdoc

IE and possibly Opera:

http://www.magical-cat.org/projects/rush/rdoc-ie


== Contact
The simplest way is to join the channel #rush on freenode and ask away.
You can also sign up for the mailing list or visit the bug tracker:

http://rubyforge.org/mailman/listinfo/rush-developer

http://rubyforge.org/tracker/?group_id=874


== Development
See the world!

Then join the project!

Developer docs are in doc/HOWTO.development or on the web:
http://www.magical-cat.org/projects/rush/rdoc/#file:doc.HOWTO.development

Visit #rush on freenode.

Sign up for the mailing list (with practically negative traffic):
http://rubyforge.org/mailman/listinfo/rush-developer


== Developers
rush is:
    dpb, kazzmir, kbrooks, manveru, martin, reyn, rue, shevegen, vagabond


== Thanks! Have fun with rush!