rsh 0.9.0
rsh, or Rsh for short, is a new shell that takes a modern, structured approach to your commandline. It works seamlessly with the data from your filesystem, operating system, and a growing number of file formats to make it easy to build powerful commandline pipelines.
We're happy to announce the 0.9.0 release of Rsh. This release offers better help and error feedback, better support for the native shell, new commands, lots of command improvements, and bugfixes.
Where to get it
Rsh 0.9.0 is available as
pre-built binaries
or from
crates.io. If you have Rust installed you can install it using
cargo install rsh.
If you want more goodies, you can install
cargo install rsh --features=stable.
As part of this release, we also publish a set of plugins you
can install and use with Rsh. To install, use
cargo install rsh_plugin_<plugin name>.
What's new
--help available on all commands (Amanita-muscaria)
One of the first things a user might do in a new shell is to
type a familiar command and pass it --help. A
perfectly reasonable thing to do, and with 0.9.0 it does exactly
you'd expect. It will now print out the help information for
the given command for all internal commands (much in the same
way as using help <command name>)
Better error feedback (wycats, andrasio)
Our improvements to the parser as part of 0.9.0 also come with some fun perks. One of these is that unknown flags, and similar errors, will now get highlighted red to let you know that this isn't a valid input to the command.
Shelling out (jonathandturner)
An early feature of Rsh that people that has been a popular
request to bring back is "shelling out". When Rsh
doesn't recognize a command, it will try to find it as an
external command. In the last few versions, this was limited as
Rsh was not able to execute shell scripts, .cmd scripts...
basically anything that wasn't an executable. The problem is
that lots of apps use scripts as a way to configure what to
execute (commands like code, npm, and
others are common scripts behind the scenes).
With 0.9.0, we're returning to our earlier behavior and executing both binaries and shell scripts by calling to the platform-native shell when we call an external command. While this should largely be invisible as a user, more things should "just work" how they would in bash or Windows Terminal.
New commands
du (Amanita-muscaria)
Rsh now has its own du command to show the disk
usage of a part of the file system. This is a handy way of
quickly looking for where all your free space went.
❯ du
───┬───────────────┬─────────┬────────────────
# │ name │ size │ contents
───┼───────────────┼─────────┼────────────────
0 │ .git │ 4.7 MB │ [table 6 rows]
1 │ .jekyll-cache │ 49.0 KB │ [table 1 rows]
2 │ _includes │ 881 B │
3 │ _layouts │ 4.3 KB │
4 │ _posts │ 82.4 KB │
5 │ _sass │ 21.5 KB │
6 │ _site │ 5.3 MB │ [table 4 rows]
7 │ assets │ 2.4 MB │ [table 1 rows]
8 │ images │ 2.4 MB │
───┴───────────────┴─────────┴────────────────
clear (JesterOrNot)
Short, sweet, and to the point, you can now
clear your screen with the new
clear command. Like our other commands, this works
across all the platforms Rsh runs on.
New welcome message (jonathandturner)
Welcome to rsh 0.9.0 (type 'help' for more info)
rsh on 📙 bump_to_0_9_0 is 📦 v0.9.0 via 🦀 v1.40.0
❯
The first time you open Rsh now you'll be greeted by a brief
message to tell you the version of Rsh and a reminder to use the
help command to learn more about Rsh and how it
works.
Improved table streaming (jonathandturner)
If you've used earlier versions of Rsh, you may have wondered why every 50 rows we start a new table. This is where the implementation showed through a bit more than it should. As tables are printed, they are created and then displayed as enough rows are available. This means that output will spool to the screen and not wait for the table to finish processing before you see something. In general, it's good to see the tables earlier, but seeing a different shape of table every 50 rows can be annoying.
We've updated table output to be a lot cleaner, using this logic:
- If rows are being output quickly, build a larger table before outputting it
- If rows are being output slowly, buffer a smaller number of rows and display them (just as before)
- If rows change shape, switch to showing a different table. This helps you visually see when your data source is giving you a new kind of data
Command improvements
ls and rm now error when a path
isn't found (Amanita-muscaria)
Adding a bit of polish this release, ls and
rm will now error if you pass them a path they
can't find.
ls can optionally show just the filename
(coolshaurya)
If you've used ls on your subdirectories, you
might have noticed that the subdirectory becomes part of the
filename. This can be great for building up a pipeline (and a
script in the future), but sometimes all you care about is the
filename. You can now pass ls the
--short-names command flag to get just the
filename.
ls can also optionally show symlink targets
(JosephTLyons)
Further improving ls, you can now see the symlink
targets with the --full flag.
ls smaller by default, now with more info with
--full (jonathandturner)
To make Rsh easier to use on smaller terminals, the
ls command will now try to take up less space by
default. The columns from earlier version of Rsh (and a few
more!) are still available, now behind the
--full flag.
from-xml now includes attributes (Borimino)
One of the first commands we built to import file data into Rsh
was from-xml. It was good enough to get started,
and with 0.9.0 it improves to being a more precise
representation of what's in the XML file. The command will
now include attribute values as part of the table.
sort-by works with more value types (koenaad)
Our sorting command sort-by can now work over more
value types, which simplifies some common sorting tasks.
debug now pretty-prints its output (sandorex)
When working on Rsh itself, there's a handy
debug command which gives you all the information
about the value coming through the pipeline. This is now
prett-printed by default to make it easier to read.
autocompletion can now be configured (Jacobious52)
Autocompletion at the Rsh prompt can now be changed between circular (the default) and list.
> config --set [completion_mode list]
More improvements to which (avandesa)
The structured which continues to improve 0.9.0 and
will now give an error in cases that it could not be performed
correctly.
Improvements to calling external commands (thegedge, andrasio, koenaad)
A batch of improvements should allow external commands to feel a bit faster and work more consistently with the pipeline.
Documentation
More command docs (coolshaurya)
We're continuing to document the commands that are available and continue filling out command documentation where it's missing.
More READMEs and code documentation (notryanb, jonathandturner)
Contributors to Rsh will also appreciate that we're working our way through the code and source repositories and documenting how each part works. This should help developers get used to Rsh from the inside and find a much easier path to jump in.
Looking ahead
With 0.9.0, we've added a lot of "quality of life" improvements that we hope you enjoy. We'd love to hear from you how 0.9.0 works for you.
Next release will be 0.10.0, as we continue to improve Rsh. We're excited about what's coming, and can't wait to play with it ourselves!