Elvish 0.19.1 has been released on 2023-03-05, almost a year after 0.18.0, bringing new features and bugfixes.
As usual, prebuilt binaries are offered for most common platforms.
Note: The 0.19.0 version was tagged prematurely by mistake, but it has been picked up by some package managers. As a result, the 0.19.0 version is considered to be “skipped” officially. If your package manager provides a 0.19.0 version, it is probably identical to 0.19.1 in functionalities.
Note 2: The commit tagged 0.19.1 would advertise itself as 0.19.0 when built. To fix this inconsistency, 0.19.2 was tagged with the correct version information.
Notable new features
-
A new
doc
module provides access to the documentation of builtin modules. -
A new
conj
command “appends” values to a list, and has a guaranteed time complexity independent of the size of the list. -
A new
inexact-num
converts its argument to an inexact number.It is functionally identical to the now deprecated
float64
command since the Go float64 type is the only underlying inexact number type for now. Its behavior may change in future if there are more underlying types for inexact numbers. -
A new type of interactive abbreviation:
edit:command-abbr
(#1472). -
The
order
andcompare
commands now support boolean values (#1585). -
A new
path:join
command andpath:separator
andpath:list-separator
variables (#1562). -
A new
runtime:
module that contains paths important for the Elvish runtime (#1385, #1423). -
A new
compact
command that replaces consecutive runs of equal values with a single copy, similar to the Unixuniq
command. -
The
order
command has a new&key
option (#1570). -
A new
benchmark
command has been added (#1586). -
When checking compilation errors, Elvish no longer stops after the first error found. For example, if
$a
and$b
are both not defined,echo $a $b
now yields two errors. This applies to both the interactive REPL andelvish -compile-only
. -
When using an unimported builtin modules from the REPL, the REPL now shows the
use
command needed to import it, which can be executed from a key binding. This functionality is bound to Ctrl-A by default. -
New variables exposing the terminal and null device in an OS-agnostic fashion:
$path:dev-tty
and$path:dev-null
. They are/dev/tty
and/dev/null
on Unix, andCON
andNUL
on Windows (#1633).
Breaking changes
-
When a
styled
orstyled-segment
is printed to terminal, the resulting sequence will now always ignore any existing SGR state. -
Symbolic links are now always treated as ordinary files by the global modifiers
type:dir
andtype:regular
in wildcard expansions. -
Support for shared vars has been removed, along with its API (
store:shared-var
,store:set-shared-var
andstore:del-shared-var
). -
The
try
command no longer supports theexcept
keyword. It has been superseded by thecatch
keyword.
Deprecated features
Deprecated features will be removed in 0.20.0.
The following deprecated features trigger a warning whenever the code is parsed and compiled, even if it is not executed:
-
The
float64
command is now deprecated. Usenum
for constructing a typed number, orinexact-num
for constructing an inexact number.The documentation has advertised it as deprecated since the 0.16.0 release, but deprecation warnings were never added.