Version 0.15.0 has been released on 2021-01-30, 6 months after 0.14.0, bringing many new features and bugfixes.
As usual, prebuilt binaries are offered for most common platforms.
Builtin functions and subnamespaces of
edit:are now read-only.
Introspection for rest arguments has changed:
The rest argument is now contained in the
arg-namesfield of a closure.
rest-argfield now contains the index of the rest argument, instead of the name.
-sourcecommand now runs in a temporary namespace and can no longer affect the local scope of its caller.
Key modifiers are no longer case insensitive. For example,
Altis still recognized but
altis not. This makes key modifier parsing consistent with key names. See #1163.
Deprecated features will be removed in 0.16.0.
The following deprecated features trigger a warning whenever the code is parsed or compiled, even if it is not executed:
Using the syntax of temporary assignment (
var=value) for non-temporary assignment is now deprecated. The syntax is still valid for temporary assignment. For example, using
foo=baras a standalone command is deprecated, but using it as part of command, like
foo=bar ls, is not deprecated.
chrcommand is now deprecated. Use
ordcommand is now deprecated. Use
has-prefixcommand is now deprecated. Use
has-suffixcommand is now deprecated. Use
-sourcecommand is now deprecated. Use
esleepcommand is now deprecated. Use
eval-symlinkscommand is deprecated. Use
path-abscommand is deprecated. Use
path-basecommand is deprecated. Use
path-cleancommand is deprecated. Use
path-dircommand is deprecated. Use
path-extcommand is deprecated. Use
-is-dircommand is deprecated. Use
The following deprecated features trigger a warning when the code is evaluated:
:in slice indices is deprecated. Use
The mechanism of assigning to
rc.elvto export variables to the REPL namespace is deprecated. Use
Notable new features
New features in the language:
varspecial command can be used to explicitly declare variables, and optionally assign them initial values.
setspecial command can be used to set the values of variables or elements.
Slice indices can now use
..for left-closed, right-open ranges, and
..=for closed ranges.
Rest variables and rest arguments are no longer restricted to the last variable.
Variables containing any character can now be assigned and used by quoting their name, for example
'name!' = foo; put $'name!'.
New features in the standard library:
evalcommand supports evaluating a dynamic piece of code in a restricted namespace.
path:module has been introduced for manipulating and testing filesystem paths.
New features in the interactive editor:
The new commands
edit:add-varsprovide an API for manipulating the REPL’s namespace from anywhere.
SGR escape sequences written from the prompt callback are now supported.
New features in the main program:
- When using
-compileonlyto check Elvish sources that contain parse errors, Elvish will still try to compile the source code and print out compilation errors.
- Using large lists that contain
$nilno longer crashes Elvish.