Path to this page:
Subject: CVS commit: pkgsrc/shells/fish
From: Nia Alarie
Date: 2021-03-05 09:47:29
Message id: 20210305084729.F40ABFA95@cvs.NetBSD.org
Log Message:
fish: Update to 3.2.0
fish 3.2.0 (released March 1, 2021)
===================================
Notable improvements and fixes
------------------------------
- **Undo and redo support** for the command-line editor and pager search \
(:issue:`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 \
replace`` no 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 (:issue:`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 :kbd:`Tab` even when they
have a common prefix, without the user having to press :kbd:`Tab` again
(:issue:`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`` (:issue:`2315`, :issue:`7704`).
- A new **"fish_add_path" helper function to add paths to $PATH** \
without producing duplicates,
to be used interactively or in ``config.fish`` (:issue:`6960`, :issue:`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"** (:issue:`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** \
(:issue:`6500`, :issue:`7371`, :issue:`7523`), matching the design on \
fishshell.com.
- ``fish --no-execute`` **will 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 (:issue:`977`).
- ``string match --regex`` now integrates **named PCRE2 capture groups as fish \
variables**, allowing variables to be set directly from ``string match`` \
(:issue:`7459`). To support this functionality, ``string`` is now a reserved \
word and can no longer be wrapped in a function.
- Globs and other **expansions are limited to 512,288 results** \
(:issue:`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 (:issue:`2382`), and \
the completion tutorial has also been moved out into its own document \
(:issue:`6709`).
Syntax changes and new commands
-------------------------------
- Range limits in index range expansions like ``$x[$start..$end]`` may be \
omitted: ``$start`` and ``$end`` default to 1 and -1 (the last item) \
respectively (:issue:`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 ``**/foo`` may match ``foo`` in the current directory \
(:issue:`7222`).
Scripting improvements
----------------------
- The ``type``, ``_`` (gettext), ``.`` (source) and ``:`` (no-op) functions
are now implemented builtins for performance purposes (:issue:`7342`, \
:issue:`7036`, :issue:`6854`).
- ``set`` and backgrounded jobs no longer overwrite ``$pipestatus`` \
(:issue:`6820`), improving its use in command substitutions (:issue:`6998`).
- Computed ("electric") variables such as ``status`` are now only \
global in scope, so ``set -Uq status`` returns false (:issue:`7032`).
- The output for ``set --show`` has been shortened, only mentioning the scopes \
in which a variable exists (:issue:`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, or ``0`` if the job exited normally (:issue:`6824`, \
:issue:`6822`).
- A new subcommand, ``string pad``, allows extending strings to a given width \
(:issue:`7340`, :issue:`7102`).
- ``string sub`` has a new ``--end`` option to specify the end index of
a substring (:issue:`6765`, :issue:`5974`).
- ``string split`` has a new ``--fields`` option to specify fields to
output, similar to ``cut -f`` (:issue:`6770`).
- ``string trim`` now also trims vertical tabs by default (:issue:`6795`).
- ``string replace`` no longer prints an error if a capturing group wasn't \
matched, instead treating it as empty (:issue:`7343`).
- ``string`` subcommands now quit early when used with ``--quiet`` (:issue:`7495`).
- ``string repeat`` now handles multiple arguments, repeating each one \
(:issue:`5988`).
- ``printf`` no longer prints an error if not given an argument (not
even a format string).
- The ``true`` and ``false`` builtins ignore any arguments, like other shells \
(:issue:`7030`).
- ``fish_indent`` now removes unnecessary quotes in simple cases (:issue:`6722`)
and gained a ``--check`` option to just check if a file is indented correctly \
(:issue:`7251`).
- ``fish_indent`` indents continuation lines that follow a line ending in a \
backslash, ``|``, ``&&`` or ``||``.
- ``pushd`` only adds a directory to the stack if changing to it was successful \
(:issue:`6947`).
- A new ``fish_job_summary`` function is called whenever a
background job stops or ends, or any job terminates from a signal \
(:issue:`6959`, :issue:`2727`, :issue:`4319`).
The default behaviour can now be customized by redefining it.
- ``status`` gained new ``dirname`` and ``basename`` convenience 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))`` \
(:issue:`7076`, :issue:`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 (:issue:`7038`).
- ``jobs --quiet PID`` no longer prints "no suitable job" if the job \
for PID does not exist (eg because it has finished) (:issue:`6809`, \
:issue:`6812`).
- ``jobs`` now shows continued child processes correctly (:issue:`6818`)
- ``disown`` should no longer create zombie processes when job control is off, \
such as in ``config.fish`` (:issue:`7183`).
- ``command``, ``jobs`` and ``type`` builtins support ``--query`` as the long \
form of ``-q``, matching other builtins.
The long form ``--quiet`` is deprecated (:issue:`7276`).
- ``argparse`` no longer requires a short flag letter for long-only options \
(:issue:`7585`)
and only prints a backtrace with invalid options to argparse itself \
(:issue:`6703`).
- ``argparse`` now passes the validation variables (e.g. ``$_flag_value``) as \
local-exported variables,
avoiding the need for ``--no-scope-shadowing`` in validation functions.
- ``complete`` takes the first argument as the name of the command if the \
``--command``/``-c`` option is not used,
so ``complete git`` is treated like ``complete --command git``,
and it can show the loaded completions for specific commands with ``complete \
COMMANDNAME`` (:issue:`7321`).
- ``set_color -b`` (without an argument) no longer prints an error message, \
matching other invalid invocations of this command (:issue:`7154`).
- ``exec`` no longer produces a syntax error when the command cannot be found \
(:issue:`6098`).
- ``set --erase`` and ``abbr --erase`` can now erase multiple things in one go, \
matching ``functions --erase`` (:issue:`7377`).
- ``abbr --erase`` no longer prints errors when used with no arguments or on an \
unset abbreviation (:issue:`7376`, :issue:`7732`).
- ``test -t``, for testing whether file descriptors are connected to a \
terminal, works for file descriptors 0, 1, and 2 (:issue:`4766`).
It can still return incorrect results in other cases (:issue:`1228`).
- Trying to execute scripts with Windows line endings (CRLF) produces a \
sensible error (:issue:`2783`).
- Trying to execute commands with arguments that exceed the operating system \
limit now produces a specific error (:issue:`6800`).
- An ``alias`` that delegates to a command with the same name no longer \
triggers an error about recursive completion (:issue:`7389`).
- ``math`` now has a ``--base`` option to output the result in hexadecimal or \
octal (:issue:`7496`) and produces more specific error messages (:issue:`7508`).
- ``math`` learned bitwise functions ``bitand``, ``bitor`` and ``bitxor``, used \
like ``math "bitand(0xFE, 5)"`` (:issue:`7281`).
- ``math`` learned tau for those who don't like typing "2 * pi".
- Failed redirections will now set ``$status`` (:issue:`7540`).
- fish sets exit status in a more consistent manner after errors, including \
invalid expansions like ``$foo[``.
- Using ``read --silent`` while fish is in private mode was adding these \
potentially-sensitive entries to the history; this has been fixed \
(:issue:`7230`).
- ``read`` can now read interactively from other files, and can be used to read \
from the terminal via ``read </dev/tty`` (if the operating system provides \
``/dev/tty``) (:issue:`7358`).
- A new ``fish_status_to_signal`` function for transforming exit statuses to \
signal names has been added (:issue:`7597`, :issue:`7595`).
- The fallback ``realpath`` builtin supports the ``-s``/``--no-symlinks`` \
option, like GNU realpath (:issue:`7574`).
- ``functions`` and ``type`` now explain when a function was defined via \
``source`` instead of just saying ``Defined in -``.
- Significant performance improvements when globbing, appending to variables or \
in ``math``.
- ``echo`` no longer interprets options at the beginning of an argument (eg \
``echo "-n foo"``) (:issue:`7614`).
- fish now finds user configuration even if the ``HOME`` environment variable \
is not set (:issue:`7620`).
- fish no longer crashes when started from a Windows-style working directory \
(eg ``F:\path``) (:issue:`7636`).
- ``fish -c`` now reads the remaining arguments into ``$argv`` (:issue:`2314`).
- The ``pwd`` command supports the long options ``--logical`` and \
``--physical``, matching other implementations (:issue:`6787`).
- ``fish --profile`` now only starts profiling after fish is ready to execute \
commands (all configuration is completed). There is a new ``--profile-startup`` \
option that only profiles the startup and configuration process (:issue:`7648`).
- Builtins return a maximum exit status of 255, rather than potentially \
overflowing. In particular, this affects ``exit``, ``return``, ``functions \
--query``, and ``set --query`` (:issue:`7698`, :issue:`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 >&5`` is 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 (:issue:`7060`). This helps avoid hangs in certain circumstances, and \
allows tmux's current directory introspection to work (:issue:`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 (:issue:`1018`).
- fish no longer inserts a space after a completion ending in ``.``, ``,`` or \
``-`` is accepted, improving completions for tools that provide dynamic \
completions (:issue:`6928`).
- If a filename is invalid when first pressing :kbd:`Tab`, but becomes valid, \
it will be completed properly on the next attempt (:issue:`6863`).
- ``help string match/replace/<subcommand>`` will show the help for string \
subcommands (:issue:`6786`).
- ``fish_key_reader`` sets the exit status to 0 when used with ``--help`` or \
``--version`` (:issue:`6964`).
- ``fish_key_reader`` and ``fish_indent`` send output from ``--version`` to \
standard output, matching other fish binaries (:issue:`6964`).
- A new variable ``$status_generation`` is incremented only when the previous \
command produces an exit status (:issue:`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_greeting`` is 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 \
(:issue:`7265`).
- Events are properly emitted after a job is cancelled (:issue:`2356`).
- ``fish_preexec`` and ``fish_postexec`` events are no longer triggered for \
empty commands (:issue:`4829`, :issue:`7085`).
- Functions triggered by the ``fish_exit`` event are correctly run when the \
terminal is closed or the shell receives SIGHUP (:issue:`7014`).
- The ``fish_prompt`` event no longer fires when ``read`` is used. If
you need a function to run any time ``read`` is invoked by a script,
use the new ``fish_read`` event instead (:issue:`7039`).
- A new ``fish_posterror`` event is emitted when attempting to execute a \
command with syntax errors (:issue:`6880`, :issue:`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``, ``reader`` and \
``screen`` (:issue:`6511`). See the output of ``fish --print-debug-categories`` \
for 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`` \
(:issue:`6630`)::
fish --debug=-warning-path
- The enabled debug categories are now printed on shell startup (:issue:`7007`).
- The ``-o`` short option to fish, for ``--debug-output``, works correctly \
instead of producing an
invalid option error (:issue:`7254`).
- fish's debugging can now also be enabled via ``FISH_DEBUG`` and \
``FISH_DEBUG_OUTPUT`` environment variables.
This helps with debugging when no commandline options can be passed, like \
when fish is called in a shebang (:issue:`7359`).
- Abbreviations are now expanded after all command terminators (eg ``;`` or \
``|``), not just space,
as in fish 2.7.1 and before (:issue:`6970`), and after closing a command \
substitution (:issue:`6658`).
- The history file is now created with user-private permissions,
matching other shells (:issue:`6926`). The directory containing the history
file was already private, so there should not have been any private data
revealed.
- The output of ``time`` is now properly aligned in all cases (:issue:`6726`, \
:issue:`6714`) and no longer depends on locale (:issue:`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_found``
instead of firing an event, making it easier to replace and reason about.
Previously-defined ``__fish_command_not_found_handler`` functions with an \
appropriate event listener will still work (:issue:`7293`).
- :kbd:`Control-C` handling has been reimplemented in C++ and is therefore \
quicker (:issue:`5259`), no longer occasionally prints an "unknown \
command" error (:issue:`7145`) or overwrites multiline prompts \
(:issue:`3537`).
- :kbd:`Control-C` no longer kills background jobs for which job control is
disabled, matching POSIX semantics (:issue:`6828`, :issue:`6861`).
- Autosuggestions work properly after :kbd:`Control-C` cancels the current \
commmand line (:issue:`6937`).
- History search is now case-insensitive unless the search string contains an \
uppercase character (:issue:`7273`).
- ``fish_update_completions`` gained a new ``--keep`` option, which improves \
speed by skipping completions that already exist (:issue:`6775`, :issue:`6796`).
- Aliases containing an embedded backslash appear properly in the output of \
``alias`` (:issue:`6910`).
- ``open`` no longer hangs indefinitely on certain systems, as a bug in \
``xdg-open`` has been worked around (:issue:`7215`).
- Long command lines no longer add a blank line after execution (:issue:`6826`) \
and behave better with :kbd:`Backspace` (:issue:`6951`).
- ``functions -t`` works like the long option ``--handlers-type``, as \
documented, instead of producing an error (:issue:`6985`).
- History search now flashes when it found no more results (:issue:`7362`)
- fish now creates the path in the environment variable ``XDG_RUNTIME_DIR`` if \
it does not exist, before using it for runtime data storage (:issue:`7335`).
- ``set_color --print-colors`` now also respects the bold, dim, underline, \
reverse, italic and background modifiers, to better show their effect \
(:issue:`7314`).
- The fish Web configuration tool (``fish_config``) shows prompts correctly on \
Termux for Android (:issue:`7298`) and detects Windows Services for Linux 2 \
properly (:issue:`7027`). It no longer shows the ``history`` variable 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 (:issue:`7158`). Finally, a bug in the Source Code \
Pro font may cause browsers to hang, so this font is no longer chosen by default \
(:issue:`7714`).
- ``funcsave`` gained a new ``--directory`` option to specify the location of \
the saved function (:issue:`7041`).
- ``help`` works properly on MSYS2 (:issue:`7113`) and only uses ``cmd.exe`` if \
running on WSL (:issue:`6797`).
- Resuming a piped job by its number, like ``fg %1``, works correctly \
(:issue:`7406`). Resumed jobs show the correct title in the terminal emulator \
(:issue:`7444`).
- Commands run from key bindings now use the same TTY modes as normal commands \
(:issue:`7483`).
- Autosuggestions from history are now case-sensitive (:issue:`3978`).
- ``$status`` from completion scripts is no longer passed outside the \
completion, which keeps the status display in the prompt as the last command's \
status (:issue:`7555`).
- Updated localisations for pt_BR (:issue:`7480`).
- ``fish_trace`` output now starts with ``->`` (like ``fish --profile``), \
making the depth more visible (:issue:`7538`).
- Resizing the terminal window no longer produces a corrupted prompt \
(:issue:`6532`, :issue:`7404`).
- ``functions`` produces an error rather than crashing on certain invalid \
arguments (:issue:`7515`).
- A crash in completions with inline variable assignment (eg ``A= b``) has been \
fixed (:issue:`7344`).
- ``fish_private_mode`` may now be changed dynamically using ``set`` \
(:issue:`7589`), and history is kept in memory in private mode (but not stored \
permanently) (:issue:`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`` \
(:issue:`1383`).
- Importing bash history or reporting errors with recursive globs (``**``) no \
longer hangs (:issue:`7407`, :issue:`7497`).
- ``bind`` now shows ``\x7f`` for the del key instead of a literal DEL \
character (:issue:`7631`)
- Paths containing variables or tilde expansion are only suggested when they \
are still valid (:issue:`7582`).
- Syntax highlighting can now color a command as invalid even if executed \
quickly (:issue:`5912`).
- Redirection targets are no longer highlighted as error if they contain \
variables which will likely be defined by the current commandline \
(:issue:`6654`).
- fish is now more resilient against broken terminal modes (:issue:`7133`, \
:issue:`4873`).
- fish handles being in control of the TTY without owning its own process group \
better, avoiding some hangs in special configurations (:issue:`7388`).
- Keywords can now be colored differently by setting the ``fish_color_keyword`` \
variable (``fish_color_command`` is used as a fallback) (:issue:`7678`).
- Just like ``fish_indent``, the interactive reader will indent continuation \
lines that follow a line ending in a backslash, ``|``, ``&&`` or ``||`` \
(:issue:`7694`).
- Commands with a trailing escaped space are saved in history correctly \
(:issue:`7661`).
- ``fish_prompt`` no longer mangles Unicode characters in the private-use range \
U+F600-U+F700. (:issue:`7723`).
- The universal variable file, ``fish_variables``, can be made a symbolic link \
without it being overwritten (:issue:`7466`).
- fish is now more resilient against ``mktemp`` failing (:issue:`7482`).
New or improved bindings
^^^^^^^^^^^^^^^^^^^^^^^^
- As mentioned above, new special input functions ``undo`` (:kbd:`Control+\_` \
or :kbd:`Control+Z`) and ``redo`` (:kbd:`Alt-/`) can be used to revert changes \
to the command line or the pager search field (:issue:`6570`).
- :kbd:`Control-Z` is now available for binding (:issue:`7152`).
- Additionally, using the ``cancel`` special input function (bound to \
:kbd:`Escape` by default) right after fish picked an unambiguous completion will \
undo that (:issue:`7433`).
- ``fish_clipboard_paste`` (:kbd:`Control+V`) trims indentation from multiline \
commands, because fish already indents (:issue:`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``, ``O`` and Control+left/right keys to navigate by word \
(:issue:`6648`, :issue:`6755`, :issue:`6769`, :issue:`7442`, :issue:`7516`).
- Vi mode bindings support :kbd:`~` (tilde) to toggle the case of the selected \
character (:issue:`6908`).
- Functions ``up-or-search`` and ``down-or-search`` (:kbd:`Up` and :kbd:`Down`) \
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`` (:kbd:`Page Up`) now \
moves to the oldest search instead of the youngest - that's ``end-of-history`` \
(:kbd:`Page Down`).
- A new special input function ``forward-single-char`` moves one character to \
the right, and if an autosuggestion is available, only take a single character \
from it (:issue:`7217`, :issue:`4984`).
- Special input functions can now be joined with ``or`` as a modifier (adding \
to ``and``), though only some commands set an exit status (:issue:`7217`). This \
includes ``suppress-autosuggestion`` to reflect whether an autosuggestion was \
suppressed (:issue:`1419`)
- A new function ``__fish_preview_current_file``, bound to :kbd:`Alt+O`, opens the
current file at the cursor in a pager (:issue:`6838`, :issue:`6855`).
- ``edit_command_buffer`` (:kbd:`Alt-E` and :kbd:`Alt-V`) passes the cursor position
to the external editor if the editor is recognized (:issue:`6138`, :issue:`6954`).
- ``__fish_prepend_sudo`` (:kbd:`Alt-S`) now toggles a ``sudo`` prefix \
(:issue:`7012`) and avoids shifting the cursor (:issue:`6542`).
- ``__fish_prepend_sudo`` (:kbd:`Alt-S`) now uses the previous commandline if \
the current one is empty,
to simplify rerunning the previous command with ``sudo`` (:issue:`7079`).
- ``__fish_toggle_comment_commandline`` (:kbd:`Alt-#`) now uncomments and \
presents the last comment
from history if the commandline is empty (:issue:`7137`).
- ``__fish_whatis_current_token`` (:kbd:`Alt-W`) prints descriptions for \
functions and builtins (:issue:`7191`, :issue:`2083`).
- The definition of "word" and "bigword" for movements was \
refined, fixing (eg) vi mode's behavior with :kbd:`e` on the second-to-last \
char, and bigword's behavior with single-character words and non-blank \
non-graphical characters (:issue:`7353`, :issue:`7354`, :issue:`4025`, \
:issue:`7328`, :issue:`7325`)
- fish's clipboard bindings now also support Windows Subsystem for Linux via \
PowerShell and clip.exe (:issue:`7455`, :issue:`7458`) and will properly copy \
newlines in multi-line commands.
- Using the ``*-jump`` special 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 \
(:issue:`7398`).
Improved prompts
^^^^^^^^^^^^^^^^
- The default and example prompts print the correct exit status for
commands prefixed with ``not`` (:issue:`6566`).
- git prompts include all untracked files in the repository, not just those in \
the current
directory (:issue:`6086`).
- The git prompts correctly show stash states (:issue:`6876`, :issue:`7136`) \
and clean states (:issue:`7471`).
- The Mercurial prompt correctly shows untracked status (:issue:`6906`), and by \
default only shows the branch for performance reasons.
A new variable ``$fish_prompt_hg_show_informative_status`` can be set to \
enable more information.
- The ``fish_vcs_prompt`` passes its arguments to the various VCS prompts that \
it calls (:issue:`7033`).
- The Subversion prompt was broken in a number of ways in 3.1.0 and has been \
restored (:issue:`6715`, :issue:`7278`).
- A new helper function ``fish_is_root_user`` simplifies checking for superuser \
privilege (:issue:`7031`, :issue:`7123`).
- New colorschemes - ``ayu Light``, ``ayu Dark`` and ``ayu Mirage`` (:issue:`7596`).
- Bugs related to multiline prompts, including repainting (:issue:`5860`) or \
navigating directory history (:issue:`3550`) leading to graphical glitches have \
been fixed.
- The ``nim`` prompt now handles vi mode better (:issue:`6802`)
Improved terminal support
^^^^^^^^^^^^^^^^^^^^^^^^^
- A new variable, ``fish_vi_force_cursor``, can be set to force \
``fish_vi_cursor`` to attempt changing the cursor
shape in vi mode, regardless of terminal (:issue:`6968`). The \
``fish_vi_cursor`` option ``--force-iterm`` has been deprecated.
- ``diff`` will now colourize output, if supported (:issue:`7308`).
- Autosuggestions appear when the cursor passes the right prompt \
(:issue:`6948`) or wraps to the next line (:issue:`7213`).
- The cursor shape in Vi mode changes properly in Windows Terminal \
(:issue:`6999`, :issue:`6478`).
- The spurious warning about terminal size in small terminals has been removed \
(:issue:`6980`).
- Dynamic titles are now enabled in Alacritty (:issue:`7073`) and emacs' vterm \
(:issue:`7122`).
- Current working directory updates are enabled in foot (:issue:`7099`) and \
WezTerm (:issue:`7649`).
- The width computation for certain emoji agrees better with terminals \
(especially flags). (:issue:`7237`).
- Long command lines are wrapped in all cases, instead of sometimes being put \
on a new line (:issue:`5118`).
- The pager is properly rendered with long command lines selected (:issue:`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_reflow`` variable (:issue:`7491`).
- fish now sets terminal modes sooner, which stops output from appearing before \
the greeting and prompt are ready (:issue:`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 (:issue:`6994`).
Completions
^^^^^^^^^^^
- Added completions for
- ``7z``, ``7za`` and ``7zr`` (:issue:`7220`)
- ``alias`` (:issue:`7035`)
- ``alternatives`` (:issue:`7616`)
- ``apk`` (:issue:`7108`)
- ``asciidoctor`` (:issue:`7000`)
- ``avifdec`` and ``avifenc`` (:issue:`7674`)
- ``bluetoothctl`` (:issue:`7438`)
- ``cjxl`` and ``djxl`` (:issue:`7673`)
- ``cmark`` (:issue:`7000`)
- ``create_ap`` (:issue:`7096`)
- ``deno`` (:issue:`7138`)
- ``dhclient`` (:issue:`6684`)
- Postgres-related commands ``dropdb``, ``createdb``, ``pg_restore``, \
``pg_dump`` and
``pg_dumpall`` (:issue:`6620`)
- ``dotnet`` (:issue:`7558`)
- ``downgrade`` (:issue:`6751`)
- ``gapplication``, ``gdbus``, ``gio`` and ``gresource`` (:issue:`7300`)
- ``gh`` (:issue:`7112`)
- ``gitk``
- ``groups`` (:issue:`6889`)
- ``hashcat`` (:issue:`7746`)
- ``hikari`` (:issue:`7083`)
- ``icdiff`` (:issue:`7503`)
- ``imv`` (:issue:`6675`)
- ``john`` (:issue:`7746`)
- ``julia`` (:issue:`7468`)
- ``k3d`` (:issue:`7202`)
- ``ldapsearch`` (:issue:`7578`)
- ``lightdm`` and ``dm-tool`` (:issue:`7624`)
- ``losetup`` (:issue:`7621`)
- ``micro`` (:issue:`7339`)
- ``mpc`` (:issue:`7169`)
- Metasploit's ``msfconsole``, ``msfdb`` and ``msfvenom`` (:issue:`6930`)
- ``mtr`` (:issue:`7638`)
- ``mysql`` (:issue:`6819`)
- ``ncat``, ``nc.openbsd``, ``nc.traditional`` and ``nmap`` (:issue:`6873`)
- ``openssl`` (:issue:`6845`)
- ``prime-run`` (:issue:`7241`)
- ``ps2pdf{12,13,14,wr}`` (:issue:`6673`)
- ``pyenv`` (:issue:`6551`)
- ``rst2html``, ``rst2html4``, ``rst2html5``, ``rst2latex``,
``rst2man``, ``rst2odt``, ``rst2pseudoxml``, ``rst2s5``,
``rst2xetex``, ``rst2xml`` and ``rstpep2html`` (:issue:`7019`)
- ``spago`` (:issue:`7381`)
- ``sphinx-apidoc``, ``sphinx-autogen``, ``sphinx-build`` and
``sphinx-quickstart`` (:issue:`7000`)
- ``strace`` (:issue:`6656`)
- systemd's ``bootctl``, ``coredumpctl``, ``hostnamectl`` (:issue:`7428`), \
``homectl`` (:issue:`7435`), ``networkctl`` (:issue:`7668`) and ``userdbctl`` \
(:issue:`7667`)
- ``tcpdump`` (:issue:`6690`)
- ``tig``
- ``traceroute`` and ``tracepath`` (:issue:`6803`)
- ``windscribe`` (:issue:`6788`)
- ``wireshark``, ``tshark``, and ``dumpcap``
- ``xbps-*`` (:issue:`7239`)
- ``xxhsum``, ``xxh32sum``, ``xxh64sum`` and ``xxh128sum`` (:issue:`7103`)
- ``yadm`` (:issue:`7100`)
- ``zopfli`` and ``zopflipng`` (:issue:`6872`)
- Lots of improvements to completions, including:
- ``git`` completions can complete the right and left parts of a commit \
range like ``from..to`` or ``left...right``.
- Completion scripts for custom Git subcommands like ``git-xyz`` are now \
loaded with Git completions. The completions can now be defined directly on the \
subcommand (using ``complete git-xyz``), and completion for ``git xyz`` will \
work. (:issue:`7075`, :issue:`7652`, :issue:`4358`)
- ``make`` completions no longer second-guess make's file detection, fixing \
target completion in some cases (:issue:`7535`).
- Command completions now correctly print the description even if the \
command was fully matched (like in ``ls<TAB>``).
- ``set`` completions no longer hide variables starting with ``__``, they \
are sorted last instead.
- Improvements to the manual page completion generator (:issue:`7086`, \
:issue:`6879`, :issue:`7187`).
- Significant performance improvements to completion of the available commands \
(:issue:`7153`), especially on macOS Big Sur where there was a significant \
regression (:issue:`7365`, :issue:`7511`).
- Suffix completion using ``__fish_complete_suffix`` uses the same fuzzy \
matching logic as normal file completion, and completes any file but sorts files \
with matching suffix first (:issue:`7040`, :issue:`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) \
(:issue:`5451`, :issue:`6825`).
- The CHANGELOG was moved to restructured text, allowing it to be included in \
the documentation (:issue:`7057`).
- fish handles ncurses installed in a non-standard prefix better \
(:issue:`6600`, :issue:`7219`), and uses variadic tparm on NetBSD curses \
(:issue:`6626`).
- The Web-based configuration tool no longer uses an obsolete Angular version \
(:issue:`7147`).
- The fish project has adopted the Contributor Covenant code of conduct \
(:issue:`7151`).
Deprecations and removed features
---------------------------------
- The ``fish_color_match`` variable is no longer used. (Previously this \
controlled the color of matching quotes and parens when using ``read``).
- fish 3.2.0 will be the last release in which the redirection to standard \
error with the ``^`` character is enabled.
The ``stderr-nocaret`` feature flag will be changed to "on" in \
future releases.
- ``string`` is now a reserved word and cannot be used for function names (see \
above).
- ``fish_vi_cursor``'s option ``--force-iterm`` has been deprecated (see above).
- ``command``, ``jobs`` and ``type`` long-form option ``--quiet`` is deprecated \
in favor of ``--query`` (see above).
- The ``fish_command_not_found`` event 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 use ``emit \
fish_command_not_found``.
- The ``fish_prompt`` event no longer fires when ``read`` is used. If
you need a function to run any time ``read`` is invoked by a script,
use the new ``fish_read`` event instead (:issue:`7039`).
- To disable the greeting message permanently it is no longer enough to just \
run ``set fish_greeting`` interactively as it is
no longer implicitly a universal variable. Use ``set -U fish_greeting`` or \
disable it in config.fish with ``set -g fish_greeting``.
- The long-deprecated and non-functional ``-m``/``--read-mode`` options to \
``read`` were removed in 3.1b1. Using the short form, or a never-implemented \
``-B`` option, no longer crashes fish (:issue:`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 (:issue:`5460`).
- The fish source tarball contains an example FreeDesktop entry and icon.
- The CMake variable ``MAC_CODESIGN_ID`` can now be set to "off" to \
disable code-signing (:issue:`6952`, :issue:`6792`).
- Building on on macOS earlier than 10.13.6 succeeds, instead of failing on \
code-signing (:issue:`6791`).
- The pkg-config file now uses variables to ensure paths used are portable \
across prefixes.
- The default values for the ``extra_completionsdir``, ``extra_functionsdir``
and ``extra_confdir`` options now use the installation prefix rather than \
``/usr/local`` (:issue:`6778`).
- A new CMake variable ``FISH_USE_SYSTEM_PCRE2`` controls 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 (:issue:`6952`).
- Running the full interactive test suite now requires Python 3.5+ and the \
pexpect package (:issue:`6825`); the expect package is no longer required.
- Support for Python 2 in fish's tools (``fish_config`` and the manual page \
completion generator) is no longer guaranteed. Please use Python 3.5 or later \
(:issue:`6537`).
- The Web-based configuration tool is compatible with Python 3.10 \
(:issue:`7600`) and no longer requires Python's distutils package \
(:issue:`7514`).
- fish 3.2 is the last release to support Red Hat Enterprise Linux & CentOS \
version 6.
--------------
Files: