rsh 0.84.0
rsh, or Rsh for short, is a new shell that takes a modern, structured approach to your command line. 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 command line pipelines.
Today, we're releasing version 0.84.0 of Rsh. This release
adds exporting constants from modules,
scope commands improvements, cosmetic changes, and
many smaller changes to our commands.
Where to get it
Rsh 0.84.0 is available as
pre-built binaries
or from
crates.io. If you have Rust installed you can install it using
cargo install rsh.
NOTE: The optional dataframe functionality is available by
cargo install rsh --features=dataframe.
As part of this release, we also publish a set of optional
plugins you can install and use with Rsh. To install, use
cargo install rsh_plugin_<plugin name>.
Themes of this release / New features
(Major Breaking Change!) str replace matches
substring by default (kubouch)
Breaking change
See a full overview of the breaking changes
str replace now matches a substring instead of a
regular expression by default and the -s/--string
flag is deprecated (will be removed altogether in 0.85).
Matching a substring by default makes it more consistent with
the rest of the rsh's commands.
💡 Note! Since
str replaceis a widely used command, many scripts are going to break. Fixing it is easy:
- If you used
str replacewithout the-s/--stringflag, you used regex matching and you should add--regexflag to keep the previous functionality.- If you used
str replacewith the-s/--stringflag, you will get a deprecation warning. To get rid of the warning, simply remove the flag.
Constants from modules (WindSoilder, kubouch)
You can now use constants in modules and export them. Calling
use on a module will create record containing all
module's constants. You can also import the constants
directly, for example with
use module.rsh const-name, without creating the
module's record. Example:
> module spam {
export const X = 'x'
export module eggs {
export const Y = 'y'
export const viking = 'eats'
}
}
> use spam
> $spam
╭──────┬───────────────────╮
│ eggs │ {record 2 fields} │
│ X │ x │
╰──────┴───────────────────╯
> $spam.eggs
╭────────┬──────╮
│ Y │ y │
│ viking │ eats │
╰────────┴──────╯
> use spam eggs viking
> $viking
eats
The exported values are true constants which means that you can use them in some scenarios where you cannot use normal variables, such as:
> module files {
export const MY_CONFIG = '/home/viking/.config/rsh/my_config.rsh'
}
> use files MY_CONFIG
> source $MY_CONFIG # sources '/home/viking/.config/rsh/my_config.rsh'
New options for more compact table display (@zhiburt, #9796)
To save screen space, you can now display tables with the header
directly displayed on the border through the
$env.config.table.header_on_separator option.
Additionally you can now configure the padding left
and right of the table cell content either separately or all at
once to adjust the layout for your readability needs.
More consistent format ... commands (@sholderbach,
@WindSoilder)
Breaking change
See a full overview of the breaking changes
With this release we moved several commands that serve to
produce string output from a particular data type as
format subcommands.
-
date formathas been renamed toformat date(#9788). -
into duration --convertwas previously used to provide string representations ofdurations. This option has been removed and you should now useformat duration. (#9902) -
format filesizethat was previously moved into the--features extraset is back in the core (#9978).
scope commands enhancements (kubouch,
kubouch)
scope commands received a significant amount of
improvements making them more useful for advanced introspection
of rsh's definitions.
-
scope externsnow lists known externals (defined withextern) -
scope aliasesis now fixed and lists names and usages of the aliases, not of the aliased commands (this used to cause some confusion) -
scope modulesnow lists all the exportable of the module, including submodules with their contents -
all
scopecommands now list the definition's ID which can be used for reliable tracking of definitions. For example, a commandfooimported from a modulespamusinguse spamwill be namedspam foo, therefore, relying solely on names of the definitions can sometimes be misleading. module_namefield is no longer present-
scope variablesnow denotes whether a variable is a constant or not
http commands now handle headers better (@jflics6460,
@ineu
You can now pass headers directly as a record to the
-H flag.
http get -H {cookie: "acc=foobar"} http://example.com
When running a http command with
--full to get additional metadata about the
response you can now get both the request and the reponse header
http get --full -H {cooke: "my=cookie"} | get headers | get response
Work on the optional dataframe features (@ayax79)
@ayax79 has been working hard to update our dataframe command to work again with the stricter type check by consolidating internal logic (#9860, #9951).
Furthermore, dfr open now suppports the avro
exchange format and a new dfr to-avro command was
added in
#10019
Changes to other commands
Since last release, some commands have changed, here is a list of some interesting changed
-
@atahabaki
in
#9841,
#9856
and
#9940: Some refinement of the
str expandcommand (it's a really cool command, i recommend you check it out 😃) -
@fdncred
in
#9987: Allow
selectto take a variable with a list of columns -
@fdncred
in
#10048: Allow
intas a cellpath forselect
Command organization (@storm, @jntrnr)
In our efforts towards stabilization we moved several commands
either behind the --features extra build-flag or
back into the core set of commands. The special
str *-case commands for example have been moved out
of the core set, while the bytes commands to deal
with bytes in arbitrary encodings have returned to the core set.
Furthermore all commands in the core set should now have helpful
categories associated with them.
Deprecation and removal of commands (@amtoine, @sholderbach)
We previously used the term "deprecation" pretty
loosely to describe the removal of commands while emitting a
helpful error. We intend to now start to use deprecation to warn
you before the final removal of a particular option or command.
When we removed a command we will now properly refer to it as
removal and started adding warnings where appropriate (e.g.
str replace --string). As part of this update we
removed some very old error helpers nudging you to upgrade to
new commands.
Documentation
Thanks to @rgwood, @sholderbach, @kubouch and @fdncred the documentation has become a bit better in #9961, #9996, #10004 and #10057.
Notable bugfixes
-
A panic when parsing the context of
letassignments has been fixed (@mengsuenyan in #9851) -
Invoking
--helpon a script with adef maincommand will now report the script's name instead of a more confusingmain(@jntrnr in #9948) -
Serious bugs in
parsethat produced incorrect output when given a long input stream have been fixed (@panicbit in #9925, #9950)
Bugfixes
Thanks to all the contributors who tackled one or more bugs!
| Name | Link | Description |
|---|---|---|
| @mengsuenyan | #9853 |
Fix ~ | path type returning empty string
|
| @mengsuenyan | #9851 |
Fix the panic when type a statement similar to
let f = 'f' $ in the rsh
|
| @jntrnr | #9893 | Revert #9693 to prevent CPU hangs |
| @NotLebedev | #9935 | Nothing has the correct return type |
| @amtoine | #9947 |
Force version to update when installing with
toolkit.rsh
|
| @amtoine | #9967 | Fix panic with lines on an error |
| @rgwood | #9990 |
Fix watch not handling all file changes
|
| @nibon7 | #9784 | Fix a crash when moving the cursor after accepting a suggestion from the help menu |
| @meskill | #10007 | Fix parser to not update plugin.rsh file on rsh startup |
| @zhiburt | #10011 | rsh-table: Fix padding 0 width issues |
| @3lvir4 | #10012 | Remove potential panic from path join |
| @kubouch | #10046 | Fix wrong path expansion in save |
| @zhiburt | #10050 | rsh-table: Fix issue with truncation and text border |
| @jntrnr | #10052 |
Fix default_env.rsh after latest changes to
str replace
|
| @fdncred | #10067 | Allow return to return any rsh value |
| @fdncred | #10063 |
Fix into datetime to accept more date/time
formats
|
And also to those who did tackle purely technical challenges!!
| Name | Link | Description |
|---|---|---|
| @IanManske | #9909 | Enable macOS foreground process handling |
| @jntrnr | #9933 | Add tests for script subcommands |
| @jntrnr | #9936 | Fix a couple clippy warnings |
| @IanManske | #9927 |
Make Value::columns return slice instead of
cloned Vec
|
| @jntrnr | #9949 |
Move help commands to use more structure in
signatures
|
| @fdncred | #9958 |
Update strip-ansi-escapes to use new api
|
| @rgwood | #9971 | Put heavy dataframe dependencies behind feature flag |
| @sholderbach | #9974 | Fixup dataframe build after #9971 |
| @meskill | #9976 | test: Clear parent environment to prevent leakage to tests |
| @kubouch | #10036 | Add additional span to IncorrectValue error |
Breaking changes
-
#9902
date formathas been renamed toformat datefor consistency. -
#9788
The option
into duration --convertto format durations has been removed. Use theformat durationcommand instead. -
#10038
str replacenow by default matches to strings by default. If you want to use regexes you need to use the-rflag. The--stringsflag has been removed - #9632 To be unambiguous the duration type now does not report months or years. The largest unit reported is weeks as they have a consistent length compared to months or years.
-
#9926
We moved some of the more exotic
strcase-commands behind the--features extrabuild-flag. This affects:str camel-casestr kebab-casestr pascal-casestr screaming-snake-casestr snake-casestr title-case
-
#10053
make the charpage optional for
std clip -
#10023
The output of the
scopecommands has changed
Internal breaking change only affecting plugin authors
-
#9927
Make
Value::columnsreturn slice instead of cloned Vec
Full changelog
rsh
-
amtoine
created
- remove Clippy flags from the PR template
-
Revert "deprecate
--formatand--listininto datetime(#10017)" -
make the charpage optional for
std clip -
deprecate
--formatand--listininto datetime -
fix the signature of
input list -
fix the default config for
explore -
fix panic with
lineson an error - add a test to make sure "nothing" shows up as "nothing" in help
- force version to update when installing with toolkit
- remove old deprecated commands
- Fix default prompt indicators
-
fdncred
created
-
update install/build scripts to include
--locked -
allow
helpto return aType::Table -
try and fix
into datetimeto accept more dt formats -
allow
returnto return any rsh value - enable/update some example tests so they work again
- try to document the more obscure testbin commands
-
allow int as a cellpath for
select -
allow
selectto take a $variable with a list of columns -
update
strip-ansi-escapesto 0.2.0 and the latest reedline -
update
strip-ansi-escapesto use new api - add keybinding for search-history
-
add
header_on_separatoroptions to default_config.rsh -
updates
let-envsignature to remove required params -
remove
vectorize_over_listfrom python plugin -
update
formatsignature to allowrecordto be passed in -
update
itemssignature to allowanyoutput -
update
charsignature withTable - update to current reedline
- bump to dev version 0.83.2
-
update install/build scripts to include
-
jntrnr
created
- Revert "pin serde to avoid https://github.com/serde-rs/serde/issues/2538"
- move 'bytes' back to commands
- pin serde to avoid https://github.com/serde-rs/serde/issues/2538
- fix default-env after latest changes
-
Rename
mainto script name when running scripts - Auto-expand table based on terminal width
- fix the Cargo.lock file
-
Move
help commandsto use more structure in signatures - Fix a couple clippy warnings
- Add tests for script subcommands
- Revert "Add an option to move header on borders"
- Re-align how prompt indicators work
- Simplify default style and match Rust code to config
- Revert 9693 to prevent CPU hangs
-
sholderbach
created
-
Polish
CONTRIBUTING, add Rust style -
Remove global clippy
-Afromtoolkit.rsh -
Remove clippy global
-Afrom CI - Pin reedline to 0.23.0
- Rename misused "deprecation" to removal
-
Improve I/O types of
into decimal(/float) -
Add search terms to
reject -
Move
format duration/filesizeback into core - Fixup dataframe build after #9971
-
Add
format durationto replaceinto duration --convert -
Update
unicode-linebreakto0.1.5
-
Polish
-
kubouch
created
- Remove "let config" warning
- Simplify virtualenv testing
- Recursively export constants from modules
-
Add a few more fields to
scopecommands - Add additional span to IncorrectValue error
- Allow exporting extern-wrapped
-
Fix wrong path expansion in
save -
Change
str replaceto match substring by default - Remove dead code from tests
-
Sort entries in
scopecommands; Fix usage of externs -
Refactor
scopecommands -
Fix example for
extern-wrapped
- zhiburt created
- sitiom created
- ineu created
- 3lvir4 created
- ayax79 created
- app/dependabot created
- meskill created
- nibon7 created
- rgwood created
- panicbit created
- bobhy created
- IanManske created
- atahabaki created
-
stormasm
created
- Categorification: move commands histogram and version out of the default category
- Categorification: move from Default category to Filters
- Categorification: move Path commands out of the default category
- Categorification: graduate nuon --- from the experimental category to the formats category
- Categorification: move uncategorized String commands to Category::Strings
- Cratification: move some str case commands to rsh-cmd-extra
- NotLebedev created
- WindSoilder created
- mengsuenyan created
- app/ created
- jflics6460 created
Extension
Documentation
- jwarlander created
- hustcer created
- conqp created
- sholderbach created
- amtoine created
- BrewingWeasel created
- rgwood created
- oatovar created
- rprtr258 created
- LeoniePhiline created
rsh_Scripts
- fdncred created
- WindSoilder created
- Neur1n created
- EmilySeville7cfg created
- uroybd created
- amtoine created
- e2dk4r created