v0.18.0
-All features deprecated in 0.17.0 have been removed.
-Within double quotes, \x followed by two hexadecimal digits and \ followed by
three octal digits now encode an individual byte, rather than a codepoint.
-Using a lone try without except or finally is now forbidden; this does not do
anything useful and is almost certainly an incorrect attempt to suppress an
exception.
Deprecated features will be removed in 0.19.0.
The following deprecated features trigger a warning whenever the code is parsed
or compiled, even if it is not executed:
-The legacy temporary assignment syntax (e.g. a=foo echo $a) is deprecated.
Use the new tmp command instead (e.g. tmp a = foo; echo $a).
-The clause to catch exceptions in the try special command is now spelt with
catch; the old keyword except is deprecated.
Notable bugfixes
-The output longer than terminal width is now shown fully on Windows Terminal.
-Changing directories in the navigation mode now correctly runs hooks and
updates $E:PWD.
Notable new features
-Elvish now ships a builtin language server that can be started with
elvish -lsp.
-A new flag: module for parsing command-line flags.
-A new tmp special command for doing temporary assignments.
-A new defer command to schedule a function to be run when the current closure
finishes execution.
-A new call command to call a command, using a list for and a map for options.
-A new $unix:rlimits variable allows manipulation of resource limits.
v0.17.0
Breaking changes
-Attempting to assign to a read-only variable (e.g. set nil = x) is now a
compile-time error rather than an exception.
Deprecated features - Deprecated features will be removed in 0.18.0.
The following deprecated features trigger a warning whenever the code is parsed
or compiled, even if it is not executed:
-The dir-history command is deprecated. Use store:dirs instead.
-The legacy assignment form is deprecated. Depending on whether the left-hand
variable already exists or not, use var or set instead. Use the upgrader to
migrate scripts.
-The lambda syntax that declares arguments and options within [] before { has
been deprecated. The new syntax now declares arguments and options within a
pair of |, after {. Use the upgrader to migrate scripts. See (#664).
-Use of the special namespace local: is deprecated.
-If you are using local: to reference variables (e.g. echo $local:x),
local: is never necessary in the first place since Elvish always resolves
local variables first, so just remove it.
-If you are using local: when assigning variables (e.g. local:x = foo),
local: makes sure that a new variable is created; use the var special
command instead.
-Use of the special namespace up: is deprecated.
-If you are using up: to access a non-shadowed variable in an outer scope,
up: is not necessary; just remove it.
-If you are using up: to access a shadowed variable in an outer scope, rename
the variables to have different names.
-Use of a leading empty namespace in a variable name (e.g. $:x) is deprecated.
Since $:x is always equivalent to $x anyway, just remove the : prefix.
Notable new features
New features in the language:
-A new special command pragma. The only supported pragma now is unknown
command; using pragma unknown command = disallow turns off the default
behavior of treating unknown commands as external commands.
-A new special command coalesce.
New features in the interactive editor:
-Editor modes now form a stack, instead of being mutually exclusive.
For example, it is now possible to start a minibuf mode within a completion
mode, and vice versa.
New features in the standard library:
-The store: module now exposes all functionalities of Elvish’s persistent store.
-New compare command to compare numbers, strings, and lists (#1347), in a
consistent way as the order builtin.
-The range command now supports counting down.
Performance improvements:
-The overhead of executing pipelines consisting of a single form (i.e. a simple
command with no pipes) has been reduced. A code chunk containing just nop
command now executes 4 times as fast as before. Thanks to kolbycrouch for
suggesting this optimization!
For changes between 0.16.1 and 0.17.0 check https://elv.sh/blog/
Changelog:
5.9:
Changes since 5.8.1
-------------------
zsh 5.9 is dedicated to the memory of Sven Guckes, who was, amongst other
things, a long-time zsh advocate. For more information, see:
https://linuxnews.de/2022/02/sven-guckes-verstorben/https://groups.google.com/g/vim_announce/c/MJBKVd-xrEE/m/joVNaDgAAgAJ
When unsetting a hash element, the string enclosed in square brackets is
interpreted literally after any normal command-line-argument expansions.
Thus
unset "hash[$key]"
first expands $key as usual for a double-quoted string, and then interprets
that result as the exact hash element to unset. This differs from previous
versions of the shell, which would also remove a leading backslash for an
unusual subset of characters in the expansion of $key. Note this also
means, for example, that now
unset 'hash[ab]cd]'
unsets the element with key "ab]cd" rather than silently doing nothing.
The function command learnt a -T option to declare a function and enable
tracing for it simultaneously.
The option SHORT_REPEAT was added to enable the short syntax of
SHORT_LOOPS for the repeat command only. It is disabled by default.
The _arguments function now supports NUL-delimiting optargs in the
opt_args array via the -0 option. Developers of completion functions
should find this easier to handle reliably than the default
colon-delimiting behaviour.
The zsh/system module's `zsystem flock` command learnt an -i option to
set the wait interval used with -t. Additionally, -t now supports
fractional seconds.
The option CLOBBER_EMPTY was added to enable the overwrite behaviour
of CLOBBER for empty files only. It is disabled by default.
A (-) expansion flag was added. It works like (n) but correctly sorts
negative numbers.
The (*) expansion flag enables EXTENDED_GLOB for pattern matching.
For example, ${(*)sample/(#b)*(pat)*/${match[1]}} uses backreferences
even if EXTENDED_GLOB is not otherwise set. However, this does not
descend into nested exapansions, and doubling as (**) does not disable
EXTENDED_GLOB.
The compinit function learnt a -w option to explain why compdump runs.
When run without the -i or -u options and compaudit discovers security
issues, answering "y" to the "Ignore insecure ..." prompt removes the
insecure elements (like the -i option) where previously it ignored the
result (thus formerly like the -u option). Further, removing those
elements includes dropping directories from the $fpath array.
The zsh/datetime module's strftime builtin learnt an -n option to omit
the trailing newline when printing a formatted time.
The XTRACE option is now disabled while running user-defined completion
widgets. This corresponds to long-standing behavior of other user ZLE
widgets. Use the _complete_debug widget to capture XTRACE output, or
use "functions -T" to enable tracing of specific completion functions.
The fc builtin learnt an -s option which is a POSIX equivalent to the
`fc -e-` method of re-executing a command without invoking an editor.
The option CASE_PATHS was added to control how NO_CASE_GLOB behaves.
NO_CASE_GLOB + NO_CASE_PATHS is equivalent to the current NO_CASE_GLOB
behaviour. NO_CASE_GLOB + CASE_PATHS treats only path components that
contain globbing characters as case-insensitive; this behaviour may
yield more predictable results on case-sensitive file systems.
NO_CASE_PATHS is the default.
With the new TYPESET_TO_UNSET option set, "typeset foo" leaves foo unset,
in contrast to the default behavior which assigns foo="". Any parameter
attributes such as numeric type, sorting, and padding are retained until
the parameter is explicitly unset or a conflicting value is assigned.
This is similar to default behavior of bash and ksh. This option is
disabled by default.
The compadd builtin's -D option can now be specified more than once.
The zsh/zutil module's zformat builtin learnt an -F option which behaves
like -f except that ternary expressions check for existence instead of
doing math evaluation.
The conventional syntax used to indicate units, ranges, and default values
in completion descriptions (e.g. `timeout (seconds) (0-60) [20]`) is now
recognised by the completion system itself. These components are parsed
out of the description and can be individually styled. A _numbers helper
function has been added to help function authors offer rich completion
for these values.
The log builtin, WATCH parameter, et al., have been broken out into a
separate module, zsh/watch. The module is enabled by default.
The zsh/watch module's WATCHFMT parameter now supports colours via the
%F and %K escapes.
The STTY parameter can now be set to an empty string before running a
command to automatically restore terminal settings after the command
finishes.
The "jobs" command and "$jobstates" and related parameters can report on
parent shell jobs even in subshells. This is a snapshot of the parent
state, frozen at the point the subshell started. However, if a subshell
starts its own background jobs, the parent state is discarded in order
to report on those new jobs.
Changes since 6.24.00:
3. V6.24.01 - 20220512
2. Fix quoting of ! characters in history recall (Kimmo Suominen)
1. Fix return status of which (Jamie Landeg-Jones)
1.6.2 (2022-04-15)
Bug Fixes
trigger another release
1.6.1 (2022-04-15)
Bug Fixes
fix release-please permissions
1.6.0 (2022-04-14)
Features
Add a module for C projects
allow printing config file schema
aws: add option to force AWS display
cmd_duration: make notify feature optional (compat with nix darwin)
spack: Add Spack module
username: Detect Admin access in Windows
Bug Fixes
bash: ensure checkwinsize is enabled for $COLUMNS
directory: enable repo_root_style when truncation_length is zero.
docker_context: ignore the "default" context
fish: allow generating session keys in older versions of fish
init: Change Elvish init to catch for 0.18
nu: Use = instead of space to pass command line parameters
nu: use shell-provided terminal width
fish 3.4.1
This release of fish fixes the following problems identified in fish 3.4.0:
* An error printed after upgrading, where old instances could pick up a newer
version of the fish_title function, has been fixed
* fish builds correctly on NetBSD and OpenIndiana.
* nextd-or-forward-word, bound to Alt-Right Arrow by default, was
inadvertently changed to move like forward-bigword. This has been corrected.
* funcsave -q and funcsave --quiet now work correctly.
* Issues with the csharp and nmcli completions were corrected.
If you are upgrading from version 3.3.1 or before, please also review the
release notes for 3.4.0 (included below).
fish 3.4.0
Notable improvements and fixes:
* fish's command substitution syntax has been extended: $(cmd) now has the
same meaning as (cmd) but it can be used inside double quotes, to prevent
line splitting of the results.
* Complementing the prompt command in 3.3.0, fish_config gained a theme
subcommand to show and pick from the sample themes (meaning color schemes)
directly in the terminal, instead of having to open a Web browser. For
example fish_config theme choose Nord loads the Nord theme in the current
session. The current theme can be saved with fish_config theme dump
, and custom themes can be added by saving them in ~/.config/fish/themes/.
* set and read learned a new option, --function, to set a variable in the
function?s top scope.
* string pad now excludes escape sequences like colors that fish knows about,
and a new --visible flag to string length makes it use that kind of visible
width.
* Performance improvements to globbing, especially on systems using glibc. In
some cases (large directories with files with many numbers in the names)
this almost halves the time taken to expand the glob.
* Autosuggestions can now be turned off by setting
$fish_autosuggestion_enabled to 0, and (almost) all highlighting can be
turned off by choosing the new ?None? theme. The exception is necessary
colors, like those which distinguish autosuggestions from the actual
command line.
* The fish_git_prompt function, which is included in the default prompts, now
overrides git to avoid running commands set by per-repository
configuration. This avoids a potential security issue in some
circumstances, and has been assigned CVE-2022-20001.
Changelog:
Noteworthy changes in release 0.3.0 (2022-02-11)
================================================
New features
- Arithmetic expansion.
- Simple asynchronous commands.
- A language specification is now provided, allowing you to use the
evaluator from the Guile REPL by typing ",L sh".
- Redirects now honor the 'noclobber' option.
- The 'wait' built-in.
- The 'umask' built-in can now display the current umask.
Bug fixes
- An empty command will now reset the status.
- The 'read-sh' procedure now reads from 'current-input-port' by
default (before it used 'current-output-port').
Miscellaneous improvements
- Various performance improvements.
- Word expansion has been split into two steps, paving the way for a
compiler.
- Guile 3.0 is now explicitly supported.
Changes between 5.8 and 5.8.1
Incompatibilities
PROMPT_SUBST expansion is no longer performed on arguments to
prompt-expansion sequences such as %F.
Changes
CVE-2021-45444: Some prompt expansion sequences, such as %F,
support 'arguments' which are themselves expanded in case they
contain colour values, etc. This additional expansion would trigger
PROMPT_SUBST evaluation, if enabled. This could be abused to
execute code the user didn't expect. e.g., given a certain prompt
configuration, an attacker could trick a user into executing
arbitrary code by having them check out a Git branch with a
specially crafted name.
This is fixed in the shell itself by no longer performing
PROMPT_SUBST evaluation on these prompt-expansion arguments.
Users who are concerned about an exploit but unable to update their
binaries may apply the partial work-around described in the file
Etc/CVE-2021-45444-VCS_Info-workaround.patch included with the shell
source. [ Reported by RyotaK. Additional thanks to Marc Cornellà. ]
v1.4.2 (2022-03-10)
Bug Fixes
install: Add -o flag to unzip to match tar (#3727)
Code Refactoring
install: remove trailing slash from BIN_DIR (#3723)
v1.4.1 (2022-03-09)
Build
bump regex from 1.5.4 to 1.5.5 (#3712)
Add /starship.exe.manifest to Cargo.toml include (#3713)
Continuous Integration
Correct dependencies for deploy workflow (#3724)
v1.4.0 (2022-03-08)
Features
-Add a Windows application manifest (#3590)
-kubernetes: add context user and cluster variables (#3569)
Bug Fixes
-use shell-compatible curl install (#3691)
-typo of variable in CONTRIBUTING (#3595)
-Exclude vuepress output from dprint (#3616)
-ignore empty --jobs argument (#3593)
-aws: Only display AWS if there are credentials configured (#3504)
-fish: Emit clear-screen escape sequence only in left prompt (#3588)
-localip: disable localip module default (#3607)
-pwsh: Use global:error[0] for most recent error in powershell (#3584)
-rust: overrides should only check full segments (#3668)
-windows: avoid verbatim paths (#3638)
Docs
-Rename Heading localip -> Local IP (#3612)
-Update Preset system with several additional features (#3683)
-remove enableZshIntegration from homemanager installation (#3671)
-"Local IP" chapter in alphabetical order (#3613)
-fix typo in config/README.md (#3561)
-directory: add missing doc on option directory.repo_root_format (#3550)
-i18n: new Crowdin updates (#3586)
-i18n: new Crowdin updates (#3677)
Code Refactoring
-fix new clippy/compiler warnings (#3656)
Performance Improvements
-git_status: add option to use windows starship to render in wsl (#2146)
-rayon: restrict thread count (#3667)
v0.8.0 - 2021-11-06
Added
* disable=all now conveniently disables all warnings
* external-sources=true directive can be added to .shellcheckrc to make
shellcheck behave as if -x was specified.
* Optional check-extra-masked-returns for pointing out commands with
suppressed exit codes (SC2312).
* Optional require-double-brackets for recommending [[ ]] (SC2292).
* SC2286-SC2288: Warn when command name ends in a symbol like /.)'"
* SC2289: Warn when command name contains tabs or linefeeds
* SC2291: Warn about repeated unquoted spaces between words in echo
* SC2292: Suggest [[ over [ in Bash/Ksh scripts (optional)
* SC2293/SC2294: Warn when calling eval with arrays
* SC2295: Warn about "\({x#\)y}" treating $y as a pattern when not quoted
* SC2296-SC2301: Improved warnings for bad parameter expansions
* SC2302/SC2303: Warn about loops over array values when using them as keys
* SC2304-SC2306: Warn about unquoted globs in expr arguments
* SC2307: Warn about insufficient number of arguments to expr
* SC2308: Suggest other approaches for non-standard expr extensions
* SC2313: Warn about read with unquoted, array indexed variable
Fixed
* SC2102 about repetitions in ranges no longer triggers on [[ -v arr[xx] ]]
* SC2155 now recognizes typeset and local read-only declare statements
* SC2181 now tries to avoid triggering for error handling functions
* SC2290: Warn about misused = in declare & co, which were not caught by
SC2270+
* The flag --color=auto no longer outputs color when TERM is "dumb" or
unset
Changed
* SC2048: Warning about $* now also applies to ${array[*]}
* SC2181 now only triggers on single condition tests like [ $? = 0 ].
* Quote warnings are now emitted for declaration utilities in sh
* Leading _ can now be used to suppress warnings about unused variables
* TTY output now includes warning level in text as well as color
Removed
* SC1004: Literal backslash+linefeed in '' was found to be usually correct
Features
add username to Pulumi module (#3428)
Enable Undistract Me for Linux (#3547)
starship bug-report sets syntax highlighting for config file (#3529)
add a container indicator (#3304)
cli: Print arguments if argument parsing fails (#3560)
cmd_duration: Make notification timeout configurable (#3515)
install: Add posix shell check (#3474)
localip: add module to print the current ipv4 address (#3289)
pwsh: Set ExtraPromptLineCount (#3439)
pwsh: Set STARSHIP_SHELL to pwsh on PS >5 (#3443)
Bug Fixes
Correctly detect older versions of powershell in bug-report (#3543)
bash: Restore previous exit status in bash init (#3521)
elvish: use $pwd for logical-path (#3534)
nodejs: use e718 as the default of symbol in node configuration (#3533)
status: Enable to convert from i64 to hex_status by casting instead of
parsing status. (#3462)
Code Refactoring
Improve compatibility with Zsh prompt theme system (#3480)
zsh: using add-zsh-hook instead of add hook manually (#3537)
Performance Improvements
elvish: Use built-in randint instead of starship session. (#3479)
What's New:
-You can now learn about some of the upcoming changes in Nushell by reading the
tutor e-q page. It will tell you about some of the new features and breaking
changes, as well as link you to the full list of changes.
Fixes:
-Fix to the sample configuration file
-Fix to a crate description
-Bump to some dependencies in wasm support
-Update to sysinfo support
-Fix to build on latest Rust stable + clippy
Bug Fixes:
-allow compilation without battery feature (#3435)
-properties: fix regressions in status, pipestatus and terminal-width handling
(#3399)
-pwsh: Avoid polluting the global function namespace (#3424)
v1.2.0 (2022-01-14)
Features:
-add support for cmd (#3277)
-set a continuation prompt for supporting shells (#3322)
-deno: detect deno.json and deno.jsonc (#3220)
-directory: Windows path formatting via path_slash::PathBufExt (#3157)
-elvish: last command status (#3403)
-package: support for dart pub version (#3373)
-xonsh: support rprompt (#3362)
Bug Fixes:
-typo in FAQ page (#3347)
-update continuation prompt to be more minimal (#3374)
-set cwd for command execution (#3309)
-bug-report: remove git.io link shortening (#3425)
-dart: detect version output in stdout with dart 2.15+ (#3349)
-elvish: upgrade shell integration for v0.17 (#3310)
-rust: fix overrides on windows and set cwd (#3359)
Docs:
-add missing quote in bracketed preset
-Update GitHub ISSUE_TEMPLATE (#3366)
-Add nu_indicator to doc tables (#3365)
-Fix incorrect variables for hostname module (#3361)
-cmd_duration: rust-notify -> notify-rust (#3417)
-faq: for uninstalling, change which to command -v (#3394)
-Code Refactoring
-update clap to v3 (#3370)
-process_control: switch to new API (#3385)
Performance Improvements:
-git_status: tweak exec flags to omit unnecessary info (#3287)
-rust: additionally check rustup default for faster result. (#3354)
Chore:
-directory: fix typo (#3364)
-release: v1.2.0
13: Fix ~ expansion after : in assignment statements in POSIX mode.
14: Fix corruption in multibyte chars spanning a 512 byte buffer when
reading the output of a command substitution
15: Fix sign extension with charsets containing 'negative' chars
16: Make multiple ! in a [[ ]] toggle negation instead of just more of the same
Mostly from kre@
This flag should be set for packages that import pkg_resources
and thus need setuptools after the build step.
Set this flag for packages that need it and bump PKGREVISION.
What's New
Fixes
-Can optionally use an insecure SSL cert (nibon7)
-Fixed a crash when viewing text files (nibon7)
-Build fixed for NetBSD (0323pin)
Breaking change
-For naming consistency, into column_path is now into column-path
ChangeLog
2019-12-16 Timothy Sample <samplet@ngyro.com>
Update the NEWS file.
NEWS: Update for release 0.2.0.
2019-12-16 Timothy Sample <samplet@ngyro.com>
Make the bootstrap test work with current Guix.
* tests/bootstrap/bash-without-bash.scm (%boot0-inputs): Call the
upstream '%boot0-inputs' to get the list of packages.
2019-12-10 Timothy Sample <samplet@ngyro.com>
Generate 'version.texi' reproducibly.
* Makefile.am ($(srcdir)/doc/version.texi): New rule (overriding one
provided by Automake).
2019-12-09 Timothy Sample <samplet@ngyro.com>
Add janneke to the ChangeLog copyright notice.
2019-12-09 Jan Nieuwenhuizen <janneke@gnu.org>
Timothy Sample <samplet@ngyro.com>
Allow 'make dist' in a Git worktree.
* Makefile.am (dist-hook, gen-ChangeLog): Test for mere existence of
.git instead of asserting a directory.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Generate the ChangeLog reproducibly.
* build-aux/gitlog-to-changelog-repro.patch: New file.
* Makefile.am (EXTRA_DIST): Add it.
(build-aux/gitlog-to-changelog-repro): New rule.
(gen-ChangeLog): Use 'gitlog-to-changelog-repro'.
(DISTCLEANFILES): Add 'build-aux/gitlog-to-changelog-repro'.
2019-12-09 Jan Nieuwenhuizen <janneke@gnu.org>
Timothy Sample <samplet@ngyro.com>
Generate reproducible source tarballs.
* Makefile.am (dist-hook): Generate a '.tarball-timestamp' file.
(GZIP_ENV): Override, adding '--no-name'.
(am__tar): Override, adding flags to create reproducible source
tarballs.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Allow running 'make dist' from extracted tarball.
* Makefile (dist-hook): Check for '.git' before generating
'.tarball-manifest'.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Generate ChangeLog from Git.
* ChangeLog: Update Git log URL and add a copyright notice.
* Makefile.am (gen-ChangeLog): Use 'gitlog-to-changelog' to generate
the ChangeLog.
2019-12-09 Jan Nieuwenhuizen <janneke@gnu.org>
gash compat textual-ports: Add put-char.
* gash/compat/textual-ports.scm: Add put-char.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Initialize the current locale on Guile 2.0.
* gash/gash.scm: Initialize the current locale on Guile 2.0.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Allow one-armed 'if-guile-version-below'.
* gash/compat.scm: Allow one-armed 'if-guile-version-below' syntax and
use it to simplify the conditional definitions throughout.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Use bindings with regular built-ins.
* gash/shell.scm (sh:exec-let): Save and set variables according to
'bindings' before executing a regular built-in.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Reap every process in a pipeline.
* gash/shell.scm (waitpid/any): New procedure.
(sh:pipeline): Use it to reap every process spawned while executing a
pipeline.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Do not leak ports into pipeline processes.
* gash/shell.scm (swap-and-shift-pairs): Remove procedure.
(make-pipes): Remove procedure.
(plumb): Accept another port as an argument and close it when setting
up the child process.
(sh:pipeline): Do not use 'make-pipes' to create all the pipe ports
upfront, but rather create them as needed and give them directly to
'plumb'.
2019-12-09 Jan Nieuwenhuizen <janneke@gnu.org>
Timothy Sample <samplet@ngyro.com>
Test executing redirect-created files immediately.
* tests/redirects.org (Files opened for redirect can be executed
immediately): New test.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Close ports opened for redirects.
* gash/shell.scm (redir->parameter+port): Rename this...
(process-redirect): ...to this, and make it return a list with the
third element being a boolean indicating if the port was opened by us.
(sh:with-redirects): Close ports when the new boolean is set.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Enable 'glob' specification test
* tests/spec/Makefile.am (TESTS): Add 'glob'.
* tests/spec/oil.scm: Patch one of its tests and filter out eleven
others.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Respect the 'noglob' option.
* gash/word.scm (expand-pathnames): Do not expand pathnames if the
'noglob' option is set.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Fix pathname expansion.
The old implementation had several bugs, prompting this complete
rewrite.
* gash/compat/srfi-43.scm (vector-empty?): New procedure.
* gash/pattern.scm (pattern-null?): New procedure.
* gash/word.scm (qword->pattern-string): New procedure.
(qword->pattern): Rewrite using 'qword->pattern-string'.
(find-files): New procedure.
(expand-pathnames): Rewrite using 'find-files' and add a docstring.
* tests/unit/word.scm: Add tests.
(mock): New syntax.
(make-pure-scandir): New procedure.
(with-mocked-files): New syntax.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Simplify the 'pattern' data structure.
* gash/pattern.scm (<pattern>): Remove the 'start-anchored?' and
'end-anchored?' fields.
(parse-pattern): Replace the fields with empty parts at the start or
end of the parts list.
(pattern-plain?): Instead of checking the fields, just check the
number of parts.
(pattern-match?, pattern-drop, pattern-drop-right): Do not worry about
the fields, because the empty parts ensure the right thing happens.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Swap semantics of ':+' and '+'.
These were mixed up, with ':+' behaving like '+' and vice versa.
* gash/word.scm (word->qword): Swap implementations of '<sh-ref-and>'
and '<sh-ref-and*>'.
* tests/unit/word.scm: Swap tests.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Enable 'command-sub' specification test
* tests/spec/Makefile.am (TESTS): Add 'command-sub'.
* tests/spec/oil.scm: Patch four of its tests and filter out another.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Fix case statements in '$(...)' substitutions.
* gash/parser.scm (make-parser): Fix the 'pattern!' rule so that it
gets reduced before reading an 'RPAREN' token.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Add test for backquoted commands in heredocs.
* tests/unit/parser.scm: Add test.
2019-12-09 Timothy Sample <samplet@ngyro.com>
Correctly parse double-quoted backquoted commands.
* gash/lexer.scm (read-backquoted-command): Make the default procedure
accept a 'quoted?' keyword.
(get-backquoted-command): Accept a 'quoted?' keyword and pass it on to
'read-backquoted-command'.
(get-expansion): Accept a 'quoted?' keyword and pass it on to
'get-backquoted-command'.
(get-double-quotation): Set the 'quoted?' keyword when calling
'get-expansion'.
* tests/unit/lexer.scm: Add tests.
* gash/parser.scm (call-with-backquoted-input-port): Accept a
'quoted?' keyword which, if set, adds the double quote character to
the set of escapable characters.
(read-sh/backquoted): Accept a 'quoted?' keyword and pass it on to
'call-with-backquoted-input-port'.
* tests/unit/parser.scm: Add tests.
2019-12-08 Timothy Sample <samplet@ngyro.com>
Implement asserting references.
* gash/word.scm (word->qword): Add an implementation for the
'<sh-ref-assert>' and '<sh-ref-assert*>' cases.
* tests/variable-operators.org: New file.
* Makefile.am (FULL_TESTS): Add it.
2019-12-08 Timothy Sample <samplet@ngyro.com>
Reset exit status on assignment.
* gash/eval.scm (eval-word): Add 'on-command-substitution' keyword.
(eval-sh): On '<sh-set!>' reset the exit status unless a command
substitution has occurred.
* tests/assignments.org: Add tests.
2019-12-08 Timothy Sample <samplet@ngyro.com>
Initialize the 'IFS' variable.
* gash/environment.scm (initial-variables): Initialize 'IFS'.
2019-12-08 Timothy Sample <samplet@ngyro.com>
Only throw for specific special built-in errors.
* gash/shell.scm (sh:exec-let): Do not throw on special built-in
errors.
* gash/built-ins/break.scm (main),
gash/built-ins/continue.scm (main),
gash/built-ins/return.scm (main),
gash/built-ins/shift.scm (main): Throw on error.
2019-12-08 Timothy Sample <samplet@ngyro.com>
Make 'trap' handle a numerical action.
* gash/built-ins/utils.scm (string->nonnegative-integer): New procedure.
* gash/built-ins/trap.scm (main): If the first argument is a number,
treat it as if the action were '-'.
2019-12-08 Timothy Sample <samplet@ngyro.com>
Fix 'string->positive-integer' docstring typo.
* gash/built-ins/utils.scm (string->positive-integer): Fix a typo in
the docstring.
2019-12-08 Timothy Sample <samplet@ngyro.com>
Make 'read' handle logical lines.
* gash/built-ins/read.scm (read-logical-line): New procedure.
(main): Use it unless given the '-r' option.
* tests/read.org: Add tests.
2019-12-08 Timothy Sample <samplet@ngyro.com>
Make 'read' handle input field splitting.
* gash/built-ins/read.scm (split-fields): New procedure.
(main): Use it to split the input into fields and assign each field to
its corresponding variable.
* tests/read.org: New file.
* Makefile.am (FULL_TESTS): Add it.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Handle nested lists when removing quotes.
* gash/word.scm (remove-quotes): Handle nested lists.
(split-fields) <wedge-apart-quote>: Likewise.
* tests/unit/word.scm: Add test.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Use temporary assignments when calling functions.
* gash/environment.scm (save-variables-excursion): New procedure.
* gash/shell.scm (sh:exec-let): Use it to set up temporary assignments
during the extent of a function.
* tests/temporary-assignments.org: New file.
* Makefile.am (TESTS): Add it.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Delay bracket expression errors in patterns.
* gash/pattern.scm (parse-matching-bracket-expression): Do not
report errors until a full bracket expression has been parsed.
* tests/unit/pattern.scm: Add test.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Use '(gash compat)' in '(gash built-ins utils)'.
This was omitted from ffe9fc1f47306dd526a5443689c129859e72d7ae.
* gash/built-ins/utils.scm: Use the '(gash compat)' module.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Enable 'var-op-strip' specification test
* tests/spec/Makefile.am (TESTS): Add 'var-op-strip'.
* tests/spec/oil.scm: Patch two of its tests and filter out four
others.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Use UTF-8 when processing specification tests.
* tests/spec/oil.scm: Set the encoding on the input and output ports
to UTF-8.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Implement pattern-based variable operators.
This commit adds an implementation for the '#', '##', '%', and '%%'
variable operators.
* gash/word.scm (word->qword): Add an implementation for the
'<sh-ref-except-min>', '<sh-ref-except-max>', '<sh-ref-skip-min>',
and '<sh-ref-skip-max>' cases.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Fix docstring for 'parameter-ref'.
* gash/word.scm (parameter-ref): Fix docstring.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Remove tests for the '/' variable operator.
This is a Bash-specific feature, which means that it is out of scope
for now.
* tests/variable-patterns.org (slash, slash-string,
slash-string-slash): Delete tests.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Add pattern dropping procedures.
* gash/pattern.scm (string-contains-part-right): New procedure.
(pattern-drop): New procedure.
(pattern-drop-right): New procedure.
* tests/unit/pattern.scm: Test the dropping procedures.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Use a record type for patterns.
* gash/compat/srfi-43.scm: New file.
* Makefile.am: Add it.
* gash/pattern.scm (<pattern>): New record type.
(parse-part): New procedure.
(parse-pattern): Return a '<pattern>'.
(pattern-plain?, pattern-match?): Accept a '<pattern>'.
(string-starts-with-part, string-ends-with-part,
string-contains-part): Treat 'part' as a vector.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Add tests for 'pattern-plain?'.
* tests/unit/pattern.scm: Add tests for 'pattern-plain?'.
2019-11-24 Timothy Sample <samplet@ngyro.com>
Do not test Bash with the specification tests.
* tests/spec/oil.scm: Disable testing Bash in 'spec.sh'.
2019-08-20 Timothy Sample <samplet@ngyro.com>
Remove extra import from 'run-test-suite'.
The '(ice-9 textual-ports)' module is not needed, and using it breaks
the test suite on Guile 2.0.
* tests/run-test-suite.in: Do not use '(ice-9 textual-ports)'.
2019-08-03 Timothy Sample <samplet@ngyro.com>
Add missing '(gash compat)' import.
This was omitted from ffe9fc1f47306dd526a5443689c129859e72d7ae.
* gash/shell.scm: Use the '(gash compat)' module.
2019-08-01 Timothy Sample <samplet@ngyro.com>
Use the 'site' Guile directories when installing.
Thanks to Ludovic Courtès <ludo@gnu.org> for patching this in the Guix
package definition.
* build-aux/guile.am (moddir, ccachedir): Use the 'site' directories.
2019-08-01 Timothy Sample <samplet@ngyro.com>
Use 'sh:exit' for 'errexit'.
* gash/shell.scm (errexit): Exit using 'sh:exit'.
* tests/unit/shell.scm: Make sure exit handlers are called on
'errexit'.
2019-08-01 Timothy Sample <samplet@ngyro.com>
Do not use 'with-continuation-barrier'.
It turns out that 'with-continuation-barrier' allows delimited
continuations (i.e., prompts) to get through.
* gash/shell.scm (%subshell): Replace 'with-continuation-barrier' with
'dynamic-wind', making sure to preserve exit statuses that were leaked
through before.
* tests/unit/shell.scm (call-with-temporary-directory): Replace
'with-continuation-barrier' with 'dynamic-wind'.
* tests/spec/oil.scm: Enable previously failing tests.
2019-08-01 Timothy Sample <samplet@ngyro.com>
Fix top-level 'break', 'continue', and 'return'.
* gash/environment.scm (sh:break, sh:continue, sh:return): Wrap
'abort-to-prompt' with 'false-if-exception'.
* gash/built-ins/break.scm (main): Print warning and continue if
'sh:break' returns.
* gash/built-ins/continue.scm (main): Likewise, but for 'sh:continue'.
* gash/built-ins/return.scm (main): Likewise, but for 'sh:return'.
* tests/functions.org (Top-level return): New test.
* tests/spec/oil.scm: Enable previously failing test.
2019-06-15 Timothy Sample <samplet@ngyro.com>
Handle 'return' errors.
* gash/built-ins/utils.scm (string->exit-status): New procedure.
* gash/built-ins/return.scm (main): Use it to simplify argument
checking; check for too many arguments; and print messages on
errors.
* tests/functions.org (Too many arguments to return): New test.
2019-06-15 Timothy Sample <samplet@ngyro.com>
Handle 'break' and 'continue' errors.
* gash/built-ins/utils.scm (string->positive-integer): New function.
* gash/built-ins/break.scm (main): Use it to simplify argument
checking; check for too many arguments; and print messages on errors.
* gash/built-ins/continue.scm (main): Ditto.
* gash/shell.scm (sh:exec-let): Throw an error if a special built-in
fails.
* tests/spec/oil.scm: Enable and adjust previously failing tests.
2019-06-15 Timothy Sample <samplet@ngyro.com>
Aggregate tests into test suites.
This is a big change, but it is conceptually quite simple. In the old
system, the tests were specified each by multiple files ('.sh', '.exit',
'.stdout', and '.stderr'), and run with the 'test.sh' script. In the
new system there are multiple tests per file ('.org') and these test
suite files are run with the 'tests/run-test-suite' script.
* tests/00-exit-0.sh,
tests/00-exit-1.exit,
tests/00-exit-1.sh,
tests/00-exit-2.exit,
tests/00-exit-2.sh,
tests/00-exit-error.exit,
tests/00-exit-error.sh,
tests/00-exit-var.exit,
tests/00-exit-var.sh,
tests/00-exit.sh: Delete files, moving their contents...
* tests/exiting.org: ...here.
* tests/01-script-arg-0.sh,
tests/01-script-arg-length.sh,
tests/01-script-arg-length.stdout,
tests/01-script-arg-list.sh,
tests/01-script-arg-list.stdout,
tests/01-script-backslash-space.sh,
tests/01-script-backslash-twice.exit,
tests/01-script-backslash-twice.sh,
tests/01-script-backslash.exit,
tests/01-script-backslash.sh,
tests/01-script-newline.exit,
tests/01-script-newline.sh,
tests/01-script-semi.exit,
tests/01-script-semi.sh,
tests/01-script-shift.sh,
tests/01-script-shift.stdout: Delete files, moving their contents...
* tests/arguments.org: ...here.
* tests/03-echo-brace.sh,
tests/03-echo-brace.stdout,
tests/03-echo-doublequotes.sh,
tests/03-echo-doublequotes.stdout,
tests/03-echo-escaped-doublequotes.sh,
tests/03-echo-escaped-doublequotes.stdout,
tests/03-echo-nesting.sh,
tests/03-echo-nesting.stdout,
tests/03-echo-quoted-doublequotes.sh,
tests/03-echo-quoted-doublequotes.stdout,
tests/03-echo.sh: Delete files, moving their contents...
* tests/words.org: ...here.
* tests/04-echo-equal.sh,
tests/04-echo-equal.stdout,
tests/04-echo-var.sh,
tests/04-echo-word-at-word.sh,
tests/04-echo-word-at-word.stdout,
tests/04-echo-word-at.sh,
tests/04-echo-word-at.stdout: Delete files, moving their contents...
* tests/variable-words.org: ...here.
* tests/05-assignment-backtick.sh,
tests/05-assignment-backtick.stdout,
tests/05-assignment-double-quote.sh,
tests/05-assignment-doublequoted-doublequotes.sh,
tests/05-assignment-doublequoted-doublequotes.stdout,
tests/05-assignment-echo.sh,
tests/05-assignment-echo.stdout,
tests/05-assignment-empty.sh,
tests/05-assignment-empty.stdout,
tests/05-assignment-singlequote.sh,
tests/05-assignment-variable-word.sh,
tests/05-assignment-variable-word.stdout,
tests/05-assignment-word-variable.sh,
tests/05-assignment-word-variable.stdout,
tests/05-assignment.sh: Delete files, moving their contents...
* tests/assignments.org: ...here.
* tests/06-command-compound-word.sh,
tests/06-command-compound-word.stdout,
tests/06-compound-word.sh,
tests/06-compound-word.stdout: Delete files, moving their contents...
* tests/compound-words.org: ...here.
* tests/07-variable-not-or.sh,
tests/07-variable-not-or.stdout,
tests/07-variable-or-doublequote.sh,
tests/07-variable-or-doublequote.stdout,
tests/07-variable-or-empty.sh,
tests/07-variable-or-empty.stdout,
tests/07-variable-or-slash.sh,
tests/07-variable-or-variable.sh,
tests/07-variable-or-variable.stdout,
tests/07-variable-or.sh,
tests/07-variable-or.stdout: Delete files, moving their contents...
* tests/variable-or.org: ...here.
* tests/08-variable-and.sh,
tests/08-variable-and.stdout,
tests/08-variable-not-and.sh,
tests/08-variable-not-and.stdout: Delete files, moving their contents...
* tests/variable-and.org: ...here.
* tests/10-else-multiple.sh,
tests/10-else.multiple.stdout,
tests/10-if-bracket-false.sh,
tests/10-if-bracket.sh,
tests/10-if-elif.sh,
tests/10-if-else.sh,
tests/10-if-false.sh,
tests/10-if-line.sh,
tests/10-if-multiple.sh,
tests/10-if-multiple.stdout,
tests/10-if-redirect.sh,
tests/10-if-test-false.sh,
tests/10-if-test.sh,
tests/10-if-word-variable.sh,
tests/10-if.sh: Delete files, moving their contents...
* tests/conditionals.org: ...here.
* tests/11-for-done-subshell.sh,
tests/11-for-done-subshell.stdout,
tests/11-for-split-sequence.sh,
tests/11-for-split-sequence.stdout,
tests/11-for.sh,
tests/11-for.stdout: Delete files, moving their contents...
* tests/loops.org: ...here.
* tests/20-and.exit,
tests/20-and.sh,
tests/20-exec.sh,
tests/20-or.sh,
tests/20-pipe-exit-0.sh,
tests/20-pipe-exit-1.exit,
tests/20-pipe-exit-1.sh,
tests/20-pipe-sed-cat.sh,
tests/20-pipe-sed-cat.stdout,
tests/20-pipe-sed.sh,
tests/20-pipe-sed.stdout,
tests/20-semi.exit,
tests/20-semi.sh: Delete files, moving their contents...
* tests/pipes-and-booleans.org: ...here.
* tests/30-for-substitution.sh,
tests/30-for-substitution.stdout,
tests/30-substitution-assignment-at.sh,
tests/30-substitution-assignment-at.stdout,
tests/30-substitution-assignment.sh,
tests/30-substitution-assignment.stdout,
tests/30-substitution-backtick.sh,
tests/30-substitution-backtick.stdout,
tests/30-substitution-redirect.sh,
tests/30-substitution-redirect.stdout,
tests/30-substitution-word.sh,
tests/30-substitution-word.stdout,
tests/30-substitution.sh,
tests/30-substitution.stdout: Delete files, moving their contents...
* tests/command-substitution.org: ...here.
* tests/40-assignment-eval-echo.sh,
tests/40-assignment-eval-echo.stdout,
tests/40-eval-echo-variable.sh,
tests/40-eval-echo-variable.stdout,
tests/40-eval.sh,
tests/40-eval.stdout: Delete files, moving their contents...
* tests/eval.org: ...here.
* tests/41-dot.sh,
tests/41-dot.stdout: Delete files, moving their contents...
* tests/dot.org: ...here.
* tests/42-export-new.sh,
tests/42-export-new.stdout,
tests/42-sh-export-new.sh,
tests/42-sh-export-new.stdout,
tests/42-sh-export.sh,
tests/42-sh-export.stdout,
tests/42-sh.sh,
tests/42-sh.stdout: Delete files, moving their contents...
* tests/exporting.org: ...here.
* tests/data/42-export-new.sh: New file (copied from
'tests/42-export-new.sh').
* tests/43-trap-subshell.sh,
tests/43-trap-subshell.stdout: Delete files, moving their contents...
* tests/signals.org: ...here.
* tests/50-iohere-builtin.sh,
tests/50-iohere.sh,
tests/50-iohere.stdout,
tests/50-redirect-append.sh,
tests/50-redirect-append.stdout,
tests/50-redirect-clobber.sh,
tests/50-redirect-clobber.stdout,
tests/50-redirect-in-out.sh,
tests/50-redirect-in-out.stdout,
tests/50-redirect-in.sh,
tests/50-redirect-merge.sh,
tests/50-redirect-merge.stdout,
tests/50-redirect-pipe.sh,
tests/50-redirect-pipe.stdout,
tests/50-redirect-sed.sh,
tests/50-redirect-sed.stdout,
tests/50-redirect-space.sh,
tests/50-redirect-space.stdout,
tests/50-redirect.sh,
tests/50-redirect.stdout: Delete files, moving their contents...
* tests/redirects.org: ...here.
* tests/60-function-at.sh,
tests/60-function-at.stdout,
tests/60-function.sh,
tests/60-function.stdout,
tests/60-subst.sh: Delete files, moving their contents...
* tests/functions.org: ...here.
* tests/70-hash-hash.sh,
tests/70-hash-hash.stdout,
tests/70-hash.sh,
tests/70-hash.stdout,
tests/70-percent-percent.sh,
tests/70-percent-percent.stdout,
tests/70-percent-space.sh,
tests/70-percent-space.stdout,
tests/70-percent.sh,
tests/70-percent.stdout,
tests/70-slash-string-slash.sh,
tests/70-slash-string.sh,
tests/70-slash-string.stdout,
tests/70-slash.sh,
tests/70-slash.stdout: Delete files, moving their contents...
* tests/variable-patterns.org: ...here.
* tests/100-bracket-file.sh,
tests/100-cd-foo.exit,
tests/100-cd-foo.sh,
tests/100-cd.sh,
tests/100-cd.stdout,
tests/100-test-false.sh,
tests/100-test-file.sh,
tests/100-test.sh: Delete files.
* tests/README: Move this...
* tests/data/README: ...here and adapt to the new directory.
* test.sh: Delete file.
* tests/run-test-suite.in: New file.
* configure.ac: Configure it.
* Makefile.am (TEST_EXTENSIONS): Replace '.sh' with '.org'.
(SH_LOG_COMPILER): Delete variable.
(ORG_LOG_COMPILER): New variable.
(FULL_TESTS, XFAIL_TESTS): Replace '.sh' tests with '.org' tests.
(BROKEN_TESTS): Delete variable.
(TEST_DATA_FILES): Remove '.exit' and '.stdout' files; add
tests/data/42-export-new.sh.
(EXTRA_DIST): Add tests/data/README; remove tests/README,
BROKEN_TESTS, and test.sh.
* .gitignore: Adjust accordingly.
2019-06-07 Timothy Sample <samplet@ngyro.com>
Update the specification tests.
* tests/spec/oil.scm: Update to the latest commit and filter out some
new failing tests.
2019-06-04 Timothy Sample <samplet@ngyro.com>
Fix a typo in NEWS.
* NEWS: Fix a typo.
Changes since 6.23.00:
8. V6.23.01 - 20211209
7. add \cc and \Uhhh, and document escape sequences
6. add $'string with escapes' ("dollar-single-quotes") (Kimmo Suominen)
5. don't glob the filetest builtin arguments twice
4. remove the duplicate echo escape parsing code and use parseescape
3. add \x{hh} \xhh \uhhh (H.Merijn Brand)
2. fix and document ln=target
1. Merge in patches from pkgsrc:
- Modernize the installation targets so that they use INSTALL_DATA,
INSTALL_PROGRAM, and MKDIR_P.
- Enable SYSMALLOC and SHORT_STRINGS on NetBSD.
- Enable NO_FIX_MALLOC and SHORT_STRINGS on OpenBSD.
For pkgsrc, items 1, 2, and 5 had already been applied via patches.
What's New
-Features:
-Add -l/--login flag for compat with other shells
-Fixes:
-save --append will now create a file if missing
-Upgraded dependencies
-Corrected spelling in crate docs and code docs
-Fixed the markup in some of the crate docs
-external arguments are now sanitized more
-upx/strip has been removed after feedback from users
-Clipboard capability via arboard removed
-Removed some unnecessary allocation