diff --git a/blog/2024-12-24-nushell_0_101_0.md b/blog/2024-12-24-nushell_0_101_0.md index 15a9e77925f..45c70759b16 100644 --- a/blog/2024-12-24-nushell_0_101_0.md +++ b/blog/2024-12-24-nushell_0_101_0.md @@ -67,21 +67,168 @@ There may be (hopefully) minor breaking changes due to the startup configuration ## Additions +### `path self` + +Thanks to [@Bahex](https://github.com/Bahex) in [#14303](https://github.com/nushell/nushell/pull/14303), this release adds the `path self` command. `path self` is a parse-time only command for getting the absolute path of the source file containing it, or any file relative to the source file. + +```nushell +const this_file = path self +const this_directory = path self . +``` + +### `chunk-by` + +This release adds a new `chunk-by` command which will split a list into chunks based on a closure. The closure is applied to each element of the input list, and adjacent elements that share the same closure result value will be chunked together. This command was added in [#14410](https://github.com/nushell/nushell/pull/14410) thanks to [@cosineblast](https://github.com/cosineblast). + +```nu +# chunk by a predicate +[1 3 -2 -2 0 1 2] | chunk-by {|x| $x >= 0 } +# [[1 3] [-2 -2] [0 1 2]] + +# chunk duplicate, adjacent elements together +[a b b c a a] | chunk-by { $in } +# [[a] [b b] [c] [a a]] +``` + +### `term query` + +Thanks to [@Bahex](https://github.com/Bahex) in [#14427](https://github.com/nushell/nushell/pull/14427), this release adds the `term query` command. +`term query` allows sending a query to your terminal emulator and reading the reply. + +```nushell +# Get cursor position +term query (ansi cursor_position) --prefix (ansi csi) --terminator 'R' + +# Get terminal background color. +term query $'(ansi osc)10;?(ansi st)' --prefix $'(ansi osc)10;' --terminator (ansi st) + +# Read clipboard content on terminals supporting OSC-52. +term query $'(ansi osc)52;c;?(ansi st)' --prefix $'(ansi osc)52;c;' --terminator (ansi st) +``` + +### `utouch` + +This release adds the new `utouch` command, utilizing uutils/coreutils! In addition to all the flags of `touch`, `utouch` also has a `--timestamp` and `--date` flag to specify the timestamp to use. Eventually, the `utouch` command will replace the `touch` command. + +### WASM support + +Nushell used to have WASM support a while back, but at some point became incompatible with WASM. Thanks to the amazing work of [@cptpiepmatz](https://github.com/cptpiepmatz) in [#14418](https://github.com/nushell/nushell/pull/14418), Nushell can now be compiled to WASM again! In order to do so, certain (cargo) features have to be disabled meaning certain commands (like filesystem commands) will not be available. + +### `sys net` columns + +Thanks to [@rfaulhaber](https://github.com/rfaulhaber) in [#14389](https://github.com/nushell/nushell/pull/14389), the `sys net` command now has two additional columns. One is the `mac` column which lists mac address. The other is the `ip` column which lists the address(es) for each network interface. + +### Raw string pattern matching + +With this release, raw strings can now be used as match patterns thanks to [@sgvictorino](https://github.com/sgvictorino) in [#14573](https://github.com/nushell/nushell/pull/14573). + +```nu +match 'foo' { + r#'foo'# => true + _ => false +} +``` + ### Duration/Date Arithmetic With [#14295](https://github.com/nushell/nushell/pull/14295), dates can now be added to durations. Previously only durations could be added to dates. -### `group-by` +### `explore` keybinds + +In [#14468](https://github.com/nushell/nushell/pull/14468) thanks to [@paulie4](https://github.com/paulie4), more default keybindings were added to `explore` to better match `less`. + +## Breaking changes + +### `++` operator + +The `++` operator previously performed both appending and concatenation. + +```nu +# Appending +[1 2 3] ++ 4 == [1 2 3 4] + +# Concatenation +[1 2 3] ++ [4 5 6] == [1 2 3 4 5 6] +``` + +This created ambiguity when operating on nested lists: + +```nu +[[1 2] [3 4]] ++ [5 6] +# Should this be [[1 2] [3 4] [5 6]] or [[1 2] [3 4] 5 6] ? +``` + +Additionally, the `++=` operator was able to change the type of a mutable a due to its dual role: + +```nu +mut str: string = 'hello ' +($str | describe) == string -::: warning Breaking change -See a full overview of the [breaking changes](#breaking-changes) -::: +$str ++= ['world'] +($str | describe) == list +``` -Thanks to [@Bahex](https://github.com/Bahex) in [#14337](https://github.com/nushell/nushell/pull/14337), the `group-by` command now supports grouping by multiple criteria (henceforth referred to as grouper). -When using multiple groupers, the output is in the form of nested records. +After [#14344](https://github.com/nushell/nushell/pull/14344), the `++` operator now only performs concatenation (between lists, strings, or binary values). To append a value to a list, either wrap the value in a list or use the `append` command. ```nu -[ +mut list = [1 2] +$list ++= [3] +$list = $list | append 4 +``` + + + +### Stricter command signature parsing + +#### Input/output types + +Previous versions of Nushell would fail to parse input/output types on custom commands in some cases. However, a parse error would not be shown, making these silent parse errors. + +```nu +# These input/output types are not valid, but no error would be shown: +def some_cmd [] -> string { '' } +def some_cmd [] : string { '' } + +# Since the input/output types failed to parse, then this code would fail only at runtime: +(some_cmd) + 1 +``` + +Thanks to [@ratherforky](https://github.com/ratherforky), this has been fixed in [#14510](https://github.com/nushell/nushell/pull/14510). Invalid input/output types will now cause an error to be shown at parse-time. + +``` +# The custom commands above will now cause a parse error and should instead be: +def some_cmd []: any -> string { '' } +def some_cmd [] : any -> string { '' } + +# This will now fail at parse-time due to type checking, before any user code is run: +(some_cmd) + 1 +``` + +#### Custom command arguments + +This release also makes the parsing for custom command arguments more strict thanks to +[@sgvictorino](https://github.com/sgvictorino) in [#14309](https://github.com/nushell/nushell/pull/14309). For example, a colon (`:`) without a corresponding type is now an error. Below are some more examples of code snippets which are now parse errors. + +``` +# expected parameter or flag +def foo [ bar: int: ] {} + +# expected type +def foo [ bar: = ] {} +def foo [ bar: ] {} + +# expected default value +def foo [ bar = ] {} +``` + +### `group-by` + +Thanks to [@Bahex](https://github.com/Bahex) in [#14337](https://github.com/nushell/nushell/pull/14337), the `group-by` command now supports grouping by multiple criteria (henceforth referred to as a grouper). When using multiple groupers, the output is in the form of nested records. + +```nu +let data = [ [category color name]; [fruit red apple] [fruit red strawberry] @@ -89,7 +236,9 @@ When using multiple groupers, the output is in the form of nested records. [fruit orange orange] [vegetable orange carrot] [vegetable orange pumpkin] -] | group-by color category +] + +$data | group-by color category ``` ``` @@ -127,7 +276,7 @@ With the `--to-table` flag, instead of nested records, the output is in the form Each column corresponding to a `grouper` is named after it. For closure groupers, the columns are named with the scheme `closure_{i}`. ```nu -.. | group-by color category --to-table +$data | group-by color category --to-table ``` ``` @@ -159,75 +308,6 @@ Each column corresponding to a `grouper` is named after it. For closure groupers ╰───┴────────┴───────────┴───────────────────────────────────────╯ ``` -### `path self` - -Thanks to [@Bahex](https://github.com/Bahex) in [#14303](https://github.com/nushell/nushell/pull/14303), this release adds the `path self` command. -`path self` is a parse-time only command for getting the absolute path of the source file containing it, or any file relative to the source file. - -```nushell -const this_file = path self -const this_directory = path self . -``` - -### `term query` - -Thanks to [@Bahex](https://github.com/Bahex) in [#14427](https://github.com/nushell/nushell/pull/14427), this release adds the `term query` command. -`term query` allows sending a query to your terminal emulator and reading the reply. - -```nushell -# Get cursor position -term query (ansi cursor_position) --prefix (ansi csi) --terminator 'R' - -# Get terminal background color. -term query $'(ansi osc)10;?(ansi st)' --prefix $'(ansi osc)10;' --terminator (ansi st) - -# Read clipboard content on terminals supporting OSC-52. -term query $'(ansi osc)52;c;?(ansi st)' --prefix $'(ansi osc)52;c;' --terminator (ansi st) -``` - -## Breaking changes - -### `++` operator - -The `++` operator previously performed both appending and concatenation. - -```nu -# Appending -[1 2 3] ++ 4 == [1 2 3 4] - -# Concatenation -[1 2 3] ++ [4 5 6] == [1 2 3 4 5 6] -``` - -This created ambiguity when operating on nested lists: - -```nu -[[1 2] [3 4]] ++ [5 6] -# Should this be [[1 2] [3 4] [5 6]] or [[1 2] [3 4] 5 6] ? -``` - -Additionally, the `++=` operator was able to change the type of a mutable a due to its dual role: - -```nu -mut str: string = 'hello ' -($str | describe) == string - -$str ++= ['world'] -($str | describe) == list -``` - -After [#14344](https://github.com/nushell/nushell/pull/14344), the `++` operator now only performs concatenation (between lists, strings, or binary values). To append a value to a list, either wrap the value in a list or use the `append` command. - -```nu -mut list = [1 2] -$list ++= [3] -$list = $list | append 4 -``` - - - ### `timeit` The `timeit` command previously had a special behavior where expressions passed as arguments would have their evaluation deferred in order to later be timed. This lead to an interesting bug ([14401](https://github.com/nushell/nushell/issues/14401)) where the expression would be evaluated twice, since the new IR evaluator eagerly evaluates arguments passed to commands. @@ -240,11 +320,9 @@ The `cpu_usage` column outputted by `sys cpu` works by sampling the CPU over a 4 ### `from csv` and `from tsv` -Thanks to [@Bahex](https://github.com/Bahex) in [#14399](https://github.com/nushell/nushell/pull/14399), parsing csv and tsv content with the `--flexible` flag is more flexible than before. -Previously, the first row of csv or tsv content would determine the number of columns, and rows containing more values than the determined columns would be truncated, losing those extra values. +Thanks to [@Bahex](https://github.com/Bahex) in [#14399](https://github.com/nushell/nushell/pull/14399), parsing csv and tsv content with the `--flexible` flag is more flexible than before. Previously, the first row of csv or tsv content would determine the number of columns, and rows containing more values than the determined columns would be truncated, losing those extra values. -With this release, that is no longer the case. -Now, `--flexible` flag means the number of columns aren't limited by the first row and can have not just less but also more values than the first row. +With this release, that is no longer the case. Now, `--flexible` flag means the number of columns aren't limited by the first row and can have not just less but also more values than the first row. ```csv value @@ -282,11 +360,23 @@ The closure now also receives the accumulator value as pipeline input as well. > [a b c d] | iter scan "" {|it| append $it | str join} -n ``` +### Completion sorting + +In [#14424](https://github.com/nushell/nushell/pull/14424), some changes were made to completion sorting. If you have a custom completer that returns a record with an `options` field, then this may affect you. + +- If `options` contains `sort: true`, then completions will be sorted according to `$env.config.completions.sort`. Previously, they would have been sorted in alphabetical order. +- If `options` contains `sort: false`, completions will not be sorted. +- If `options` does not have a `sort` column, then that will be treated as `sort: true`. Previously, this would have been treated as `sort: false`. + +### Import module naming + +Thanks to [@sgvictorino](https://github.com/sgvictorino) in [#14353](https://github.com/nushell/nushell/pull/14353), modules with special characters in their name will be normalized by converting these special characters to underscores (`_`). Previously, it was not possible to use these modules after importing them. + ## Deprecations ### `split-by` -In [#14019](https://github.com/nushell/nushell/pull/14019), the `split-by` command was deprecated. Instead, please use `group-by` with multiple groupers. +In [#14019](https://github.com/nushell/nushell/pull/14019), the `split-by` command was deprecated. Instead, please use `group-by` with multiple groupers [as shown above](#group-by-toc). ### `date to-record` and `date to-table` @@ -295,8 +385,42 @@ In [#14019](https://github.com/nushell/nushell/pull/14019), the `split-by` comma ## Removals +### `NU_DISABLE_IR` + +With [#14293](https://github.com/nushell/nushell/pull/14293), the `NU_DISABLE_IR` environment variable is no longer used. Nushell will now always use the new IR evaluator instead of previous AST based evaluator. + ## Bug fixes and other changes +### `ls` + +The `ls` command used to have deterministic output order, but this was broken in 0.94.0. Thanks to [@userwiths](https://github.com/userwiths) in [#13875](https://github.com/nushell/nushell/pull/13875), `ls` output will now be sorted by the `name` column. Future changes to the order of `ls` will be a breaking change. + +Additionally, thanks to [@sgvictorino](https://github.com/sgvictorino) in [#14310](https://github.com/nushell/nushell/pull/14310), `ls` will now error if there are insufficient permissions to list the current working directory. Previously, `ls` would return empty output. + +### `SHLVL` + +When starting Nushell as an interactive REPL, Nushell will now increment the `SHLVL` environment variable. This change was made in [#14404](https://github.com/nushell/nushell/pull/14404) thanks to [@rikukiix](https://github.com/rikukiix). (Note that it is a known issue that `SHLVL` is still incremented on `exec`.) + +### `from` commands + +After [#14602](https://github.com/nushell/nushell/pull/14602), the `from` commands now remove the `content_type` pipeline metadata thanks to [@Bahex](https://github.com/Bahex). + +### Completions on custom commands + +Thanks to [@RobbingDaHood](https://github.com/RobbingDaHood) in [#14481](https://github.com/nushell/nushell/pull/14481), file completions are now triggered once again on custom commands after the first parameter. This was a regression due to the 0.99.x release. + +### `seq char` + +Thanks to [@anomius](https://github.com/anomius) in [#14261](https://github.com/nushell/nushell/pull/14261), `seq char` now works on any ASCII characters instead of only alphabetical ASCII characters. + +### `http` multipart + +The `http` commands now use CRLF when joining headers to match the HTTP specification. This change was made in [#14417](https://github.com/nushell/nushell/pull/14417) thanks to [@Beinsezii](https://github.com/Beinsezii). + +### `scope variables` + +`scope variables` now lists constant variables in scope (when using the IR evaluator) thanks to [@sgvictorino](https://github.com/sgvictorino in [#14577](https://github.com/nushell/nushell/pull/14577). + # Notes for plugin developers # Hall of fame @@ -318,6 +442,8 @@ Thanks to all the contributors below for helping us solve issues, improve docume | [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix `commands::network::http::*::*_timeout` tests on non-english system | [#14640](https://github.com/nushell/nushell/pull/14640) | | [@maxim-uvarov](https://github.com/maxim-uvarov) | rewrite error message to not use the word `function` | [#14533](https://github.com/nushell/nushell/pull/14533) | | [@sgvictorino](https://github.com/sgvictorino) | skip `test_iteration_errors` if `/root` is missing | [#14299](https://github.com/nushell/nushell/pull/14299) | +| [@sgvictorino](https://github.com/sgvictorino) | return accurate type errors from blocks/expressions in type unions | [#14420](https://github.com/nushell/nushell/pull/14420) | +| [@zhiburt](https://github.com/zhiburt) | nu-table/ Do footer_inheritance by accounting for rows rather then a f… | [#14380](https://github.com/nushell/nushell/pull/14380) | # Full changelog @@ -346,13 +472,9 @@ Thanks to all the contributors below for helping us solve issues, improve docume |[@Bahex](https://github.com/Bahex)|docs(reduce): add example demonstrating accumulator as pipeline input|[#14593](https://github.com/nushell/nushell/pull/14593)| |[@Bahex](https://github.com/Bahex)|remove the deprecated index argument from filter commands' closure signature|[#14594](https://github.com/nushell/nushell/pull/14594)| |[@Bahex](https://github.com/Bahex)|`std/iter scan`: change closure signature to be consistent with `reduce`|[#14596](https://github.com/nushell/nushell/pull/14596)| - - - +|[@Bahex](https://github.com/Bahex)|remove `content_type` metadata from pipeline after `from ...` commands|[#14602](https://github.com/nushell/nushell/pull/14602)| |[@Bahex](https://github.com/Bahex)|test(path self): Add tests|[#14607](https://github.com/nushell/nushell/pull/14607)| - - - +|[@Beinsezii](https://github.com/Beinsezii)|command/http/client use CRLF for headers join instead of LF|[#14417](https://github.com/nushell/nushell/pull/14417)| |[@DziubaMaksym](https://github.com/DziubaMaksym)|fix: sample_config|[#14465](https://github.com/nushell/nushell/pull/14465)| |[@IanManske](https://github.com/IanManske)|Deprecate `split-by` command|[#14019](https://github.com/nushell/nushell/pull/14019)| |[@IanManske](https://github.com/IanManske)|Change append operator to concatenation operator|[#14344](https://github.com/nushell/nushell/pull/14344)| @@ -399,16 +521,11 @@ Thanks to all the contributors below for helping us solve issues, improve docume |[@NotTheDr01ds](https://github.com/NotTheDr01ds)|Set `split-by` doc category to "deprecated"|[#14633](https://github.com/nushell/nushell/pull/14633)| - - - +|[@PegasusPlusUS](https://github.com/PegasusPlusUS)|Feature: PWD-per-drive to facilitate working on multiple drives at Windows|[#14411](https://github.com/nushell/nushell/pull/14411)| |[@PegasusPlusUS](https://github.com/PegasusPlusUS)|Fix unstable test case: One time my windows report drive letter as lowercase|[#14451](https://github.com/nushell/nushell/pull/14451)| - |[@PerchunPak](https://github.com/PerchunPak)|Fix issues in the example configs|[#14601](https://github.com/nushell/nushell/pull/14601)| - - - - +|[@RobbingDaHood](https://github.com/RobbingDaHood)|#14238 Now the file completion is triggered on a custom command after the first parameter.|[#14481](https://github.com/nushell/nushell/pull/14481)| +|[@RobbingDaHood](https://github.com/RobbingDaHood)|For `#` to start a comment, then it either need to be the first chara…|[#14562](https://github.com/nushell/nushell/pull/14562)| |[@WindSoilder](https://github.com/WindSoilder)|Tests: add a test to make sure that function can't use mutable variable|[#14314](https://github.com/nushell/nushell/pull/14314)| |[@WindSoilder](https://github.com/WindSoilder)|make std help more user friendly|[#14347](https://github.com/nushell/nushell/pull/14347)| @@ -428,9 +545,7 @@ Thanks to all the contributors below for helping us solve issues, improve docume |[@alex-kattathra-johnson](https://github.com/alex-kattathra-johnson)|Shorten --max-time in tests and use a more stable error check|[#14494](https://github.com/nushell/nushell/pull/14494)| |[@amtoine](https://github.com/amtoine)|add `from ndnuon` and `to ndnuon` to stdlib|[#14334](https://github.com/nushell/nushell/pull/14334)| |[@amtoine](https://github.com/amtoine)|fix multiline strings in NDNUON|[#14519](https://github.com/nushell/nushell/pull/14519)| - - - +|[@anomius](https://github.com/anomius)|Seq char update will work on all char|[#14261](https://github.com/nushell/nushell/pull/14261)| |[@app/dependabot](https://github.com/app/dependabot)|Bump crate-ci/typos from 1.27.0 to 1.27.3|[#14321](https://github.com/nushell/nushell/pull/14321)| |[@app/dependabot](https://github.com/app/dependabot)|Bump serial_test from 3.1.1 to 3.2.0|[#14325](https://github.com/nushell/nushell/pull/14325)| |[@app/dependabot](https://github.com/app/dependabot)|Bump tempfile from 3.13.0 to 3.14.0|[#14326](https://github.com/nushell/nushell/pull/14326)| @@ -452,19 +567,13 @@ Thanks to all the contributors below for helping us solve issues, improve docume |[@ayax79](https://github.com/ayax79)|Documentation and error handling around `polars with-column --name`|[#14527](https://github.com/nushell/nushell/pull/14527)| |[@ayax79](https://github.com/ayax79)|Improve handling of columns with null values|[#14588](https://github.com/nushell/nushell/pull/14588)| |[@ayax79](https://github.com/ayax79)|Added flag --coalesce-columns to allow columns to be coalesced on full joins|[#14578](https://github.com/nushell/nushell/pull/14578)| - - - - +|[@cosineblast](https://github.com/cosineblast)|Implement chunk_by operation|[#14410](https://github.com/nushell/nushell/pull/14410)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Start to Add WASM Support Again|[#14418](https://github.com/nushell/nushell/pull/14418)| |[@cptpiepmatz](https://github.com/cptpiepmatz)|Fix missing `installed_plugins` field in `version` command|[#14488](https://github.com/nushell/nushell/pull/14488)| |[@cptpiepmatz](https://github.com/cptpiepmatz)|Fix `table` command when targeting WASM|[#14530](https://github.com/nushell/nushell/pull/14530)| - - - +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Expose "to html" command|[#14536](https://github.com/nushell/nushell/pull/14536)| |[@cptpiepmatz](https://github.com/cptpiepmatz)|Fix `commands::network::http::*::*_timeout` tests on non-english system|[#14640](https://github.com/nushell/nushell/pull/14640)| - - - +|[@devyn](https://github.com/devyn)|Remove the `NU_DISABLE_IR` option|[#14293](https://github.com/nushell/nushell/pull/14293)| |[@devyn](https://github.com/devyn)|Turn compile errors into fatal errors|[#14388](https://github.com/nushell/nushell/pull/14388)| @@ -504,22 +613,18 @@ Thanks to all the contributors below for helping us solve issues, improve docume |[@musicinmybrain](https://github.com/musicinmybrain)|Update rstest from 0.18 to 0.23 (the current version)|[#14350](https://github.com/nushell/nushell/pull/14350)| |[@musicinmybrain](https://github.com/musicinmybrain)|Update procfs and which dependencies to their latest releases|[#14489](https://github.com/nushell/nushell/pull/14489)| |[@musicinmybrain](https://github.com/musicinmybrain)|Update roxmltree from 0.19 to 0.20, the latest version|[#14513](https://github.com/nushell/nushell/pull/14513)| - - - - - - +|[@paulie4](https://github.com/paulie4)|`explore`: add more `less` key bindings and add `Transition::None`|[#14468](https://github.com/nushell/nushell/pull/14468)| +|[@ratherforky](https://github.com/ratherforky)|Fix silent failure of parsing input output types|[#14510](https://github.com/nushell/nushell/pull/14510)| +|[@rfaulhaber](https://github.com/rfaulhaber)|Add mac and IP address entries to `sys net`|[#14389](https://github.com/nushell/nushell/pull/14389)| +|[@rikukiix](https://github.com/rikukiix)|Update SHLVL (only when interactive) on startup|[#14404](https://github.com/nushell/nushell/pull/14404)| |[@schrieveslaach](https://github.com/schrieveslaach)|Bump Calamine|[#14403](https://github.com/nushell/nushell/pull/14403)| |[@sgvictorino](https://github.com/sgvictorino)|skip `test_iteration_errors` if `/root` is missing|[#14299](https://github.com/nushell/nushell/pull/14299)| - - - - - - - - +|[@sgvictorino](https://github.com/sgvictorino)|make command signature parsing more strict|[#14309](https://github.com/nushell/nushell/pull/14309)| +|[@sgvictorino](https://github.com/sgvictorino)|make `ls` return "Permission denied" for CWD instead of empty results|[#14310](https://github.com/nushell/nushell/pull/14310)| +|[@sgvictorino](https://github.com/sgvictorino)|normalize special characters in module names to allow variable access|[#14353](https://github.com/nushell/nushell/pull/14353)| +|[@sgvictorino](https://github.com/sgvictorino)|return accurate type errors from blocks/expressions in type unions|[#14420](https://github.com/nushell/nushell/pull/14420)| +|[@sgvictorino](https://github.com/sgvictorino)|support raw strings in match patterns|[#14573](https://github.com/nushell/nushell/pull/14573)| +|[@sgvictorino](https://github.com/sgvictorino)|return const values from `scope variables`|[#14577](https://github.com/nushell/nushell/pull/14577)| |[@sholderbach](https://github.com/sholderbach)|Cut down unnecessary lint allows|[#14335](https://github.com/nushell/nushell/pull/14335)| |[@sholderbach](https://github.com/sholderbach)|Remove unused `FlatShape`s `And`/`Or`|[#14476](https://github.com/nushell/nushell/pull/14476)| |[@sholderbach](https://github.com/sholderbach)|Add `remove` as a search term on `drop` commands|[#14493](https://github.com/nushell/nushell/pull/14493)| @@ -527,14 +632,11 @@ Thanks to all the contributors below for helping us solve issues, improve docume |[@sholderbach](https://github.com/sholderbach)|Remove unused `sample_login.nu` file|[#14632](https://github.com/nushell/nushell/pull/14632)| |[@sholderbach](https://github.com/sholderbach)|Remove `pub` on some command internals|[#14636](https://github.com/nushell/nushell/pull/14636)| |[@sholderbach](https://github.com/sholderbach)|Pin reedline to 0.38.0 release|[#14651](https://github.com/nushell/nushell/pull/14651)| - - - - +|[@userwiths](https://github.com/userwiths)|Fix inconsistency in `ls` sort-order|[#13875](https://github.com/nushell/nushell/pull/13875)| +|[@ysthakur](https://github.com/ysthakur)|Add utouch command from uutils/coreutils|[#11817](https://github.com/nushell/nushell/pull/11817)| |[@ysthakur](https://github.com/ysthakur)|Avoid recomputing fuzzy match scores|[#13700](https://github.com/nushell/nushell/pull/13700)| - - - +|[@ysthakur](https://github.com/ysthakur)|fix: Respect sort in custom completions|[#14424](https://github.com/nushell/nushell/pull/14424)| +|[@zhiburt](https://github.com/zhiburt)|nu-table/ Do footer_inheritance by accounting for rows rather then a f…|[#14380](https://github.com/nushell/nushell/pull/14380)|