fish 3.2.0 (released March 1, 2021)
Notable improvements and fixes
- Undo and redo support for the command-line editor and pager search (#1367). By default, undo is bound to Control+Z, and redo to Alt+/.
- Builtins can now output before all data is read. For example,
string replaceno longer has to read all of stdin before it can begin to output. This makes it usable also for pipes where the previous command hasn't finished yet, like:
# Show all dmesg lines related to "usb"
dmesg -w | string match '*usb*'
- Prompts will now be truncated instead of replaced with
"> "if they are wider than the terminal (#904). For example:
~/dev/build/fish-shell-git/src/fish-shell/build (makepkg)>
will turn into:
…h-shell/build (makepkg)>
It is still possible to react to the COLUMNS variable inside the prompt to implement smarter behavior.
- fish completes ambiguous completions after pressing
Tabeven when they have a common prefix, without the user having to pressTabagain (#6924). - fish is less aggressive about resetting terminal modes, such as flow control, after every command. Although flow control remains off by default, enterprising users can now enable it with
stty(#2315, #7704). - A new "fish_add_path" helper function to add paths to $PATH without producing duplicates, to be used interactively or in
config.fish(#6960, #7028). For example:
fish_add_path /opt/mycoolthing/bin
will add /opt/mycoolthing/bin to the beginning of $fish_user_path without creating duplicates, so it can be called safely from config.fish or interactively, and the path will just be there, once.
- Better errors with "test" (#6030):
> test 1 = 2 and echo true or false
test: Expected a combining operator like '-a' at index 4
1 = 2 and echo true or echo false
^
This includes numbering the index from 1 instead of 0, like fish lists.
- A new theme for the documentation and Web-based configuration (#6500, #7371, #7523), matching the design on fishshell.com.
fish --no-executewill no longer complain about unknown commands or non-matching wildcards, as these could be defined differently at runtime (especially for functions). This makes it usable as a static syntax checker (#977).string match --regexnow integrates named PCRE2 capture groups as fish variables, allowing variables to be set directly fromstring match(#7459). To support this functionality,stringis now a reserved word and can no longer be wrapped in a function.- Globs and other expansions are limited to 512,288 results (#7226). Because operating systems limit the number of arguments to commands, larger values are unlikely to work anyway, and this helps to avoid hangs.
- A new "fish for bash users" documentation page gives a quick overview of the scripting differences between bash and fish (#2382), and the completion tutorial has also been moved out into its own document (#6709).
Syntax changes and new commands
- Range limits in index range expansions like
$x[$start..$end]may be omitted:$startand$enddefault to 1 and -1 (the last item) respectively (#6574):
echo $var[1..]
echo $var[..-1]
echo $var[..]
All print the full list $var.
- When globbing, a segment which is exactly
**may now match zero directories. For example**/foomay matchfooin the current directory (#7222).
Scripting improvements
- The
type,_(gettext),.(source) and:(no-op) functions
are now implemented builtins for performance purposes (#7342, #7036, #6854). setand backgrounded jobs no longer overwrite$pipestatus(#6820), improving its use in command substitutions (#6998).- Computed ("electric") variables such as
statusare now only global in scope, soset -Uq statusreturns false (#7032). - The output for
set --showhas been shortened, only mentioning the scopes in which a variable exists (#6944). In addition, it now shows if a variable is a path variable. - A new variable,
fish_kill_signal, is set to the signal that terminated the last foreground job, or0if the job exited normally (#6824, #6822). - A new subcommand,
string pad, allows extending strings to a given width (#7340, #7102). string subhas a new--endoption to specify the end index of
a substring (#6765, #5974).string splithas a new--fieldsoption to specify fields to
output, similar tocut -f(#6770).string trimnow also trims vertical tabs by default (#6795).string replaceno longer prints an error if a capturing group wasn't matched, instead treating it as empty (#7343).stringsubcommands now quit early when used with--quiet(#7495).string repeatnow handles multiple arguments, repeating each one (#5988).printfno longer prints an error if not given an argument (not
even a format string).- The
trueandfalsebuiltins ignore any arguments, like other shells (#7030). fish_indentnow removes unnecessary quotes in simple cases (#6722)
and gained a--checkoption to just check if a file is indented correctly (#7251).fish_indentindents continuation lines that follow a line ending in a backslash,|,&&or||.pushdonly adds a directory to the stack if changing to it was successful (#6947).- A new
fish_job_summaryfunction is called whenever a background job stops or ends, or any job terminates from a signal (#6959, #2727, #4319).
The default behaviour can now be customized by redefining it. statusgained newdirnameandbasenameconvenience subcommands to get just the directory to the running script or the name of it, to simplify common tasks such as running(dirname (status filename))(#7076, #1818).- Broken pipelines are now handled more smoothly; in particular, bad redirection mid-pipeline results in the job continuing to run but with the broken file descriptor replaced with a closed file descriptor. This allows better error recovery and is more in line with other shells' behaviour (#7038).
jobs --quiet PIDno longer prints "no suitable job" if the job for PID does not exist (eg because it has finished) (#6809, #6812).jobsnow shows continued child processes correctly (#6818)disownshould no longer create zombie processes when job control is off, such as inconfig.fish(#7183).command,jobsandtypebuiltins support--queryas the long form of-q, matching other builtins.
The long form--quietis deprecated (#7276).argparseno longer requires a short flag letter for long-only options (#7585)
and only prints a backtrace with invalid options to argparse itself (#6703).argparsenow passes the validation variables (e.g.$_flag_value) as local-exported variables,
avoiding the need for--no-scope-shadowingin validation functions.completetakes the first argument as the name of the command if the--command/-coption is not used,
socomplete gitis treated likecomplete --command git,
and it can show the loaded completions for specific commands withcomplete COMMANDNAME(#7321).set_color -b(without an argument) no longer prints an error message, matching other invalid invocations of this command (#7154).execno longer produces a syntax error when the command cannot be found (#6098).set --eraseandabbr --erasecan now erase multiple things in one go, matchingfunctions --erase(#7377).abbr --eraseno longer prints errors when used with no arguments or on an unset abbreviation (#7376, #7732).test -t, for testing whether file descriptors are connected to a terminal, works for file descriptors 0, 1, and 2 (#4766).
It can still return incorrect results in other cases (#1228).- Trying to execute scripts with Windows line endings (CRLF) produces a sensible error (#2783).
- Trying to execute commands with arguments that exceed the operating system limit now produces a specific error (#6800).
- An
aliasthat delegates to a command with the same name no longer triggers an error about recursive completion (#7389). mathnow has a--baseoption to output the result in hexadecimal or octal (#7496) and produces more specific error messages (#7508).mathlearned bitwise functionsbitand,bitorandbitxor, used likemath "bitand(0xFE, 5)"(#7281).mathlearned tau for those who don't like typing "2 * pi".- Failed redirections will now set
$status(#7540). - fish sets exit status in a more consistent manner after errors, including invalid expansions like
$foo[. - Using
read --silentwhile fish is in private mode was adding these potentially-sensitive entries to the history; this has been fixed (#7230). readcan now read interactively from other files, and can be used to read from the terminal viaread </dev/tty(if the operating system provides/dev/tty) (#7358).- A new
fish_status_to_signalfunction for transforming exit statuses to signal names has been added (#7597, #7595). - The fallback
realpathbuiltin supports the-s/--no-symlinksoption, like GNU realpath (#7574). functionsandtypenow explain when a function was defined viasourceinstead of just sayingDefined in -.- Significant performance improvements when globbing, appending to variables or in
math. echono longer interprets options at the beginning of an argument (egecho "-n foo") (#7614).- fish now finds user configuration even if the
HOMEenvironment variable is not set (#7620). - fish no longer crashes when started from a Windows-style working directory (eg
F:\\path) (#7636). fish -cnow reads the remaining arguments into$argv(#2314).- The
pwdcommand supports the long options--logicaland--physical, matching other implementations (#6787). fish --profilenow only starts profiling after fish is ready to execute commands (all configuration is completed). There is a new--profile-startupoption that only profiles the startup and configuration process (#7648).- Builtins return a maximum exit status of 255, rather than potentially overflowing. In particular, this affects
exit,return,functions --query, andset --query(#7698, #7702). - It is no longer an error to run builtin with closed stdin. For example
count <&-now prints 0, instead of failing. - Blocks, functions, and builtins no longer permit redirecting to file descriptors other than 0 (standard input), 1 (standard output) and 2 (standard error). For example,
echo hello >&5is now an error. This prevents corruption of internal state (#3303).
Interactive improvements
- fish will now always attempt to become process group leader in interactive mode (#7060). This helps avoid hangs in certain circumstances, and allows tmux's current directory introspection to work (#5699).
- The interactive reader now allows ending a line in a logical operators (
&&and||) instead of complaining about a missing command. (This was already syntactically valid, but interactive sessions didn't know about it yet). - The prompt is reprinted after a background job exits (#1018).
- fish no longer inserts a space after a completion ending in
.,,or-is accepted, improving completions for tools that provide dynamic completions (#6928). - If a filename is invalid when first pressing
Tab, but becomes valid, it will be completed properly on the next attempt (#6863). help string match/replace/<subcommand>will show the help for string subcommands (#6786).fish_key_readersets the exit status to 0 when used with--helpor--version(#6964).fish_key_readerandfish_indentsend output from--versionto standard output, matching other fish binaries (#6964).- A new variable
$status_generationis incremented only when the previous command produces an exit status (#6815). This can be used, for example, to check whether a failure status is a holdover due to a background job, or actually produced by the last run command. fish_greetingis now a function that reads a variable of the same name, and defaults to setting it globally. This removes a universal variable by default and helps with updating the greeting. However, to disable the greeting it is now necessary to explicitly specify universal scope (set -U fish_greeting) or to disable it in config.fish (#7265).- Events are properly emitted after a job is cancelled (#2356).
fish_preexecandfish_postexecevents are no longer triggered for empty commands (#4829, #7085).- Functions triggered by the
fish_exitevent are correctly run when the terminal is closed or the shell receives SIGHUP (#7014). - The
fish_promptevent no longer fires whenreadis used. If you need a function to run any timereadis invoked by a script, use the newfish_readevent instead (#7039). - A new
fish_posterrorevent is emitted when attempting to execute a command with syntax errors (#6880, #6816). - The debugging system has now fully switched from the old numbered level to the new named category system introduced in 3.1. A number of new debugging categories have been added, including
config,path,readerandscreen(#6511). See the output offish --print-debug-categoriesfor the full list. - The warning about read-only filesystems has been moved to a new "warning-path" debug category and can be disabled by setting a debug category of
-warning-path(#6630):
fish --debug=-warning-path
- The enabled debug categories are now printed on shell startup (#7007).
- The
-oshort option to fish, for--debug-output, works correctly instead of producing an invalid option error (#7254). - fish's debugging can now also be enabled via
FISH_DEBUGandFISH_DEBUG_OUTPUTenvironment variables. This helps with debugging when no commandline options can be passed, like when fish is called in a shebang (#7359). - Abbreviations are now expanded after all command terminators (eg
;or|), not just space, as in fish 2.7.1 and before (#6970), and after closing a command substitution (#6658). - The history file is now created with user-private permissions, matching other shells (#6926). The directory containing the history file was already private, so there should not have been any private data revealed.
- The output of
timeis now properly aligned in all cases (#6726, #6714) and no longer depends on locale (#6757). - The command-not-found handling has been simplified. When it can't find a command, fish now just executes a function called
fish_command_not_foundinstead of firing an event, making it easier to replace and reason about. Previously-defined__fish_command_not_found_handlerfunctions with an appropriate event listener will still work (#7293). Control-Chandling has been reimplemented in C++ and is therefore quicker (#5259), no longer occasionally prints an "unknown command" error (#7145) or overwrites multiline prompts (#3537).Control-Cno longer kills background jobs for which job control is
disabled, matching POSIX semantics (#6828, #6861).- Autosuggestions work properly after
Control-Ccancels the current commmand line (#6937). - History search is now case-insensitive unless the search string contains an uppercase character (#7273).
fish_update_completionsgained a new--keepoption, which improves speed by skipping completions that already exist (#6775, #6796).- Aliases containing an embedded backslash appear properly in the output of
alias(#6910). openno longer hangs indefinitely on certain systems, as a bug inxdg-openhas been worked around (#7215).- Long command lines no longer add a blank line after execution (#6826) and behave better with
Backspace(#6951). functions -tworks like the long option--handlers-type, as documented, instead of producing an error (#6985).- History search now flashes when it found no more results (#7362)
- fish now creates the path in the environment variable
XDG_RUNTIME_DIRif it does not exist, before using it for runtime data storage (#7335). set_color --print-colorsnow also respects the bold, dim, underline, reverse, italic and background modifiers, to better show their effect (#7314).- The fish Web configuration tool (
fish_config) shows prompts correctly on Termux for Android (#7298) and detects Windows Services for Linux 2 properly (#7027). It no longer shows thehistoryvariable as it may be too large (one can use the History tab instead). It also starts the browser in another thread, avoiding hangs in some circumstances, especially with Firefox's Developer Edition (#7158). Finally, a bug in the Source Code Pro font may cause browsers to hang, so this font is no longer chosen by default (#7714). funcsavegained a new--directoryoption to specify the location of the saved function (#7041).helpworks properly on MSYS2 (#7113) and only usescmd.exeif running on WSL (#6797).- Resuming a piped job by its number, like
fg %1, works correctly (#7406). Resumed jobs show the correct title in the terminal emulator (#7444). - Commands run from key bindings now use the same TTY modes as normal commands (#7483).
- Autosuggestions from history are now case-sensitive (#3978).
$statusfrom completion scripts is no longer passed outside the completion, which keeps the status display in the prompt as the last command's status (#7555).- Updated localisations for pt_BR (#7480).
fish_traceoutput now starts with->(likefish --profile), making the depth more visible (#7538).- Resizing the terminal window no longer produces a corrupted prompt (#6532, #7404).
functionsproduces an error rather than crashing on certain invalid arguments (#7515).- A crash in completions with inline variable assignment (eg
A= b) has been fixed (#7344). fish_private_modemay now be changed dynamically usingset(#7589), and history is kept in memory in private mode (but not stored permanently) (#7590).- Commands with leading spaces may be retrieved from history with up-arrow until a new command is run, matching zsh's
HIST_IGNORE_SPACE(#1383). - Importing bash history or reporting errors with recursive globs (
\*\*) no longer hangs (#7407, #7497). bindnow shows\\x7ffor the del key instead of a literal DEL character (#7631)- Paths containing variables or tilde expansion are only suggested when they are still valid (#7582).
- Syntax highlighting can now color a command as invalid even if executed quickly (#5912).
- Redirection targets are no longer highlighted as error if they contain variables which will likely be defined by the current commandline (#6654).
- fish is now more resilient against broken terminal modes (#7133, #4873).
- fish handles being in control of the TTY without owning its own process group better, avoiding some hangs in special configurations (#7388).
- Keywords can now be colored differently by setting the
fish_color_keywordvariable (fish_color_commandis used as a fallback) (#7678). - Just like
fish_indent, the interactive reader will indent continuation lines that follow a line ending in a backslash,|,&&or||(#7694). - Commands with a trailing escaped space are saved in history correctly (#7661).
fish_promptno longer mangles Unicode characters in the private-use range U+F600-U+F700. (#7723).- The universal variable file,
fish_variables, can be made a symbolic link without it being overwritten (#7466). - fish is now more resilient against
mktempfailing (#7482).
New or improved bindings
- As mentioned above, new special input functions
undo(Control+_orControl+Z) andredo(Alt-/) can be used to revert changes to the command line or the pager search field (#6570). Control-Zis now available for binding (#7152).- Additionally, using the
cancelspecial input function (bound toEscapeby default) right after fish picked an unambiguous completion will undo that (#7433). fish_clipboard_paste(Control+V) trims indentation from multiline commands, because fish already indents (#7662).- Vi mode bindings now support
dh,dl,c0,cf,ct,cF,cT,ch,cl,y0,ci,ca,yi,ya,di,da,d;,d,,o,Oand Control+left/right keys to navigate by word (#6648, #6755, #6769, #7442, #7516). - Vi mode bindings support
~(tilde) to toggle the case of the selected character (#6908). - Functions
up-or-searchanddown-or-search(UpandDown) can cross empty lines, and don't activate search mode if the search fails, which makes them easier to use to move between lines in some situations. - If history search fails to find a match, the cursor is no longer moved. This is useful when accidentally starting a history search on a multi-line commandline.
- The special input function
beginning-of-history(Page Up) now moves to the oldest search instead of the youngest - that'send-of-history(Page Down). - A new special input function
forward-single-charmoves one character to the right, and if an autosuggestion is available, only take a single character from it (#7217, #4984). - Special input functions can now be joined with
oras a modifier (adding toand), though only some commands set an exit status (#7217). This includessuppress-autosuggestionto reflect whether an autosuggestion was suppressed (#1419) - A new function
__fish_preview_current_file, bound toAlt+O, opens the
current file at the cursor in a pager (#6838, #6855). edit_command_buffer(Alt-EandAlt-V) passes the cursor position
to the external editor if the editor is recognized (#6138, #6954).__fish_prepend_sudo(Alt-S) now toggles asudoprefix (#7012) and avoids shifting the cursor (#6542).__fish_prepend_sudo(Alt-S) now uses the previous commandline if the current one is empty, to simplify rerunning the previous command withsudo(#7079).__fish_toggle_comment_commandline(Alt-#) now uncomments and presents the last comment from history if the commandline is empty (#7137).__fish_whatis_current_token(Alt-W) prints descriptions for functions and builtins (#7191, #2083).- The definition of "word" and "bigword" for movements was refined, fixing (eg) vi mode's behavior with
eon the second-to-last char, and bigword's behavior with single-character words and non-blank non-graphical characters (#7353, #7354, #4025, #7328, #7325) - fish's clipboard bindings now also support Windows Subsystem for Linux via PowerShell and clip.exe (#7455, #7458) and will properly copy newlines in multi-line commands.
- Using the
\*-jumpspecial input functions before typing anything else no longer crashes fish. - Completing variable overrides (
foo=bar) could replace the entire thing with just the completion in some circumstances. This has been fixed (#7398).
Improved prompts
- The default and example prompts print the correct exit status for commands prefixed with
not(#6566). - git prompts include all untracked files in the repository, not just those in the current directory (#6086).
- The git prompts correctly show stash states (#6876, #7136) and clean states (#7471).
- The Mercurial prompt correctly shows untracked status (#6906), and by default only shows the branch for performance reasons.
A new variable$fish_prompt_hg_show_informative_statuscan be set to enable more information. - The
fish_vcs_promptpasses its arguments to the various VCS prompts that it calls (#7033). - The Subversion prompt was broken in a number of ways in 3.1.0 and has been restored (#6715, #7278).
- A new helper function
fish_is_root_usersimplifies checking for superuser privilege (#7031, #7123). - New colorschemes -
ayu Light,ayu Darkandayu Mirage(#7596). - Bugs related to multiline prompts, including repainting (#5860) or navigating directory history (#3550) leading to graphical glitches have been fixed.
- The
nimprompt now handles vi mode better (#6802)
Improved terminal support
- A new variable,
fish_vi_force_cursor, can be set to forcefish_vi_cursorto attempt changing the cursor
shape in vi mode, regardless of terminal (#6968). Thefish_vi_cursoroption--force-itermhas been deprecated. diffwill now colourize output, if supported (#7308).- Autosuggestions appear when the cursor passes the right prompt (#6948) or wraps to the next line (#7213).
- The cursor shape in Vi mode changes properly in Windows Terminal (#6999, #6478).
- The spurious warning about terminal size in small terminals has been removed (#6980).
- Dynamic titles are now enabled in Alacritty (#7073) and emacs' vterm (#7122).
- Current working directory updates are enabled in foot (#7099) and WezTerm (#7649).
- The width computation for certain emoji agrees better with terminals (especially flags). (#7237).
- Long command lines are wrapped in all cases, instead of sometimes being put on a new line (#5118).
- The pager is properly rendered with long command lines selected (#2557).
- Sessions with right prompts can be resized correctly in terminals that handle reflow, like GNOME Terminal (and other VTE-based terminals), upcoming Konsole releases and Alacritty. This detection can be overridden with the new
fish_handle_reflowvariable (#7491). - fish now sets terminal modes sooner, which stops output from appearing before the greeting and prompt are ready (#7489).
- Better detection of new Konsole versions for true color support and cursor shape changing.
- fish no longer attempts to modify the terminal size via
TIOCSWINSZ, improving compatibility with Kitty (#6994).
Completions
- Added completions for
7z,7zaand7zr(#7220)alias(#7035)alternatives(#7616)apk(#7108)asciidoctor(#7000)avifdecandavifenc(#7674)bluetoothctl(#7438)cjxlanddjxl(#7673)cmark(#7000)create_ap(#7096)deno(#7138)dhclient(#6684)- Postgres-related commands
dropdb,createdb,pg_restore,pg_dumpandpg_dumpall(#6620) dotnet(#7558)downgrade(#6751)gapplication,gdbus,gioandgresource(#7300)gh(#7112)gitkgroups(#6889)hashcat(#7746)hikari(#7083)icdiff(#7503)imv(#6675)john(#7746)julia(#7468)k3d(#7202)ldapsearch(#7578)lightdmanddm-tool(#7624)losetup(#7621)micro(#7339)mpc(#7169)- Metasploit's
msfconsole,msfdbandmsfvenom(#6930) mtr(#7638)mysql(#6819)ncat,nc.openbsd,nc.traditionalandnmap(#6873)openssl(#6845)prime-run(#7241)ps2pdf{12,13,14,wr}(#6673)pyenv(#6551)rst2html,rst2html4,rst2html5,rst2latex,rst2man,rst2odt,rst2pseudoxml,rst2s5,rst2xetex,rst2xmlandrstpep2html(#7019)spago(#7381)sphinx-apidoc,sphinx-autogen,sphinx-buildandsphinx-quickstart(#7000)strace(#6656)- systemd's
bootctl,coredumpctl,hostnamectl(#7428),homectl(#7435),networkctl(#7668) anduserdbctl(#7667) tcpdump(#6690)tigtracerouteandtracepath(#6803)windscribe(#6788)wireshark,tshark, anddumpcapxbps-\*(#7239)xxhsum,xxh32sum,xxh64sumandxxh128sum(#7103)yadm(#7100)zopfliandzopflipng(#6872)
- Lots of improvements to completions, including:
gitcompletions can complete the right and left parts of a commit range likefrom..toorleft...right.- Completion scripts for custom Git subcommands like
git-xyzare now loaded with Git completions. The completions can now be defined directly on the subcommand (usingcomplete git-xyz), and completion forgit xyzwill work. (#7075, #7652, #4358) makecompletions no longer second-guess make's file detection, fixing target completion in some cases (#7535).- Command completions now correctly print the description even if the command was fully matched (like in
ls<TAB>). setcompletions no longer hide variables starting with__, they are sorted last instead.
- Improvements to the manual page completion generator (#7086, #6879, #7187).
- Significant performance improvements to completion of the available commands (#7153), especially on macOS Big Sur where there was a significant regression (#7365, #7511).
- Suffix completion using
__fish_complete_suffixuses the same fuzzy matching logic as normal file completion, and completes any file but sorts files with matching suffix first (#7040, #7547). Previously, it only completed files with matching suffix.
For distributors
- fish has a new interactive test driver based on pexpect, removing the optional dependency on expect (and adding an optional dependency on pexpect) (#5451, #6825).
- The CHANGELOG was moved to restructured text, allowing it to be included in the documentation (#7057).
- fish handles ncurses installed in a non-standard prefix better (#6600, #7219), and uses variadic tparm on NetBSD curses (#6626).
- The Web-based configuration tool no longer uses an obsolete Angular version (#7147).
- The fish project has adopted the Contributor Covenant code of conduct (#7151).
Deprecations and removed features
- The
fish_color_matchvariable is no longer used. (Previously this controlled the color of matching quotes and parens when usingread). - fish 3.2.0 will be the last release in which the redirection to standard error with the
^character is enabled. Thestderr-nocaretfeature flag will be changed to "on" in future releases. stringis now a reserved word and cannot be used for function names (see above).fish_vi_cursor's option--force-itermhas been deprecated (see above).command,jobsandtypelong-form option--quietis deprecated in favor of--query(see above).- The
fish_command_not_foundevent is no longer emitted, instead there is a function of that name. By default it will call a previously-defined__fish_command_not_found_handler. To emit the event manually useemit fish_command_not_found. - The
fish_promptevent no longer fires whenreadis used. If you need a function to run any timereadis invoked by a script, use the newfish_readevent instead (#7039). - To disable the greeting message permanently it is no longer enough to just run
set fish_greetinginteractively as it is no longer implicitly a universal variable. Useset -U fish_greetingor disable it in config.fish withset -g fish_greeting. - The long-deprecated and non-functional
-m/--read-modeoptions toreadwere removed in 3.1b1. Using the short form, or a never-implemented-Boption, no longer crashes fish (#7659). - With the addition of new categories for debug options, the old numbered debugging levels have been removed.
For distributors and developers
- fish source tarballs are now distributed using the XZ compression
method (#5460). - The fish source tarball contains an example FreeDesktop entry and icon.
- The CMake variable
MAC_CODESIGN_IDcan now be set to "off" to disable code-signing (#6952, #6792). - Building on on macOS earlier than 10.13.6 succeeds, instead of failing on code-signing (#6791).
- The pkg-config file now uses variables to ensure paths used are portable across prefixes.
- The default values for the
extra_completionsdir,extra_functionsdirandextra_confdiroptions now use the installation prefix rather than/usr/local(#6778). - A new CMake variable
FISH_USE_SYSTEM_PCRE2controls whether fish builds with the system-installed PCRE2, or the version it bundles. By default it prefers the system library if available, unless Mac codesigning is enabled (#6952). - Running the full interactive test suite now requires Python 3.5+ and the pexpect package (#6825); the expect package is no longer required.
- Support for Python 2 in fish's tools (
fish_configand the manual page completion generator) is no longer guaranteed. Please use Python 3.5 or later (#6537). - The Web-based configuration tool is compatible with Python 3.10 (#7600) and no longer requires Python's distutils package (#7514).
- fish 3.2 is the last release to support Red Hat Enterprise Linux & CentOS version 6.
--
Download links: To download the source code for fish, we suggest the file named "fish-3.2.0.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is 4f0293ed9f6a6b77e47d41efabe62f3319e86efc8bf83cc58733044fbc6f9211. A GPG signature from David Adam (key ID 0x7A67D962D88A709A) is available as "fish-3.2.0.tar.xz.asc".