Releases: fish-shell/fish-shell
fish 4.3.3
This release fixes the following problems identified in fish 4.3.0:
- Selecting a completion could insert only part of the token (#12249).
- Glitch with soft-wrapped autosuggestions and fish_right_prompt (#12255).
- Spurious echo in tmux when typing a command really fast (#12261).
tomorrowtheme always using the light variant (#12266).fish_config theme choosesometimes not shadowing themes set by e.g. webconfig (#12278).- The sample prompts and themes are correctly installed (#12241).
- Last line of command output could be hidden when missing newline (#12246).
Other improvements include:
- The
abbr,bind,complete,functions,historyandtypecommands now support a--coloroption to control syntax highlighting in their output. Valid values areauto(default),always, ornever. - Existing file paths in redirection targets such as
> file.txtare now highlighted usingfish_color_valid_path, indicating thatfile.txtwill be clobbered (#12260).
Download links: To download the source code for fish, we suggest the file named fish-4.3.3.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.3.3.tar.xz.asc.
The files called fish-4.3.3-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.
fish 4.3.2
This release fixes the following problems identified in 4.3.0:
- Pre-built macOS packages failed to start due to a
Malformed Mach-O fileerror (#12224). extra_functionsdir(usuallyvendor_functions.d) and friends were not used (#12226).- Sample config file
~/.config/fish/config.fish/and config directories~/.config/fish/conf.d/,~/.config/fish/completions/and~/.config/fish/functions/were recreated on every startup instead of only the first time fish runs on a system (#12230). - Spurious echo of
^[[Iin some scenarios (#12232). - Infinite prompt redraw loop on some prompts (#12233).
- The removal of pre-built HTML docs from tarballs revealed that cross compilation is broken because we use
${CMAKE_BINARY_DIR}/fish_indentfor building HTML docs. As a workaround, the new CMake build optionFISH_INDENT_FOR_BUILDING_DOCScan be set to the path of a runnablefish_indentbinary.
Download links: To download the source code for fish, we suggest the file named fish-4.3.2.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.3.2.tar.xz.asc.
The files called fish-4.3.2-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.
fish 4.3.1
This release fixes the following problem identified in 4.3.0:
- Possible crash after expanding an abbreviation (#12223).
Download links: To download the source code for fish, we suggest the file named fish-4.3.1.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.3.1.tar.xz.asc.
The files called fish-4.3.1-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.
fish 4.3.0
This release comprises 285 commits since 4.2.1, contributed by 27 authors, 15 of which are new committers.
Deprecations and removed features
- fish no longer sets universal variables by default, which simplifies configuration. Specifically, the
fish_color_*,fish_pager_color_*andfish_key_bindingsvariables are now set in the global scope by default. After upgrading to 4.3.0, fish will (once and never again) migrate these universals to globals set at startup in the~/.config/fish/conf.d/fish_frozen_theme.fishand~/.config/fish/conf.d/fish_frozen_key_bindings.fishfiles. We suggest that you delete those files and set your theme in~/.config/fish/config.fish.- You can still configure fish to propagate theme changes instantly; see here for an example.
- You can still opt into storing color variables in the universal scope via
fish_config theme savethough unlikefish_config theme choose, that does not support dynamic theme switching based on the terminal’s color theme (see below).
- In addition to setting the variables which are explicitly defined in the given theme,
fish_config theme choosenow clears only color variables that were set by earlier invocations of afish_config theme choosecommand (which is how fish’s default theme is set).
Scripting improvements
- New status language command allows showing and modifying language settings for fish messages without having to modify environment variables.
- When using a noninteractive fish instance to compute completions,
commandline --cursorworks as expected instead of throwing an error (#11993). fish_tracecan now be set toallto also trace execution of key bindings, event handlers as well as prompt and title functions.
Interactive improvements
- When typing immediately after starting fish, the first prompt is now rendered correctly.
- Completion accuracy was improved for file paths containing
=or:(#5363). - Prefix-matching completions are now shown even if they don’t match the case typed by the user (#7944).
- On Cygwin/MSYS, command name completion will favor the non-exe name (
foo) unless the user started typing the extension. - When using the exe name (
foo.exe), fish will use to the description and completions forfooif there are none forfoo.exe. - Autosuggestions now also show soft-wrapped portions (#12045).
New or improved bindings
ctrl-w(backward-kill-path-component) also deletes escaped spaces (#2016).- New special input functions
backward-path-component,forward-path-componentandkill-path-component(#12127).
Improved terminal support
- Themes can now be made color-theme-aware by including both
[light]and[dark]sections in the theme file. Some default themes have been made color-theme-aware, meaning they dynamically adjust as your terminal’s background color switches between light and dark colors (#11580). - The working directory is now reported on every fresh prompt (via OSC 7), fixing scenarios where a child process (like
ssh) left behind a stale working directory (#12191). - OSC 133 prompt markers now also mark the prompt end, which improves shell integration with terminals like iTerm2 (#11837).
- Operating-system-specific key bindings are now decided based on the terminal’s host OS.
- Focus reporting is enabled unconditionally, not just inside tmux. To use it, define functions that handle the
fish_focus_inorfish_focus_outevents. - New feature flag
omit-term-workaroundscan be turned on to prevent fish from trying to work around some incompatible terminals.
For distributors and developers
- Tarballs no longer contain prebuilt documentation, so building and installing documentation requires Sphinx. To avoid users accidentally losing docs, the
BUILD_DOCSandINSTALL_DOCSconfiguration options have been replaced with a newWITH_DOCSoption. fish_key_readerandfish_indentare now installed as hardlinks tofish, to save some space.
Regression fixes:
- (from 4.1.0) Crash on incorrectly-set color variables (#12078).
- (from 4.1.0) Crash when autosuggesting Unicode characters with nontrivial lowercase mapping.
- (from 4.2.0) Incorrect emoji width computation on macOS.
- (from 4.2.0) Mouse clicks and
ctrl-ledge cases in multiline command lines (#12121). - (from 4.2.0) Completions for Git remote names on some non-glibc systems.
- (from 4.2.0) Expansion of
~$USER.
Thanks to everyone who contributed through issue discussions, code reviews, or code changes.
Welcome our new committers: Denys Zhak, ELginas, Gleb Smirnov, Juho Kuisma, Julio Napurí, Kristof Mattei, Nikita COEUR, PowerUser64, Tair Sabirgaliev, Toyosatomimi no Miko, Zhizhen He, huaji2369, oliwia, xtqqczze, チセ
Welcome back our returning committers: Asuka Minato, Branch Vincent, Daniel Rainer, David Adam, Fabian Boehm, Jesse Harwin, Johannes Altmanninger, Nahor, Peter Ammon, exploide, phanium, seg6
Download links: To download the source code for fish, we suggest the file named fish-4.3.0.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.3.0.tar.xz.asc.
The files called fish-4.3.0-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.
fish 4.2.1
This release fixes the following problems identified in 4.2.0:
- When building from a tarball without Sphinx (that is, with
-DBUILD_DOCS=OFFor whensphinx-buildis not found), builtin man pages and help files were missing, which has been fixed (#12052). fish_config’s theme selector (the “colors” tab) was broken, which has been fixed (#12053).
Download links: To download the source code for fish, we suggest the file named fish-4.2.1.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.2.1.tar.xz.asc.
The files called fish-4.2.1-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.
fish 4.2.0
This release comprises 473 commits since 4.1.2, contributed by 35 authors, 15 of which are new committers.
Notable improvements and fixes
- History-based autosuggestions now include multi-line commands.
- A transient prompt containing more lines than the final prompt will now be cleared properly (#11875).
- Taiwanese Chinese translations have been added.
- French translations have been supplemented (#11842).
Deprecations and removed features
- fish now assumes UTF-8 for character encoding even if the system does not have a UTF-8 locale. Input bytes which are not valid UTF-8 are still round-tripped correctly. For example, file paths using legacy encodings can still be used, but may be rendered differently on the command line.
- On systems where no multi-byte locale is available, fish will no longer fall back to using ASCII replacements for Unicode characters such as “…”.
Interactive improvements
- The title of the terminal tab can now be set separately from the window title by defining the fish_tab_title function (#2692).
- fish now hides the portion of a multiline prompt that is scrolled out of view due to a huge command line. This prevents duplicate lines after repainting with partially visible prompt (#11911).
- fish_config prompt’s
chooseandsavesubcommands have been taught to reset fish_mode_prompt in addition to the other prompt functions (#11937). - fish no longer force-disables mouse capture (DECSET/DECRST 1000), so you can use those commands to let mouse clicks move the cursor or select completions items (#4918).
- The
alt-pbinding no longer adds a redundant space to the command line. - When run as a login shell on macOS, fish now sets
MANPATHcorrectly when that variable was already present in the environment (#10684). - A Windows-specific case of the web-based config failing to launch has been fixed (#11805).
- A MSYS2-specific workaround for Konsole and WezTerm has been added, to prevent them from using the wrong working directory when opening new tabs (#11981).
For distributors and developers
- Release tags and source code tarballs are GPG-signed again (#11996).
- Documentation in release tarballs is now built with the latest version of Sphinx, which means that pre-built man pages include OSC 8 hyperlinks.
- The Sphinx dependency is now specified in
pyproject.toml, which allows you to use uv to provide Sphinx for building documentation (e.g.uv run cargo install --path .). - The minimum supported Rust version (MSRV) has been updated to 1.85.
- The standalone build mode has been made the default. This means that the files in
$CMAKE_INSTALL_PREFIX/share/fishwill not be used anymore, except for HTML docs. As a result, future upgrades will no longer break running shells if one of fish’s internal helper functions has been changed in the updated version. For now, the data files are still installed redundantly, to prevent upgrades from breaking already-running shells (#11921). To reverse this change (which should not be necessary), patch out theembed-datafeature fromcmake/Rust.cmake. This option will be removed in future. - OpenBSD 7.8 revealed an issue with fish’s approach to displaying builtin man pages, which has been fixed.
Regression fixes:
- (from 4.1.0) Fix the web-based config for Python 3.9 and older (#12039).
- (from 4.1.0) Correct wrong terminal modes set by
fish -c 'read; cat(#12024). - (from 4.1.0) On VTE-based terminals, stop redrawing the prompt on resize again, to avoid glitches.
- (from 4.1.0) On MSYS2, fix saving/loading of universal variables (#11948).
- (from 4.1.0) Fix error using
manfor the commands!.:[{(#11955). - (from 4.1.0) Fix build issues on illumos systems (#11982).
- (from 4.1.0) Fix crash on invalid function command (#11912).
- (from 4.0.0) Fix build on SPARC and MIPS Linux by disabling
SIGSTKFLT. - (from 4.0.0) Fix crash when passing negative PIDs to builtin wait (#11929).
- (from 4.0.0) On Linux, fix status fish-path output when fish has been reinstalled since it was started.
Thanks to everyone who contributed through issue discussions, code reviews, or code changes.
Welcome our new committers: Ada Magicat, Aditya Bhargava, Alan Wu, Jesse Harwin, John Paul Adrian Glaubitz, Kabakov Grigoriy, Kaya Arro, Lumynous, Nahor, SandWood Jones, Shigure Kurosaki, ken, qianlongzt, seg6, traal
Welcome back our returning committers: Asuka Minato, Daniel Rainer, David Adam, Fabian Boehm, Henrik Hørlück Berg, Ilya Grigoriev, Integral, Isaac Oscar Gariano, Jiangqiu Shen, Johannes Altmanninger, Luca Weiss, Michael Nickerson, Peter Ammon, Sebastian Fleer, The0x539, Xiretza, kerty, ridiculousfish, Étienne Deparis, 王宇逸
Download links: To download the source code for fish, we suggest the file named fish-4.2.0.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using the key published at https://github.com/krobelus.gpg is available as fish-4.2.0.tar.xz.asc.
The files called fish-4.2.0-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.
macOS packages will be uploaded soon.
fish 4.1.2
This release fixes the following regressions identified in 4.1.0:
-
Fixed spurious error output when completing remote file paths for
scp(#11860). -
Fixed the
alt-lbinding not formattinglsoutput correctly (one entry per line, no colors) (#11888). -
Fixed an issue where focus events (currently only enabled in
tmux) would cause multiline prompts to be redrawn in the wrong line (#11870). -
Stopped printing output that would cause a glitch on old versions of Midnight Commander (#11869).
-
Added a fix for some configurations of Zellij where
escapekey processing was delayed (#11868). -
Fixed a case where the web-based configuration tool would generate invalid configuration (#11861).
-
Fixed a case where pasting into
fish -c readwould fail with a noisy error (#11836). -
Fixed a case where upgrading fish would break old versions of fish that were still running.
In general, fish still needs to be restarted after it is upgraded, except for standalone builds.
Download links: To download the source code for fish, we suggest the file named fish-4.1.2.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using the key published at https://github.com/krobelus.gpg is available as fish-4.1.2.tar.xz.asc.
The files called fish-4.1.2-linux-*.tar.xz are experimental packages containing a single standalone fish binary for any Linux with the given CPU architecture.
fish 4.1.1
This release fixes the following regressions identified in 4.1.0:
-
Many of our new Chinese translations were more confusing than helpful; they have been fixed or removed (#11833).
Note that you can work around this type of issue by configuring fish’s message localization: if your environment contains something like
LANG=zh_CN.UTF-8, you can useset -g LC_MESSAGES ento use English messages inside fish. This will not affect fish’s child processes unlessLC_MESSAGESwas already exported. -
Some fish_config subcommands for showing prompts and themes had been broken in standalone Linux builds (those using the
embed-datacargo feature), which has been fixed (#11832). -
On Windows Terminal, we observed an issue where fish would fail to read the terminal’s response to our new startup queries, causing noticeable lags and a misleading error message. A workaround has been added (#11841).
-
A WezTerm issue breaking shifted key input has resurfaced on some versions of WezTerm; our workaround has been extended to cover all versions for now (#11204).
-
Fixed a crash in the web-based configuration tool when using the new underline styles (#11840).
Download links: To download the source code for fish, we suggest the file named “fish-4.1.1.tar.xz”. The file downloaded from “Source code (tar.gz)” will not build correctly.
The files called fish-4.1.1-linux-*.tar.xz are experimental packages containing a single standalone fish binary for any Linux with the given CPU architecture.
fish 4.1.0
This release comprises 1396 commits since 4.0.9, contributed by 126 authors, 70 of which are new committers.
Notable improvements and fixes
- Compound commands (
begin; echo 1; echo 2; end) can now be written using braces ({ echo1; echo 2 }), like in other shells. - fish now supports transient prompts: if
fish_transient_promptis set to 1, fish will reexecute prompt functions with the--final-renderingargument before running a commandline (#11153). - Tab completion results are truncated up to the common directory path, instead of somewhere inside that path. E.g. if you complete “share/functions”, and it includes the files “foo.fish” and “bar.fish”, the completion pager will now show “…/foo.fish” and “…/bar.fish” (#11250).
- Self-installing builds as created by e.g.
cargo installno longer install other files, see below. - Our gettext-based message-localization has been reworked, adding translations to self-installing builds; see below.
Deprecations and removed features
set_color --background=COLORno longer implicitly activates bold mode. If your theme is stored in universal variables (the historical default), some bold formatting might be lost. To fix this, we suggest updating to the latest version of our theme, to explicitly activate bold mode, for example usefish_config theme save "fish default".{echo,echo}or{ echo, echo }are no longer interpreted as brace expansion tokens but as compound commands.- Terminfo-style key names (
bind -k nul) are no longer supported. They had been superseded by fish’s own key names since 4.0 (#11342). - fish no longer reads the terminfo database, so its behavior is generally no longer affected by the
TERMenvironment variable (#11344). For the time being, this change can be reversed via theignore-terminfofeature flag. To do so, run the following once and restart fish:set -Ua fish_features no-ignore-terminfo - The
--installoption when fish is built as self-installing is removed, see below. set_color ff0000now outputs 24-bit RGB true-color even ifCOLORTERMis unset. One can override this by settingfish_term24bitto 0 (#11372).- fish now requires the terminal to respond to queries for the primary device attribute. For now, this can be reversed via a feature flag, by running (once)
set -Ua fish_features no-query-termand restarting fish. - Users of GNU screen may experience minor glitches when starting fish.
Scripting improvements
- The argparse builtin has seen many improvements, see below.
- The string pad command now has a
-C/--centeroption. - The psub command now allows combining
--suffixwith--fifo(#11729). - The read builtin has learned the
--tokenize-rawoption to tokenize without quote removal (#11084).
Interactive improvements
- Autosuggestions are now also provided in multi-line command lines. Like
ctrl-r, these operate only on the current line. - Autosuggestions used to not suggest multi-line command-lines from history; now autosuggestions include individual lines from multi-line command-lines.
- The history pager search now preserves ordering between
ctrl-sforward andctrl-rbackward searches. - Instead of highlighting events by flashing all text to the left of the cursor, failing history token search (
alt-.) flashes the associated token, failing tab-completion flashes the to-be-completed token (#11050), deleting an autosuggestion (shift-delete) flashes the suggestion, and all other scenarios flash the full command line. - Pasted commands are now stripped of any
$command prefixes, to help pasting code snippets. - Builtin help options (e.g.
abbr --help) now usemandirectly, meaning that variables likeMANWIDTHare respected (#11786). funcedwill now edit copied functions directly, instead of the file wherefunction --copywas invoked. (#11614)- Added a simple
fish_jj_promptwhich reduces visual noise in the prompt inside Jujutsu repositories that are colocated with Git.
New or improved bindings
- On non-macOS systems,
alt-left,alt-right,alt-backspaceandalt-deleteno longer operate on punctuation-delimited words but on whole arguments, possibly including special characters like/and quoted spaces. On macOS, the correspondingctrl-prefixed keys operate on whole arguments. Word operations are still available via the other respective modifier, just like in most web browsers. ctrl-z(undo) after executing a command will restore the previous cursor position instead of placing the cursor at the end of the command line.- The
alt-sbinding will now also userun0if available. - Some mouse support has been added: the OSC 133 prompt marking feature has learned about kitty’s
click_events=1flag, which allows moving fish’s cursor by clicking in the command line, and selecting pager items (#10932). - Before clearing the screen and redrawing,
ctrl-lnow pushes all text located above the prompt to the terminal’s scrollback, via a new special input function scrollback-push. For compatibility with terminals that do not implement ECMA-48’s SCROLL UP command, this function is only used if the terminal advertises support for that via XTGETTCAP. - Vi mode has learned
ctrl-a(increment) andctrl-x(decrement) (#11570).
Completions
gitcompletions now show the remote URL as description when completing remotes.systemctlcompletions no longer print escape codes ifSYSTEMD_COLORShappens to be set (#11465).- Added and improved many completion scripts, notably
tmux.
Improved terminal support
- Support for double, curly, dotted and dashed underlines, for use in
fish_color_*variables and the set_color builtin (#10957). - Underlines can now be colored independent of text (#7619).
- New documentation page Terminal Compatibility (also accessible via
man fish-terminal-compatibility) lists the terminal control sequences used by fish. - fish now requires the terminal to respond to queries for the primary device attribute. For now, this can be reversed via a feature flag, by running (once)
set -Ua fish_features no-query-term.
Other improvements
- Updated Chinese and German translations.
fish_indent --dump-parse-treenow emits simple metrics about the tree including its memory consumption.- We added some tools to improve development workflows, for example
build_tools/{check,update_translations,release}.shandtests/test_driver.py. In conjunction withcargo, these enable almost all day-to-day development tasks without using CMake.
For distributors
- Builtin commands that support the
--helpoption now require themanprogram. The direct dependency onmandocandnroffhas been removed. - fish no longer uses gettext MO files, see below. If you have use cases which are incompatible with our new approach, please let us know.
- The fish_indent and fish_key_reader programs are now also available as builtins. If fish is invoked via e.g. a symlink with one of these names, it will act like the given tool (i.e. it’s a multi-call binary). This allows truly distributing fish as a single file (#10876).
- The CMake build configuration has been simplified and no longer second-guesses rustup. It will run rustc and cargo via
PATHor in ~/.cargo/bin/. If that doesn’t match your setup, set the Rust_COMPILER and Rust_CARGO ...
fish 4.0.9
Another tiny patch release for the 4.0 series - this one exists mainly to fix a regression from 4.0.6 that affects users who configured WezTerm with enable_kitty_keyboard=true.
This release fixes:
- a regression in 4.0.6 causing shifted keys to not be inserted on some terminals (#11813).
- a regression in 4.0.6 causing the build to fail on systems where
charis unsigned (#11804). - a regression in 4.0.0 causing a crash on an invalid bg invocation.
Download links: To download the source code for fish, we suggest the file named “fish-4.0.9.tar.xz”. The file downloaded from “Source code (tar.gz)” will not build correctly.
The files called fish-4.0.9-linux-*.tar.xz are experimental packages containing a single standalone fish binary for any Linux with the given CPU architecture.