Releases: fish-shell/fish-shell
fish 3.7.1 (released March 19, 2024)
This release of fish fixes the following problems identified in fish 3.7.0:
- Deleting the last history entry via
history delete
works again (#10190). - Wildcards (
*
) will no longer sometimes generate paths that did not exist (#10205).
This release also contains some improvements:
- A crash when trying to run an ELF program with a missing interpreter has been fixed. This crashed in the process after fork, so did not affect the fish process that tried to start the program (#10199).
funced
will now alwayssource
the file after it has written it, even if the contents did not change. This prevents issues if the file was otherwise modified (#10318).- The warning for when a builtin returns a negative exit code was improved, now mentioning the original status (#10187).
- Added completions for
- Some improvements to documentation and completions.
Download links: To download the source code for fish, we suggest the file named "fish-3.7.1.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is 614c9f5643cd0799df391395fa6bbc3649427bb839722ce3b114d3bbc1a3b250
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is available as "fish-3.7.1.tar.xz.asc".
fish 3.7.0 (released January 1, 2024)
This release of fish includes a number of improvements over fish 3.6.4, detailed below. Although work continues on the porting of fish internals to the Rust programming language, that work is not included in this release. fish 3.7.0 and any future releases in the 3.7 series remain C programs.
Notable improvements and fixes
- Improvements to the history pager, including:
- The history pager will now also attempt subsequence matches (#9476), so you can find a command line like
git log 3.6.1..Integration_3.7.0
by searching forgitInt
. - Opening the history pager will now fill the search field with a search string if you’re already in a search (#10005). This makes it nicer to search something with
↑
and then later decide to switch to the full pager. - Closing the history pager with enter will now copy the search text to the commandline if there was no match, so you can continue editing the command you tried to find right away (#9934).
- The history pager will now also attempt subsequence matches (#9476), so you can find a command line like
- Performance improvements for command completions and globbing, where supported by the operating system, especially on slow filesystems such as NFS (#9891, #9931, #10032, #10052).
- fish can now be configured to wait a specified amount of time for a multi-key sequence to be completed, instead of waiting indefinitely. For example, this makes binding
kj
to switching modes in vi mode possible.
The timeout can be set via the newfish_sequence_key_delay_ms
variable (#7401), and may be set by default in future versions.
Deprecations and removed features
LS_COLORS
is no longer set automatically by thels
function (#10080). Users
that set.dircolors
should manually import it using other means. Typically this would beset -gx LS_COLORS (dircolors -c .dircolors | string split ' ')[3]
Scripting improvements
- Running
exit
with a negative number no longer crashes fish (#9659). fish --command
will now return a non-zero status if parsing failed (#9888).- The
jobs
builtin will now escape the commands it prints (#9808). string repeat
no longer overflows if the count is a multiple of the chunk size (#9900).- The
builtin
builtin will now properly error out with invalid arguments instead of doing nothing and returning true (#9942). command time
in a pipeline is allowed again, as iscommand and
andcommand or
(#9985).exec
will now also apply variable overrides, soFOO=bar exec
will now set$FOO
correctly (#9995).umask
will now handle empty symbolic modes correctly, likeumask u=,g=rwx,o=
(#10177).- Improved error messages for errors occurring in command substitutions (#10054).
Interactive improvements
read
no longer enables bracketed paste so it doesn’t stay enabled in combined commandlines likemysql -p(read --silent)
(#8285).- Vi mode now uses
fish_cursor_external
to set the cursor shape for external commands (#4656). - Opening the history search in vi mode switches to insert mode correctly (#10141).
- Vi mode cursor shaping is now enabled in iTerm2 (#9698).
- Working directory reporting is enabled for iTerm2 (#9955).
- Completing commands as root includes commands not owned by root, fixing a regression introduced in fish 3.2.0 (#9699).
- Selection uses
fish_color_selection
for the foreground and background colors, as intended, rather than just the background (#9717). - The completion pager will no longer sometimes skip the last entry when moving through a long list (#9833).
- The interactive
history delete
interface now allows specifying index ranges like “1..5” (#9736), andhistory delete --exact
now properly saves the history (#10066). - Command completion will now call the stock
manpath
on macOS, instead of a potential Homebrew version. This prevents awkward error messages (#9817). - A new bind function
history-pager-delete
, bound toShift
Delete
by default, will delete the currently-selected history pager item from history (#9454). fish_key_reader
will now use printable characters as-is, so pressing “ö” no longer leads to it telling you to bind\\u00F6
(#9986).open
can be used to launch terminal programs again, as anxdg-open
bug has been fixed and a workaround has been removed (#10045).- The
repaint-mode
binding will now only move the cursor if there is repainting to be done. This fixesAlt
combination bindings in vi mode (#7910). - A new
clear-screen
bind function is used forCtrl
l
by default. This clears the screen and repaints the existing prompt at first,
so it eliminates visible flicker unless the terminal is very slow (#10044). - The
alias
convenience function has better support for commands with unusual characters, like - A longstanding issue where items in the pager would sometimes display without proper formatting has been fixed (#9617).
- The
Alt
l
binding, which lists the directory of the token under the cursor, correctly expands tilde (~
) to the home directory (#9954). - Various fish utilities that use an external pager will now try a selection of common pagers if the
PAGER
environment variable is not set, or write the output to the screen without a pager if there is not one available (#10074). - Command-specific tab completions may now offer results whose first character is a period. For example, it is now possible to tab-complete
git add
for files with leading periods. The default file completions hide these files, unless the token itself has a leading period (#3707).
Improved prompts
- The default theme now only uses named colors, so it will track the terminal’s palette (#9913).
- The Dracula theme has now been synced with upstream (#9807); use
fish_config
to re-apply it to pick up the changes. fish_vcs_prompt
now also supports fossil (#9497).- Prompts which display the working directory using the
prompt_pwd
function correctly display directories beginning with dashes (#10169).
Completions
- Added completions for:
age
andage-keygen
(#9813)airmon-ng
(#10116)ar
(#9720)blender
(#9905)bws
(#10165)calendar
(#10138)checkinstall
(#10106)crc
(#10034)doctl
gimp
(#9904)gojq
(#9740)horcrux
(#9922)ibmcloud
(#10004)iwctl
(#6884)java_home
(#9998)krita
(#9903)oc
(#10034)qjs
(#9723)qjsc
(#9731)rename
(#10136)rpm-ostool
([#9669](https://github.com/fish-shell/fish...
fish 3.6.4 (released December 5, 2023)
This release contains a complete fix for the test suite failure in fish 3.6.2 and 3.6.3.
Download links: To download the source code for fish, we suggest the file named "fish-3.6.4.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is 0f3f610e580de092fbe882c8aa76623ecf91bb16fdf0543241e6e90d5d4bc393
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is available as "fish-3.6.4.tar.xz.asc".
fish 3.6.3 (released December 4, 2023)
This release contains a fix for a test suite failure in fish 3.6.2.
Download links: To download the source code for fish, we suggest the file named "fish-3.6.3.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is 55520128c8ef515908a3821423b430db9258527a6c6acb61c7cb95626b5a48d5
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is available as "fish-3.6.3.tar.xz.asc".
fish 3.6.2 (released December 4, 2023)
(Please note: this release builds and runs successfully, but the test suite does not pass. A new version will be released shortly.)
This release of fish contains a security fix for CVE-2023-49284, a minor security problem identified in fish 3.6.1 and previous versions (thought to affect all released versions of fish).
fish uses certain Unicode non-characters internally for marking wildcards and expansions. It incorrectly allowed these markers to be read on command substitution output, rather than transforming them into a safe internal representation.
For example, echo \UFDD2HOME
has the same output as echo $HOME
.
While this may cause unexpected behavior with direct input, this may become a minor security problem if the output is being fed from an external program into a command substitution where this output may not be expected.
Download links: To download the source code for fish, we suggest the file named "fish-3.6.2.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is a21a6c986f1f80273895ba7e905fa80ad7e1a262ddb3d979efa443367eaf4863
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is available as "fish-3.6.2.tar.xz.asc".
fish 3.6.1 (released March 25, 2023)
This release of fish contains a number of fixes for problems identified in fish 3.6.0, as well as some enhancements.
Notable improvements and fixes
abbr --erase
now also erases the universal variables used by the old abbr function. That means
abbr --erase (abbr --list)
can now be used to clean out all old abbreviations (#9468).
abbr --add --universal
now warns about--universal
being non-functional, to make it easier to detect old-styleabbr
calls (#9475).
Deprecations and removed features
- The Web-based configuration for abbreviations has been removed, as it was not functional with the changes abbreviations introduced in 3.6.0 (#9460).
Scripting improvements
abbr --list
no longer escapes the abbr name, which is necessary to be able to pass it toabbr --erase
(#9470).read
will now print an error if told to set a read-only variable, instead of silently doing nothing (#9346).set_color -v
no longer crashes fish (#9640).
Interactive improvements
- Using
fish_vi_key_bindings
in combination with fish’s--no-config
mode works without locking up the shell (#9443). - The history pager now uses more screen space, usually half the screen (#9458)
- Variables that were set while the locale was C (the default ASCII-only locale) will now properly be encoded if the locale is switched (#2613, #9473).
- Escape during history search restores the original command line again (fixing a regression in 3.6.0).
- Using
--help
on builtins now respects the$MANPAGER
variable, in preference to$PAGER
(#9488). Control-G
closes the history pager, like other shells (#9484).- The documentation for the
:
,[
and.
builtin commands can now be looked up withman
(#9552). - fish no longer crashes when searching history for non-ASCII codepoints case-insensitively (#9628).
- The
Alt-S
binding will now also useplease
if available (#9635). - Themes that don’t specify every color option can be installed correctly in the Web-based configuration (#9590).
- Compatibility with Midnight Commander’s prompt integration has been improved (#9540).
- A spurious error, noted when using fish in Google Drive directories under WSL 2, has been silenced (#9550).
- Using
read
infish_greeting
or similar functions will not trigger an infinite loop (#9564). - Compatibility when upgrading from old versions of fish (before 3.4.0) has been improved (#9569).
Improved prompts
- The git prompt will compute the stash count to be used independently of the informative status (#9572).
Completions
- Added completions for:
- Improvements to many completions, including the speed of completing directories in WSL 2 (#9574).
- Completions using
__fish_complete_suffix
are now offered in the correct order, fixing a regression in 3.6.0 (#8924). git
completions forgit-foo
-style commands was restored, fixing a regression in 3.6.0 (#9457).- File completion now offers
../
and./
again, fixing a regression in 3.6.0 (#9477). - The behaviour of completions using
__fish_complete_path
matches standard path completions (#9285).
Other improvements
- Improvements and corrections to the documentation.
For distributors
- fish 3.6.1 builds correctly on Cygwin (#9502).
Download links: To download the source code for fish, we suggest the file named "fish-3.6.1.tar.xz". The file downloaded from "Source code (tar.gz)" may not build correctly. The SHA-256 sum of this file is 55402bb47ca6739d8aba25e41780905b5ce1bce0a5e0dd17dca908b5bc0b49b2
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is available as "fish-3.6.1.tar.xz.asc".
fish 3.6.0 (released January 7, 2023)
Notable improvements and fixes
- By default,
Control-R
now opens the command history in the pager (#602). This is fully searchable and syntax-highlighted, as an alternative to the incremental search seen in other shells. The new special input functionhistory-pager
has been added for custom bindings. - Abbrevations are more flexible (#9313, #5003, #2287):
- They may optionally replace tokens anywhere on the command line, instead of only commands
- Matching tokens may be described using a regular expression instead of a literal word
- The replacement text may be produced by a fish function, instead of a literal word
- They may position the cursor anywhere in the expansion, instead of at the end
For example:
function multicd
echo cd (string repeat -n (math (string length -- $argv[1]) - 1) ../)
end
abbr --add dotdot --regex '^\.\. $' --function multicd
This expands ..
to cd ../
, ...
to cd ../../
and ....
to cd ../../../
and so on.
Or:
function last_history_item; echo $history[1]; end
abbr -a !! --position anywhere --function last_history_item
which expands !!
to the last history item, anywhere on the command line, mimicking other shells’ history expansion.
See the documentation for more.
path
gained a newmtime
subcommand to print the modification time stamp for files. For example, this can be used to handle cache file ages (#9057):
> touch foo
> sleep 10
> path mtime --relative foo
10
string
gained a newshorten
subcommand to shorten strings to a given visible width (#9156):
> string shorten --max 10 "Hello this is a long string"
Hello thi…
test
(aka[
) gained-ot
(older than) and-nt
(newer than) operators to compare file modification times, and-ef
to compare whether the arguments are the same file (#3589).- fish will now mark the extent of many errors with a squiggly line, instead of just a caret (
^
) at the beginning (#9130). For example:
checks/set.fish (line 471): for: a,b: invalid variable name. See `help identifiers`
for a,b in y 1 z 3
^~^
- A new function,
fish_delta
, shows changes that have been made in fish’s configuration from the defaults (#9255). set --erase
can now be used with multiple scopes at once, likeset -efglU foo
(#7711, #9280).status
gained a new subcommand,current-commandline
, which retrieves the entirety of the currently-executing command line when called from a function during execution. This allows easier job introspection (#8905, #9296).
Deprecations and removed features
- The
\\x
and\\X
escape syntax is now equivalent.\\xAB
previously behaved the same as\\XAB
, except that it would error if the value “AB” was larger than “7f” (127 in decimal, the highest ASCII value) (#9247, #9245, #1352). - The
fish_git_prompt
will now only turn on features if the appropriate variable has been set to a true value (of “1”, “yes” or “true”) instead of just checking if it is defined. This allows specifically turning features off without having to erase variables, such as via universal variables. If you have defined a variable to a different value and expect it to count as true, you need to change it (#9274).
For example,set -g __fish_git_prompt_show_informative_status 0
previously would have enabled informative status (because any value would have done so), but now it turns it off. - Abbreviations are no longer stored in universal variables. Existing universal abbreviations are still imported, but new abbreviations should be added to
config.fish
. - The short option
-r
for abbreviations has changed fromrename
toregex
, for consistency withstring
.
Scripting improvements
argparse
can now be used without option specifications, to allow using--min-args
,--max-args
or for commands that take no options (but might in future) (#9006):
function my_copy
argparse --min-args 2 -- $argv
or return
cp $argv
end
set --show
now shows when a variable was inherited from fish’s parent process, which should help with debugging (#9029):
> set --show XDG_DATA_DIRS
$XDG_DATA_DIRS: set in global scope, exported, a path variable with 4 elements
$XDG_DATA_DIRS[1]: |/home/alfa/.local/share/flatpak/exports/share|
$XDG_DATA_DIRS[2]: |/var/lib/flatpak/exports/share|
$XDG_DATA_DIRS[3]: |/usr/local/share|
$XDG_DATA_DIRS[4]: |/usr/share|
$XDG_DATA_DIRS: originally inherited as |/home/alfa/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/|
- The read limit is now restored to the default when
fish_read_limit
is unset (#9129). math
produces an error for division-by-zero, as well as augmenting some errors with their extent (#9190). This changes behavior in some limited cases, such as:
math min 1 / 0, 5
which would previously print “5” (because in floating point division “1 / 0” yields infinite, and 5 is smaller than infinite) but will now return an error.
fish_clipboard_copy
andfish_clipboard_paste
can now be used in pipes (#9271):
git rev-list 3.5.1 | fish_clipboard_copy
fish_clipboard_paste | string join | math
status fish-path
returns a fully-normalised path, particularly noticeable on NetBSD (#9085).
Interactive improvements
- If the terminal definition for
TERM
can’t be found, fish now tries using the “xterm-256color” and “xterm” definitions before “ansi” and “dumb”. As the majority of terminal emulators in common use are now more or less xterm-compatible (often even explicitly claiming the xterm-256color entry), this should often result in a fully or almost fully usable terminal (#9026). - A new variable,
fish_cursor_selection_mode
, can be used to configure whether the command line selection includes the character under the cursor (inclusive
) or not (exclusive
). The new default isexclusive
; useset fish_cursor_selection_mode inclusive
to get the previous behavior back (#7762). - fish’s completion pager now fills half the terminal on first tab press instead of only 4 rows, which should make results visible more often and save key presses, without constantly snapping fish to the top of the terminal (#9105, #2698).
- The
complete-and-search
binding, used withShift-Tab
by default, selects the first item in the results immediately (#9080). bind
output is now syntax-highlighted when used interacively.Alt-H
(the default__fish_man_page binding
) does a better job of showing the manual page of the command under cursor (#9020).- If
fish_color_valid_path
contains an actual color instead of just modifiers, those will be used for valid paths even if the underlying color isn’t “normal” (#9159). - The key combination for the QUIT terminal sequence, often
Control-Backslash
(\\x1c
), can now be sused as a binding (#9234). - fish’s vi mode uses normal xterm-style sequences to signal cursor change, instead of using the iTerm’s proprietary escape sequences. This allows for a blinking cursor and makes it work in complicated scenarios with nested terminals. (#3741, #9172)
- When running fish on a remote system (such as inside SSH or a container),
Control-X
now copies to the local client system’s clipboard if the terminal supports OSC 52. commandline
gained two new options,--selection-start
and--selection-end
, to set the start/end of the current selection (#9197, #9215).- fish’s builtins now handle keyboard interrupts (
Control-C
) correctly (#9266).
Completions
- Added completions for:
ark
asciinema
(#9257)clojure
(#9272)csh
direnv
(#9268)dive
([#9082](https://github.co...
fish 3.5.1 (released July 20, 2022)
This release of fish introduces the following small enhancements:
- Cursor shaping for Vi mode is enabled by default in tmux, and will be used if the outer terminal is capable (#8981).
printf
returns a better error when used with arguments interpreted as octal numbers (#9035).history merge
when in private mode is now an error, rather than wiping out other sessions’ history (#9050).- The error message when launching a command that is built for the wrong architecture on macOS is more helpful (#9052).
- Added completions for:
- Improvements to some completions.
This release also fixes a number of problems identified in fish 3.5.0.
- Completing
git blame
orgit -C
works correctly (#9053). - On terminals that emit a
CSI u
sequence forShift-Space
, fish inserts a space instead of printing an error. (#9054). status fish-path
on Linux-based platforms could print the path with a ” (deleted)” suffix (such as/usr/bin/fish (deleted)
), which is now removed (#9019).- Cancelling an initial command (from fish’s
--init-command
option) withControl-C
no longer prevents configuration scripts from running (#9024). - The job summary contained extra blank lines if the prompt used multiple lines, which is now fixed (#9044).
- Using special input functions in bindings, in combination with
and
/or
conditionals, no longer crashes (#9051).
Download links: To download the source code for fish, we suggest the file named "fish-3.5.1.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is a6d45b3dc5a45dd31772e7f8dfdfecabc063986e8f67d60bd7ca60cc81db6928
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is available as "fish-3.5.1.tar.xz.asc".
fish 3.5.0 (released June 16, 2022)
Notable improvements and fixes
- A new
path
builtin command to filter and transform paths (#7659, #8958). For example, to list all the separate extensions used on files in /usr/share/man (after removing one extension, commonly a “.gz”):
path filter -f /usr/share/man/** | path change-extension '' | path extension | path sort -u
- Tab (or any key bound to
complete
) now expands wildcards instead of invoking completions, if there is a wildcard in the path component under the cursor (#954, #8593). - Scripts can now catch and handle the SIGINT and SIGTERM signals, either via
function --on-signal
or withtrap
(#6649).
Deprecations and removed features
- The
stderr-nocaret
feature flag, introduced in fish 3.0 and enabled by default in fish 3.1, has been made read-only.
That means it is no longer possible to disable it, and code supporting the^
redirection has been removed (#8857, #8865).
To recap: fish used to support ^
to redirect stderr, so you could use commands like:
test "$foo" -gt 8 ^/dev/null
to ignore error messages. This made the ^
symbol require escaping and quoting, and was a bit of a weird shortcut considering 2>
already worked, which is only one character longer.
So the above can simply become:
test "$foo" -gt 8 2>/dev/null
- The following feature flags have been enabled by default:
regex-easyesc
, which makesstring replace -r
not do a superfluous round of unescaping in the replacement expression.
That means e.g. to escape any “a” or “b” in an argument you can usestring replace -ra '([ab])' '\\\\\\\\$1' foobar
instead of needing 8 backslashes.
This only affects the replacement expression, not the match expression (the '([ab])'
part in the example).
A survey of plugins on GitHub did not turn up any affected code, so we do not expect this to affect many users.
This flag was introduced in fish 3.1.
* ampersand-nobg-in-token
, which means that &
will not create a background job if it occurs in the middle of a word. For example, echo foo&bar
will print “foo&bar” instead of running echo foo
in the background and then starting bar
as a second job.
Reformatting with fish_indent
would already introduce spaces, turning echo foo&bar
into echo foo & bar
.
This flag was introduced in fish 3.4.
To turn off these flags, add no-regex-easyesc
or no-ampersand-nobg-in-token
to `fish_features`` and restart fish:
set -Ua fish_features no-regex-easyesc
Like stderr-nocaret
, they will eventually be made read-only.
- Most
string
subcommands no longer append a newline to their input if the input didn’t have one (#8473, #3847) - Fish’s escape sequence removal (like for
string length --visible
or to figure out how wide the prompt is) no longer has special support for non-standard color sequences like from Data General terminals, e.g. the Data General Dasher D220 from 1984. This removes a bunch of work in the common case, allowingstring length --visible
to be much faster with unknown escape sequences. We don’t expect anyone to have ever used fish with such a terminal (#8769). - Code to upgrade universal variables from fish before 3.0 has been removed. Users who upgrade directly from fish versions 2.7.1 or before will have to set their universal variables & abbreviations again. (#8781)
- The meaning of an empty color variable has changed (#8793). Previously, when a variable was set but empty, it would be interpreted as the “normal” color. Now, empty color variables cause the same effect as unset variables - the general highlighting variable for that type is used instead. For example:
set -g fish_color_command blue
set -g fish_color_keyword
would previously make keywords “normal” (usually white in a dark terminal). Now it’ll make them blue. To achieve the previous behavior, use the normal color explicitly: set -g fish_color_keyword normal
.
This makes it easier to make self-contained color schemes that don’t accidentally use color that was set before.
fish_config
has been adjusted to set known color variables that a theme doesn’t explicitly set to empty.
eval
is now a reserved keyword, so it can’t be used as a function name. This followsset
andread
, and is necessary because it can’t be cleanly shadowed by a function - at the very leasteval set -l argv foo
breaks. Fish will ignore autoload files for it, so left overeval.fish
from previous fish versions won’t be loaded.- The git prompt in informative mode now defaults to skipping counting untracked files, as this was extremely slow. To turn it on, set
__fish_git_prompt_showuntrackedfiles
or set the git config value “bash.showuntrackedfiles” totrue
explicitly (which can be done for individual repositories). The “informative vcs” sample prompt already skipped display of untracked files, but didn’t do so in a way that skipped the computation, so it should be quite a bit faster in many cases (#8980). - The
__terlar_git_prompt
function, used by the “Terlar” sample prompt, has been rebuilt as a configuration of the normalfish_git_prompt
to ease maintenance, improve performance and add features (like reading per-repo git configuration). Some slight changes remain; users who absolutely must have the same behavior are encouraged to copy the old function (#9011, #7918, #8979).
Scripting improvements
- Quoted command substitution that directly follow a variable expansion (like
echo "$var$(echo x)"
) no longer affect the variable expansion (#8849). - Fish now correctly expands command substitutions that are preceded by an escaped dollar (like
echo \\$(echo)
). This regressed in version 3.4.0. math
can now handle underscores (_
) as visual separators in numbers (#8611, #8496):
math 5 2_123_252
math
’smin
andmax
functions now take a variable number of arguments instead of always requiring 2 (#8644, #8646):
> math min 8,2,4
2
read
is now faster as the last process in a pipeline (#8552).string join
gained a new--no-empty
flag to skip empty arguments (#8774, #8351).read
now only triggers thefish_read
event, not thefish_prompt
event (#8797). It was supposed to work this way in fish 3.2.0 and later, but both events were emitted.- The TTY modes are no longer restored when non-interactive shells exit. This fixes wrong tty modes in pipelines with interactive commands. (#8705).
- Some functions shipped with fish printed error messages to standard output, but they now they rightly go to standard error (#8855).
jobs
now correctly reports CPU usage as a percentage, instead of as a number of clock ticks (#8919).process-exit
events now fire when the process exits even if the job has not yet exited, fixing a regression in 3.4.1 (#8914).
Interactive improvements
- Fish now reports a special error if a command wasn’t found and there is a non-executable file by that name in
PATH
(#8804). less
and other interactive commands would occasionally be stopped when run in a pipeline with fish functions; this has been fixed (#8699).- Case-changing autosuggestions generated mid-token now correctly append only the suffix, instead of duplicating the token (#8820).
ulimit
learned a number of new options for the resource limits available on Linux, FreeBSD ande NetBSD, and returns a specific warning if the limit specified is not available on the active operating system (#8823, #8786).- The
vared
command can now successfully edit variables named “tmp” or “prompt” (#8836, #8837). time
now emits an error if used after the first command in a pipeline (#8841).fish_add_path
now prints a message for skipped non-existent paths when using the-v
flag ([#8884](https://github.com/fish-shell/fish-shel...
fish 3.4.1 (released March 25, 2022)
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 (#8778) - fish builds correctly on NetBSD (#8788) and OpenIndiana (#8780).
nextd-or-forward-word
, bound toAlt-Right Arrow
by default, was inadvertently changed to move likeforward-bigword
. This has been corrected (#8790).funcsave -q
andfuncsave --quiet
now work correctly (#8830).- Issues with the
csharp
andnmcli
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).
Download links: To download the source code for fish, use the file named "fish-3.4.1.tar.xz". The file downloaded from "Source code (tar.gz)" has extra build requirements. The SHA-256 sum of this file is b6f23b3843b04db6b0a90fea1f6f0d0e40cc027b4a732098200863f2864a94ea
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is available as "fish-3.4.1.tar.xz.asc".