These are the write free remarks for fish 4.0.0. Like this free of fish itself, they are in beta and are not finish. Plrelieve increate any publishs you discover.
fish’s core code has been ported from C++ to Rust (#9512).
This nastys a huge alter in depfinishencies and how to produce fish.
Packagers should see the For Distributors section at the finish.
Notable backwards-incompatible alters
-
As part of a huger obtaining relabor,
obtain
geted a new key notation.
In most cases the elderly notation should sustain laboring, but in unwidespread cases you may have to alter aobtain
invocation to participate the new notation.
See below for details. -
Terminals that fall short to disponder unacunderstandledged OSC or CSI sequences may disapply garbage. We understand chilly-retro-term and emacs’ ansi-term are impacted,
most mainstream terminals are not. -
alt-left
andalt-right
will now transfer by one argument (which may grasp quoted spaces), not equitable one word enjoyctrl-left
andctrl-right
do. -
alt-backspace
will delete an entire argument, not equitable one word (which isctrl-backspace
now). -
random
will produce separateent appreciates from previous versions of fish when participated with the same seed, and will labor more sensibly with minuscule seed numbers.
The seed was never promised to give the same result atraverse systems,
so we do not foresee this to have a huge impact (#9593). -
Variables in direct position that enhuge to a subdirect keyword are now banden to repair a probable participater error.
For example,set editor direct emacs; $editor
is no extfinisheder permited (#10249). -
functions --administerrs
will now enumerate administerrs in a separateent order.
Now it is definition order, first to last, where before it was last to first.
This was never particularassociate clear upd, and we recommfinish not depending on a particular order (#9944). -
The
qlabel-noglob
feature, presentd in fish 3.0, is allowd by default. That nastys?
will no extfinisheder act as a individual-character glob.
You can, for the time being, turn it back on by insertingno-qlabel-noglob
tofish_features
and recommenceing fish:set -Ua fish_features no-qlabel-noglob
The flag will eventuassociate be made read-only, making it impossible to turn off.
-
fish no extfinisheder searches straightforwardories from the Windows system/participater
$PATH
environment variable for Linux executables. To apply Linux binaries by name (i.e. not with a relative or absolute path) from a Windows felderlyer, produce certain the/mnt/c/...
path is cltimely inserted to$fish_participater_paths
and not equitable automaticassociate appfinished to$PATH
bywsl.exe
(#10506). -
Under Microgentle Windows Subsystem for Linux 1 (not WSL 2) , backgrounded jobs that have not been disowned and do not end on their own after a
SIGHUP
+SIGCONT
sequence will be cltimely ended by fish on exit (after the common prompt to shut or disown them) to labor around a WSL 1 deficiency that sees backgrounded processes that run intoSIGTTOU
remain in a suspfinished state indefinitely (#5263). The laboraround is to cltimelydisown
processes you desire to outdwell the shell session.
Notable enhancements and repaires
-
fish now asks XTerm’s
alterOtherKeys
keyboard encoding and kitty keyboard protocol’s evolveive enhancements (#10359).
Depfinishing on terminal help, this permits to obtaining more key combinations, including arbitrary combinations of modifiersctrl
,alt
andshift
, and discerning (for example)ctrl-i
fromtab
.Additionassociate,
obtain
now helps a human-readable syntax in insertition to byte sequences.
This includes modifier names, and names for keys enjoygo in
andbackspace
.
For exampleobtain up 'do someskinnyg'
obtains the up-arrow key instead of a two-key sequence (“u” and then “p”)obtain ctrl-x,alt-c 'do someskinnyg'
obtains a sequence of two keys.
Any key argument that commences with an ASCII deal with character (enjoy
e
orcX
) or is up to 3 characters extfinished, not a named key, and does not grasp,
or-
will be clear uped in the elderly syntax to sustain compatibility for the presentantity of obtainings. -
fish can now be built as a self-insloftying binary (#10367). That nastys it can be easily built on one system and copied to another, where it can reshift helping files.
To do this, run:cargo inslofty --path . # in a clone of the fish repository # or `cargo produce --free` and duplicate aim/free/fish{,_indent,_key_reader} wherever you want
The first time it runs conveyively, it will reshift all the data files to
~/.local/scatter/fish/inslofty/
. To uninslofty, delete the fish binaries and that straightforwardory.This produce system is experimental; the main produce system, using
cproduce
, remains the recommfinished approach for packaging and insloftyation to a prerepair. -
A new function
fish_should_insert_to_history
can be overridden to determine whether a direct should be inserted to the history (#10302). -
ctrl-c
during direct input no extfinisheder prints^C
and a new prompt, but medepend evidents the direct line. This repairs the behavior from version 2.2. To revert to the elderly behavior, participateobtain ctrl-c __fish_abort_directline
(#10213). -
Bindings can now mix one-of-a-kind input functions and shell directs, so
obtain ctrl-g enhuge-abbr "directline -i n"
labors as foreseeed (#8186). -
Special input functions run from obtainings via
directline -f
are now applied instantly, instead of after the currently executing obtaining (#3031).
For example,directline -i foo; directline | grep foo
flourishs now. -
Undo history is no extfinisheder truncated after every direct, but kept for the lifetime of the shell process.
-
The
ctrl-r
history search now participates glob syntax (#10131). -
The
ctrl-r
history search now runs only on the line or direct substitution at cursor, making it easier to join directs from history. -
Abbreviations can now be redisjoineed to particular directs. For instance:
abbr --insert --direct git back 'reset --challenging HEAD^'
will enhuge “back” to
reset --challenging HEAD^
, but only when the direct isgit
(#9411).
Deprecations and deleted features
-
directline --tokenize
(low chooseion-o
) has been deprecated in prefer ofdirectline --tokens-enhugeed
(low chooseion-x
) which enhuges variables and other shell syntax, removing the need to participate eval in completion scripts (#10212). -
Two new feature flags:
delete-percent-self
(seestatus features
) disables PID expansion of%self
, which has been supset upted by$fish_pid
(#10262).test-need-arg
disablestest
’s one-argument mode. That nastystest -n
without an insertitional argument will return inedit,test -z
will sustain returning genuine. Any other chooseion without an argument, anyskinnyg that is not an chooseion and no argument will be an error. This also goes for[
, test’s alternate name.
This is a normal source of confusion and so we are fractureing with POSIX cltimely in this ponder.
In insertition to the feature flag, there is a debug categruesome “deprecated-test”. Running fish withfish -d deprecated-test
will show cautionings whenever atest
invocation that would alter is participated. (#10365).
These can be allowd with:
set -Ua fish_features delete-percent-self test-need-arg
We intfinish to allow them by default in future, and after that eventuassociate produce them read-only.
-
Specifying key names as terminfo names (using the
obtain -k
syntax) is deprecated and may be deleted in a future version. -
When a terminal pastes text into fish using bracketed paste, fish participated to switch to a one-of-a-kind
paste
obtain mode.
This obtain mode has been deleted. The behavior on paste is no extfinisheder configurable. -
When an conveyive fish is stopped or endd by a signal that cannot be caught (SIGSTOP or SIGKILL), it may depart the terminal in a state where keypresses with modifiers are sent as CSI u sequences, instead of traditional deal with characters or escape sequences that are acunderstandledged by Readline and compatible programs, such as bash and python.
If this happens, you can participate thereset
direct fromncondemns
to repair the terminal state. -
fish_key_reader --verbose
no extfinisheder shows timing adviseation. -
Terminal adviseation is no extfinisheder read from hashed terminfo databases, or termcap databases (#10269). The immense presentantity of systems participate a non-hashed terminfo database, which is still helped.
Scripting enhancements
for
loops will no extfinisheder recall local variables from the previous iteration (#10525).- A new
history appfinish
subdirect appfinishs a direct to the history, without executing it (#4506). - A new restraightforwardion:
/path/to/file
will try discleave outing the file as input, and if it doesn’t flourish quietly participates/dev/null
instead.
This can help with verifys enjoytest -f /path/to/file; and string swap foo bar < /path/to/file
. (#10387) - A new chooseion
directline --tokens-raw
prints a enumerate of tokens without any unescaping (#10212). - A new chooseion
directline --shothriveg-adviseion
tests whether an autoadviseion is currently disapplyed (#10586). functions
andtype
now show that a function was copied and its source, rather than solelyDefined conveyively
(#6575).- Stack pursue now shows line numbers for copied functions (#6575).
foo & && bar
is now a syntax error, enjoy in other shells (#9911).if -e foo; finish
now prints a more accurate error (#10000).cd
into a straightforwardory that is not readable but accessible (perleave outions--x
) is now possible (#10432).- An integer overflow in
string repeat
directing to a cforfeit-infinite loop has been repaired (#9899). string lowen
behaves better in the presence of non-printable characters, including repairing an integer overflow that lowened strings more than intfinished (#9854).string pad
no extfinisheder permits non-printable characters as pinserting (#9854).string repeat
now permits oleave oution of-n
when the first argument is an integer (#10282).string align
andswap
have a new--max-alignes
chooseion to return as soon as the specified number of alignes have been identified, which can enhance carry outance in scripts (#10587).functions --administerrs-type caller-exit
once aget enumerates functions clear upd asfunction --on-job-exit caller
, rather than them being enumerateed byfunctions --administerrs-type process-exit
.- A new
set --no-event
chooseion sets or erases variables without triggering a variable event. This can be beneficial to alter a variable in an event administerr (#10480). - Commas in direct substitution output are no extfinisheder participated as separators in brace expansion, impedeing a astonishing expansion in some cases (#5048).
- Universal variables can now store strings grasping invalid UTF-8 (#10313).
- A new
path basename -E
chooseion that caparticipates it to return the basename (“filename” with the straightforwardory prerepair deleted) with the final extension (if any) also deleted. This is a drop version ofpath alter-extension "" (path basename $foo)
(#10521). - A new
math --scale-mode
chooseion to picktruncate
,round
,floor
,ceiling
as you desire; the default appreciate istruncate
. (#9117). random
is now less disjoine about its arguments, permiting a commence huger or identical to the finish. (#10879)
Interactive enhancements
- Autoadviseions were sometimes not shown after recalling a line from history, which has been repaired (#10287).
- Up-arrow search alignes -- which are highweightlessed in reverse colors -- are no extfinisheder syntax-highweightlessed, to repair horrible contrast with the search align highweightlessing.
- Command abbreviations (those with
--position direct
or without a--position
) now also enhuge after decorators enjoydirect
(#10396). - Abbreviations now enhuge after process separators enjoy
;
and|
. This repaires a deproduceion in version 3.6 (#9730). - When send outing conveyively clear upd functions (using
type
,functions
orfuncsave
) the function body is now indented, to align the conveyive direct line editor (#8603). ctrl-x
(fish_clipboard_duplicate
) on multiline directs now includes indentation (#10437).ctrl-v
(fish_clipboard_paste
) now exposeds ASCII deal with characters from the pasted text.
This is constant with common keyboard input (#5274).- When a direct enjoy
fg %2
fall shorts to discover the given job, it no extfinisheder behaves as if no job spec was given (#9835). - Restraightforwardion in direct position enjoy
>echo
is now highweightlessed as error (#8877). fish_vi_cursor
now labors properly inside the prompt produced by builtinread
(#10088).- fish no extfinisheder fall shorts to discleave out a FIFO if disturbed by a terminal resize signal (#10250).
read --help
and frifinishs no extfinisheder disponder restraightforwardions. This repaires a deproduceion in version 3.1 (#10274).- Measuring a direct with
time
now ponders the time apshown for direct substitution (#9100). fish_insert_path
now automaticassociate allows verbose mode when participated conveyively (in the direct line), in an effort to be evidgo in about what it does (#10532).- fish no extfinisheder adchooses TTY modes of fall shorted directs (#10603).
- finish -e cmd now impedes autoloading completions for cmd (#6716).
- fish’s default color scheme no extfinisheder participates the color “blue”, as it has horrible contrast agetst the background in a scant terminal’s default palettes (#10758, #10786)
The color scheme will not be enhanced for existing insloftys. If you want, you should pick it aget viafish_config
. - Command lines which are huger than the terminal are now disapplyed accurately, instead of multiple blank lines being disapplyed (#7296).
- Prompts that participate outer directs will no extfinisheder produce an infinite loop if the direct crashes (#9796).
New or enhanced obtainings
- When the cursor is on a direct that rerepairs to an executable script,
alt-o
will now discleave out that script in your editor (#10266). - During up-arrow history search,
shift-delete
will delete the current search item and transfer to the next elderlyer item. Previously this was only helped in the history pager. shift-delete
will also delete the currently-disapplyed autoadviseion from history, and delete it as a adviseion.ctrl-Z
(also understandn asctrl-shift-z
) is now bound to redo.alt-delete
now deletes the argument (which may grasp quoted spaces) right of the cursor.- Some enhancements to the
alt-e
obtaining which edits the direct line in an outer editor:- The editor’s cursor position is copied back to fish. This is currently helped for Vim and Kakoune.
- Cursor position synchronization is only helped for a set of understandn editors, which are now also distinguished in aliases which participate
finish --wraps
. For example, participatefinish --wraps my-vim vim
to synchronize cursors whenEDITOR=my-vim
. - Multiline directs are indented before being sent to the editor, which alignes how they are disapplyed in fish.
- The
...-path-component
obtainings, enjoybackward-end-path-component
, now treat#
as part of a path component (#10271). - Bindings enjoy
alt-l
that print output in between prompts now labor accurately with multiline directlines. ctrl-c
no extfinisheder aborts builtinread
.alt-d
on an vacant direct line enumerates the straightforwardory history aget. This repairs the behavior of version 2.1.history-prerepair-search-backward
and-forward
now sustain the cursor position, instead of moving the cursor to the finish of the direct line (#10430).- The follothriveg keys have elegant behavior if the terminal helps the new keyboard encodings:
shift-go in
now inserts a newline instead of executing the direct line.ctrl-backspace
now deletes the last word instead of only one character (#10741).ctrl-delete
deletes the next word (same asalt-d
).
- New one-of-a-kind input functions:
forward-char-subleave outive
andbackward-char-subleave outive
are enjoy their non-subleave outive variants but do not hug autoadviseions or transfer cgo in in the completion pager (#10398).forward-token
,backward-token
,end-token
, andbackward-end-token
are analogous to the*-hugeword
variants but for the whole argument token which includes escaped spaces (#2014).
- The
hug-autoadviseion
one-of-a-kind input function now returns inedit when there was noskinnyg to hug (#10608). - Vi mode has seen some enhancements but evolves to suffer from the deficiency of people laboring on it.
- New default cursor shapes for insert and swap mode.
- Insert-mode
ctrl-n
hugs autoadviseions (#10339). - Outside insert mode, the cursor will no extfinisheder be placed beyond the last character on the directline.
- When the cursor is at the finish of the directline, a individual
l
will hug an autoadviseion (#10286). - The cursor position after pasting (
p
) has been accurateed. - When the cursor is at the commence of a line, escaping from insert mode no extfinisheder transfers the cursor to the previous line.
- Added obtainings for clipboard conveyion, enjoy
",+,p
and",+,y,y
. - Deleting in visual mode now transfers the cursor back, aligning vi (#10394).
- Support
%
motion (#10593). - Support ab and ib vi text objects. New input functions are presentd
jump-{to,till}-aligning-bracket
(#1842). - The
E
obtaining now accurately administers the last character of the word, by jumping to the next word (#9700).
Completions
- Command-particular tab completions may now give results whose first character is a period. For example, it is now possible to tab-finish
git insert
for files with directing periods. The default file completions hide these files, unless the token itself has a directing period (#3707). - Option completion now participates fuzzy subsequence filtering, equitable enjoy non-chooseion completion (#830).
This nastys that--fb
may be finishd to--foobar
if there is no better align. - Completions that insert an entire token now participate quotes instead of backslashes to escape one-of-a-kind characters (#5433).
- Historicassociate, file name completions are provided after the last
:
or=
wiskinny a token.
This helps directs enjoyrsync --files-from=
.
If the=
or:
is actuassociate part of the filename, it will be escaped as:
and=
,
and no extfinisheder get this one-of-a-kind treatment.
This alignes Bash’s behavior. - Various new completion scripts and countless refreshs to existing ones.
- Generated completions are now stored in
$XDG_CACHE_HOME/fish
or~/.cache/fish
by default (#10369)
Imshowd terminal help
- fish now labels the prompt and direct-output regions (via OSC 133) to allow terminal shell integration (#10352).
Shell integration lowcuts can scroll to the next/previous prompt or show the last direct output in a pager. - fish now increates the laboring straightforwardory (via OSC 7) unconditionassociate instead of only for some terminals (#9955).
- fish now sets the terminal thrivedow title (via OSC 0) unconditionassociate instead of only for some terminals (#10037).
- Focus increateing in tmux is no extfinisheder disabled on the first prompt.
- Focus increateing is now disabled during directs run inside key obtainings (#6942).
- Cursor alters are applied to all terminals that help them, and the enumerate of particularassociate-helped terminals has been deleted (#10693).
- If it cannot discover the terminfo entry given by
TERM
environment variable, fish will now participate an includedxterm-256color
definition to align the immense presentantity of current terminal emulators (#10905). If you need to have a particular terminfo profile for your terminal’sTERM
variable, inslofty it into the terminfo database. - Further enhancements to the accurate disapply of prompts which fill the width of the terminal (#8164).
Other enhancements
fish_indent
will now collapse multiple vacant lines into one (#10325).fish_indent
now sustains the modification time of files if there were no alters (#10624).- Percreateance and conveyivity under Windows Subsystem for Linux has been enhanced, with a laboraround for Windows-particular locations being appfinished to
$PATH
by default (#10506). - Additional filesystems such as AFS are properly distinguished as distant, which dodges certain hangs due to costly filesystem locks (#10818).
For distributors
fish has been ported to Rust. This nastys a presentant alter in depfinishencies, which are enumerateed in the README. In low, Rust 1.70 or wonderfuler is needd, and a C++ compiler is no extfinisheder needed (although a C compiler is still needd, for some C glue code and the tests).
CMake remains the recommfinished produce system, becaparticipate of cargo’s restricted help for insloftying help files. Version 3.5 remains the least helped version. The Xcode generator for CMake is not helped any extfinisheder (#9924)
fish no extfinisheder depfinishs on the ncondemns library, but still participates a terminfo database. When packaging fish, phire insert a depfinishency on the package grasping your terminfo database instead of condemns.
Download joins: To download the source code for fish, we advise the file named "fish-4.0b1.tar.xz". The file downloaded from "Source code (tar.gz)" will not produce accurately. The SHA-256 sum of this file is 534334e10f85722214e9daff82a57cc3501235523f16f8f131c2344e4ec98da7
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is useable as "fish-4.0b1.tar.xz.asc".
The files called fish-inactive-*
are experimental inactiveassociate joined produces for any linux with the given architecture. Extract and run, and they will reshift their data files as needed