
Fish shell 4.9 released as a workaround-focused update for Konsole users
The Fish shell project has released version 4.9 of its free and open source, Unix-like command line shell, continuing its long-standing focus on interactivity and usability. Unlike many releases that introduce sweeping new features, Fish 4.9 exists primarily to sidestep a specific problem: a bug involving the Konsole terminal emulator that caused the shift-pageup key combination to stop working. The issue stems from Konsole version v26.07.80's implementation of the kitty keyboard protocol, which Fish previously enabled by default. As a mitigation, Fish no longer requests that protocol when running under Konsole. Users who still want the enhanced protocol support can restore the old behavior by turning on the omit-term-workarounds feature flag. On terminals such as Kitty itself, the update brings a genuine improvement, allowing keys like shift-space and space to be mapped independently.
Beyond the Konsole workaround, the release delivers a handful of practical fixes and refinements. Tab completion, which previously slowed to a crawl in directories containing symlinks that resolve slowly, such as links pointing to network-mounted files, now performs as expected. Abbreviations have gained a new capability: they can be given a description, which will then be displayed in the completion pager. Vi mode users will notice that commands such as cF and cT now work correctly. The release also loosens restrictions around list indexing, which can now be nested in more cases, for example, expressions like $foo[$bar[1] 2] are now permitted.
Version 4.9 also tightens up the shell's handling of edge cases. Escaped square brackets, such as \133 in place of [, are no longer interpreted as a slicing operator, and variables containing a closing square bracket that are used to index into another variable no longer close the slice prematurely. Elsewhere, built-in help pages now respect an override of the man function, and commands that attempt to override read-only internals, such as status=123 echo $status, now throw an explicit error rather than silently ignoring the variable assignment. Rounding out the update are three regression fixes.


