Skip to content

Releases: fish-shell/fish-shell

fish 3.7.1 (released March 19, 2024)

19 Mar 05:29
3.7.1
Compare
Choose a tag to compare

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 always source 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)

01 Jan 15:28
3.7.0
Compare
Choose a tag to compare

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 for gitInt.
    • 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).
  • 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 new fish_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 the ls function (#10080). Users
    that set .dircolors should manually import it using other means. Typically this would be set -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 is command and and command or (#9985).
  • exec will now also apply variable overrides, so FOO=bar exec will now set $FOO correctly (#9995).
  • umask will now handle empty symbolic modes correctly, like umask 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 like mysql -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), and history 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 to Shift 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 an xdg-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 fixes Alt combination bindings in vi mode (#7910).
  • A new clear-screen bind function is used for Ctrl 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 (#8720).
  • 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

Read more

fish 3.6.4 (released December 5, 2023)

05 Dec 14:41
3.6.4
Compare
Choose a tag to compare

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)

04 Dec 16:10
3.6.3
Compare
Choose a tag to compare

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)

04 Dec 15:21
3.6.2
Compare
Choose a tag to compare

(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)

25 Mar 09:09
3.6.1
Compare
Choose a tag to compare

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-style abbr 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 to abbr --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 with man (#9552).
  • fish no longer crashes when searching history for non-ASCII codepoints case-insensitively (#9628).
  • The Alt-S binding will now also use please 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 in fish_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:
    • apkanalyzer (#9558)
    • neovim (#9543)
    • otool
    • pre-commit (#9521)
    • proxychains (#9486)
    • scrypt (#9583)
    • stow (#9571)
    • trash and helper utilities trash-empty, trash-list, trash-put, trash-restore (#9560)
    • ssh-copy-id (#9675)
  • 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 for git-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)

07 Jan 14:43
3.6.0
Compare
Choose a tag to compare

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 function history-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 new mtime 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 new shorten 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, like set -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 from rename to regex, for consistency with string.

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 and fish_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 is exclusive; use set 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 with Shift-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

Read more

fish 3.5.1 (released July 20, 2022)

20 Jul 13:55
3.5.1
Compare
Choose a tag to compare

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 or git -C works correctly (#9053).
  • On terminals that emit a CSI u sequence for Shift-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) with Control-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)

16 Jun 11:30
3.5.0
Compare
Choose a tag to compare

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 with trap (#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 makes string 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 use string 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, allowing string 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 follows set and read, and is necessary because it can’t be cleanly shadowed by a function - at the very least eval set -l argv foo breaks. Fish will ignore autoload files for it, so left over eval.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” to true 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 normal fish_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’s min and max 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 the fish_read event, not the fish_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...
Read more

fish 3.4.1 (released March 25, 2022)

25 Mar 16:43
3.4.1
Compare
Choose a tag to compare

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 to Alt-Right Arrow by default, was inadvertently changed to move like forward-bigword. This has been corrected (#8790).
  • funcsave -q and funcsave --quiet now work correctly (#8830).
  • 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).


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".