Skip to content

Releases: fish-shell/fish-shell

fish 4.0.2 (released April 20, 2025)

20 Apr 13:35
4.0.2
Compare
Choose a tag to compare

This release of fish fixes a number of issues identified in fish 4.0.1:

  • Completions are quoted, rather than backslash-escaped, only if the completion is unambiguous. Continuing to edit the token is therefore easier (#11271). This changes the behavior introduced in 4.0.0 where all completions were quoted.
  • The warning when the terminfo database can’t be found has been downgraded to a log message. fish will act as if the terminal behaves like xterm-256color, which is correct for the vast majority of cases (#11277, #11290).
  • Key combinations using the super (Windows/command) key can now (actually) be bound using the super- prefix (#11217). This was listed in the release notes for 4.0.1 but did not work correctly.
  • function is stricter about argument parsing, rather than allowing additional parameters to be silently ignored (#11295).
  • Using parentheses in the test builtin works correctly, following a regression in 4.0.0 where they were not recognized (#11387).
  • delete in Vi mode when Num Lock is active will work correctly (#11303).
  • Abbreviations cannot alter the command-line contents, preventing a crash (#11324).
  • Improvements to various completions, including new completions for wl-randr (#11301), performance improvements for cargo completions by avoiding network requests (#11347), and other improvements for btrfs (#11320), cryptsetup (#11315), git (#11319, #11322, #11323), jj (#11046), and systemd-analyze (#11314).
  • The Mercurial (hg) prompt can handle working directories that contain an embedded newline, rather than producing errors (#11348).
  • A number of crashes have been fixed. Triggers include prompts containing backspace characters (#11280), history pager search (#11355), invalid UTF-8 in read (#11383), and the kill-selection binding (#11367).
  • A race condition in the test suite has been fixed (#11254), and a test for fish versioning relaxed to support downstream distributors’ modifications (#11173).
  • Small improvements to the documentation (#11264, #11329, #11361).

Download links: To download the source code for fish, we suggest the file named "fish-4.0.2.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is 6e1ecdb164285fc057b2f35acbdc20815c1623099e7bb47bbfc011120adf7e83. A GPG signature from David Adam (key ID 0x7A67D962D88A709A is available as "fish-4.0.2.tar.xz.asc".

The files called fish-static-* are experimental, statically linked builds, for any Linux with the given architecture. Extract and run, and they will extract their data files as needed.

fish 4.0.1 (released March 12, 2025)

13 Mar 03:25
4.0.1
Compare
Choose a tag to compare

This release of fish includes the following improvements compared to fish 4.0.0:

  • Key combinations using the super (Windows/command) key can be bound using the super- prefix (#11217).
  • Konsole’s menu shows the “Open folder with” option again (#11198).
  • $fish_color_search_match will now only be applied to the foreground color if it has an explicit foreground. For example, this allows setting:
    set -g fish_color_search_match --reverse
  • Cursor shape commands (\e[2 q) are no longer sent in non-interactive shells or in redirections (#11255).
  • status gained a is-interactive-read subcommand, to check whether the script is being called from an interactive read invocation.
  • fish’s background tasks are now started in a way that avoids an error on macOS Terminal.app (#11181).
  • Using key combinations within qemu should work correctly.
  • Prompts containing control characters no longer cause incorrect display of command lines (#11252).
  • Cancelling the command-line in Vi mode displays correctly again (#11261).
  • The acidhub prompt properly displays the git branch again (#11179).
  • Completions for wine correctly include files again (#11202).
  • On macOS, paths from /etc/paths and /etc/manpaths containing colons are handled correctly (#10684). This functionality was included in the 4.0.0 release notes but was missing from the source code.
  • The XTerm modifyOtherKeys keyboard encoding is no longer used under WezTerm, as it does not work correctly in all layouts (#11204).
  • option-left and other similar keys should now work in iTerm versions before 3.5.12; the kitty keyboard protocol is now disabled on these versions (#11192).
  • The kitty keyboard protocol is no longer used under Midnight Commander, as it does not work correctly (#10640).
  • fish now sends the commandline along with the OSC 133 semantic prompt command start sequence. This fixes a test in the kitty terminal (#11203).
  • Git completions for third-party commands like “git-absorb” are completed correctly again (#11205).
  • Completions for diskutil no longer produce an error (#11201).
  • The output of certain error messages no longer prints newlines to standard output (#11248).
  • A number of crashes have been fixed, including file names longer than 255 bytes (#11221), using fish on a btrfs filesystem (#11219), history files that do not have the expected format (#11236), and pasting into an empty command line (#11256).

Download links: To download the source code for fish, we suggest the file named "fish-4.0.1.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is 4ed63a70207283e15cf21fc5f21db4230421e4f98d4826b5b1c8254d69c762b5. A GPG signature from David Adam (key ID 0x7A67D962D88A709A is available as "fish-4.0.1.tar.xz.asc".

The files called fish-static-* are experimental, statically linked builds, for any Linux with the given architecture. Extract and run, and they will extract their data files as needed.

fish 4.0.0 (released February 27, 2025)

27 Feb 13:03
4.0.0
Compare
Choose a tag to compare

fish’s core code has been ported from C++ to Rust (#9512). This means a large change in dependencies and how to build fish. However, there should be no direct impact on users. Packagers should see the For Distributors section at the end.

Notable backwards-incompatible changes

  • As part of a larger binding rework, bind gained a new key notation.
    In most cases the old notation should keep working, but in rare cases you may have to change a bind invocation to use the new notation.
    See below for details.

  • ctrl-c now calls a new bind function called clear-commandline. The old behavior, which leaves a “^C” marker, is available as cancel-commandline (#10935)

  • random will produce different values from previous versions of fish when used with the same seed, and will work more sensibly with small seed numbers.
    The seed was never guaranteed to give the same result across systems,
    so we do not expect this to have a large impact (#9593).

  • Variables in command position that expand to a subcommand keyword are now forbidden to fix a likely user error.
    For example, set editor command emacs; $editor is no longer allowed (#10249).

  • functions --handlers will now list handlers in a different order.
    Now it is definition order, first to last, where before it was last to first.
    This was never specifically defined, and we recommend not relying on a specific order (#9944).

  • The qmark-noglob feature, introduced in fish 3.0, is enabled by default. That means ? will no longer act as a single-character glob.
    You can, for the time being, turn it back on by adding no-qmark-noglob to fish_features and restarting fish:

    set -Ua fish_features no-qmark-noglob
    

    The flag will eventually be made read-only, making it impossible to turn off.

  • Terminals that fail to ignore unrecognized OSC or CSI sequences may display garbage. We know cool-retro-term and emacs’ ansi-term are affected, but most mainstream terminals are not.

  • fish no longer searches directories from the Windows system/user $PATH environment variable for Linux executables. To execute Linux binaries by name (i.e. not with a relative or absolute path) from a Windows folder, make sure the /mnt/c/... path is explicitly added to $fish_user_paths and not just automatically appended to $PATH by wsl.exe (#10506).

  • Under Microsoft Windows Subsystem for Linux 1 (not WSL 2), backgrounded jobs that have not been disowned and do not terminate on their own after a SIGHUP + SIGCONT sequence will be explicitly killed by fish on exit (after the usual prompt to close or disown them) to work around a WSL 1 deficiency that sees backgrounded processes that run into SIGTTOU remain in a suspended state indefinitely (#5263). The workaround is to explicitly disown processes you wish to outlive the shell session.

Notable improvements and fixes

  • fish now requests XTerm’s modifyOtherKeys keyboard encoding and kitty keyboard protocol’s progressive enhancements (#10359).
    Depending on terminal support, this allows to binding more key combinations, including arbitrary combinations of modifiers ctrl, alt and shift, and distinguishing (for example) ctrl-i from tab.

    Additionally, bind now supports a human-readable syntax in addition to byte sequences.
    This includes modifier names, and names for keys like enter and backspace.
    For example

    • bind up 'do something' binds the up-arrow key instead of a two-key sequence (“u” and then “p”)
    • bind ctrl-x,alt-c 'do something' binds a sequence of two keys.

    Any key argument that starts with an ASCII control character (like \e or \cX) or is up to 3 characters long, not a named key, and does not contain , or - will be interpreted in the old syntax to keep compatibility for the majority of bindings.

    Keyboard protocols can be turned off by disabling the “keyboard-protocols” feature flag:

    set -Ua fish_features no-keyboard-protocols
    

    This is a temporary measure to work around buggy terminals (#11056), which appear to be relatively rare.
    Use this if something like “=0” or “=5u” appears in your commandline mysteriously.

  • fish can now be built as a self-installing binary (#10367). That means it can be easily built on one system and copied to another, where it can extract supporting files.
    To do this, run:

    cargo install --path . # in a clone of the fish repository
    # or `cargo build --release` and copy target/release/fish{,_indent,_key_reader} wherever you want
    

    The first time it runs interactively, it will extract all the data files to ~/.local/share/fish/install/. A specific path can be used for the data files with fish --install=PATH To uninstall, remove the fish binaries and that directory.

    This build system is experimental; the main build system, using cmake, remains the recommended approach for packaging and installation to a prefix.

  • A new function fish_should_add_to_history can be overridden to decide whether a command should be added to the history (#10302).

  • Bindings can now mix special input functions and shell commands, so bind ctrl-g expand-abbr "commandline -i \n" works as expected (#8186).

  • Special input functions run from bindings via commandline -f are now applied immediately, instead of after the currently executing binding (#3031, #10126).
    For example, commandline -i foo; commandline | grep foo succeeds now.

  • Undo history is no longer truncated after every command, but kept for the lifetime of the shell process.

  • The ctrl-r history search now uses glob syntax (#10131).

  • The ctrl-r history search now operates only on the line or command substitution at cursor, making it easier to combine commands from history (#9751).

  • Abbreviations can now be restricted to specific commands. For instance:

    abbr --add --command git back 'reset --hard HEAD^'
    

    will expand “back” to reset --hard HEAD^, but only when the command is git (#9411).

Deprecations and removed features

  • commandline --tokenize (short option -o) has been deprecated in favor of commandline --tokens-expanded (short option -x) which expands variables and other shell syntax, removing the need to use eval in completion scripts (#10212).

  • Two new feature flags:

    • remove-percent-self (see status features) disables PID expansion of %self, which has been supplanted by $fish_pid (#10262).
    • test-require-arg disables test’s one-argument mode. That means test -n without an additional argument will return false, test -z will keep returning true. Any other option without an argument, anything that is not an option and no argument will be an error. This also goes for [, test’s alternate name.
      This is a frequent source of confusion and so we are breaking with POSIX explicitly in this regard.
      In addition to the feature flag, there is a debug category “deprecated-test”. Running fish with fish -d deprecated-test will show warnings whenever a test invocation that would change is used. (#10365).

    These can be enabled with:

    set -Ua fish_features remove-percent-self test-require-arg
    

    We intend to enable them by default in future, and after that eventually make them read-only.

  • Specifying key names as terminfo names (using the bind -k syntax) is deprecated and may be removed in a future version.

  • When a terminal pastes text into fish using bracketed paste, fish used to switch to a special paste bind mode.
    This bind mode has been removed. The behavior on paste is no longer configurable.

  • When an interactive fish is stopped or terminated by a signal that cannot be caught (SIGSTOP or SIGKILL), it may leave the terminal in a state where keypresses with modifiers are sent as CSI u sequences, instead of traditional control characters or escape sequences that are recognized by Readline and compatible programs, such as bash and python.
    If this happens, you can use the reset command from ncurses to restore the terminal state.

  • fish_key_reader --verbose no longer shows timing information.

  • Terminal information is no longer read from hashed terminfo databases, or termcap databases (#10269). The vast majority of systems use a non-hashed terminfo database, which is still supported.

  • source returns an error if used without a filename or pipe/redirection (#10774).

Scripting improvements

...

Read more

fish 4.0b1 (released December 17, 2024)

17 Dec 15:22
4.0b1
Compare
Choose a tag to compare
Pre-release

These are the draft release notes for fish 4.0.0. Like this release of fish itself, they are in beta and are not complete. Please report any issues you find.

fish’s core code has been ported from C++ to Rust (#9512).
This means a large change in dependencies and how to build fish.
Packagers should see the For Distributors section at the end.

Notable backwards-incompatible changes

  • As part of a larger binding rework, bind gained a new key notation.
    In most cases the old notation should keep working, but in rare cases you may have to change a bind invocation to use the new notation.
    See below for details.

  • Terminals that fail to ignore unrecognized OSC or CSI sequences may display garbage. We know cool-retro-term and emacs’ ansi-term are affected,
    most mainstream terminals are not.

  • alt-left and alt-right will now move by one argument (which may contain quoted spaces), not just one word like ctrl-left and ctrl-right do.

  • alt-backspace will delete an entire argument, not just one word (which is ctrl-backspace now).

  • random will produce different values from previous versions of fish when used with the same seed, and will work more sensibly with small seed numbers.
    The seed was never guaranteed to give the same result across systems,
    so we do not expect this to have a large impact (#9593).

  • Variables in command position that expand to a subcommand keyword are now forbidden to fix a likely user error.
    For example, set editor command emacs; $editor is no longer allowed (#10249).

  • functions --handlers will now list handlers in a different order.
    Now it is definition order, first to last, where before it was last to first.
    This was never specifically defined, and we recommend not relying on a specific order (#9944).

  • The qmark-noglob feature, introduced in fish 3.0, is enabled by default. That means ? will no longer act as a single-character glob.
    You can, for the time being, turn it back on by adding no-qmark-noglob to fish_features and restarting fish:

    set -Ua fish_features no-qmark-noglob
    

    The flag will eventually be made read-only, making it impossible to turn off.

  • fish no longer searches directories from the Windows system/user $PATH environment variable for Linux executables. To execute Linux binaries by name (i.e. not with a relative or absolute path) from a Windows folder, make sure the /mnt/c/... path is explicitly added to $fish_user_paths and not just automatically appended to $PATH by wsl.exe (#10506).

  • Under Microsoft Windows Subsystem for Linux 1 (not WSL 2) , backgrounded jobs that have not been disowned and do not terminate on their own after a SIGHUP + SIGCONT sequence will be explicitly killed by fish on exit (after the usual prompt to close or disown them) to work around a WSL 1 deficiency that sees backgrounded processes that run into SIGTTOU remain in a suspended state indefinitely (#5263). The workaround is to explicitly disown processes you wish to outlive the shell session.

Notable improvements and fixes

  • fish now requests XTerm’s modifyOtherKeys keyboard encoding and kitty keyboard protocol’s progressive enhancements (#10359).
    Depending on terminal support, this allows to binding more key combinations, including arbitrary combinations of modifiers ctrl, alt and shift, and distinguishing (for example) ctrl-i from tab.

    Additionally, bind now supports a human-readable syntax in addition to byte sequences.
    This includes modifier names, and names for keys like enter and backspace.
    For example

    • bind up 'do something' binds the up-arrow key instead of a two-key sequence (“u” and then “p”)
    • bind ctrl-x,alt-c 'do something' binds a sequence of two keys.

    Any key argument that starts with an ASCII control character (like \e or \cX) or is up to 3 characters long, not a named key, and does not contain , or - will be interpreted in the old syntax to keep compatibility for the majority of bindings.

  • fish can now be built as a self-installing binary (#10367). That means it can be easily built on one system and copied to another, where it can extract supporting files.
    To do this, run:

    cargo install --path . # in a clone of the fish repository
    # or `cargo build --release` and copy target/release/fish{,_indent,_key_reader} wherever you want
    

    The first time it runs interactively, it will extract all the data files to ~/.local/share/fish/install/. To uninstall, remove the fish binaries and that directory.

    This build system is experimental; the main build system, using cmake, remains the recommended approach for packaging and installation to a prefix.

  • A new function fish_should_add_to_history can be overridden to decide whether a command should be added to the history (#10302).

  • ctrl-c during command input no longer prints ^C and a new prompt, but merely clears the command line. This restores the behavior from version 2.2. To revert to the old behavior, use bind ctrl-c __fish_cancel_commandline (#10213).

  • Bindings can now mix special input functions and shell commands, so bind ctrl-g expand-abbr "commandline -i \n" works as expected (#8186).

  • Special input functions run from bindings via commandline -f are now applied immediately, instead of after the currently executing binding (#3031).
    For example, commandline -i foo; commandline | grep foo succeeds now.

  • Undo history is no longer truncated after every command, but kept for the lifetime of the shell process.

  • The ctrl-r history search now uses glob syntax (#10131).

  • The ctrl-r history search now operates only on the line or command substitution at cursor, making it easier to combine commands from history.

  • Abbreviations can now be restricted to specific commands. For instance:

    abbr --add --command git back 'reset --hard HEAD^'
    

    will expand “back” to reset --hard HEAD^, but only when the command is git (#9411).

Deprecations and removed features

  • commandline --tokenize (short option -o) has been deprecated in favor of commandline --tokens-expanded (short option -x) which expands variables and other shell syntax, removing the need to use eval in completion scripts (#10212).

  • Two new feature flags:

    • remove-percent-self (see status features) disables PID expansion of %self, which has been supplanted by $fish_pid (#10262).
    • test-require-arg disables test’s one-argument mode. That means test -n without an additional argument will return false, test -z will keep returning true. Any other option without an argument, anything that is not an option and no argument will be an error. This also goes for [, test’s alternate name.
      This is a frequent source of confusion and so we are breaking with POSIX explicitly in this regard.
      In addition to the feature flag, there is a debug category “deprecated-test”. Running fish with fish -d deprecated-test will show warnings whenever a test invocation that would change is used. (#10365).

    These can be enabled with:

    set -Ua fish_features remove-percent-self test-require-arg
    

    We intend to enable them by default in future, and after that eventually make them read-only.

  • Specifying key names as terminfo names (using the bind -k syntax) is deprecated and may be removed in a future version.

  • When a terminal pastes text into fish using bracketed paste, fish used to switch to a special paste bind mode.
    This bind mode has been removed. The behavior on paste is no longer configurable.

  • When an interactive fish is stopped or terminated by a signal that cannot be caught (SIGSTOP or SIGKILL), it may leave the terminal in a state where keypresses with modifiers are sent as CSI u sequences, instead of traditional control characters or escape sequences that are recognized by Readline and compatible programs, such as bash and python.
    If this happens, you can use the reset command from ncurses to restore the terminal state.

  • fish_key_reader --verbose no longer shows timing information.

  • Terminal information is no longer read from hashed terminfo databases, or termcap databases (#10269). The vast majority of systems use a non-hashed terminfo database, which is still supported.

Scripting improvements

  • for loops will no longer remember local variables from the previous iteration (#10525).
  • A new history append subcommand appends a command to the history, without executing it (#4506).
  • A new redirection: `...
Read more

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